diff --git a/DeviceCommand/Devices/Chroma61800.cs b/DeviceCommand/Devices/Chroma61800.cs
index f3a24fb..864d43c 100644
--- a/DeviceCommand/Devices/Chroma61800.cs
+++ b/DeviceCommand/Devices/Chroma61800.cs
@@ -350,6 +350,16 @@ namespace DeviceCommand.Devices
await SendAsync($"SOUR:LIST:COUN {count}{ScpiDelimiter}", ct);
}
+ ///
+ /// 查询当前相位上下文的列表执行次数 (SOUR:LIST:COUN?),用于下发后回读校验
+ ///
+ /// 执行次数 (0 = 无限循环);解析失败返回 -1
+ public virtual async Task 查询列表执行次数Async(CancellationToken ct = default)
+ {
+ string resp = await WriteReadAsync($"SOUR:LIST:COUN?{ScpiDelimiter}", ScpiDelimiter, ct);
+ return int.TryParse(resp.Trim(), out int val) ? val : -1;
+ }
+
///
/// 设定列表点的静止时间顺序 (SOUR:LIST:DWEL)
///
diff --git a/PowerAdaptabilityModule/ViewModels/PowerAdaptabilityViewModel.cs b/PowerAdaptabilityModule/ViewModels/PowerAdaptabilityViewModel.cs
index 761c20e..c761809 100644
--- a/PowerAdaptabilityModule/ViewModels/PowerAdaptabilityViewModel.cs
+++ b/PowerAdaptabilityModule/ViewModels/PowerAdaptabilityViewModel.cs
@@ -311,6 +311,7 @@ namespace PowerAdaptabilityModule.ViewModels
public ICommand ListStopCommand { get; }
public ICommand DownloadSynthesisCommand { get; }
public ICommand SynthStopCommand { get; }
+ public ICommand ResetSynthHarmonicsCommand { get; }
public ICommand LoadSynthPresetCommand { get; }
public ICommand SaveSynthPresetCommand { get; }
public ICommand DeleteSynthPresetCommand { get; }
@@ -445,21 +446,26 @@ namespace PowerAdaptabilityModule.ViewModels
await _dev!.清除错误队列Async(Ct()); // *CLS
await _dev.设置单三相模式Async(true, Ct()); // INST:PHAS THREE
await _dev.设置编辑方式Async("EACH", Ct()); // INST:EDIT EACH(逐相独立编辑)
- await _dev.设置列表执行次数Async(ListCount, Ct()); // LIST:COUN(0=无限循环)
- await _dev.设置列表触发形态Async(ListTrigger, Ct()); // LIST:TRIG
- await _dev.设置列表时间基础Async(ListTimeBase, Ct()); // LIST:BASE
for (int p = 0; p < 3; p++)
{
await _dev.选择相位Async(p + 1, Ct()); // INST:NSEL 1|2|3
+ // COUN/TRIG/BASE 在 EACH 逐相编辑模式下随相位上下文分相:必须在每相 NSEL 之后各发一次,
+ // 否则未选中的相 COUN 保持默认 0(无限循环),表现为“设了次数仍一直执行”
+ await _dev.设置列表执行次数Async(ListCount, Ct()); // LIST:COUN(0=无限循环)
+ await _dev.设置列表触发形态Async(ListTrigger, Ct()); // LIST:TRIG
+ await _dev.设置列表时间基础Async(ListTimeBase, Ct()); // LIST:BASE
await 下发单相序列Async(_phaseConfigs[p]); // FUNC:SHAP:A + LIST:xxx 序列
}
await _dev.延时Async(StartDelayMs, Ct()); // *D 200(等待仪器就绪)
await _dev.设置操作模态Async("LIST", Ct()); // OUTP:MODE LIST
+
+ // 回读校验:确认 COUN 真的写入(当前相位上下文=相3);读回 0 而设>0 即未生效
+ int counBack = await _dev.查询列表执行次数Async(Ct());
await _dev.触发列表执行Async(true, Ct()); // TRIG ON
- Log($"三相独立 LIST 已下发并启动(触发={ListTrigger} 次数={(ListCount == 0 ? "无限" : ListCount.ToString())} 时基={ListTimeBase})");
+ Log($"三相独立 LIST 已下发并启动(触发={ListTrigger} 次数={(ListCount == 0 ? "无限" : ListCount.ToString())} 时基={ListTimeBase};回读COUN={counBack})");
}));
ListStopCommand = new DelegateCommand(async () =>
@@ -502,6 +508,15 @@ namespace PowerAdaptabilityModule.ViewModels
SynthStopCommand = new DelegateCommand(async () =>
await Exec(async () => { await _dev!.触发列表执行Async(false, Ct()); Log("SYNTHESIS 已停止执行(TRIG OFF)"); }));
+ // 重置谐波:把振幅/相位两个序列框填成 50 个 0(仅改界面文本,需再点「下发并启动 SYNTH」才写入仪器)
+ ResetSynthHarmonicsCommand = new DelegateCommand(() =>
+ {
+ string zeros = string.Join(",", Enumerable.Repeat("0", 50));
+ SynthAmplitudeText = zeros;
+ SynthPhaseText = zeros;
+ Log("SYNTHESIS 谐波已重置:振幅/相位两框均填入 50 个 0;点「下发并启动 SYNTH」写入仪器");
+ });
+
// 合成波形的载入 / 保存 / 删除(与 LIST 测试项同机制,文件存于 D:\acp\源测试\合成波形)
LoadSynthPresetCommand = new DelegateCommand(LoadCurrentSynthPreset);
SaveSynthPresetCommand = new DelegateCommand(SaveCurrentSynthPreset);
diff --git a/PowerAdaptabilityModule/Views/PowerAdaptabilityView.xaml b/PowerAdaptabilityModule/Views/PowerAdaptabilityView.xaml
index 25cbdff..7a7e361 100644
--- a/PowerAdaptabilityModule/Views/PowerAdaptabilityView.xaml
+++ b/PowerAdaptabilityModule/Views/PowerAdaptabilityView.xaml
@@ -407,6 +407,9 @@
Background="#388E3C" Foreground="White" />
+