完善3761下行透明转发处理逻辑

This commit is contained in:
ChenYi 2025-05-14 23:28:44 +08:00
parent be3cd5d3e7
commit e02a0953e9
8 changed files with 107 additions and 55 deletions

View File

@ -1,4 +1,5 @@
using System.Reflection; using System.Data;
using System.Reflection;
using JiShe.CollectBus.Common.BuildSendDatas; using JiShe.CollectBus.Common.BuildSendDatas;
using JiShe.CollectBus.Common.Enums; using JiShe.CollectBus.Common.Enums;
using JiShe.CollectBus.Common.Models; using JiShe.CollectBus.Common.Models;
@ -259,6 +260,12 @@ namespace JiShe.CollectBus.Protocol.T37612012.SendData
#region AFN10H #region AFN10H
public static Telemetry3761PacketResponse AFN10_Fn_Send(Telemetry3761PacketRequest request) public static Telemetry3761PacketResponse AFN10_Fn_Send(Telemetry3761PacketRequest request)
{ {
var baudRateValue = Build3761SendData.GetBaudreate($"{request.SubRequest.Baudrate}");
var dataUnit = Build3761SendData.BuildTransparentForwardingSendDataUnit(request.SubRequest.MeteringPort, baudRateValue, request.DataUnit);
dataUnit.AddRange(Build3761SendData.GetPW());
var reqParameter = new ReqParameter2() var reqParameter = new ReqParameter2()
{ {
AFN = AFN., AFN = AFN.,
@ -275,7 +282,7 @@ namespace JiShe.CollectBus.Protocol.T37612012.SendData
Pn = request.Pn, Pn = request.Pn,
Fn = request.Fn Fn = request.Fn
}; };
var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter, request.DataUnit); var bytes = Build3761SendData.BuildSendCommandBytes(reqParameter, dataUnit);
return new Telemetry3761PacketResponse() { Seq = reqParameter.Seq.PRSEQ, Data = bytes, MSA = reqParameter.MSA, }; return new Telemetry3761PacketResponse() { Seq = reqParameter.Seq.PRSEQ, Data = bytes, MSA = reqParameter.MSA, };
} }

View File

@ -1,4 +1,6 @@
namespace JiShe.CollectBus.Protocol.T37612012.SendData using JiShe.CollectBus.Protocol.Models;
namespace JiShe.CollectBus.Protocol.T37612012.SendData
{ {
/// <summary> /// <summary>
/// 构建3761报文参数 /// 构建3761报文参数
@ -20,8 +22,13 @@
/// </summary> /// </summary>
public int Pn { get; set; } public int Pn { get; set; }
/// <summary>
/// 子协议请求
/// </summary>
public SubProtocolBuildRequest SubRequest { get; set; }
/// <summary> /// <summary>
/// 透明转发单元 /// 透明转发数据单元
/// </summary> /// </summary>
public List<string> DataUnit { get; set; } public List<string> DataUnit { get; set; }
} }

View File

@ -1,23 +1,12 @@
namespace JiShe.CollectBus.Protocol.T6452007.SendData using JiShe.CollectBus.Protocol.Models;
namespace JiShe.CollectBus.Protocol.T6452007.SendData
{ {
/// <summary> /// <summary>
/// 构建645报文参数 /// 构建645报文参数
/// </summary> /// </summary>
public class Telemetry6452007PacketRequest public class Telemetry6452007PacketRequest: SubProtocolBuildRequest
{ {
/// <summary>
/// 表地址
/// </summary>
public required string MeterAddress { get; set; }
/// <summary>
/// 密码
/// </summary>
public required string Password { get; set; }
/// <summary>
/// 操作码
/// </summary>
public required string ItemCode { get; set; }
} }
} }

View File

