更新
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.Threading;
|
||||
using System.Windows.Threading;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using ConeCalorimeter.Models;
|
||||
@@ -27,6 +28,8 @@ public sealed class ConeRadiationSettingsViewModel : PageViewModel
|
||||
private const double HeatTransferInputMinimum = 0;
|
||||
private const double HeatTransferReadMinimum = 0.01;
|
||||
private const double HeatTransferMaximum = 20000;
|
||||
private const int TargetTemperatureWriteConfirmationAttempts = 3;
|
||||
private const int TargetTemperatureWriteConfirmationDelayMilliseconds = 80;
|
||||
private const int ParameterRefreshReleaseDelayMilliseconds = 500;
|
||||
private const ushort AlarmCoil = 91;
|
||||
private const ushort CirculatingWaterCoil = 49;
|
||||
@@ -469,14 +472,37 @@ public sealed class ConeRadiationSettingsViewModel : PageViewModel
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_tcpDeviceConnectionService.TryWriteInt16(TargetTemperatureRegister, (short)scaledValue))
|
||||
var registerValue = (short)scaledValue;
|
||||
if (TryWriteAndConfirmTargetTemperature(registerValue))
|
||||
{
|
||||
_parameterRefreshBlockedUntil = DateTime.UtcNow.AddMilliseconds(ParameterRefreshReleaseDelayMilliseconds);
|
||||
TargetTemperatureText = value.ToString("0.#", CultureInfo.InvariantCulture);
|
||||
LastAction = "辐射温度设置成功";
|
||||
return true;
|
||||
}
|
||||
|
||||
LastAction = "设置辐射温度失败";
|
||||
Debug.WriteLine("Cone radiation target temperature write failed.");
|
||||
LastAction = "辐射温度写入未生效";
|
||||
Debug.WriteLine($"Cone radiation target temperature write was not confirmed. Expected raw D{TargetTemperatureRegister}={registerValue}.");
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool TryWriteAndConfirmTargetTemperature(short registerValue)
|
||||
{
|
||||
for (var attempt = 1; attempt <= TargetTemperatureWriteConfirmationAttempts; attempt++)
|
||||
{
|
||||
if (_tcpDeviceConnectionService.TryWriteInt16(TargetTemperatureRegister, registerValue)
|
||||
&& _tcpDeviceConnectionService.TryReadInt16(TargetTemperatureRegister, out var readBackValue)
|
||||
&& readBackValue == registerValue)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (attempt < TargetTemperatureWriteConfirmationAttempts)
|
||||
{
|
||||
Thread.Sleep(TargetTemperatureWriteConfirmationDelayMilliseconds);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user