using Common.Attributes; using DeviceCommand.Base; using System; using System.Globalization; using System.Threading; using System.Threading.Tasks; namespace DeviceCommand.Device { [ADPCommand] public class IT7800E : Tcp { // 根据通用 SCPI 指令规范,使用换行符 (ASCII 字符 LF,即 \n) 作为标准结束符 private const string ScpiDelimiter = "\n"; /// /// 构造函数:传入 一次性初始化 IT7800E 交直流电源通信参数。 /// public IT7800E(TcpConfig config) : base(config) { } #region 1. IEEE 488.2 公共命令 /// /// 清除状态命令。清除标准事件状态寄存器和错误队列 /// public virtual async Task 清除错误队列和状态字节(CancellationToken ct = default) { await SendAsync($"*CLS{ScpiDelimiter}", ct); } /// /// 读取电源识别字符串(制造商、产品型号、系统 SN、软件版本号) /// public virtual async Task 查询设备标识(CancellationToken ct = default) { return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct); // } /// /// 复位命令。使电源恢复到出厂默认预定义安全值 /// public virtual async Task 重置设备(CancellationToken ct = default) { await SendAsync($"*RST{ScpiDelimiter}", ct); // } /// /// 读取状态字节寄存器 /// public virtual async Task 读取状态字节(CancellationToken ct = default) { return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct); // } #endregion #region 2. 耦合模式与拉载开关控制 /// /// 设置电源输出源的电气模式/工作耦合模式 /// (AC: 纯交流, DC: 纯直流, ACDC: 交直流混合模式) /// public virtual async Task 设置电源模式(string 模式, CancellationToken ct = default) { string modeUpper = 模式.ToUpper(); if (modeUpper != "AC" && modeUpper != "DC" && modeUpper != "ACDC") throw new ArgumentException("工作模式只能为 AC, DC, 或 ACDC"); await SendAsync($":SOURce:MODE {modeUpper}{ScpiDelimiter}", ct); } /// /// 查询电源当前的工作模式 /// public virtual async Task 查询电源模式(CancellationToken ct = default) { return await WriteReadAsync($":SOURce:MODE?{ScpiDelimiter}", ScpiDelimiter, ct); } /// /// 控制电源的主输出开关 (True: 开启输出, False: 关闭输出) /// public virtual async Task 设置DC输出(bool 开启, CancellationToken ct = default) { // 注意:虽然方法名叫设置DC输出,但对交直流电源它代表通用的主输出控制(Main Output) string 参数 = 开启 ? "ON" : "OFF"; await SendAsync($":OUTPut {参数}{ScpiDelimiter}", ct); } /// /// 查询电源当前主输出开关状态 (返回 ON 或 OFF) /// public virtual async Task 查询DC输出状态(CancellationToken ct = default) { return await WriteReadAsync($":OUTPut?{ScpiDelimiter}", ScpiDelimiter, ct); } #endregion #region 3. 设定输出参数设置 (AC 电压/频率/DC 电压) /// /// 设定交流(AC)模式下的电压有效值 (单位: V) /// public virtual async Task 设置交流电压(double 电压, CancellationToken ct = default) { string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:VOLTage:AC {0:F2}{1}", 电压, ScpiDelimiter); await SendAsync(cmd, ct); } /// /// 设定直流(DC)模式或交直流(AC+DC)模式下的直流偏置电压值 (单位: V) /// public virtual async Task 设置直流电压(double 电压, CancellationToken ct = default) { string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:VOLTage:DC {0:F2}{1}", 电压, ScpiDelimiter); await SendAsync(cmd, ct); } /// /// 设定电源交流输出的频率值 (单位: Hz) /// public virtual async Task 设置频率(double 频率, CancellationToken ct = default) { string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:FREQuency {0:F2}{1}", 频率, ScpiDelimiter); await SendAsync(cmd, ct); } /// /// 设置硬件交流输出的有效值限流门限 (单位: A) /// public virtual async Task 设置电流(double 电流, CancellationToken ct = default) { string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:CURRent {0:F3}{1}", 电流, ScpiDelimiter); await SendAsync(cmd, ct); } #endregion #region 4. 测量与数据回测(高频数据轮询核心) /// /// 查询通道实时测得的电压有效值(RMS,支持 AC 或 DC 模式下的回测)(单位: V) /// public virtual async Task 查询实际电压(CancellationToken ct = default) { return await WriteReadAsync($":MEASure:VOLTage?{ScpiDelimiter}", ScpiDelimiter, ct); } /// /// 查询通道实时测得的电流有效值(RMS)(单位: A) /// public virtual async Task 查询实际电流(CancellationToken ct = default) { return await WriteReadAsync($":MEASure:CURRent?{ScpiDelimiter}", ScpiDelimiter, ct); } /// /// 查询通道实时测得的有功功率值 (单位: W) /// public virtual async Task 查询实际功率(CancellationToken ct = default) { return await WriteReadAsync($":MEASure:POWer?{ScpiDelimiter}", ScpiDelimiter, ct); } /// /// 查询通道实时测得的视在功率 (单位: VA) /// public virtual async Task 查询视在功率(CancellationToken ct = default) { return await WriteReadAsync($":MEASure:POWer:APParent?{ScpiDelimiter}", ScpiDelimiter, ct); } /// /// 查询通道实时测得的输出频率 (单位: Hz) /// public virtual async Task 查询实际频率(CancellationToken ct = default) { return await WriteReadAsync($":MEASure:FREQuency?{ScpiDelimiter}", ScpiDelimiter, ct); } /// /// 查询当前的功率因数 (PF) /// public virtual async Task 查询功率因数(CancellationToken ct = default) { return await WriteReadAsync($":MEASure:PF?{ScpiDelimiter}", ScpiDelimiter, ct); } #endregion #region 5. 保护参数设置与系统监控 /// /// 设置电源的过流保护(OCP)值 (单位: A) /// public virtual async Task 设置过流保护_OCP(double 电流, CancellationToken ct = default) { string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:CURRent:PROTection {0:F3}{1}", 电流, ScpiDelimiter); await SendAsync(cmd, ct); } /// /// 设置电源的过压保护(OVP)值 (单位: V) /// public virtual async Task 设置过压保护_OVP(double 电压, CancellationToken ct = default) { string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:VOLTage:PROTection {0:F2}{1}", 电压, ScpiDelimiter); await SendAsync(cmd, ct); } /// /// 读取系统的出错记录信息(获取上一条未处理的错误码) /// public virtual async Task 查询错误信息(CancellationToken ct = default) { return await WriteReadAsync($":SYSTem:ERRor?{ScpiDelimiter}", ScpiDelimiter, ct); } /// /// 切换仪器至计算机控制的远程控制模式 (锁定前面板按键) /// public virtual async Task 切换远程控制模式(CancellationToken ct = default) { await SendAsync($":SYSTem:REMote{ScpiDelimiter}", ct); } /// /// 切换仪器至前面板操作的本地模式 (前面板解锁) /// public virtual async Task 切换本地控制模式(CancellationToken ct = default) { await SendAsync($":SYSTem:LOCal{ScpiDelimiter}", ct); } /// /// 清除仪器当前的保护状态(例如触发 OCP/OVP 被锁死后进行软件解锁) /// public virtual async Task 清除保护告警(CancellationToken ct = default) { await SendAsync($":PROTection:CLEar{ScpiDelimiter}", ct); } #endregion } }