127 lines
4.7 KiB
C#
Raw 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;
using JiShe.CollectBus.Common.Extensions;
2025-04-27 09:16:37 +08:00
namespace JiShe.CollectBus.Protocol.T6452007.SendData
2025-04-24 17:48:20 +08:00
{
/// <summary>
/// 构建645-2007下发报文
/// </summary>
2025-04-25 12:01:15 +08:00
public static class Telemetry6452007PacketBuilder
2025-04-24 17:48:20 +08:00
{
/// <summary>
/// 构建报文的委托
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
2025-04-25 12:01:15 +08:00
public delegate Telemetry6452007PacketResponse T6452007Delegate(Telemetry6452007PacketRequest request);
2025-04-24 17:48:20 +08:00
/// <summary>
/// 编码与方法的映射表
/// </summary>
2025-04-25 12:01:15 +08:00
public static readonly Dictionary<string, T6452007Delegate> T645ControlHandlers = new();
2025-04-24 17:48:20 +08:00
2025-04-25 12:01:15 +08:00
static Telemetry6452007PacketBuilder()
2025-04-24 17:48:20 +08:00
{
// 初始化时自动注册所有符合命名规则的方法
2025-04-25 12:01:15 +08:00
var methods = typeof(Telemetry6452007PacketBuilder).GetMethods(BindingFlags.Static | BindingFlags.Public);
2025-04-24 17:48:20 +08:00
foreach (var method in methods)
{
if (method.Name.StartsWith("C") && method.Name.EndsWith("_Send"))
{
string code = method.Name;
2025-04-25 12:01:15 +08:00
var delegateInstance = (T6452007Delegate)Delegate.CreateDelegate(typeof(T6452007Delegate), method);
2025-04-24 17:48:20 +08:00
T645ControlHandlers[code] = delegateInstance;
}
}
}
#region 1CH
/// <summary>
/// 1CH 跳合闸
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
2025-04-25 12:01:15 +08:00
public static Telemetry6452007PacketResponse C1C_01_Send(Telemetry6452007PacketRequest request)
2025-04-24 17:48:20 +08:00
{
var itemCodeArr = request.ItemCode.Split('_');
var c_data = itemCodeArr[0];
var n_data = itemCodeArr[2];
2025-04-24 17:48:20 +08:00
string password = request.Password;
string pwdLevel = "02";
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);
2025-04-25 12:01:15 +08:00
return new Telemetry6452007PacketResponse() { Data = dataList };
2025-04-24 17:48:20 +08:00
}
/// <summary>
/// 1CH 保电
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
2025-04-25 12:01:15 +08:00
public static Telemetry6452007PacketResponse C1C_03_Send(Telemetry6452007PacketRequest request)
2025-04-24 17:48:20 +08:00
{
var itemCodeArr = request.ItemCode.Split('_');
var c_data = itemCodeArr[0];
var n_data = itemCodeArr[2];
2025-04-24 17:48:20 +08:00
string password = request.Password;
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);
2025-04-25 12:01:15 +08:00
return new Telemetry6452007PacketResponse() { Data = dataList };
2025-04-24 17:48:20 +08:00
}
#endregion
#region
/// <summary>
/// 变量数据标识编码处理
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Telemetry6452007PacketResponse C11_02_Send(Telemetry6452007PacketRequest request)
{
var itemCodeArr = request.ItemCode.Split('_');//11_02_80_00_02
var c_data = itemCodeArr[0];
var DI3 = itemCodeArr[1];
var DI2 = itemCodeArr[2];
var DI1 = itemCodeArr[3];
var DI0 = itemCodeArr[4];
var dataUnit = new List<string>() { DI3, DI2, DI1, DI0 };
var dataList = Build645SendData.Build645SendCommand(request.MeterAddress, c_data, dataUnit);
return new Telemetry6452007PacketResponse() { Data = dataList };
}
#endregion
2025-04-24 17:48:20 +08:00
}
}