diff --git a/DeviceCommand/Devices/Chroma61800.cs b/DeviceCommand/Devices/Chroma61800.cs index 8679b07..aa93a10 100644 --- a/DeviceCommand/Devices/Chroma61800.cs +++ b/DeviceCommand/Devices/Chroma61800.cs @@ -228,6 +228,166 @@ namespace DeviceCommand.Devices } #endregion + #region 6. LIST 模式子系统 (LIST 子系统) + + /// + /// 设定列表功能的模态 (SOUR:LIST:COUP) + /// + /// 耦合模态: ALL | NONE + public virtual async Task 设置列表耦合模态Async(string coupling, CancellationToken ct = default) + { + await SendAsync($"SOUR:LIST:COUP {coupling}{ScpiDelimiter}", ct); + } + + /// + /// 设定列表功能的触发形态 (SOUR:LIST:TRIG) + /// + /// 触发形态: AUTO | MANUAL | EXCITE + public virtual async Task 设置列表触发形态Async(string triggerMode, CancellationToken ct = default) + { + await SendAsync($"SOUR:LIST:TRIG {triggerMode}{ScpiDelimiter}", ct); + } + + /// + /// 查询列表功能的有效序列数 (SOUR:LIST:POIN?) + /// + /// 取消令牌 + /// 有效序列数 (0 ~ 100) + public virtual async Task 查询列表有效序列数Async(CancellationToken ct = default) + { + string resp = await WriteReadAsync($"SOUR:LIST:POIN?{ScpiDelimiter}", ScpiDelimiter, ct); + return int.TryParse(resp.Trim(), out int val) ? val : 0; + } + + /// + /// 设定列表执行完成前的执行次数 (SOUR:LIST:COUN) + /// + /// 执行次数 (0 ~ 65535) + public virtual async Task 设置列表执行次数Async(int count, CancellationToken ct = default) + { + await SendAsync($"SOUR:LIST:COUN {count}{ScpiDelimiter}", ct); + } + + /// + /// 设定列表点的静止时间顺序 (SOUR:LIST:DWEL) + /// + /// 静止时间序列 (单位: ms,每个值 0 ~ 99999999.9) + public virtual async Task 设置列表静止时间顺序Async(double[] dwellTimes, CancellationToken ct = default) + { + string valStr = string.Join(",", Array.ConvertAll(dwellTimes, v => v.ToString("0.#", CultureInfo.InvariantCulture))); + await SendAsync($"SOUR:LIST:DWEL {valStr}{ScpiDelimiter}", ct); + } + + /// + /// 设定波形缓冲区列表点数的顺序 (SOUR:LIST:SHAP) + /// + /// 波形缓冲区顺序,每个元素为 A 或 B + public virtual async Task 设置列表波形顺序Async(string[] shapes, CancellationToken ct = default) + { + string valStr = string.Join(",", shapes); + await SendAsync($"SOUR:LIST:SHAP {valStr}{ScpiDelimiter}", ct); + } + + /// + /// 设定列表的时间基础 (SOUR:LIST:BASE) + /// + /// 时间基础: TIME | CYCLE + public virtual async Task 设置列表时间基础Async(string timeBase, CancellationToken ct = default) + { + await SendAsync($"SOUR:LIST:BASE {timeBase}{ScpiDelimiter}", ct); + } + + /// + /// 设定 AC 起始电压列表点数的顺序 (SOUR:LIST:VOLT:AC:STAR) + /// + /// AC 起始电压序列 (单位: V,每个值 0.0 ~ 300.0) + public virtual async Task 设置列表AC起始电压顺序Async(double[] voltages, CancellationToken ct = default) + { + string valStr = string.Join(",", Array.ConvertAll(voltages, v => v.ToString("0.###", CultureInfo.InvariantCulture))); + await SendAsync($"SOUR:LIST:VOLT:AC:STAR {valStr}{ScpiDelimiter}", ct); + } + + /// + /// 设定 AC 结束电压列表点数的顺序 (SOUR:LIST:VOLT:AC:END) + /// + /// AC 结束电压序列 (单位: V,每个值 0.0 ~ 300.0) + public virtual async Task 设置列表AC结束电压顺序Async(double[] voltages, CancellationToken ct = default) + { + string valStr = string.Join(",", Array.ConvertAll(voltages, v => v.ToString("0.###", CultureInfo.InvariantCulture))); + await SendAsync($"SOUR:LIST:VOLT:AC:END {valStr}{ScpiDelimiter}", ct); + } + + /// + /// 设定 DC 起始电压列表点数的顺序 (SOUR:LIST:VOLT:DC:STAR) + /// + /// DC 起始电压序列 (单位: V,每个值 -424.2 ~ 414.2) + public virtual async Task 设置列表DC起始电压顺序Async(double[] voltages, CancellationToken ct = default) + { + string valStr = string.Join(",", Array.ConvertAll(voltages, v => v.ToString("0.###", CultureInfo.InvariantCulture))); + await SendAsync($"SOUR:LIST:VOLT:DC:STAR {valStr}{ScpiDelimiter}", ct); + } + + /// + /// 设定 DC 结束电压列表点数的顺序 (SOUR:LIST:VOLT:DC:END) + /// + /// DC 结束电压序列 (单位: V,每个值 -424.2 ~ 414.2) + public virtual async Task 设置列表DC结束电压顺序Async(double[] voltages, CancellationToken ct = default) + { + string valStr = string.Join(",", Array.ConvertAll(voltages, v => v.ToString("0.###", CultureInfo.InvariantCulture))); + await SendAsync($"SOUR:LIST:VOLT:DC:END {valStr}{ScpiDelimiter}", ct); + } + + /// + /// 设定起始频率列表点数的顺序 (SOUR:LIST:FREQ:STAR) + /// + /// 起始频率序列 (单位: Hz,每个值 15.00 ~ 100.00) + public virtual async Task 设置列表起始频率顺序Async(double[] frequencies, CancellationToken ct = default) + { + string valStr = string.Join(",", Array.ConvertAll(frequencies, v => v.ToString("0.##", CultureInfo.InvariantCulture))); + await SendAsync($"SOUR:LIST:FREQ:STAR {valStr}{ScpiDelimiter}", ct); + } + + /// + /// 设定结束频率列表点数的顺序 (SOUR:LIST:FREQ:END) + /// + /// 结束频率序列 (单位: Hz,每个值 15.00 ~ 100.00) + public virtual async Task 设置列表结束频率顺序Async(double[] frequencies, CancellationToken ct = default) + { + string valStr = string.Join(",", Array.ConvertAll(frequencies, v => v.ToString("0.##", CultureInfo.InvariantCulture))); + await SendAsync($"SOUR:LIST:FREQ:END {valStr}{ScpiDelimiter}", ct); + } + + /// + /// 设定相位角度列表点数的顺序 (SOUR:LIST:DEGR) + /// + /// 相位角度序列 (单位: °,每个值 0.0 ~ 359.9) + public virtual async Task 设置列表相位角度顺序Async(double[] degrees, CancellationToken ct = default) + { + string valStr = string.Join(",", Array.ConvertAll(degrees, v => v.ToString("0.#", CultureInfo.InvariantCulture))); + await SendAsync($"SOUR:LIST:DEGR {valStr}{ScpiDelimiter}", ct); + } + + /// + /// 设定操作模态 (OUTP:MODE) + /// + /// 操作模态: FIXED | LIST | PULSE | STEP | SYNTH | INTERHAR + public virtual async Task 设置操作模态Async(string mode, CancellationToken ct = default) + { + await SendAsync($"OUTP:MODE {mode}{ScpiDelimiter}", ct); + } + + /// + /// 在 LIST 模态下设定执行状态 (TRIG) + /// 需先通过 将 OUTP:MODE 设为 LIST + /// + /// true: 开始执行 LIST, false: 停止 LIST + public virtual async Task 触发列表执行Async(bool isOn, CancellationToken ct = default) + { + string state = isOn ? "ON" : "OFF"; + await SendAsync($"TRIG {state}{ScpiDelimiter}", ct); + } + + #endregion } } \ No newline at end of file