现场程序优化

This commit is contained in:
2026-08-12 18:16:50 +08:00
parent b43090e56e
commit 30f5f6f8d6
16 changed files with 1020 additions and 26 deletions
+54 -1
View File
@@ -27,6 +27,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 清除标准事件状态寄存器和错误队列
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
@@ -34,6 +35,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询错误信息
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>错误代码和描述信息</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:ERRor?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -41,6 +44,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取示波器识别字符串(制造商、型号、序列号、固件版本)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设备标识字符串(制造商, 型号, 序列号, 固件版本)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -49,6 +54,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 复位命令。使示波器恢复到默认的出厂设置
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct);
@@ -57,6 +63,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询先前操作是否完成。
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>true: 操作已完成, false: 操作仍在执行中</returns>
public virtual async Task<bool> _OPC(CancellationToken ct = default)
{
string res = await WriteReadAsync($"*OPC?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -70,6 +78,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 控制示波器开始捕获波形
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task _RUN(CancellationToken ct = default)
{
await SendAsync($":TRIGger:RUN{ScpiDelimiter}", ct);
@@ -78,6 +87,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 停止捕获波形
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task _STOP(CancellationToken ct = default)
{
await SendAsync($"TRIGger:STOP{ScpiDelimiter}", ct);
@@ -86,6 +96,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 强制示波器进入单次触发捕获模式
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task _SINGLE(CancellationToken ct = default)
{
await SendAsync($":TRIGger:MODE SINGle{ScpiDelimiter}", ct);
@@ -94,6 +105,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 触发一次波形采样
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"::TRIGger:MODE FTRIG{ScpiDelimiter}", ct);
@@ -136,6 +148,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 开启或关闭指定的模拟通道 (符合手册 57 页规范)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="enable">true: 开启通道, false: 关闭通道</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int channel, bool enable, CancellationToken ct = default)
{
string state = enable ? "ON" : "OFF";
@@ -145,6 +160,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置指定通道的垂直电压档位 (Volts/Div)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="volts">电压档位 (Volts/Div)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int channel, double volts, CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "C{0}:VDIV {1:F4}{2}", channel, volts, ScpiDelimiter);
@@ -154,6 +172,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道当前的电压档位
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="ct">取消令牌</param>
/// <returns>当前电压档位值 (Volts/Div)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
return await WriteReadAsync($"C{channel}:VDIV?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -162,6 +183,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置指定通道的垂直偏移量 (Offset)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="offset">垂直偏移量 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int channel, double offset, CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "C{0}:OFST {1:F4}{2}", channel, offset, ScpiDelimiter);
@@ -178,6 +202,13 @@ namespace DeviceCommand.Devices
/// <summary>1MΩ 阻抗</summary>
ONEM
}
/// <summary>
/// 设置指定通道的输入阻抗类型
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="impedance">阻抗类型枚举 (FIFty: 50Ω, ONEM: 1MΩ)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int channel, ImpedanceType impedance, CancellationToken ct = default)
{
// 例如发送:C1:IMPedance FIFty\n 或 C1:IMPedance ONEM\n
@@ -192,6 +223,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置示波器的水平时基档位 (Time/Div)
/// </summary>
/// <param name="scale">水平时基档位 (Time/Div)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double scale, CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "TDIV {0:E6}{1}", scale, ScpiDelimiter);
@@ -201,6 +234,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置示波器的触发水平延迟位置 (Horizontal Delay)
/// </summary>
/// <param name="delay">水平延迟位置 (单位: s)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double delay, CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "TRDL {0:E6}{1}", delay, ScpiDelimiter);
@@ -214,6 +249,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置边沿触发的电平值 (Trigger Level)
/// </summary>
/// <param name="level">触发电平值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double level, CancellationToken ct = default)
{
@@ -224,6 +261,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置边沿触发的触发源 (例如: C1, C2, C3, C4, EX, LINE)
/// </summary>
/// <param name="source">触发源通道标识 (例如: "C1", "C2", "EX", "LINE")</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (string source, CancellationToken ct = default)
{
await SendAsync($"TRSE EDGE,SR,{source.ToUpper()}{ScpiDelimiter}", ct);
@@ -236,6 +275,10 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道自动测量项的当前实时测量数值
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="paramName">测量参数名称 (如 "PKPK", "FREQ", "RMS" 等)</param>
/// <param name="ct">取消令牌</param>
/// <returns>测量参数的实时数值字符串</returns>
public virtual async Task<string> (int channel, string paramName, CancellationToken ct = default)
{
string query = string.Format(CultureInfo.InvariantCulture, "C{0}:PAVA? {1}{2}", channel, paramName.ToUpper(), ScpiDelimiter);
@@ -245,6 +288,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的电压峰峰值 (Vpp)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="ct">取消令牌</param>
/// <returns>电压峰峰值 (Vpp)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
return await (channel, "PKPK", ct);
@@ -253,6 +299,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的频率值 (Frequency)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="ct">取消令牌</param>
/// <returns>频率值 (单位: Hz)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
return await (channel, "FREQ", ct);
@@ -261,6 +310,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的真均方根电压值 (Vrms)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="ct">取消令牌</param>
/// <returns>真均方根电压值 (Vrms)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
return await (channel, "RMS", ct);
@@ -269,6 +321,7 @@ namespace DeviceCommand.Devices
#endregion
#region 7.
/// <summary>
/// 【一键获取并保存截图】
/// 自动下发 :PRINt? PNG 指令,接收示波器返回的纯 PNG 二进制流并直接保存到指定路径。
/// </summary>
@@ -323,4 +376,4 @@ namespace DeviceCommand.Devices
#endregion
}
}
}