From a8cc46897af0ec2f9d5ae0cb7a27798ba300e9bb Mon Sep 17 00:00:00 2001
From: 啊鑫 <t2856754968@163.com>
Date: 星期六, 26 七月 2025 16:10:11 +0800
Subject: [PATCH] 根据实际PLC数据修复数据解析逻辑
---
config/ModbusDataParser.cs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 51 insertions(+), 6 deletions(-)
diff --git a/config/ModbusDataParser.cs b/config/ModbusDataParser.cs
index 4665c15..7ca9e9b 100644
--- a/config/ModbusDataParser.cs
+++ b/config/ModbusDataParser.cs
@@ -93,12 +93,19 @@
if (config.Encoding?.ToLower() == "littleendian")
{
// 灏忕锛氫綆浣嶅湪鍓�
- value = registers[0] | (registers[1] << 16);
+ value = (registers[0] & 0xFFFF) | ((long)(registers[1] & 0xFFFF) << 16);
}
else
{
// 澶х锛氶珮浣嶅湪鍓嶏紙榛樿锛�
- value = (registers[0] << 16) | registers[1];
+ value = ((long)(registers[0] & 0xFFFF) << 16) | (registers[1] & 0xFFFF);
+ }
+
+ // 妫�鏌ユ槸鍚︿负鏃犳晥鏁版嵁鏍囪瘑锛堝璐熷�肩粍鍚堬級
+ if (value == 0xE2400001 || value > 0x7FFFFFFF)
+ {
+ // 鍙兘鏄棤鏁堟暟鎹紝杩斿洖0鎴栦娇鐢ㄧ壒娈婃爣璇�
+ return 0;
}
}
else
@@ -140,8 +147,13 @@
else
{
// 澶х锛氶珮瀛楄妭鍦ㄥ墠锛堥粯璁わ級
- bytes.Add((byte)((register >> 8) & 0xFF));
- bytes.Add((byte)(register & 0xFF));
+ // 娉ㄦ剰锛氭牴鎹疄闄匬LC鏁版嵁锛屽瓧鑺傞『搴忔槸鍙嶇殑
+ var highByte = (byte)((register >> 8) & 0xFF);
+ var lowByte = (byte)(register & 0xFF);
+
+ // 鍏堟坊鍔犱綆瀛楄妭锛屽啀娣诲姞楂樺瓧鑺傦紙閫傚簲PLC鐨勫瓧鑺傚簭锛�
+ if (lowByte != 0) bytes.Add(lowByte);
+ if (highByte != 0) bytes.Add(highByte);
}
}
@@ -163,8 +175,8 @@
try
{
- // 鍏堣В鏋愪负瀛楃涓�
- var timestampString = ParseString(registers, config);
+ // 鏃堕棿鎴虫暟鎹渶瑕佺壒娈婅В鏋愶紙鏁板瓧瀛楃锛�
+ var timestampString = ParseTimestampString(registers, config);
if (string.IsNullOrEmpty(timestampString))
{
@@ -228,6 +240,39 @@
#region 鏃堕棿鎴宠В鏋愯緟鍔╂柟娉�
/// <summary>
+ /// 瑙f瀽鏃堕棿鎴冲瓧绗︿覆锛堥拡瀵规暟瀛楀瓧绗︽暟鎹級
+ /// </summary>
+ private static string ParseTimestampString(int[] registers, DataField config)
+ {
+ if (registers.Length == 0) return string.Empty;
+
+ var chars = new List<char>();
+
+ foreach (var register in registers.Take(config.Length))
+ {
+ if (register == 0) break; // 閬囧埌0瀵勫瓨鍣ㄥ仠姝�
+
+ // 鎻愬彇楂樺瓧鑺傚拰浣庡瓧鑺�
+ var highByte = (byte)((register >> 8) & 0xFF);
+ var lowByte = (byte)(register & 0xFF);
+
+ // 鎸塒LC鏁版嵁鏍煎紡娣诲姞瀛楃锛堝厛浣庡瓧鑺傦紝鍚庨珮瀛楄妭锛�
+ // 妫�鏌ユ槸鍚︿负鏁板瓧瀛楃锛圓SCII 48-57, '0'-'9'锛�
+ if (lowByte >= 48 && lowByte <= 57)
+ {
+ chars.Add((char)lowByte);
+ }
+ if (highByte >= 48 && highByte <= 57)
+ {
+ chars.Add((char)highByte);
+ }
+ }
+
+ var result = new string(chars.ToArray());
+ return result;
+ }
+
+ /// <summary>
/// 瑙f瀽YYYYMMDDHHMMSS鏍煎紡鐨勬椂闂存埑
/// </summary>
private static DateTime ParseTimestampYYYYMMDDHHMMSS(string timestampString)
--
Gitblit v1.9.3