From c7d107c2f15c3898f203f9bc87a914c75bade682 Mon Sep 17 00:00:00 2001 From: "GukSang.Jin" Date: Fri, 27 Feb 2026 15:17:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20add=20=E8=BD=AC=E6=8D=A2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PetWashControl/ViewModels/MainViewModel.cs | 61 ++++++++++++---------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/PetWashControl/ViewModels/MainViewModel.cs b/PetWashControl/ViewModels/MainViewModel.cs index 7b2fa56..63c5a0d 100644 --- a/PetWashControl/ViewModels/MainViewModel.cs +++ b/PetWashControl/ViewModels/MainViewModel.cs @@ -284,20 +284,22 @@ public partial class MainViewModel : ObservableObject { _logger.LogInfo("正在从设备读取系统参数..."); - // 读取时间参数(D404-D424,共11个寄存器) - var timeParams = await _modbusService.ReadHoldingRegistersAsync(404, 11); + // 读取时间参数(D404-D424,共22个寄存器,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 allRegisters = new List(); - // 写入设备 - 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("参数已成功写入设备"); }