更新2026/5/22

This commit is contained in:
GukSang.Jin
2026-05-22 13:54:54 +08:00
parent 991d2a0b67
commit 7994197031
4 changed files with 88 additions and 5 deletions

View File

@@ -10,11 +10,12 @@ namespace ConeCalorimeter.ViewModels;
public sealed class CValueCalibrationViewModel : PageViewModel
{
private const ushort BaselineOxygenRegister = 280;
private const ushort BaselineOxygenRegister = 268;
private const ushort TemperatureRegister = 282;
private const ushort PressureDifferenceRegister = 284;
private const ushort CalibrationOxygenRegister = 286;
private const ushort CValueRegister = 308;
private const ushort MethaneFlowRegister = 34;
private const ushort CirculatingWaterCoil = 49;
private const ushort SamplingPumpCoil = 50;
private const ushort IgniterCoil = 53;
@@ -34,6 +35,8 @@ public sealed class CValueCalibrationViewModel : PageViewModel
private readonly Action _closeAction;
private readonly Action _helpAction;
private readonly Action _baselineCollectionCompletedAction;
private readonly Action _calibrationCompletedAction;
private readonly ITcpDeviceConnectionService _tcpDeviceConnectionService;
private readonly DispatcherTimer _refreshTimer;
private readonly Dictionary<string, CValueCalibrationActionViewModel> _actionsByLabel = [];
@@ -42,15 +45,20 @@ public sealed class CValueCalibrationViewModel : PageViewModel
private string _pressureDifferenceText = "";
private string _calibrationOxygenText = "";
private string _cValueText = "";
private string _methaneFlowText = "";
private string _lastAction = "待机";
public CValueCalibrationViewModel(
Action closeAction,
Action helpAction,
Action baselineCollectionCompletedAction,
Action calibrationCompletedAction,
ITcpDeviceConnectionService tcpDeviceConnectionService) : base("C值标定")
{
_closeAction = closeAction;
_helpAction = helpAction;
_baselineCollectionCompletedAction = baselineCollectionCompletedAction;
_calibrationCompletedAction = calibrationCompletedAction;
_tcpDeviceConnectionService = tcpDeviceConnectionService;
CloseCommand = new RelayCommand(_closeAction);
HelpCommand = new RelayCommand(_helpAction);
@@ -122,6 +130,12 @@ public sealed class CValueCalibrationViewModel : PageViewModel
private set => SetProperty(ref _cValueText, value);
}
public string MethaneFlowText
{
get => _methaneFlowText;
private set => SetProperty(ref _methaneFlowText, value);
}
public string LastAction
{
get => _lastAction;
@@ -153,6 +167,7 @@ public sealed class CValueCalibrationViewModel : PageViewModel
PressureDifferenceText = ReadFloatText(PressureDifferenceRegister);
CalibrationOxygenText = ReadFloatText(CalibrationOxygenRegister);
CValueText = ReadFloatText(CValueRegister);
MethaneFlowText = ReadFloatText(MethaneFlowRegister);
RefreshActionStates();
}
@@ -250,12 +265,26 @@ public sealed class CValueCalibrationViewModel : PageViewModel
if (_tcpDeviceConnectionService.TryWriteCoil(coilAddress, true))
{
LastAction = actionText;
var completedBaselineCollection = action == BaselineCollectionAction && isActive;
var completedCalibration = action == CalibrationStartAction && isActive;
LastAction = completedBaselineCollection
? "基线采集完成"
: completedCalibration ? "标定完成" : actionText;
if (_actionsByLabel.TryGetValue(action, out var actionViewModel))
{
actionViewModel.UpdateStatus(!isActive);
}
if (completedBaselineCollection)
{
_baselineCollectionCompletedAction();
}
if (completedCalibration)
{
_calibrationCompletedAction();
}
return;
}

View File

@@ -34,6 +34,8 @@ public sealed class MainViewModel : ObservableObject
new CValueCalibrationViewModel(
() => SelectPage(testItem),
ShowCValueCalibrationHelp,
ShowBaselineCollectionCompleted,
ShowCalibrationCompleted,
tcpDeviceConnectionService));
var coneRadiationItem = new NavigationItemViewModel(
"辐射锥设置",
@@ -161,6 +163,22 @@ public sealed class MainViewModel : ObservableObject
+ "6.标定完成后,弹出“标定完成!”;");
}
private void ShowBaselineCollectionCompleted()
{
_helpDialogService.ShowHelp(
"C值标定提示",
"C值标定提示",
"基线采集完成");
}
private void ShowCalibrationCompleted()
{
_helpDialogService.ShowHelp(
"C值标定提示",
"C值标定提示",
"标定完成!");
}
private void ShowConeRadiationHelp()
{
_helpDialogService.ShowHelp(

View File

@@ -17,6 +17,8 @@ public sealed class TestPageViewModel : PageViewModel
private const string ResetAction = "复位";
private const ushort ResetCoil = 88;
private const ushort ResetCompleteCoil = 89;
private static readonly TimeSpan ResetPulseDuration = TimeSpan.FromMilliseconds(300);
private static readonly TimeSpan ResetCompletionTimeout = TimeSpan.FromSeconds(15);
private readonly IExperimentDataService _experimentDataService;
private readonly ITcpDeviceConnectionService _tcpDeviceConnectionService;
@@ -27,6 +29,7 @@ public sealed class TestPageViewModel : PageViewModel
private DeviceActionViewModel _resetAction = null!;
private bool _flameDetected;
private bool _resetInProgress;
private DateTime _resetStartedAt;
private string _lastAction = "待机";
public TestPageViewModel(
@@ -331,8 +334,13 @@ public sealed class TestPageViewModel : PageViewModel
}
}
private void ExecuteResetAction()
private async void ExecuteResetAction()
{
if (_resetInProgress)
{
return;
}
if (!_tcpDeviceConnectionService.TryWriteCoil(ResetCoil, true))
{
LastAction = "复位失败";
@@ -341,6 +349,14 @@ public sealed class TestPageViewModel : PageViewModel
}
SetResetInProgress(true);
LastAction = "复位中";
_resetStartedAt = DateTime.Now;
await Task.Delay(ResetPulseDuration);
if (!_tcpDeviceConnectionService.TryWriteCoil(ResetCoil, false))
{
Debug.WriteLine("Device reset pulse release failed.");
}
}
private void RefreshResetStatus()
@@ -350,13 +366,21 @@ public sealed class TestPageViewModel : PageViewModel
return;
}
if (!_tcpDeviceConnectionService.TryReadCoil(ResetCompleteCoil, out var resetComplete) || !resetComplete)
var statusRead = _tcpDeviceConnectionService.TryReadCoil(ResetCompleteCoil, out var resetComplete);
if (statusRead && resetComplete)
{
SetResetInProgress(false);
LastAction = "复位完成";
return;
}
if (DateTime.Now - _resetStartedAt < ResetCompletionTimeout)
{
return;
}
SetResetInProgress(false);
LastAction = "复位完成";
LastAction = statusRead ? "复位超时" : "复位状态读取失败";
}
private void SetResetInProgress(bool resetInProgress)

View File

@@ -201,6 +201,18 @@
Text="%"
Style="{StaticResource DataLabelStyle}" />
<TextBlock Grid.Row="2"
Text="甲烷流量:"
Style="{StaticResource DataLabelStyle}" />
<TextBlock Grid.Row="2"
Grid.Column="1"
Text="{Binding MethaneFlowText}"
Style="{StaticResource DataValueStyle}" />
<TextBlock Grid.Row="2"
Grid.Column="2"
Text="L/Min"
Style="{StaticResource DataLabelStyle}" />
<TextBlock Grid.Row="2"
Grid.Column="5"
Text="C:"