协议池应用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
{
/// <summary>
/// 构建645-2007下发报文
/// 构建188-2018下发报文
/// </summary>
public static class Telemetry1882018PacketBuilder
{
@ -30,7 +30,7 @@ namespace JiShe.CollectBus.Protocol.SendData
var methods = typeof(Telemetry1882018PacketBuilder).GetMethods(BindingFlags.Static | BindingFlags.Public);
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;
var delegateInstance = (T1882018Delegate)Delegate.CreateDelegate(typeof(T1882018Delegate), method);
@ -39,66 +39,39 @@ namespace JiShe.CollectBus.Protocol.SendData
}
}
#region 1CH
#region
/// <summary>
/// 1CH 跳合闸
/// 读取计量数据
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Telemetry1882018PacketResponse C1C_01_Send(Telemetry1882018PacketRequest request)
public static Telemetry1882018PacketResponse CTR_01_Send(Telemetry1882018PacketRequest request)
{
var itemCodeArr = request.ItemCode.Split('_');
var c_data = itemCodeArr[0];
var n_data = itemCodeArr[1];
string password = request.Password;
string pwdLevel = "02";
var c_data = itemCodeArr[0];//01
var d_data = itemCodeArr[1];//91 或者 90
var dataUnit = new List<string>() { "1F", d_data, "00" };
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 };
}
#endregion
#region
/// <summary>
/// 1CH 保电
/// 阀控
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Telemetry1882018PacketResponse C1C_03_Send(Telemetry1882018PacketRequest request)
public static Telemetry1882018PacketResponse CTR_04_Send(Telemetry1882018PacketRequest request)
{
var itemCodeArr = request.ItemCode.Split('_');
var c_data = itemCodeArr[0];
var n_data = itemCodeArr[1];
string password = request.Password;
var c_data = itemCodeArr[0];//01
var d_data = itemCodeArr[1];//55 或者 99
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 };
}
#endregion

View File

