feat: add 转换数据

This commit is contained in:
GukSang.Jin
2026-02-27 15:17:41 +08:00
parent 742dc038d5
commit c7d107c2f1

View File

@@ -284,20 +284,22 @@ public partial class MainViewModel : ObservableObject
{
_logger.LogInfo("正在从设备读取系统参数...");
// 读取时间参数D404-D42411个寄存器)
var timeParams = await _modbusService.ReadHoldingRegistersAsync(404, 11);
// 读取时间参数D404-D42422个寄存器11个浮点数
// 每个浮点数占用2个寄存器
var timeParams = await _modbusService.ReadHoldingRegistersAsync(404, 22);
FirstSprayWaterTime = timeParams[0]; // D404 首次喷水时间
AfterShampoo1SprayTime = timeParams[1]; // D406 沐浴1后喷水时间
AfterShampoo2SprayTime = timeParams[2]; // D408 沐浴2后喷水时间
AfterShampoo3SprayTime = timeParams[3]; // D410 沐浴3后喷水时间
// D412 清洗笼子喷水(暂不使用)
SprayShampoo1Time = timeParams[5]; // D414 喷沐浴露1时间
SprayShampoo2Time = timeParams[6]; // D416 喷沐浴露2时间
SprayShampoo3Time = timeParams[7]; // D418 喷沐浴露3时间
HotAirTime = timeParams[8]; // D420 吹热风时间
ColdAirTime = timeParams[9]; // D422 吹冷风时间
UvSterilizationTime = timeParams[10]; // D424 紫外线杀菌时间
// 使用 ConvertRegistersToFloat 转换每个参数CDAB字节序
FirstSprayWaterTime = (int)_modbusService.ConvertRegistersToFloat(timeParams, 0, FloatByteOrder.CDAB); // D404-D405
AfterShampoo1SprayTime = (int)_modbusService.ConvertRegistersToFloat(timeParams, 2, FloatByteOrder.CDAB); // D406-D407
AfterShampoo2SprayTime = (int)_modbusService.ConvertRegistersToFloat(timeParams, 4, FloatByteOrder.CDAB); // D408-D409
AfterShampoo3SprayTime = (int)_modbusService.ConvertRegistersToFloat(timeParams, 6, FloatByteOrder.CDAB); // D410-D411
// D412-D413 清洗笼子喷水保留索引8
SprayShampoo1Time = (int)_modbusService.ConvertRegistersToFloat(timeParams, 10, FloatByteOrder.CDAB); // D414-D415
SprayShampoo2Time = (int)_modbusService.ConvertRegistersToFloat(timeParams, 12, FloatByteOrder.CDAB); // D416-D417
SprayShampoo3Time = (int)_modbusService.ConvertRegistersToFloat(timeParams, 14, FloatByteOrder.CDAB); // D418-D419
HotAirTime = (int)_modbusService.ConvertRegistersToFloat(timeParams, 16, FloatByteOrder.CDAB); // D420-D421
ColdAirTime = (int)_modbusService.ConvertRegistersToFloat(timeParams, 18, FloatByteOrder.CDAB); // D422-D423
UvSterilizationTime = (int)_modbusService.ConvertRegistersToFloat(timeParams, 20, FloatByteOrder.CDAB); // D424-D425
_logger.LogInfo($"时间参数读取成功 - 首次喷水:{FirstSprayWaterTime}min, 沐浴1后:{AfterShampoo1SprayTime}min, " +
$"沐浴2后:{AfterShampoo2SprayTime}min, 沐浴3后:{AfterShampoo3SprayTime}min, " +
@@ -488,22 +490,25 @@ public partial class MainViewModel : ObservableObject
{
_logger.LogInfo("正在将参数写入设备...");
// 准备时间参数数据D404-D424,共11个寄存器)
ushort[] timeParams = new ushort[11];
timeParams[0] = (ushort)FirstSprayWaterTime; // D404 首次喷水时间
timeParams[1] = (ushort)AfterShampoo1SprayTime; // D406 沐浴1后喷水时间
timeParams[2] = (ushort)AfterShampoo2SprayTime; // D408 沐浴2后喷水时间
timeParams[3] = (ushort)AfterShampoo3SprayTime; // D410 沐浴3后喷水时间
timeParams[4] = 0; // D412 清洗笼子喷水(保留)
timeParams[5] = (ushort)SprayShampoo1Time; // D414 喷沐浴露1时间
timeParams[6] = (ushort)SprayShampoo2Time; // D416 喷沐浴露2时间
timeParams[7] = (ushort)SprayShampoo3Time; // D418 喷沐浴露3时间
timeParams[8] = (ushort)HotAirTime; // D420 吹热风时间
timeParams[9] = (ushort)ColdAirTime; // D422 吹冷风时间
timeParams[10] = (ushort)UvSterilizationTime; // D424 紫外线杀菌时间
// 准备时间参数数据D404-D425,共22个寄存器11个浮点数
// 每个浮点数占用2个寄存器
List<ushort> allRegisters = new List<ushort>();
// 写入设备
await _modbusService.WriteMultipleRegistersAsync(404, timeParams);
// 使用 ConvertFloatToRegisters 转换每个参数CDAB字节序
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(FirstSprayWaterTime, FloatByteOrder.CDAB)); // D404-D405
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(AfterShampoo1SprayTime, FloatByteOrder.CDAB)); // D406-D407
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(AfterShampoo2SprayTime, FloatByteOrder.CDAB)); // D408-D409
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(AfterShampoo3SprayTime, FloatByteOrder.CDAB)); // D410-D411
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(0, FloatByteOrder.CDAB)); // D412-D413 清洗笼子喷水(保留)
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(SprayShampoo1Time, FloatByteOrder.CDAB)); // D414-D415
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(SprayShampoo2Time, FloatByteOrder.CDAB)); // D416-D417
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(SprayShampoo3Time, FloatByteOrder.CDAB)); // D418-D419
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(HotAirTime, FloatByteOrder.CDAB)); // D420-D421
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(ColdAirTime, FloatByteOrder.CDAB)); // D422-D423
allRegisters.AddRange(_modbusService.ConvertFloatToRegisters(UvSterilizationTime, FloatByteOrder.CDAB)); // D424-D425
// 写入设备22个寄存器
await _modbusService.WriteMultipleRegistersAsync(404, allRegisters.ToArray());
_logger.LogInfo("参数已成功写入设备");
}