2026-06-30 12:10:29 +08:00
|
|
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
|
|
|
|
|
|
|
|
|
|
namespace SSPCTester.Logic.Models;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>基础测试单通道结果。</summary>
|
|
|
|
|
|
public partial class ChannelResult : ObservableObject
|
|
|
|
|
|
{
|
|
|
|
|
|
[ObservableProperty] private int _channel;
|
|
|
|
|
|
[ObservableProperty] private double _voltageOn;
|
|
|
|
|
|
[ObservableProperty] private double _currentOn;
|
|
|
|
|
|
[ObservableProperty] private double _voltageOff;
|
|
|
|
|
|
[ObservableProperty] private TestStatus _status = TestStatus.Untested;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>曲线测试单通道结果(覆盖指标 1.1-1.6)。</summary>
|
|
|
|
|
|
public partial class CurveResultRow : ObservableObject
|
|
|
|
|
|
{
|
|
|
|
|
|
[ObservableProperty] private int _channel;
|
|
|
|
|
|
/// <summary>开启时间(ms)。</summary>
|
|
|
|
|
|
[ObservableProperty] private double _onTimeMs;
|
|
|
|
|
|
/// <summary>上升时间(ms)。</summary>
|
|
|
|
|
|
[ObservableProperty] private double _riseTimeMs;
|
|
|
|
|
|
/// <summary>关闭时间(ms)。</summary>
|
|
|
|
|
|
[ObservableProperty] private double _offTimeMs;
|
|
|
|
|
|
/// <summary>下降时间(ms)。</summary>
|
|
|
|
|
|
[ObservableProperty] private double _fallTimeMs;
|
|
|
|
|
|
[ObservableProperty] private string? _risingWaveformPath;
|
|
|
|
|
|
[ObservableProperty] private string? _fallingWaveformPath;
|
2026-07-01 20:04:27 +08:00
|
|
|
|
/// <summary>曲线显示起点(ms,null 表示全曲线)。</summary>
|
|
|
|
|
|
[ObservableProperty] private double? _viewStartMs;
|
|
|
|
|
|
/// <summary>曲线显示终点(ms,null 表示全曲线)。</summary>
|
|
|
|
|
|
[ObservableProperty] private double? _viewEndMs;
|
2026-06-30 12:10:29 +08:00
|
|
|
|
[ObservableProperty] private double? _risingViewStartMs;
|
|
|
|
|
|
[ObservableProperty] private double? _risingViewEndMs;
|
|
|
|
|
|
[ObservableProperty] private double? _fallingViewStartMs;
|
|
|
|
|
|
[ObservableProperty] private double? _fallingViewEndMs;
|
|
|
|
|
|
[ObservableProperty] private TestStatus _status = TestStatus.Untested;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>曲线测试阈值(合格判定)。</summary>
|
|
|
|
|
|
public sealed class CurveThresholds
|
|
|
|
|
|
{
|
|
|
|
|
|
public double MaxOnTimeMs { get; set; } = 5.0;
|
|
|
|
|
|
public double MaxRiseTimeMs { get; set; } = 3.0;
|
|
|
|
|
|
public double MaxOffTimeMs { get; set; } = 5.0;
|
|
|
|
|
|
public double MaxFallTimeMs { get; set; } = 3.0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>功率损耗单通道结果(覆盖指标 1.7-1.10)。</summary>
|
|
|
|
|
|
public partial class PowerLossRow : ObservableObject
|
|
|
|
|
|
{
|
|
|
|
|
|
[ObservableProperty] private int _channel;
|
|
|
|
|
|
[ObservableProperty] private double _vin;
|
|
|
|
|
|
[ObservableProperty] private double _iin;
|
|
|
|
|
|
[ObservableProperty] private double _vout;
|
|
|
|
|
|
[ObservableProperty] private double _iout;
|
|
|
|
|
|
[ObservableProperty] private double? _measuredPowerOut;
|
|
|
|
|
|
[ObservableProperty] private TestStatus _status = TestStatus.Untested;
|
|
|
|
|
|
|
|
|
|
|
|
public double VoltageDrop => Vin - Vout;
|
|
|
|
|
|
public double PowerIn => Vin * Iin;
|
|
|
|
|
|
public double CalculatedPowerOut => Vout * Iout;
|
2026-07-02 01:50:02 +08:00
|
|
|
|
public double PowerOut => CalculatedPowerOut;
|
2026-06-30 12:10:29 +08:00
|
|
|
|
public double PowerLossW => PowerIn - PowerOut;
|
|
|
|
|
|
public double PowerLossPct => PowerIn > 0 ? (PowerIn - CalculatedPowerOut) / PowerIn * 100.0 : 0;
|
|
|
|
|
|
public double EfficiencyRatio => PowerIn > 0 ? CalculatedPowerOut / PowerIn : 0;
|
|
|
|
|
|
public double EfficiencyPct => PowerIn > 0 ? PowerOut / PowerIn * 100.0 : 0;
|
|
|
|
|
|
public double OutputPower => PowerOut;
|
|
|
|
|
|
|
|
|
|
|
|
partial void OnVinChanged(double value) => RaiseDerived();
|
|
|
|
|
|
partial void OnIinChanged(double value) => RaiseDerived();
|
|
|
|
|
|
partial void OnVoutChanged(double value) => RaiseDerived();
|
|
|
|
|
|
partial void OnIoutChanged(double value) => RaiseDerived();
|
|
|
|
|
|
partial void OnMeasuredPowerOutChanged(double? value) => RaiseDerived();
|
|
|
|
|
|
private void RaiseDerived()
|
|
|
|
|
|
{
|
|
|
|
|
|
OnPropertyChanged(nameof(VoltageDrop));
|
|
|
|
|
|
OnPropertyChanged(nameof(PowerIn));
|
|
|
|
|
|
OnPropertyChanged(nameof(PowerOut));
|
|
|
|
|
|
OnPropertyChanged(nameof(CalculatedPowerOut));
|
|
|
|
|
|
OnPropertyChanged(nameof(PowerLossW));
|
|
|
|
|
|
OnPropertyChanged(nameof(PowerLossPct));
|
|
|
|
|
|
OnPropertyChanged(nameof(EfficiencyRatio));
|
|
|
|
|
|
OnPropertyChanged(nameof(EfficiencyPct));
|
|
|
|
|
|
OnPropertyChanged(nameof(OutputPower));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>保护功能单项结果。</summary>
|
|
|
|
|
|
public partial class ProtectRow : ObservableObject
|
|
|
|
|
|
{
|
|
|
|
|
|
[ObservableProperty] private string _protectType = "";
|
|
|
|
|
|
[ObservableProperty] private string _trigger = "";
|
|
|
|
|
|
[ObservableProperty] private double _tripTimeMs;
|
|
|
|
|
|
[ObservableProperty] private TestStatus _status = TestStatus.Untested;
|
|
|
|
|
|
}
|