2025-05-22 17:29:54 +08:00

82 lines
3.1 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Reflection;
using JiShe.CollectBus.Common.BuildSendDatas;
namespace JiShe.CollectBus.Protocol.T1882018.SendData
{
/// <summary>
/// 构建188-2018下发报文
/// </summary>
public static class Telemetry1882018PacketBuilder
{
/// <summary>
/// 构建报文的委托
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public delegate Telemetry1882018PacketResponse T1882018Delegate(Telemetry1882018PacketRequest request);
/// <summary>
/// 编码与方法的映射表
/// </summary>
public static readonly Dictionary<string, T1882018Delegate> T1882018ControlHandlers = new();
static Telemetry1882018PacketBuilder()
{
// 初始化时自动注册所有符合命名规则的方法
var methods = typeof(Telemetry1882018PacketBuilder).GetMethods(BindingFlags.Static | BindingFlags.Public);
foreach (var method in methods)
{
if (method.Name.StartsWith("CTR") && method.Name.EndsWith("_Send"))
{
string code = method.Name;
var delegateInstance = (T1882018Delegate)Delegate.CreateDelegate(typeof(T1882018Delegate), method);
T1882018ControlHandlers[code] = delegateInstance;
}
}
}
#region
/// <summary>
/// 读取计量数据CTR0_控制码(01H/09H)_DI1_DI0_SER
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Telemetry1882018PacketResponse CTR0_01_Send(Telemetry1882018PacketRequest request)
{
var itemCodeArr = request.ItemCode.Split('_');
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 };
var dataList = Build188SendData.Build188SendCommand(request.MeterAddress, c_data, dataUnit);
return new Telemetry1882018PacketResponse() { Data = dataList };
}
#endregion
#region
/// <summary>
/// 写数据CTR3_控制码(04H/0CH)_DI1_DI0_SER
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Telemetry1882018PacketResponse CTR3_04_Send(Telemetry1882018PacketRequest request)
{
var itemCodeArr = request.ItemCode.Split('_');
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 };
var dataList = Build188SendData.Build188SendCommand(request.MeterAddress, c_data, dataUnit);
return new Telemetry1882018PacketResponse() { Data = dataList };
}
#endregion
}
}