From d84f2a874b67542f134735f291a28576aa50874b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chsc=E2=80=9D?= <“huangsucan@kaiyili-lab.com”> Date: Mon, 12 Oct 2026 08:49:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BA=90=E9=80=82=E5=BA=94=E6=80=A7=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DeviceCommand/Devices/Chroma61800.cs | 10 ++++++++ .../ViewModels/PowerAdaptabilityViewModel.cs | 23 +++++++++++++++---- .../Views/PowerAdaptabilityView.xaml | 3 +++ 3 files changed, 32 insertions(+), 4 deletions(-) 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" />