更新
This commit is contained in:
@@ -15,7 +15,6 @@ public sealed class CValueCalibrationViewModel : PageViewModel
|
||||
private const ushort PressureDifferenceRegister = 284;
|
||||
private const ushort CalibrationOxygenRegister = 286;
|
||||
private const ushort CValueRegister = 308;
|
||||
private const ushort MethaneFlowRegister = 34;
|
||||
private const double OxygenMinimum = 0;
|
||||
private const double OxygenMaximum = 30;
|
||||
private const double TemperatureMinimum = 200;
|
||||
@@ -24,8 +23,6 @@ public sealed class CValueCalibrationViewModel : PageViewModel
|
||||
private const double PressureDifferenceMaximum = 5000;
|
||||
private const double CValueMinimum = 0;
|
||||
private const double CValueMaximum = 1000;
|
||||
private const double MethaneFlowMinimum = 0;
|
||||
private const double MethaneFlowMaximum = 20;
|
||||
private const ushort CirculatingWaterCoil = 49;
|
||||
private const ushort SamplingPumpCoil = 50;
|
||||
private const ushort IgniterCoil = 53;
|
||||
@@ -57,7 +54,6 @@ public sealed class CValueCalibrationViewModel : PageViewModel
|
||||
private string _pressureDifferenceText = "";
|
||||
private string _calibrationOxygenText = "";
|
||||
private string _cValueText = "";
|
||||
private string _methaneFlowText = "";
|
||||
private string _lastAction = "待机";
|
||||
|
||||
public CValueCalibrationViewModel(
|
||||
@@ -142,12 +138,6 @@ 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;
|
||||
@@ -204,12 +194,6 @@ public sealed class CValueCalibrationViewModel : PageViewModel
|
||||
CValueMinimum,
|
||||
CValueMaximum,
|
||||
"0.00");
|
||||
MethaneFlowText = ReadRangedFloatText(
|
||||
"MethaneFlow",
|
||||
MethaneFlowRegister,
|
||||
MethaneFlowMinimum,
|
||||
MethaneFlowMaximum,
|
||||
"0.00");
|
||||
RefreshActionStates();
|
||||
}
|
||||
|
||||
|
||||
@@ -9,10 +9,13 @@ namespace ConeCalorimeter.ViewModels;
|
||||
|
||||
public sealed class ConeRadiationSettingsViewModel : PageViewModel
|
||||
{
|
||||
private const ushort CurrentHeatFluxRegister = 410;
|
||||
private const ushort CurrentHeatFluxRegister = 32;
|
||||
private const ushort TargetTemperatureRegister = 400;
|
||||
private const ushort HeatTransferRegister = 418;
|
||||
private const double TargetTemperatureScale = 10;
|
||||
private const double CurrentTemperatureMinimum = 10;
|
||||
private const double CurrentTemperatureMaximum = 1200;
|
||||
private const double CurrentTemperatureMaximumDropPerRefresh = 80;
|
||||
private const double CurrentHeatFluxMinimum = 0;
|
||||
private const double CurrentHeatFluxMaximum = 1000;
|
||||
private const double HeatTransferInputMinimum = 0;
|
||||
@@ -40,6 +43,7 @@ public sealed class ConeRadiationSettingsViewModel : PageViewModel
|
||||
private bool _circulatingWaterActive;
|
||||
private bool _heatingActive;
|
||||
private bool _isEditingConeParameters;
|
||||
private double? _lastStableCurrentTemperature;
|
||||
private DateTime _parameterRefreshBlockedUntil = DateTime.MinValue;
|
||||
|
||||
public ConeRadiationSettingsViewModel(
|
||||
@@ -187,7 +191,8 @@ public sealed class ConeRadiationSettingsViewModel : PageViewModel
|
||||
CurrentHeatFluxMinimum,
|
||||
CurrentHeatFluxMaximum,
|
||||
"0.00",
|
||||
out var currentHeatFluxText))
|
||||
out var currentHeatFluxText,
|
||||
out _))
|
||||
{
|
||||
CurrentHeatFluxText = currentHeatFluxText;
|
||||
}
|
||||
@@ -201,7 +206,8 @@ public sealed class ConeRadiationSettingsViewModel : PageViewModel
|
||||
HeatTransferReadMinimum,
|
||||
HeatTransferMaximum,
|
||||
"0.##",
|
||||
out var heatTransferText))
|
||||
out var heatTransferText,
|
||||
out _))
|
||||
{
|
||||
HeatTransferText = heatTransferText;
|
||||
}
|
||||
@@ -217,20 +223,12 @@ public sealed class ConeRadiationSettingsViewModel : PageViewModel
|
||||
|
||||
private void UpdateCurrentReadings(RealtimeSnapshot snapshot)
|
||||
{
|
||||
if (double.IsFinite(snapshot.ConeTemperature))
|
||||
if (IsStableCurrentTemperature(snapshot.ConeTemperature))
|
||||
{
|
||||
_lastStableCurrentTemperature = snapshot.ConeTemperature;
|
||||
CurrentTemperatureText = NormalizeDisplayValue(snapshot.ConeTemperature)
|
||||
.ToString("0.0", CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
if (double.IsFinite(snapshot.Irradiance))
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(CurrentHeatFluxText))
|
||||
{
|
||||
CurrentHeatFluxText = NormalizeDisplayValue(snapshot.Irradiance)
|
||||
.ToString("0.00", CultureInfo.InvariantCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool TryReadRangedFloatText(
|
||||
@@ -239,26 +237,40 @@ public sealed class ConeRadiationSettingsViewModel : PageViewModel
|
||||
double minimum,
|
||||
double maximum,
|
||||
string format,
|
||||
out string text)
|
||||
out string text,
|
||||
out double value)
|
||||
{
|
||||
text = string.Empty;
|
||||
value = double.NaN;
|
||||
|
||||
if (!_tcpDeviceConnectionService.TryReadFloatValues(registerAddress, out var result))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ModbusFloatSelector.TrySelectRangedFloat(result, minimum, maximum, out var byteOrder, out var value, out var matchCount))
|
||||
if (!ModbusFloatSelector.TrySelectRangedFloat(result, minimum, maximum, out var byteOrder, out var selectedValue, out var matchCount))
|
||||
{
|
||||
LogFloatDiagnostic(label, registerAddress, result, null, matchCount);
|
||||
return false;
|
||||
}
|
||||
|
||||
value = selectedValue;
|
||||
LogFloatDiagnostic(label, registerAddress, result, byteOrder, matchCount);
|
||||
text = NormalizeDisplayValue(value).ToString(format, CultureInfo.InvariantCulture);
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool IsStableCurrentTemperature(double value)
|
||||
{
|
||||
if (!ModbusFloatSelector.IsInRange(value, CurrentTemperatureMinimum, CurrentTemperatureMaximum))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return !_lastStableCurrentTemperature.HasValue
|
||||
|| value >= _lastStableCurrentTemperature.Value - CurrentTemperatureMaximumDropPerRefresh;
|
||||
}
|
||||
|
||||
private string ReadScaledInt16Text(ushort registerAddress, double scale, string format)
|
||||
{
|
||||
return _tcpDeviceConnectionService.TryReadInt16(registerAddress, out var rawValue)
|
||||
|
||||
@@ -202,23 +202,10 @@
|
||||
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:"
|
||||
Style="{StaticResource DataLabelStyle}" />
|
||||
<TextBlock Grid.Row="2"
|
||||
Grid.Column="6"
|
||||
Grid.Column="1"
|
||||
Text="{Binding CValueText}"
|
||||
Style="{StaticResource DataValueStyle}" />
|
||||
</Grid>
|
||||
|
||||
Reference in New Issue
Block a user