222
This commit is contained in:
@@ -766,12 +766,6 @@ namespace COFTester.Services
|
|||||||
protected float ConvertRegistersToFloat(ushort[] registers, int startIndex = 0,
|
protected float ConvertRegistersToFloat(ushort[] registers, int startIndex = 0,
|
||||||
FloatByteOrder byteOrder = FloatByteOrder.BADC)
|
FloatByteOrder byteOrder = FloatByteOrder.BADC)
|
||||||
{
|
{
|
||||||
// 参数校验
|
|
||||||
if (registers == null)
|
|
||||||
throw new ArgumentNullException(nameof(registers), "寄存器数组不能为空");
|
|
||||||
|
|
||||||
if (registers.Length < startIndex + 2)
|
|
||||||
throw new ArgumentException($"寄存器数组长度不足:需要至少 {startIndex + 2} 个,实际 {registers.Length} 个");
|
|
||||||
|
|
||||||
// 读取寄存器值
|
// 读取寄存器值
|
||||||
ushort reg0 = registers[startIndex];
|
ushort reg0 = registers[startIndex];
|
||||||
@@ -817,14 +811,6 @@ namespace COFTester.Services
|
|||||||
|
|
||||||
// 转换为浮点数
|
// 转换为浮点数
|
||||||
float result = BitConverter.ToSingle(floatBytes.ToArray(), 0);
|
float result = BitConverter.ToSingle(floatBytes.ToArray(), 0);
|
||||||
|
|
||||||
// 调试信息
|
|
||||||
System.Diagnostics.Debug.WriteLine(
|
|
||||||
$"[Modbus] Float转换: Order={byteOrder}, " +
|
|
||||||
$"Reg0=0x{reg0:X4}, Reg1=0x{reg1:X4}, " +
|
|
||||||
$"Result={result:G9}"
|
|
||||||
);
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -920,40 +906,6 @@ namespace COFTester.Services
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// 大端系统(罕见)
|
|
||||||
switch (byteOrder)
|
|
||||||
{
|
|
||||||
case FloatByteOrder.ABCD:
|
|
||||||
registers[0] = (ushort)((bytes[0] << 8) | bytes[1]);
|
|
||||||
registers[1] = (ushort)((bytes[2] << 8) | bytes[3]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FloatByteOrder.CDAB:
|
|
||||||
registers[0] = (ushort)((bytes[2] << 8) | bytes[3]);
|
|
||||||
registers[1] = (ushort)((bytes[0] << 8) | bytes[1]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FloatByteOrder.BADC:
|
|
||||||
registers[0] = (ushort)((bytes[1] << 8) | bytes[0]);
|
|
||||||
registers[1] = (ushort)((bytes[3] << 8) | bytes[2]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FloatByteOrder.DCBA:
|
|
||||||
registers[0] = (ushort)((bytes[3] << 8) | bytes[2]);
|
|
||||||
registers[1] = (ushort)((bytes[1] << 8) | bytes[0]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 調試輸出(生產環境可保留用於故障排查)
|
|
||||||
System.Diagnostics.Debug.WriteLine(
|
|
||||||
$"[Modbus] Float寫入: Float={value:F3} " +
|
|
||||||
$"→ Bytes=[{bytes[0]:X2},{bytes[1]:X2},{bytes[2]:X2},{bytes[3]:X2}] " +
|
|
||||||
$"→ Reg[0]=0x{registers[0]:X4}, Reg[1]=0x{registers[1]:X4} (字節序:{byteOrder})"
|
|
||||||
);
|
|
||||||
|
|
||||||
return registers;
|
return registers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user