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