协议池应用04
This commit is contained in:
parent
2dbf4ded4a
commit
27104ada3a
@ -8,7 +8,7 @@ using System.Reflection;
|
|||||||
namespace JiShe.CollectBus.Protocol.SendData
|
namespace JiShe.CollectBus.Protocol.SendData
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 构建645-2007下发报文
|
/// 构建188-2018下发报文
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class Telemetry1882018PacketBuilder
|
public static class Telemetry1882018PacketBuilder
|
||||||
{
|
{
|
||||||
@ -30,7 +30,7 @@ namespace JiShe.CollectBus.Protocol.SendData
|
|||||||
var methods = typeof(Telemetry1882018PacketBuilder).GetMethods(BindingFlags.Static | BindingFlags.Public);
|
var methods = typeof(Telemetry1882018PacketBuilder).GetMethods(BindingFlags.Static | BindingFlags.Public);
|
||||||
foreach (var method in methods)
|
foreach (var method in methods)
|
||||||
{
|
{
|
||||||
if (method.Name.StartsWith("C") && method.Name.EndsWith("_Send"))
|
if (method.Name.StartsWith("CTR") && method.Name.EndsWith("_Send"))
|
||||||
{
|
{
|
||||||
string code = method.Name;
|
string code = method.Name;
|
||||||
var delegateInstance = (T1882018Delegate)Delegate.CreateDelegate(typeof(T1882018Delegate), method);
|
var delegateInstance = (T1882018Delegate)Delegate.CreateDelegate(typeof(T1882018Delegate), method);
|
||||||
@ -39,68 +39,41 @@ namespace JiShe.CollectBus.Protocol.SendData
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 1CH 跳合闸、报警、保电
|
#region 读数据
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 1CH 跳合闸
|
/// 读取计量数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="request"></param>
|
/// <param name="request"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static Telemetry1882018PacketResponse C1C_01_Send(Telemetry1882018PacketRequest request)
|
public static Telemetry1882018PacketResponse CTR_01_Send(Telemetry1882018PacketRequest request)
|
||||||
{
|
{
|
||||||
var itemCodeArr = request.ItemCode.Split('_');
|
var itemCodeArr = request.ItemCode.Split('_');
|
||||||
var c_data = itemCodeArr[0];
|
var c_data = itemCodeArr[0];//01
|
||||||
var n_data = itemCodeArr[1];
|
var d_data = itemCodeArr[1];//91 或者 90
|
||||||
string password = request.Password;
|
var dataUnit = new List<string>() { "1F", d_data, "00" };
|
||||||
string pwdLevel = "02";
|
var dataList = Build188SendData.Build188SendCommand(request.MeterAddress, c_data, dataUnit);
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(password) && password.Contains("|"))
|
|
||||||
{
|
|
||||||
var sp = password.Split('|');
|
|
||||||
password = sp[0];
|
|
||||||
pwdLevel = sp[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
var strDate = DateTime.Now.AddYears(3).ToString("000012ddMMyy").StrAddSpan();//命令有效截止时间
|
|
||||||
|
|
||||||
var strP = password.StrAddSpan().StrReverseOrder();
|
|
||||||
var strSJY = " " + pwdLevel + " " + strP + " 01 00 00 00 " + n_data + " 00 " + strDate;
|
|
||||||
var dataUnit = strSJY.Replace(" ", "").StringToPairs();
|
|
||||||
|
|
||||||
var dataList = Build645SendData.Build645SendCommand(request.MeterAddress, c_data, dataUnit);
|
|
||||||
return new Telemetry1882018PacketResponse() { Data = dataList };
|
return new Telemetry1882018PacketResponse() { Data = dataList };
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 写数据
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 1CH 保电
|
/// 阀控
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="request"></param>
|
/// <param name="request"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static Telemetry1882018PacketResponse C1C_03_Send(Telemetry1882018PacketRequest request)
|
public static Telemetry1882018PacketResponse CTR_04_Send(Telemetry1882018PacketRequest request)
|
||||||
{
|
{
|
||||||
var itemCodeArr = request.ItemCode.Split('_');
|
var itemCodeArr = request.ItemCode.Split('_');
|
||||||
var c_data = itemCodeArr[0];
|
var c_data = itemCodeArr[0];//01
|
||||||
var n_data = itemCodeArr[1];
|
var d_data = itemCodeArr[1];//55 或者 99
|
||||||
string password = request.Password;
|
var dataUnit = new List<string>() { "A0", "17", "00", d_data };
|
||||||
|
var dataList = Build188SendData.Build188SendCommand(request.MeterAddress, c_data, dataUnit);
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(password) && password.Contains("|"))
|
|
||||||
{
|
|
||||||
var sp = password.Split('|');
|
|
||||||
password = sp[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
var strDate = (n_data + DateTime.Now.AddDays(1).ToString("00000012ddMMyy")).StrAddSpan();
|
|
||||||
|
|
||||||
var strP = password.StrAddSpan().StrReverseOrder();
|
|
||||||
|
|
||||||
var strSJY = " 02 " + strP + " 01 00 00 00 " + strDate;
|
|
||||||
|
|
||||||
var dataUnit = strSJY.Replace(" ", "").StringToPairs();
|
|
||||||
|
|
||||||
var dataList = Build645SendData.Build645SendCommand(request.MeterAddress, c_data, dataUnit);
|
|
||||||
return new Telemetry1882018PacketResponse() { Data = dataList };
|
return new Telemetry1882018PacketResponse() { Data = dataList };
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,15 +19,13 @@ using Volo.Abp.Domain.Repositories;
|
|||||||
|
|
||||||
namespace JiShe.CollectBus.Protocol
|
namespace JiShe.CollectBus.Protocol
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// T1882018协议插件
|
||||||
|
/// </summary>
|
||||||
public class T1882018ProtocolPlugin : T37612012ProtocolPlugin
|
public class T1882018ProtocolPlugin : T37612012ProtocolPlugin
|
||||||
{
|
{
|
||||||
private readonly ILogger<T1882018ProtocolPlugin> _logger;
|
private readonly ILogger<T1882018ProtocolPlugin> _logger;
|
||||||
|
|
||||||
private readonly IProducerService _producerService;
|
|
||||||
|
|
||||||
private readonly IRepository<Device, Guid> _deviceRepository;
|
|
||||||
private readonly ITcpService _tcpService;
|
|
||||||
|
|
||||||
public readonly Dictionary<string, Telemetry1882018PacketBuilder.T1882018Delegate> T188ControlHandlers;
|
public readonly Dictionary<string, Telemetry1882018PacketBuilder.T1882018Delegate> T188ControlHandlers;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -37,10 +35,6 @@ namespace JiShe.CollectBus.Protocol
|
|||||||
public T1882018ProtocolPlugin(IServiceProvider serviceProvider, ILogger<T1882018ProtocolPlugin> logger, ITcpService tcpService) : base(serviceProvider, logger, tcpService)
|
public T1882018ProtocolPlugin(IServiceProvider serviceProvider, ILogger<T1882018ProtocolPlugin> logger, ITcpService tcpService) : base(serviceProvider, logger, tcpService)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
//_logger = serviceProvider.GetRequiredService<ILogger<StandardProtocolPlugin>>();
|
|
||||||
_producerService = serviceProvider.GetRequiredService<IProducerService>();
|
|
||||||
_deviceRepository = serviceProvider.GetRequiredService<IRepository<Device, Guid>>();
|
|
||||||
_tcpService = tcpService;
|
|
||||||
T188ControlHandlers = Telemetry1882018PacketBuilder.T1882018ControlHandlers;
|
T188ControlHandlers = Telemetry1882018PacketBuilder.T1882018ControlHandlers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,22 +86,24 @@ namespace JiShe.CollectBus.Protocol
|
|||||||
{
|
{
|
||||||
if (request == null)
|
if (request == null)
|
||||||
{
|
{
|
||||||
throw new Exception($"{nameof(T1882018ProtocolPlugin)} 报文构建失败,参数为空");
|
_logger.LogError($"{nameof(T1882018ProtocolPlugin)} 报文构建失败,参数为空");
|
||||||
|
return new ProtocolBuildResponse();
|
||||||
}
|
}
|
||||||
var itemCodeArr = request.ItemCode.Split('_');
|
var itemCodeArr = request.ItemCode.Split('_');
|
||||||
var aFNStr = itemCodeArr[0];
|
var aFNStr = itemCodeArr[0];
|
||||||
var aFN = (AFN)aFNStr.HexToDec();
|
var aFN = (AFN)aFNStr.HexToDec();
|
||||||
var fn = int.Parse(itemCodeArr[1]);
|
var fn = int.Parse(itemCodeArr[1]);
|
||||||
|
|
||||||
Telemetry3761PacketResponse builderResponse = null;
|
Telemetry3761PacketResponse builderResponse = null;
|
||||||
|
|
||||||
List<string> dataUnit = new List<string>();
|
List<string> dataUnit = new List<string>();
|
||||||
//数据转发场景 10H_F1_1CH
|
//数据转发场景 10H_F1
|
||||||
if (aFNStr == "10" && request.SubProtocolRequest != null && string.IsNullOrWhiteSpace(request.SubProtocolRequest.ItemCode) == false)
|
if (aFNStr == "10" && request.SubProtocolRequest != null && string.IsNullOrWhiteSpace(request.SubProtocolRequest.ItemCode) == false)
|
||||||
{
|
{
|
||||||
var t645PacketHandlerName = $"C{request.SubProtocolRequest.ItemCode}_Send";
|
var t188PacketHandlerName = $"{T1882018PacketItemCodeConst.BasicT1882018}_{request.SubProtocolRequest.ItemCode}_Send";
|
||||||
Telemetry1882018PacketResponse t645PacketResponse = null;
|
Telemetry1882018PacketResponse t645PacketResponse = null;
|
||||||
|
|
||||||
if (T188ControlHandlers != null && T188ControlHandlers.TryGetValue(t645PacketHandlerName
|
if (T188ControlHandlers != null && T188ControlHandlers.TryGetValue(t188PacketHandlerName
|
||||||
, out var t645PacketHandler))
|
, out var t645PacketHandler))
|
||||||
{
|
{
|
||||||
t645PacketResponse = t645PacketHandler(new Telemetry1882018PacketRequest()
|
t645PacketResponse = t645PacketHandler(new Telemetry1882018PacketRequest()
|
||||||
|
|||||||
@ -15,30 +15,22 @@ using Volo.Abp.Domain.Repositories;
|
|||||||
|
|
||||||
namespace JiShe.CollectBus.Protocol
|
namespace JiShe.CollectBus.Protocol
|
||||||
{
|
{
|
||||||
public class T6452007ProtocolPlugin : ProtocolPlugin
|
/// <summary>
|
||||||
|
/// T6452007协议插件
|
||||||
|
/// </summary>
|
||||||
|
public class T6452007ProtocolPlugin : T37612012ProtocolPlugin
|
||||||
{
|
{
|
||||||
private readonly ILogger<T6452007ProtocolPlugin> _logger;
|
private readonly ILogger<T6452007ProtocolPlugin> _logger;
|
||||||
|
|
||||||
private readonly IProducerService _producerService;
|
|
||||||
|
|
||||||
private readonly IRepository<Device, Guid> _deviceRepository;
|
|
||||||
private readonly ITcpService _tcpService;
|
|
||||||
|
|
||||||
public readonly Dictionary<string, Telemetry3761PacketBuilder.T3761Delegate> T3761AFNHandlers;
|
|
||||||
public readonly Dictionary<string, Telemetry6452007PacketBuilder.T6452007Delegate> T645ControlHandlers;
|
public readonly Dictionary<string, Telemetry6452007PacketBuilder.T6452007Delegate> T645ControlHandlers;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="T6452007ProtocolPlugin"/> class.
|
/// Initializes a new instance of the <see cref="T6452007ProtocolPlugin"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="serviceProvider">The service provider.</param>
|
/// <param name="serviceProvider">The service provider.</param>
|
||||||
public T6452007ProtocolPlugin(IServiceProvider serviceProvider, ILogger<T6452007ProtocolPlugin> logger, ITcpService tcpService) : base(serviceProvider, logger)
|
public T6452007ProtocolPlugin(IServiceProvider serviceProvider, ILogger<T6452007ProtocolPlugin> logger, ITcpService tcpService) : base(serviceProvider, logger, tcpService)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
//_logger = serviceProvider.GetRequiredService<ILogger<StandardProtocolPlugin>>();
|
|
||||||
_producerService = serviceProvider.GetRequiredService<IProducerService>();
|
|
||||||
_deviceRepository = serviceProvider.GetRequiredService<IRepository<Device, Guid>>();
|
|
||||||
_tcpService = tcpService;
|
|
||||||
T3761AFNHandlers = Telemetry3761PacketBuilder.T3761AFNHandlers;
|
|
||||||
T645ControlHandlers = Telemetry6452007PacketBuilder.T645ControlHandlers;
|
T645ControlHandlers = Telemetry6452007PacketBuilder.T645ControlHandlers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +82,8 @@ namespace JiShe.CollectBus.Protocol
|
|||||||
{
|
{
|
||||||
if (request == null)
|
if (request == null)
|
||||||
{
|
{
|
||||||
throw new Exception($"{nameof(T6452007ProtocolPlugin)} 报文构建失败,参数为空");
|
_logger.LogError($"{nameof(ProtocolBuildResponse)} 报文构建失败,参数为空");
|
||||||
|
return new ProtocolBuildResponse();
|
||||||
}
|
}
|
||||||
var itemCodeArr = request.ItemCode.Split('_');
|
var itemCodeArr = request.ItemCode.Split('_');
|
||||||
var aFNStr = itemCodeArr[0];
|
var aFNStr = itemCodeArr[0];
|
||||||
@ -123,7 +116,7 @@ namespace JiShe.CollectBus.Protocol
|
|||||||
}
|
}
|
||||||
|
|
||||||
string afnMethonCode = $"AFN{aFNStr}_Fn_Send";
|
string afnMethonCode = $"AFN{aFNStr}_Fn_Send";
|
||||||
if (T3761AFNHandlers != null && T3761AFNHandlers.TryGetValue(afnMethonCode
|
if (base.T3761AFNHandlers != null && base.T3761AFNHandlers.TryGetValue(afnMethonCode
|
||||||
, out var handler))
|
, out var handler))
|
||||||
{
|
{
|
||||||
builderResponse = handler(new Telemetry3761PacketRequest()
|
builderResponse = handler(new Telemetry3761PacketRequest()
|
||||||
|
|||||||
@ -756,7 +756,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
{
|
{
|
||||||
MeterAddress = ammeterInfo.AmmerterAddress,
|
MeterAddress = ammeterInfo.AmmerterAddress,
|
||||||
Password = ammeterInfo.Password,
|
Password = ammeterInfo.Password,
|
||||||
ItemCode = T645PacketItemCodeConst.C08,
|
ItemCode = T6452007PacketItemCodeConst.C08,
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -233,17 +233,17 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
{
|
{
|
||||||
ammeterInfo.TripState = 0;
|
ammeterInfo.TripState = 0;
|
||||||
tripStateResult = true;
|
tripStateResult = true;
|
||||||
subItemCode = T645PacketItemCodeConst.C1C01C;
|
subItemCode = T6452007PacketItemCodeConst.C1C01C;
|
||||||
if (ammeterInfo.TypeName != 1)
|
if (ammeterInfo.TypeName != 1)
|
||||||
{
|
{
|
||||||
subItemCode = T645PacketItemCodeConst.C1C01B;
|
subItemCode = T6452007PacketItemCodeConst.C1C01B;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (settingInfo.TripType.Equals("off"))
|
else if (settingInfo.TripType.Equals("off"))
|
||||||
{
|
{
|
||||||
ammeterInfo.TripState = 1;
|
ammeterInfo.TripState = 1;
|
||||||
tripStateResult = false;
|
tripStateResult = false;
|
||||||
subItemCode = T645PacketItemCodeConst.C1C01A;
|
subItemCode = T6452007PacketItemCodeConst.C1C01A;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -12,50 +12,42 @@ namespace JiShe.CollectBus.Common.Consts
|
|||||||
public class T1882018PacketItemCodeConst
|
public class T1882018PacketItemCodeConst
|
||||||
{
|
{
|
||||||
#region 下行报文编码
|
#region 下行报文编码
|
||||||
#region 跳合闸、报警、保电
|
|
||||||
/// <summary>
|
|
||||||
/// 跳闸
|
|
||||||
/// </summary>
|
|
||||||
public const string C1C01A = "1C_1A";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 单相合闸
|
/// 基路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string C1C01B = "1C_1B";
|
public const string BasicT1882018 = "CTR";
|
||||||
|
|
||||||
|
#region 读数据
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 三相合闸
|
/// 读取计量数据1
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string C1C01C = "1C_1C";
|
public const string CTR0190 = $"01_90";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 触发报警
|
/// 读取计量数据2
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string C1C02A = "1C_2A";
|
public const string CTR0191 = $"01_91";
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 报警解除
|
|
||||||
/// </summary>
|
|
||||||
public const string C1C02B = "1C_2B";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 保电开始
|
|
||||||
/// </summary>
|
|
||||||
public const string C1C03A = "1C_3A";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 保电结束
|
|
||||||
/// </summary>
|
|
||||||
public const string C1C03B = "1C_3B";
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 广播校时
|
#region 写数据
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 关阀
|
||||||
|
/// </summary>
|
||||||
|
public const string CTR30455 = $"_04_55";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 广播校时
|
/// 开阀
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string C08 = "08";
|
public const string CTR30499 = $"_04_99";
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,9 +7,9 @@ using System.Threading.Tasks;
|
|||||||
namespace JiShe.CollectBus.Common.Consts
|
namespace JiShe.CollectBus.Common.Consts
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// T645报文项编码
|
/// T6452007报文项编码
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class T645PacketItemCodeConst
|
public class T6452007PacketItemCodeConst
|
||||||
{
|
{
|
||||||
#region 下行报文编码
|
#region 下行报文编码
|
||||||
#region 跳合闸、报警、保电
|
#region 跳合闸、报警、保电
|
||||||
Loading…
x
Reference in New Issue
Block a user