@ -19,15 +19,13 @@ using Volo.Abp.Domain.Repositories;
namespace JiShe.CollectBus.Protocol
{
/// <summary>
/// T1882018协议插件
/// </summary>
public class T1882018ProtocolPlugin : T37612012ProtocolPlugin
{
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;
/// <summary>
@ -37,10 +35,6 @@ namespace JiShe.CollectBus.Protocol
public T1882018ProtocolPlugin(IServiceProvider serviceProvider, ILogger<T1882018ProtocolPlugin> logger, ITcpService tcpService) : base(serviceProvider, logger, tcpService)
{
_logger = logger;
//_logger = serviceProvider.GetRequiredService<ILogger<StandardProtocolPlugin>>();
_producerService = serviceProvider.GetRequiredService<IProducerService>();
_deviceRepository = serviceProvider.GetRequiredService<IRepository<Device, Guid>>();
_tcpService = tcpService;
T188ControlHandlers = Telemetry1882018PacketBuilder.T1882018ControlHandlers;
}
@ -92,22 +86,24 @@ namespace JiShe.CollectBus.Protocol
{
if (request == null)
{
throw new Exception($"{nameof(T1882018ProtocolPlugin)} 报文构建失败,参数为空");
_logger.LogError($"{nameof(T1882018ProtocolPlugin)} 报文构建失败,参数为空");
return new ProtocolBuildResponse();
}
var itemCodeArr = request.ItemCode.Split('_');
var aFNStr = itemCodeArr[0];
var aFN = (AFN)aFNStr.HexToDec();
var fn = int.Parse(itemCodeArr[1]);
Telemetry3761PacketResponse builderResponse = null;
List<string> dataUnit = new List<string>();
//数据转发场景 10H_F1_1CH
//数据转发场景 10H_F1
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;
if (T188ControlHandlers != null && T188ControlHandlers.TryGetValue(t645PacketHandlerName
if (T188ControlHandlers != null && T188ControlHandlers.TryGetValue(t188PacketHandlerName
, out var t645PacketHandler))
{
t645PacketResponse = t645PacketHandler(new Telemetry1882018PacketRequest()

View File

@ -15,30 +15,22 @@ using Volo.Abp.Domain.Repositories;
namespace JiShe.CollectBus.Protocol
{
public class T6452007ProtocolPlugin : ProtocolPlugin
/// <summary>
/// T6452007协议插件
/// </summary>
public class T6452007ProtocolPlugin : T37612012ProtocolPlugin
{
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;
/// <summary>
/// Initializes a new instance of the <see cref="T6452007ProtocolPlugin"/> class.
/// </summary>
/// <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 = serviceProvider.GetRequiredService<ILogger<StandardProtocolPlugin>>();
_producerService = serviceProvider.GetRequiredService<IProducerService>();
_deviceRepository = serviceProvider.GetRequiredService<IRepository<Device, Guid>>();
_tcpService = tcpService;
T3761AFNHandlers = Telemetry3761PacketBuilder.T3761AFNHandlers;
T645ControlHandlers = Telemetry6452007PacketBuilder.T645ControlHandlers;
}
@ -90,7 +82,8 @@ namespace JiShe.CollectBus.Protocol
{
if (request == null)
{
throw new Exception($"{nameof(T6452007ProtocolPlugin)} 报文构建失败,参数为空");
_logger.LogError($"{nameof(ProtocolBuildResponse)} 报文构建失败,参数为空");
return new ProtocolBuildResponse();
}
var itemCodeArr = request.ItemCode.Split('_');
var aFNStr = itemCodeArr[0];
@ -123,7 +116,7 @@ namespace JiShe.CollectBus.Protocol
}
string afnMethonCode = $"AFN{aFNStr}_Fn_Send";
if (T3761AFNHandlers != null && T3761AFNHandlers.TryGetValue(afnMethonCode
if (base.T3761AFNHandlers != null && base.T3761AFNHandlers.TryGetValue(afnMethonCode
, out var handler))
{
builderResponse = handler(new Telemetry3761PacketRequest()

View File

@ -756,7 +756,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading
{
MeterAddress = ammeterInfo.AmmerterAddress,
Password = ammeterInfo.Password,
ItemCode = T645PacketItemCodeConst.C08,
ItemCode = T6452007PacketItemCodeConst.C08,
}
});

View File

@ -233,17 +233,17 @@ namespace JiShe.CollectBus.ScheduledMeterReading
{
ammeterInfo.TripState = 0;
tripStateResult = true;
subItemCode = T645PacketItemCodeConst.C1C01C;
subItemCode = T6452007PacketItemCodeConst.C1C01C;
if (ammeterInfo.TypeName != 1)
{
subItemCode = T645PacketItemCodeConst.C1C01B;
subItemCode = T6452007PacketItemCodeConst.C1C01B;
}
}
else if (settingInfo.TripType.Equals("off"))
{
ammeterInfo.TripState = 1;
tripStateResult = false;
subItemCode = T645PacketItemCodeConst.C1C01A;
subItemCode = T6452007PacketItemCodeConst.C1C01A;
}
else
{

View File

@ -12,50 +12,42 @@ namespace JiShe.CollectBus.Common.Consts
public class T1882018PacketItemCodeConst
{
#region
#region
/// <summary>
/// 跳闸
/// </summary>
public const string C1C01A = "1C_1A";
/// <summary>
/// 单相合闸
/// 基路径
/// </summary>
public const string C1C01B = "1C_1B";
public const string BasicT1882018 = "CTR";
#region
/// <summary>
/// 三相合闸
/// 读取计量数据1
/// </summary>
public const string C1C01C = "1C_1C";
public const string CTR0190 = $"01_90";
/// <summary>
/// 触发报警
/// 读取计量数据2
/// </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
#region 广
#region
/// <summary>
/// 广播校时
/// 关阀
/// </summary>
public const string C08 = "08";
public const string CTR30455 = $"_04_55";
/// <summary>
/// 开阀
/// </summary>
public const string CTR30499 = $"_04_99";
#endregion
#endregion
}
}

View File

@ -7,9 +7,9 @@ using System.Threading.Tasks;
namespace JiShe.CollectBus.Common.Consts
{
/// <summary>
/// T645报文项编码
/// T6452007报文项编码
/// </summary>
public class T645PacketItemCodeConst
public class T6452007PacketItemCodeConst
{
#region
#region