2025-04-27 09:16:37 +08:00
|
|
|
|
using System.Reflection;
|
2025-04-24 17:48:20 +08:00
|
|
|
|
using JiShe.CollectBus.Common.BuildSendDatas;
|
|
|
|
|
|
|
2025-04-27 09:16:37 +08:00
|
|
|
|
namespace JiShe.CollectBus.Protocol.T1882018.SendData
|
2025-04-24 17:48:20 +08:00
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
2025-04-25 17:18:59 +08:00
|
|
|
|
/// 构建188-2018下发报文
|
2025-04-24 17:48:20 +08:00
|
|
|
|
/// </summary>
|
2025-04-25 12:01:15 +08:00
|
|
|
|
public static class Telemetry1882018PacketBuilder
|
2025-04-24 17:48:20 +08:00
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 构建报文的委托
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-04-25 14:37:35 +08:00
|
|
|
|
public delegate Telemetry1882018PacketResponse T1882018Delegate(Telemetry1882018PacketRequest request);
|
2025-04-24 17:48:20 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 编码与方法的映射表
|
|
|
|
|
|
/// </summary>
|
2025-04-25 14:37:35 +08:00
|
|
|
|
public static readonly Dictionary<string, T1882018Delegate> T1882018ControlHandlers = new();
|
2025-04-24 17:48:20 +08:00
|
|
|
|
|
2025-04-25 12:01:15 +08:00
|
|
|
|
static Telemetry1882018PacketBuilder()
|
2025-04-24 17:48:20 +08:00
|
|
|
|
{
|
|
|
|
|
|
// 初始化时自动注册所有符合命名规则的方法
|
2025-04-25 12:01:15 +08:00
|
|
|
|
var methods = typeof(Telemetry1882018PacketBuilder).GetMethods(BindingFlags.Static | BindingFlags.Public);
|
2025-04-24 17:48:20 +08:00
|
|
|
|
foreach (var method in methods)
|
|
|
|
|
|
{
|
2025-04-25 17:18:59 +08:00
|
|
|
|
if (method.Name.StartsWith("CTR") && method.Name.EndsWith("_Send"))
|
2025-04-24 17:48:20 +08:00
|
|
|
|
{
|
|
|
|
|
|
string code = method.Name;
|
2025-04-25 14:37:35 +08:00
|
|
|
|
var delegateInstance = (T1882018Delegate)Delegate.CreateDelegate(typeof(T1882018Delegate), method);
|
|
|
|
|
|
T1882018ControlHandlers[code] = delegateInstance;
|
2025-04-24 17:48:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-04-25 17:18:59 +08:00
|
|
|
|
#region 读数据
|
2025-04-24 17:48:20 +08:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2025-05-22 17:29:54 +08:00
|
|
|
|
/// 读取计量数据,CTR0_控制码(01H/09H)_DI1_DI0_SER
|
2025-04-24 17:48:20 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-05-22 17:29:54 +08:00
|
|
|
|
public static Telemetry1882018PacketResponse CTR0_01_Send(Telemetry1882018PacketRequest request)
|
2025-04-24 17:48:20 +08:00
|
|
|
|
{
|
|
|
|
|
|
var itemCodeArr = request.ItemCode.Split('_');
|
2025-05-22 17:29:54 +08:00
|
|
|
|
var ctr = itemCodeArr[0];//CTR0
|
|
|
|
|
|
var c_data = itemCodeArr[1];//01
|
|
|
|
|
|
var DI1 = itemCodeArr[2];//91 或者 90
|
|
|
|
|
|
var DI0 = itemCodeArr[3];//1F
|
|
|
|
|
|
var SER = itemCodeArr[4];//00
|
|
|
|
|
|
var dataUnit = new List<string>() { DI1, DI0, SER };
|
2025-04-25 17:18:59 +08:00
|
|
|
|
var dataList = Build188SendData.Build188SendCommand(request.MeterAddress, c_data, dataUnit);
|
2025-04-24 17:48:20 +08:00
|
|
|
|
|
2025-04-25 12:01:15 +08:00
|
|
|
|
return new Telemetry1882018PacketResponse() { Data = dataList };
|
2025-04-24 17:48:20 +08:00
|
|
|
|
}
|
2025-04-25 17:18:59 +08:00
|
|
|
|
#endregion
|
2025-04-24 17:48:20 +08:00
|
|
|
|
|
2025-04-25 17:18:59 +08:00
|
|
|
|
#region 写数据
|
2025-04-24 17:48:20 +08:00
|
|
|
|
/// <summary>
|
2025-05-22 17:29:54 +08:00
|
|
|
|
/// 写数据,CTR3_控制码(04H/0CH)_DI1_DI0_SER
|
2025-04-24 17:48:20 +08:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="request"></param>
|
|
|
|
|
|
/// <returns></returns>
|
2025-05-22 17:29:54 +08:00
|
|
|
|
public static Telemetry1882018PacketResponse CTR3_04_Send(Telemetry1882018PacketRequest request)
|
2025-04-24 17:48:20 +08:00
|
|
|
|
{
|
|
|
|
|
|
var itemCodeArr = request.ItemCode.Split('_');
|
2025-05-22 17:29:54 +08:00
|
|
|
|
var ctr = itemCodeArr[0];//CTR3
|
|
|
|
|
|
var c_data = itemCodeArr[1];//04
|
|
|
|
|
|
var DI1 = itemCodeArr[2];//A0
|
|
|
|
|
|
var DI0 = itemCodeArr[3];//17
|
|
|
|
|
|
var SER = itemCodeArr[4];//55 或者 99
|
|
|
|
|
|
var dataUnit = new List<string>() { DI1, DI0, SER };
|
2025-04-25 17:18:59 +08:00
|
|
|
|
var dataList = Build188SendData.Build188SendCommand(request.MeterAddress, c_data, dataUnit);
|
2025-04-24 17:48:20 +08:00
|
|
|
|
|
2025-04-25 12:01:15 +08:00
|
|
|
|
return new Telemetry1882018PacketResponse() { Data = dataList };
|
2025-04-24 17:48:20 +08:00
|
|
|
|
}
|
2025-04-25 17:18:59 +08:00
|
|
|
|
#endregion
|
2025-04-24 17:48:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|