更新
This commit is contained in:
@@ -506,10 +506,12 @@ namespace WindowsFormsApp6
|
||||
// 读取初始重量(D420,2个寄存器,浮点数,单位:g,精度0.01g)
|
||||
ushort[] initialWeightReg = _modbusMaster.ReadHoldingRegisters(slaveId, 420, 2);
|
||||
double initialWeight = ConvertRegistersToDouble(initialWeightReg);
|
||||
initialWeight = ModbusUshortToFloat(initialWeightReg[1], initialWeightReg[0]);
|
||||
|
||||
// 读取浸润后重量(D422,2个寄存器,浮点数,单位:g,精度0.01g)
|
||||
ushort[] afterWeightReg = _modbusMaster.ReadHoldingRegisters(slaveId, 422, 2);
|
||||
double afterWeight = ConvertRegistersToDouble(afterWeightReg);
|
||||
afterWeight = ModbusUshortToFloat(afterWeightReg[1], afterWeightReg[0]);
|
||||
|
||||
// 读取浸润时间(D402,1个寄存器,整数,单位:秒)
|
||||
ushort[] soakTimeReg = _modbusMaster.ReadHoldingRegisters(slaveId, 402, 1);
|
||||
@@ -520,8 +522,9 @@ namespace WindowsFormsApp6
|
||||
int hangTime = ConvertSingleRegisterToInt(hangTimeReg[0]);
|
||||
|
||||
// 读取运行速度(D410,1个寄存器,整数,单位:mm/min)
|
||||
ushort[] runSpeedReg = _modbusMaster.ReadHoldingRegisters(slaveId, 410, 1);
|
||||
int runSpeed = ConvertSingleRegisterToInt(runSpeedReg[0]);
|
||||
ushort[] runSpeedReg = _modbusMaster.ReadHoldingRegisters(slaveId, 310, 2);
|
||||
double runSpeed = ConvertRegistersToDouble(runSpeedReg);
|
||||
runSpeed = ModbusUshortToFloat(runSpeedReg[1], runSpeedReg[0]);
|
||||
|
||||
// 使用反射获取Form2的私有字段
|
||||
var sampleDataTableField = form2Instance.GetType()
|
||||
@@ -552,7 +555,7 @@ namespace WindowsFormsApp6
|
||||
AfterWeight = afterWeight,
|
||||
SoakTime = soakTime,
|
||||
HangTime = hangTime,
|
||||
RunSpeed = runSpeed
|
||||
RunSpeed = (int)runSpeed
|
||||
});
|
||||
|
||||
// 新试样的索引
|
||||
@@ -1111,7 +1114,7 @@ namespace WindowsFormsApp6
|
||||
try
|
||||
{
|
||||
// 读取吸水时间(D200,1个寄存器,整数,单位:秒)
|
||||
ushort[] timeRegisters = _modbusMaster.ReadHoldingRegisters(slaveId, 200, 1);
|
||||
ushort[] timeRegisters = _modbusMaster.ReadHoldingRegisters(slaveId, 212, 2);
|
||||
|
||||
// 读取吸芯高度(D454,2个寄存器,浮点数,单位:mm,精度0.01mm)
|
||||
ushort[] heightRegisters = _modbusMaster.ReadHoldingRegisters(slaveId, 454, 2);
|
||||
@@ -1144,11 +1147,11 @@ namespace WindowsFormsApp6
|
||||
|
||||
// 将寄存器值转换为实际数据
|
||||
// 吸水时间:单个寄存器,整数,单位:秒
|
||||
int wickingTime = ConvertSingleRegisterToInt(timeRegisters[0]);
|
||||
|
||||
int wickingTime = timeRegisters[0];
|
||||
//wickingTime = ModbusUshortToInt(timeRegisters[1], timeRegisters[0]);
|
||||
// 吸芯高度:2个寄存器,浮点数,单位:mm,精度0.01mm
|
||||
double wickingHeight = ConvertRegistersToDouble(heightRegisters);
|
||||
|
||||
wickingHeight = ModbusUshortToFloat(heightRegisters[1], heightRegisters[0]);
|
||||
// 检查数据有效性
|
||||
if (wickingTime <= 0 || double.IsNaN(wickingHeight) || double.IsInfinity(wickingHeight))
|
||||
{
|
||||
@@ -1265,6 +1268,39 @@ namespace WindowsFormsApp6
|
||||
}
|
||||
}
|
||||
|
||||
private float ModbusUshortToFloat(ushort highReg, ushort lowReg)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
private int ModbusUshortToInt(ushort highReg, ushort lowReg)
|
||||
{
|
||||
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.ToInt32(floatBytes, 0);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取Form3下一个要填充的位置(试样索引和测试次数)
|
||||
/// 返回:(试样索引, 测试次数) - 都是1-based
|
||||
|
||||
Reference in New Issue
Block a user