2026-06-30 12:10:29 +08:00
|
|
|
|
using SSPCTester.Logic.Models;
|
|
|
|
|
|
|
|
|
|
|
|
namespace SSPCTester.Logic.Testing;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>基础测试模块:24 路依次开 → 读值 → 关 → 校验归零。</summary>
|
|
|
|
|
|
public sealed class BasicTest : ITestModule
|
|
|
|
|
|
{
|
|
|
|
|
|
public string Name => "基础测试";
|
|
|
|
|
|
|
|
|
|
|
|
public async Task RunAsync(TestContext ctx, IProgress<TestProgress> progress, CancellationToken ct)
|
|
|
|
|
|
{
|
|
|
|
|
|
int n = ctx.Sspc.ChannelCount;
|
|
|
|
|
|
if (!ctx.Sspc.IsConnected)
|
|
|
|
|
|
await ctx.Sspc.ConnectAsync(ct).ConfigureAwait(false);
|
|
|
|
|
|
ctx.Project.BasicResults.Clear();
|
|
|
|
|
|
for (int ch = 1; ch <= n; ch++)
|
|
|
|
|
|
{
|
|
|
|
|
|
ct.ThrowIfCancellationRequested();
|
|
|
|
|
|
var row = new ChannelResult { Channel = ch, Status = TestStatus.Running };
|
|
|
|
|
|
ctx.Project.BasicResults.Add(row);
|
|
|
|
|
|
progress.Report(new TestProgress { ModuleName = Name, Step = ch - 1, TotalSteps = n, Message = $"测试通道 CH{ch}" });
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
await ctx.Sspc.TurnOnAsync(ch, ct).ConfigureAwait(false);
|
|
|
|
|
|
await Task.Delay(BasicTestCriteria.SwitchSettleDelayMs, ct).ConfigureAwait(false);
|
|
|
|
|
|
var on = await ctx.Sspc.ReadMeasurementAsync(ch, ct).ConfigureAwait(false);
|
|
|
|
|
|
row.VoltageOn = on.Voltage;
|
|
|
|
|
|
row.CurrentOn = Math.Abs(on.Current);
|
2026-07-03 14:16:15 +08:00
|
|
|
|
row.DisplayVoltage = row.VoltageOn;
|
|
|
|
|
|
row.DisplayCurrent = row.CurrentOn;
|
|
|
|
|
|
bool onOk = BasicTestCriteria.IsOnState(row.VoltageOn, row.CurrentOn);
|
2026-06-30 12:10:29 +08:00
|
|
|
|
|
|
|
|
|
|
await ctx.Sspc.TurnOffAsync(ch, ct).ConfigureAwait(false);
|
|
|
|
|
|
await Task.Delay(BasicTestCriteria.SwitchSettleDelayMs, ct).ConfigureAwait(false);
|
|
|
|
|
|
var offResult = await BasicTestCriteria
|
|
|
|
|
|
.WaitForStableOffAsync(ctx.Sspc, ch, ct)
|
|
|
|
|
|
.ConfigureAwait(false);
|
|
|
|
|
|
row.VoltageOff = offResult.Measurement.Voltage;
|
2026-07-03 14:16:15 +08:00
|
|
|
|
row.CurrentOff = Math.Abs(offResult.Measurement.Current);
|
|
|
|
|
|
row.DisplayVoltage = row.VoltageOff;
|
|
|
|
|
|
row.DisplayCurrent = row.CurrentOff;
|
|
|
|
|
|
row.Status = onOk && offResult.IsStableOff
|
2026-06-30 12:10:29 +08:00
|
|
|
|
? TestStatus.Pass : TestStatus.Fail;
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
row.Status = TestStatus.Fail;
|
|
|
|
|
|
try { await ctx.Sspc.TurnOffAsync(ch, CancellationToken.None).ConfigureAwait(false); } catch { }
|
|
|
|
|
|
progress.Report(new TestProgress
|
|
|
|
|
|
{
|
|
|
|
|
|
ModuleName = Name,
|
|
|
|
|
|
Step = ch,
|
|
|
|
|
|
TotalSteps = n,
|
|
|
|
|
|
StepStatus = row.Status,
|
|
|
|
|
|
Message = $"CH{ch} 通讯失败:{ex.Message}"
|
|
|
|
|
|
});
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
progress.Report(new TestProgress { ModuleName = Name, Step = ch, TotalSteps = n, StepStatus = row.Status, Message = $"CH{ch} {row.Status}" });
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|