更新读数
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user