using Common.Attributes; using DeviceCommand.Base; using System; using System.Threading; using System.Threading.Tasks; // 根据您的项目实际路径保留枚举的引用 // using 通讯驱动Base.枚举; namespace DeviceCommand.Devices { public enum S7200负载模式_枚举 { CC, CV, CP, CR, CVCC, CRCC, CVCR, AUTO } public enum S7200直流源模式_枚举 { VOLTage, CURRent, BATTest, BATSim, SOLar, EN50530, LIST, UDW, SQUare, TRIangle, SINusoid, DIN40839_12V, DIN40839_24V, IS016750_SHORTDROP_12V, IS016750_SHORTDROP_24V, IS016750_RESETTEST, IS016750_STARTINGPROFILE_12V_1, IS016750_STARTINGPROFILE_12V_2, IS016750_STARTINGPROFILE_12V_3, IS016750_STARTINGPROFILE_12V_4, IS016750_STARTINGPROFILE_24V_1, IS016750_STARTINGPROFILE_24V_2, IS016750_STARTINGPROFILE_24V_3, IS016750_LOADDUMP_TESTA_12V, IS016750_LOADDUMP_TESTA_24V, IS016750_LOADDUMP_TESTB_12V, IS016750_LOADDUMP_TESTB_24V, LV123_HV_1, LV123_HV_2A, LV123_HV_2B, LV123_HV_3 } public enum S7200工作模式_枚举 { 电源模式, 负载模式, } /// /// 高压直流源载一体机 (适配 IT6000C SCPI指令集) /// [ACPCommand] public class S7200 : Tcp { // SCPI 指令结束符 private const string ScpiDelimiter = "\n"; #region 设置 public async Task 设置为远程模式(CancellationToken ct = default) { await SendAsync($"SYSTem:REMote{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置电源工作模式(S7200工作模式_枚举 开关, CancellationToken ct = default) { // IT6000C 为双向无缝切换,底层硬件无需显式发送源载切换指令 // 保留此方法仅为兼容您原有上位机的工步调用流程,直接返回即可 await Task.CompletedTask; } public async Task 设置直流源工作模式(S7200直流源模式_枚举 模式, CancellationToken ct = default) { // 原指令: MODE {模式} -> 现 IT6000C 指令: FUNCtion {模式} (如 VOLTage / CURRent)[cite: 1] // 若枚举 ToString() 后不匹配,建议在此处加 Switch 转换 await SendAsync($"FUNCtion {模式}{ScpiDelimiter}", ct); } public async Task 设置负载工作模式(S7200负载模式_枚举 模式, CancellationToken ct = default) { // IT6000C 负载控制通过负向边界实现。若是想开启纯电阻模式,可调用 SINK:RESistance:STATe ON[cite: 1] await Task.CompletedTask; } public async Task 设置通道开关(bool 开关, CancellationToken ct = default) { await SendAsync($"OUTPut {(开关 ? 1 : 0)}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置CC模式电流(double 电流, CancellationToken ct = default) { await SendAsync($"CURRent {电流}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置CC电压H(double 电流, CancellationToken ct = default) // 沿用原参数名“电流”,实际是设定电压上限 { await SendAsync($"VOLTage:LIMit:POSitive {电流}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置CC电压L(double 电流, CancellationToken ct = default) // 沿用原参数名“电流”,实际是设定电压下限 { await SendAsync($"VOLTage:LIMit:NEGative {电流}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置CV正向电流(double 电流, CancellationToken ct = default) { await SendAsync($"CURRent:LIMit:POSitive {电流}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置CV反向电流(double 电流, CancellationToken ct = default) { // 提醒: 此处传入的参数如果是正数,建议在外部或此处转换为负值,因为载模式限制需要负数[cite: 1] await SendAsync($"CURRent:LIMit:NEGative {电流}{ScpiDelimiter}", ct); } public async Task 设置正向功率阈值(double 功率, CancellationToken ct = default) { await SendAsync($"POWer:LIMit:POSitive {功率}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置反向功率阈值(double 功率, CancellationToken ct = default) { // 提醒: 此处传入的参数必须为负数[cite: 1] await SendAsync($"POWer:LIMit:NEGative {功率}{ScpiDelimiter}", ct); } public async Task 设置电压(double 电压, CancellationToken ct = default) { await SendAsync($"VOLTage {电压}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 清除保护状态(CancellationToken ct = default) { await SendAsync($"OUTPut:PROTection:CLEar{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置OCP开关(bool v, CancellationToken ct = default) { await SendAsync($"CURRent:PROTection:STATe {(v ? 1 : 0)}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置OVP开关(bool v, CancellationToken ct = default) { await SendAsync($"VOLTage:PROTection:STATe {(v ? 1 : 0)}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置电压保护OVP电压(double oVP电压, CancellationToken ct = default) { await SendAsync($"VOLTage:PROTection {oVP电压}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置电流保护OCP电流(double oCP电流, CancellationToken ct = default) { await SendAsync($"CURRent:PROTection {oCP电流}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置功率保护开关(bool v, CancellationToken ct = default) { await SendAsync($"POWer:PROTection:STATe {(v ? 1 : 0)}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 设置功率保护功率(double oPP功率, CancellationToken ct = default) { await SendAsync($"POWer:PROTection {oPP功率}{ScpiDelimiter}", ct); //[cite: 1] } public async Task 发送自定义命令(string 指令, CancellationToken ct = default) { await SendAsync($"{指令}{ScpiDelimiter}", ct); } #endregion #region 查询 public async Task 查询设备信息(CancellationToken ct = default) { return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1] } public async Task 查询实时电压(CancellationToken ct = default) { var str = await WriteReadAsync($"MEASure:VOLTage?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1] return double.TryParse(str, out double result) ? result : 0; } public async Task 查询实时电流(CancellationToken ct = default) { var str = await WriteReadAsync($"MEASure:CURRent?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1] return double.TryParse(str, out double result) ? result : 0; } public async Task 查询功率(CancellationToken ct = default) { var str = await WriteReadAsync($"MEASure:POWer?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1] return double.TryParse(str, out double result) ? result : 0; } #endregion } }