diff --git a/Modbus.Net/Modbus.Net.HJ212/HJ212Controller.cs b/Modbus.Net/Modbus.Net.HJ212/HJ212Controller.cs index 89d2788..c6658aa 100644 --- a/Modbus.Net/Modbus.Net.HJ212/HJ212Controller.cs +++ b/Modbus.Net/Modbus.Net.HJ212/HJ212Controller.cs @@ -1,6 +1,6 @@ namespace Modbus.Net.HJ212 { - public class HJ212Controller : FifoController + public class HJ212Controller : NoResponseController { public HJ212Controller(string ip, int port) : base(int.Parse(ConfigurationReader.GetValue("TCP:" + ip + ":" + port, "FetchSleepTime"))) { diff --git a/Modbus.Net/Modbus.Net.HJ212/HJ212ProtocolLinker.cs b/Modbus.Net/Modbus.Net.HJ212/HJ212ProtocolLinker.cs index 6e4ed29..fcb2ffa 100644 --- a/Modbus.Net/Modbus.Net.HJ212/HJ212ProtocolLinker.cs +++ b/Modbus.Net/Modbus.Net.HJ212/HJ212ProtocolLinker.cs @@ -1,4 +1,10 @@ -namespace Modbus.Net.HJ212 +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; +using System.Threading.Tasks; + +namespace Modbus.Net.HJ212 { /// /// HJ212协议连接器 @@ -9,6 +15,45 @@ { } + public override async Task SendReceiveAsync(byte[] content) + { + if (content.Length <= 1000) + return await base.SendReceiveAsync(content); + else + { + string contentString = Encoding.ASCII.GetString(content); + string[] formats = { "yyyyMMddHHmmssffff", "yyyyMMddHHmmssfff", "yyyyMMddHHmmss" }; + DateTime startTime = DateTime.ParseExact(contentString.Substring(3, 18), formats, CultureInfo.InvariantCulture, DateTimeStyles.None); + int dataStartIdx = contentString.IndexOf("&&") + 2; + string head = contentString.Substring(0, dataStartIdx).Substring(21); + string[] contentUnitAll = contentString.Substring(dataStartIdx).Split(';')[1].Split(','); + List contentSplitAll = new List(); + string newContent = "DataTime=" + startTime.ToString("yyyyMMddHHmmss") + ";"; + foreach (var contentUnit in contentUnitAll) + { + if (newContent.Length + contentUnit.Length > 1000 - dataStartIdx) + { + contentSplitAll.Add("QN=" + startTime.ToString("yyyyMMddHHmmssffff") + head + newContent[..^1]); + startTime = startTime.AddSeconds(1); + newContent = "DataTime=" + startTime.ToString("yyyyMMddHHmmss") + ";" + contentUnit + ","; + } + else + { + newContent += contentUnit + ","; + } + } + contentSplitAll.Add("QN=" + startTime.ToString("yyyyMMddHHmmssffff") + head + newContent[..^1]); + var receiveBytesAll = new List(); + foreach (var contentSplit in contentSplitAll) + { + var extBytes = BytesExtend(Encoding.ASCII.GetBytes(contentSplit)); + var receiveBytes = await SendReceiveWithoutExtAndDecAsync(extBytes); + receiveBytesAll.AddRange(receiveBytes == null ? null : receiveBytes.Length == 0 ? receiveBytes : BytesDecact(receiveBytes)); + } + return receiveBytesAll.ToArray(); + } + } + /// /// 检查接收的数据是否正确 /// @@ -19,4 +64,4 @@ return true; } } -} \ No newline at end of file +} diff --git a/Modbus.Net/Modbus.Net.HJ212/HJ212Utility.cs b/Modbus.Net/Modbus.Net.HJ212/HJ212Utility.cs index f3653ae..68802b0 100644 --- a/Modbus.Net/Modbus.Net.HJ212/HJ212Utility.cs +++ b/Modbus.Net/Modbus.Net.HJ212/HJ212Utility.cs @@ -33,14 +33,14 @@ namespace Modbus.Net.HJ212 { var writeRequestHJ212InputStruct = new WriteRequestHJ212InputStruct((string)setContents[0], (string)setContents[1], (string)setContents[2], (string)setContents[3], (List>)setContents[4], (DateTime)setContents[5]); - var writeRequestOpcOutputStruct = + var writeRequestHJ212OutputStruct = await Wrapper.SendReceiveAsync(Wrapper[typeof(WriteRequestHJ212Protocol)], writeRequestHJ212InputStruct); return new ReturnStruct { - Datas = writeRequestOpcOutputStruct?.GetValue != null, - IsSuccess = writeRequestOpcOutputStruct?.GetValue != null, + Datas = writeRequestHJ212OutputStruct?.GetValue != null, + IsSuccess = writeRequestHJ212OutputStruct?.GetValue != null, ErrorCode = 0, ErrorMsg = null, };