@ -129,6 +129,7 @@ namespace JiShe.CollectBus.Protocol.T6452007
FocusAddress = request.FocusAddress, FocusAddress = request.FocusAddress,
Fn = fn, Fn = fn,
Pn = request.Pn, Pn = request.Pn,
SubRequest = request.SubProtocolRequest,
DataUnit = dataUnit, DataUnit = dataUnit,
}); });
} }

View File

@ -10,6 +10,16 @@
/// </summary> /// </summary>
public required string MeterAddress { get; set; } public required string MeterAddress { get; set; }
/// <summary>
/// 波特率 default(2400)
/// </summary>
public int Baudrate { get; set; }
/// <summary>
/// 计量端口
/// </summary>
public int MeteringPort { get; set; }
/// <summary> /// <summary>
/// 密码 /// 密码
/// </summary> /// </summary>

View File

@ -125,7 +125,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading
BrandType = "DTS1980", BrandType = "DTS1980",
MeterType = MeterTypeEnum.Ammeter, MeterType = MeterTypeEnum.Ammeter,
ProjectID = 1, ProjectID = 1,
MeteringPort = 2, MeteringPort = MeteringPortConst.MeteringPortTwo,
Password = "000000", Password = "000000",
}); });
@ -145,7 +145,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading
BrandType = "DTS1980", BrandType = "DTS1980",
MeterType = MeterTypeEnum.Ammeter, MeterType = MeterTypeEnum.Ammeter,
ProjectID = 1, ProjectID = 1,
MeteringPort = 2, MeteringPort = MeteringPortConst.MeteringPortTwo,
Password = "000000", Password = "000000",
}); });
@ -281,35 +281,47 @@ namespace JiShe.CollectBus.ScheduledMeterReading
try try
{ {
#if DEBUG #if DEBUG
var settingInfos = new List<AmmeterAutoValveControlSetting>(); //电表自动阀控缓存
settingInfos.Add(new AmmeterAutoValveControlSetting() string redisCacheDeviceSettingInfoHashKey = $"redisCacheDeviceSettingInfoHashKey_{SystemType}_{ServerTagName}";
var settingInfos = FreeRedisProvider.Instance.Get< List<AmmeterAutoValveControlSetting>> (redisCacheDeviceSettingInfoHashKey);
if (settingInfos == null || settingInfos.Count <= 0)
{ {
MeterType = MeterTypeEnum.Ammeter, settingInfos = new List<AmmeterAutoValveControlSetting>();
AmmerterAddress = "442405000040", settingInfos.Add(new AmmeterAutoValveControlSetting()
FocusAddress = "442400040", {
FocusId = 95780, MeterType = MeterTypeEnum.Ammeter,
ProjectID = 1, AmmerterAddress = "442405000040",
TripType = "on", FocusAddress = "442400040",
TripTime = $"{DateTime.Now:HH:mm}", FocusId = 95780,
MeterId = 127035, ProjectID = 1,
LoopType = "EachDay", TripType = "on",
EachDayWithout = "周六,周日", TripTime = $"{DateTime.Now:HH:mm}",
TimeDensity = 15, MeterId = 127035,
}); LoopType = "EachDay",
settingInfos.Add(new AmmeterAutoValveControlSetting() EachDayWithout = "周六,周日",
{ TimeDensity = 15,
MeterType = MeterTypeEnum.Ammeter, });
AmmerterAddress = "442405000039", settingInfos.Add(new AmmeterAutoValveControlSetting()
FocusAddress = "442400039", {
FocusId = 69280, MeterType = MeterTypeEnum.Ammeter,
ProjectID = 1, AmmerterAddress = "442405000039",
TripType = "on", FocusAddress = "442400039",
TripTime = $"{DateTime.Now:HH:mm}", FocusId = 69280,
MeterId = 95594, ProjectID = 1,
LoopType = "EachDay", TripType = "on",
EachDayWithout = "周六,周日", TripTime = $"{DateTime.Now:HH:mm}",
TimeDensity = 15, MeterId = 95594,
}); LoopType = "EachDay",
EachDayWithout = "周六,周日",
TimeDensity = 15,
});
FreeRedisProvider.Instance.Set(redisCacheDeviceSettingInfoHashKey, settingInfos);
}
#else #else
//获取电表阀控配置 //获取电表阀控配置
var settingInfos = await GetAmmeterAutoValveControlSetting(currentTimeStr); var settingInfos = await GetAmmeterAutoValveControlSetting(currentTimeStr);
@ -375,7 +387,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading
bool tripStateResult = false; bool tripStateResult = false;
string itemCode = T37612012PacketItemCodeConst.AFN10HFN01H; string itemCode = T37612012PacketItemCodeConst.AFN10HFN01H;
string subItemCode = string.Empty; string subItemCode = string.Empty;
if (settingInfo.TripType.Equals("on")) if (settingInfo.TripType.Equals("on"))//当前电表断闸,需要合闸
{ {
ammeterInfo.TripState = 0; ammeterInfo.TripState = 0;
tripStateResult = true; tripStateResult = true;
@ -385,7 +397,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading
subItemCode = T6452007PacketItemCodeConst.C1C011B; subItemCode = T6452007PacketItemCodeConst.C1C011B;
} }
} }
else if (settingInfo.TripType.Equals("off")) else if (settingInfo.TripType.Equals("off"))//当前电表合闸,需要断闸
{ {
ammeterInfo.TripState = 1; ammeterInfo.TripState = 1;
tripStateResult = false; tripStateResult = false;
@ -416,6 +428,8 @@ namespace JiShe.CollectBus.ScheduledMeterReading
MeterAddress = ammeterInfo.MeterAddress, MeterAddress = ammeterInfo.MeterAddress,
Password = ammeterInfo.Password, Password = ammeterInfo.Password,
ItemCode = subItemCode, ItemCode = subItemCode,
Baudrate = ammeterInfo.Baudrate,
MeteringPort = ammeterInfo.MeteringPort
} }
}); });

