chroma synthesis模式

This commit is contained in:
“hsc”
2026-10-09 09:23:32 +08:00
parent c017efdb49
commit 8dd08fcc7a
3 changed files with 572 additions and 364 deletions
+160 -1
View File
@@ -97,6 +97,25 @@ namespace DeviceCommand.Devices
await SendAsync($"*D {valStr}{ScpiDelimiter}", ct);
}
/// <summary>
/// 退出远程状态、回到本地 (SYST:LOC,即 SYSTem:LOCal)
/// <para>设定后仪器回到 LOCAL 状态,前面板恢复可用。手册注明本命令僅可用於 RS-232 控制之下,
/// 经 Ethernet/USB 发送时仪器可能不响应</para>
/// </summary>
public virtual async Task 退出远程Async(CancellationToken ct = default)
{
await SendAsync($"SYST:LOC{ScpiDelimiter}", ct);
}
/// <summary>
/// 进入远程状态 (SYST:REM,即 SYSTem:REMote)
/// <para>设定后除 LOCAL/REMOTE 键外前面板其他键皆无效。手册注明本命令僅可用於 RS-232 控制之下</para>
/// </summary>
public virtual async Task 进入远程Async(CancellationToken ct = default)
{
await SendAsync($"SYST:REM{ScpiDelimiter}", ct);
}
#endregion
#region 2. 基础输出与耦合控制 (OUTPut 子系统)
@@ -509,7 +528,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 开启/关闭谐波量测 (SENSe:HARMonic)
/// <para>每次新的 Fetch/Measure 前必须先 ON,约需 3 秒得到结果;
/// <para>每次新的 Fetch
/// ./Measure 前必须先 ON,约需 3 秒得到结果;
/// 若要量测其他数据,须先设回 OFF。分相量测配合 INST:COUP NONE + INST:NSEL 逐相进行</para>
/// </summary>
/// <param name="isOn">true: 开启谐波量测(ON); false: 关闭(OFF)</param>
@@ -556,5 +576,144 @@ namespace DeviceCommand.Devices
#endregion
#region 8. SYNTHESIS 波形合成子系统 (SYNThesis 子系统 · 自定义谐波波形输出)
/// <summary>
/// 设定每个谐波阶的数据格式 (SOUR:SYNT:COMP)
/// <para>VALUE: 绝对值; PERCENT: 基频电压的百分率。后缀 1/2/3 对应三段可编程波形</para>
/// </summary>
/// <param name="compose">数据格式: VALUE1 | VALUE2 | VALUE3 | PERCENT1 | PERCENT2 | PERCENT3</param>
public virtual async Task 设置合成数据格式Async(string compose, CancellationToken ct = default)
{
await SendAsync($"SOUR:SYNT:COMP {compose}{ScpiDelimiter}", ct);
}
/// <summary>
/// 设定每个谐波阶的振幅 (SOUR:SYNT:AMPL)
/// <para>最大位阶数为 50;各阶取值上限随阶次递减(2~10 阶 0~90.0,11~20 阶 0~60.0,
/// 21~30 阶 0~30.0,31~40 阶 0~30.0,41~50 阶 0~15.0;PERCENT 格式对应减半)</para>
/// </summary>
/// <param name="amplitudes">各次谐波振幅序列(按阶次升序,逗号下发)</param>
public virtual async Task 设置合成谐波振幅Async(double[] amplitudes, CancellationToken ct = default)
{
string valStr = string.Join(",", Array.ConvertAll(amplitudes, v => v.ToString("0.###", CultureInfo.InvariantCulture)));
await SendAsync($"SOUR:SYNT:AMPL {valStr}{ScpiDelimiter}", ct);
}
/// <summary>
/// 设定每个谐波阶的相位角 (SOUR:SYNT:PHAS)
/// </summary>
/// <param name="phases">各次谐波相位角序列(单位: °,每个值 0.0 ~ 359.9)</param>
public virtual async Task 设置合成谐波相位Async(double[] phases, CancellationToken ct = default)
{
string valStr = string.Join(",", Array.ConvertAll(phases, v => v.ToString("0.#", CultureInfo.InvariantCulture)));
await SendAsync($"SOUR:SYNT:PHAS {valStr}{ScpiDelimiter}", ct);
}
/// <summary>
/// 设定 SYNTHESIS 模式的基波交流电压 (SOUR:SYNT:FUND)
/// </summary>
/// <param name="voltage">基波交流电压 (单位: V,0.0 ~ 300.0)</param>
public virtual async Task 设置合成基波电压Async(double voltage, CancellationToken ct = default)
{
string valStr = voltage.ToString("0.###", CultureInfo.InvariantCulture);
await SendAsync($"SOUR:SYNT:FUND {valStr}{ScpiDelimiter}", ct);
}
/// <summary>
/// 设定叠加于 SYNTHESIS 波形的直流电压 (SOUR:SYNT:DC)
/// </summary>
/// <param name="voltage">直流电压 (单位: V,-424.2 ~ 424.2)</param>
public virtual async Task 设置合成直流电压Async(double voltage, CancellationToken ct = default)
{
string valStr = voltage.ToString("0.###", CultureInfo.InvariantCulture);
await SendAsync($"SOUR:SYNT:DC {valStr}{ScpiDelimiter}", ct);
}
/// <summary>
/// 设定 SYNTHESIS 模式的基频 (SOUR:SYNT:FREQ)
/// </summary>
/// <param name="frequency">基频: 50 或 60 (Hz)</param>
public virtual async Task 设置合成基频Async(int frequency, CancellationToken ct = default)
{
await SendAsync($"SOUR:SYNT:FREQ {frequency}{ScpiDelimiter}", ct);
}
/// <summary>
/// 设定 SYNTHESIS 模式的起始相位角 (SOUR:SYNT:SPH)
/// </summary>
/// <param name="degree">起始相位角 (单位: °,0.0 ~ 359.9)</param>
public virtual async Task 设置合成起始相位Async(double degree, CancellationToken ct = default)
{
string valStr = degree.ToString("0.#", CultureInfo.InvariantCulture);
await SendAsync($"SOUR:SYNT:SPH {valStr}{ScpiDelimiter}", ct);
}
/// <summary>
/// 查询当前合成数据格式 (SOUR:SYNT:COMP?),用于下发后回读校验
/// </summary>
/// <returns>VALUE1|2|3 / PERCENT1|2|3</returns>
public virtual async Task<string> 查询合成数据格式Async(CancellationToken ct = default)
{
string resp = await WriteReadAsync($"SOUR:SYNT:COMP?{ScpiDelimiter}", ScpiDelimiter, ct);
return resp?.Trim() ?? string.Empty;
}
/// <summary>
/// 查询 SYNTHESIS 基波交流电压 (SOUR:SYNT:FUND?),用于下发后回读校验
/// </summary>
public virtual async Task<double> 查询合成基波电压Async(CancellationToken ct = default)
{
string resp = await WriteReadAsync($"SOUR:SYNT:FUND?{ScpiDelimiter}", ScpiDelimiter, ct);
return ExtractDouble(resp);
}
/// <summary>
/// 查询 SYNTHESIS 基频 (SOUR:SYNT:FREQ?),返回 50 或 60
/// </summary>
public virtual async Task<int> 查询合成基频Async(CancellationToken ct = default)
{
string resp = await WriteReadAsync($"SOUR:SYNT:FREQ?{ScpiDelimiter}", ScpiDelimiter, ct);
return (int)ExtractDouble(resp);
}
/// <summary>
/// 查询 SYNTHESIS 叠加直流电压 (SOUR:SYNT:DC?)
/// </summary>
public virtual async Task<double> 查询合成直流电压Async(CancellationToken ct = default)
{
string resp = await WriteReadAsync($"SOUR:SYNT:DC?{ScpiDelimiter}", ScpiDelimiter, ct);
return ExtractDouble(resp);
}
/// <summary>
/// 查询 SYNTHESIS 起始相位角 (SOUR:SYNT:SPH?)
/// </summary>
public virtual async Task<double> 查询合成起始相位Async(CancellationToken ct = default)
{
string resp = await WriteReadAsync($"SOUR:SYNT:SPH?{ScpiDelimiter}", ScpiDelimiter, ct);
return ExtractDouble(resp);
}
/// <summary>
/// 查询各谐波阶振幅数组 (SOUR:SYNT:AMPL?),首值对应 2 次谐波
/// </summary>
public virtual async Task<double[]> 查询合成谐波振幅Async(CancellationToken ct = default)
{
string resp = await WriteReadAsync($"SOUR:SYNT:AMPL?{ScpiDelimiter}", ScpiDelimiter, ct);
return ExtractDoubleArray(resp);
}
/// <summary>
/// 查询各谐波阶相位角数组 (SOUR:SYNT:PHAS?),首值对应 2 次谐波
/// </summary>
public virtual async Task<double[]> 查询合成谐波相位Async(CancellationToken ct = default)
{
string resp = await WriteReadAsync($"SOUR:SYNT:PHAS?{ScpiDelimiter}", ScpiDelimiter, ct);
return ExtractDoubleArray(resp);
}
#endregion
}
}