更新读数

This commit is contained in:
GukSang.Jin
2026-01-30 15:38:36 +08:00
parent 98a0f3e438
commit 35d47a2dc1

View File

@@ -745,6 +745,34 @@ namespace COFTester.Services
return result;
}
/// <summary>
/// 將兩個寄存器轉換為 Float (IEEE 754 Big-Endian)
/// Modbus 標準字節序:高字在前,每字內高字節在前
/// </summary>
protected float ConvertRegistersToFloatRead(ushort[] registers, int startIndex = 0)
{
if (registers.Length < startIndex + 2)
throw new ArgumentException("寄存器數組長度不足");
ushort highReg = registers[startIndex];
ushort lowReg = registers[startIndex + 1];
byte[] floatBytes = new byte[4];
// 高寄存器→高2字節低寄存器→低2字節
floatBytes[0] = (byte)(highReg >> 8);
floatBytes[1] = (byte)highReg;
floatBytes[2] = (byte)(lowReg >> 8);
floatBytes[3] = (byte)lowReg;
// 處理小端序系統
if (BitConverter.IsLittleEndian)
{
Array.Reverse(floatBytes);
}
return BitConverter.ToSingle(floatBytes, 0);
}
/// <summary>
/// 將 32位浮點型轉換為兩個寄存器 (IEEE 754)
///
@@ -1247,7 +1275,7 @@ namespace COFTester.Services
// D350 水平手動速度
var hSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync(
_config.SlaveId, _config.HorizontalManualSpeedRegister, 2);
parameters.HorizontalManualSpeed = ConvertRegistersToFloat(hSpeedRegs, 0);
parameters.HorizontalManualSpeed = ConvertRegistersToFloatRead(hSpeedRegs, 0);
// D360 水平手動位移
var hDispRegs = await _modbusMaster.ReadHoldingRegistersAsync(
@@ -1257,22 +1285,22 @@ namespace COFTester.Services
// D310 升降手動速度
var vSpeedRegs = await _modbusMaster.ReadHoldingRegistersAsync(
_config.SlaveId, _config.VerticalManualSpeedRegister, 2);
parameters.VerticalManualSpeed = ConvertRegistersToFloat(vSpeedRegs, 0);
parameters.VerticalManualSpeed = ConvertRegistersToFloatRead(vSpeedRegs, 0);
// D320 升降手動位移
var vDispRegs = await _modbusMaster.ReadHoldingRegistersAsync(
_config.SlaveId, _config.VerticalManualDisplacementRegister, 2);
parameters.VerticalManualDisplacement = ConvertRegistersToFloat(vDispRegs, 0);
parameters.VerticalManualDisplacement = ConvertRegistersToFloatRead(vDispRegs, 0);
// D290 升降極限
var vLimitRegs = await _modbusMaster.ReadHoldingRegistersAsync(
_config.SlaveId, _config.VerticalLimitRegister, 2);
parameters.VerticalLimit = ConvertRegistersToFloat(vLimitRegs, 0);
parameters.VerticalLimit = ConvertRegistersToFloatRead(vLimitRegs, 0);
// D292 水平極限
var hLimitRegs = await _modbusMaster.ReadHoldingRegistersAsync(
_config.SlaveId, _config.HorizontalLimitRegister, 2);
parameters.HorizontalLimit = ConvertRegistersToFloat(hLimitRegs, 0);
parameters.HorizontalLimit = ConvertRegistersToFloatRead(hLimitRegs, 0);
// D1320 拉力系數
var forceCoefRegs = await _modbusMaster.ReadHoldingRegistersAsync(