76 lines
2.8 KiB
C#
Raw Permalink Normal View History

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-04-25 17:18:59 +08:00
/// 读取计量数据
2025-04-24 17:48:20 +08:00
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
2025-04-25 17:18:59 +08:00
public static Telemetry1882018PacketResponse CTR_01_Send(Telemetry1882018PacketRequest request)
2025-04-24 17:48:20 +08:00
{
var itemCodeArr = request.ItemCode.Split('_');
2025-04-25 17:18:59 +08:00
var c_data = itemCodeArr[0];//01
var d_data = itemCodeArr[2];//91 或者 90
2025-04-25 17:18:59 +08:00
var dataUnit = new List<string>() { "1F", d_data, "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-04-25 17:18:59 +08:00
/// 阀控
2025-04-24 17:48:20 +08:00
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
2025-04-25 17:18:59 +08:00
public static Telemetry1882018PacketResponse CTR_04_Send(Telemetry1882018PacketRequest request)
2025-04-24 17:48:20 +08:00
{
var itemCodeArr = request.ItemCode.Split('_');
2025-04-25 17:18:59 +08:00
var c_data = itemCodeArr[0];//01
var d_data = itemCodeArr[2];//55 或者 99
2025-04-25 17:18:59 +08:00
var dataUnit = new List<string>() { "A0", "17", "00", d_data };
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
}
}