协议池应用04

This commit is contained in:
ChenYi 2025-04-25 17:18:59 +08:00
parent 2dbf4ded4a
commit 27104ada3a
7 changed files with 62 additions and 108 deletions

View File

@ -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
} }
} }

View File

@ -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()

View File

@ -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()

View File

@ -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,
} }
}); });

View File

@ -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
{ {

View File

@ -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
} }
} }

View File

@ -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