using Common.Attributes; using DeviceCommand.Base; using System.Globalization; using System.Threading; using System.Threading.Tasks; namespace DeviceCommand.Device { [BOBCommand] public class SQ0030G1D : Tcp { public SQ0030G1D(string ip, int port, int sendTimeout, int receiveTimeout) { ConfigureDevice(ip, port, sendTimeout, receiveTimeout); } public SQ0030G1D() { } // ===================== 基础封装 ===================== protected virtual Task 写命令(string cmd, CancellationToken ct = default) => SendAsync(cmd + "\n", ct); protected virtual async Task 查询命令(string cmd, CancellationToken ct = default) { await SendAsync(cmd + "\n", ct); return await ReadAsync(ct: ct); } // ===================== 1. 基础控制 ===================== public async Task 启动电源() { await 写命令($"OUTPut 1\n"); } public async Task 关闭电源() { await 写命令($"OUTPut 0\n"); } public virtual Task 获取设备ID(CancellationToken ct = default) => 查询命令("*IDN?", ct); public virtual Task 重置设备(CancellationToken ct = default) => 写命令("*RST", ct); public virtual Task 设置远程控制(CancellationToken ct = default) => 写命令("SYST:REM", ct); public virtual Task 设置本地控制(CancellationToken ct = default) => 写命令("SYST:LOC", ct); public virtual Task 设置输出状态(bool on, CancellationToken ct = default) => 写命令($"OUTP:STAT {(on ? "ON" : "OFF")}", ct); public virtual async Task 获取输出状态(CancellationToken ct = default) => (await 查询命令("OUTP:STAT?", ct)).Trim().ToUpper() == "ON"; // ===================== 2. 电压/频率控制 ===================== public virtual Task 设置输出电压(double value, CancellationToken ct = default) => 写命令($"VOLT {value}", ct); public virtual async Task 获取输出电压(CancellationToken ct = default) => double.Parse((await 查询命令("VOLT?", ct)).Replace("V", ""), CultureInfo.InvariantCulture); public virtual Task 设置输出频率(double freq, CancellationToken ct = default) => 写命令($"FREQ {freq}", ct); public virtual async Task 获取输出频率(CancellationToken ct = default) => double.Parse((await 查询命令("FREQ?", ct)).Replace("Hz", ""), CultureInfo.InvariantCulture); // ===================== 3. 保护 ===================== public virtual Task 设置过压保护(double v, CancellationToken ct = default) => 写命令($"VOLT:PROT {v}", ct); public virtual async Task 获取过压保护(CancellationToken ct = default) => double.Parse((await 查询命令("VOLT:PROT?", ct)).Replace("V", ""), CultureInfo.InvariantCulture); public virtual Task 设置过流保护(double a, CancellationToken ct = default) => 写命令($"CURR:PROT {a}", ct); public virtual async Task 获取过流保护(CancellationToken ct = default) => double.Parse((await 查询命令("CURR:PROT?", ct)).Replace("A", ""), CultureInfo.InvariantCulture); public virtual Task 清除保护(CancellationToken ct = default) => 写命令("SYST:PROT:CLE", ct); // ===================== 4. 测量 ===================== public virtual async Task 测量输出电压(CancellationToken ct = default) => double.Parse((await 查询命令("MEAS:VOLT?", ct)).Replace("V", ""), CultureInfo.InvariantCulture); public virtual async Task 测量输出电流(CancellationToken ct = default) => double.Parse((await 查询命令("MEAS:CURR?", ct)).Replace("A", ""), CultureInfo.InvariantCulture); public virtual async Task 测量输出功率(CancellationToken ct = default) => double.Parse((await 查询命令("MEAS:POW?", ct)).Replace("W", ""), CultureInfo.InvariantCulture); public virtual async Task<(double volt, double curr, double pow)> 测量所有参数(CancellationToken ct = default) { var parts = (await 查询命令("MEAS:ARR?", ct)).Split(','); return ( double.Parse(parts[0].Replace("V", ""), CultureInfo.InvariantCulture), double.Parse(parts[1].Replace("A", ""), CultureInfo.InvariantCulture), double.Parse(parts[2].Replace("W", ""), CultureInfo.InvariantCulture) ); } } }