111
啊鑫
2025-08-01 cd32500504c97874c8fc0f8ceb1ac58f3cb37b01
config/ModbusDataParser.cs
@@ -93,7 +93,7 @@
                if (config.Encoding?.ToLower() == "littleendian")
                {
                    // 小端:低位寄存器在前,高位寄存器在后
                    value = (registers[0] & 0xFFFF) | ((long)(registers[1] & 0xFFFF) << 16);
                    value = ((uint)registers[0] & 0xFFFF) | ((long)((uint)registers[1] & 0xFFFF) << 16);
                }
                else
                {
@@ -103,7 +103,7 @@
                    if (registers.Length >= 2)
                    {
                        // 先按小端方式组合(即使配置不是littleendian)
                        long littleEndianValue = (registers[0] & 0xFFFF) | ((long)(registers[1] & 0xFFFF) << 16);
                        long littleEndianValue = ((uint)registers[0] & 0xFFFF) | ((long)((uint)registers[1] & 0xFFFF) << 16);
                        
                        // 检查是否需要特殊的除以10处理(针对测量数据)
                        if (littleEndianValue > 100000) // 6位数或更多,可能需要除以10
@@ -115,13 +115,13 @@
                        else
                        {
                            // PLC默认使用大端格式进行多寄存器组合:高位寄存器在前,低位寄存器在后
                            value = ((long)(registers[0] & 0xFFFF) << 16) | (registers[1] & 0xFFFF);
                            value = ((long)((uint)registers[0] & 0xFFFF) << 16) | ((uint)registers[1] & 0xFFFF);
                        }
                    }
                    else
                    {
                        // PLC默认使用大端格式进行多寄存器组合:高位寄存器在前,低位寄存器在后
                        value = ((long)(registers[0] & 0xFFFF) << 16) | (registers[1] & 0xFFFF);
                        value = ((long)((uint)registers[0] & 0xFFFF) << 16) | ((uint)registers[1] & 0xFFFF);
                    }
                }
                
@@ -140,7 +140,7 @@
                Console.WriteLine($"[PARSER-DEBUG] 多寄存器组合 ({config.Length}个): [{string.Join(", ", registers.Take(config.Length))}]");
                for (int i = 0; i < Math.Min(registers.Length, config.Length); i++)
                {
                    value = (value << 16) | (registers[i] & 0xFFFF);
                    value = (value << 16) | ((uint)registers[i] & 0xFFFF);
                    Console.WriteLine($"[PARSER-DEBUG] 步骤{i+1}: 0x{value:X} (寄存器{i}: {registers[i]})");
                }
            }