View File

@ -1362,7 +1362,7 @@ namespace JiShe.CollectBus.Common.BuildSendDatas
/// <param name="waitContentTimeout">等待报文超时时间/s</param> /// <param name="waitContentTimeout">等待报文超时时间/s</param>
/// <param name="waitByteTimeout">等待字节超时时间/ms</param> /// <param name="waitByteTimeout">等待字节超时时间/ms</param>
/// <returns></returns> /// <returns></returns>
private static List<string> BuildTransparentForwardingSendDataUnit(int port, int baudRate, List<string> datas, StopBit stopBit = StopBit.Stop1, Parity parity = Parity.Even, DataBit dataBit = DataBit.D8, public static List<string> BuildTransparentForwardingSendDataUnit(int port, int baudRate, List<string> datas, StopBit stopBit = StopBit.Stop1, Parity parity = Parity.Even, DataBit dataBit = DataBit.D8,
int waitContentTimeout = 100, int waitByteTimeout = 100) int waitContentTimeout = 100, int waitByteTimeout = 100)
{ {
var dataUnit = new List<string>(); var dataUnit = new List<string>();
@ -1591,7 +1591,7 @@ namespace JiShe.CollectBus.Common.BuildSendDatas
//AUX=消息认证码字段PW,16个字节 //AUX=消息认证码字段PW,16个字节
private static List<string> GetPW() public static List<string> GetPW()
{ {
var str = "00"; var str = "00";
var pWList = Enumerable.Repeat(str, pWLen).ToList(); var pWList = Enumerable.Repeat(str, pWLen).ToList();

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JiShe.CollectBus.Common.Consts
{
/// <summary>
/// 计量端口常量
/// </summary>
public class MeteringPortConst
{
/// <summary>
/// 计量端口1
/// </summary>
public const int MeteringPortOne = 1;
/// <summary>
/// 计量端口2
/// </summary>
public const int MeteringPortTwo = 2;
}
}