Files
ADP/DeviceCommand/Devices/IT7800E.cs
2026-06-11 17:25:59 +08:00

249 lines
9.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Common.Attributes;
using DeviceCommand.Base;
using Model.Models;
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";
/// <summary>
/// 构造函数:传入 <see cref="TcpConfig"/> 一次性初始化 IT7800E 交直流电源通信参数。
/// </summary>
public IT7800E(TcpConfig config) : base(config)
{
}
#region 1. IEEE 488.2
/// <summary>
/// 清除状态命令。清除标准事件状态寄存器和错误队列
/// </summary>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
}
/// <summary>
/// 读取电源识别字符串(制造商、产品型号、系统 SN、软件版本号
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct); //
}
/// <summary>
/// 复位命令。使电源恢复到出厂默认预定义安全值
/// </summary>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct); //
}
/// <summary>
/// 读取状态字节寄存器
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct); //
}
#endregion
#region 2.
/// <summary>
/// 设置电源输出源的电气模式/工作耦合模式
/// (AC: 纯交流, DC: 纯直流, ACDC: 交直流混合模式)
/// </summary>
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);
}
/// <summary>
/// 查询电源当前的工作模式
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":SOURce:MODE?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 控制电源的主输出开关 (True: 开启输出, False: 关闭输出)
/// </summary>
public virtual async Task DC输出(bool , CancellationToken ct = default)
{
// 注意虽然方法名叫设置DC输出但对交直流电源它代表通用的主输出控制Main Output
string = ? "ON" : "OFF";
await SendAsync($":OUTPut {参数}{ScpiDelimiter}", ct);
}
/// <summary>
/// 查询电源当前主输出开关状态 (返回 ON 或 OFF)
/// </summary>
public virtual async Task<string> DC输出状态(CancellationToken ct = default)
{
return await WriteReadAsync($":OUTPut?{ScpiDelimiter}", ScpiDelimiter, ct);
}
#endregion
#region 3. (AC //DC )
/// <summary>
/// 设定交流AC模式下的电压有效值 (单位: V)
/// </summary>
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);
}
/// <summary>
/// 设定直流DC模式或交直流(AC+DC)模式下的直流偏置电压值 (单位: V)
/// </summary>
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);
}
/// <summary>
/// 设定电源交流输出的频率值 (单位: Hz)
/// </summary>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:FREQuency {0:F2}{1}", , ScpiDelimiter);
await SendAsync(cmd, ct);
}
/// <summary>
/// 设置硬件交流输出的有效值限流门限 (单位: A)
/// </summary>
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.
/// <summary>
/// 查询通道实时测得的电压有效值RMS支持 AC 或 DC 模式下的回测)(单位: V)
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:VOLTage?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 查询通道实时测得的电流有效值RMS(单位: A)
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:CURRent?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 查询通道实时测得的有功功率值 (单位: W)
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:POWer?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 查询通道实时测得的视在功率 (单位: VA)
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:POWer:APParent?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 查询通道实时测得的输出频率 (单位: Hz)
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:FREQuency?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 查询当前的功率因数 (PF)
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:PF?{ScpiDelimiter}", ScpiDelimiter, ct);
}
#endregion
#region 5.
/// <summary>
/// 设置电源的过流保护(OCP)值 (单位: A)
/// </summary>
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);
}
/// <summary>
/// 设置电源的过压保护(OVP)值 (单位: V)
/// </summary>
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);
}
/// <summary>
/// 读取系统的出错记录信息(获取上一条未处理的错误码)
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:ERRor?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 切换仪器至计算机控制的远程控制模式 (锁定前面板按键)
/// </summary>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($":SYSTem:REMote{ScpiDelimiter}", ct);
}
/// <summary>
/// 切换仪器至前面板操作的本地模式 (前面板解锁)
/// </summary>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($":SYSTem:LOCal{ScpiDelimiter}", ct);
}
/// <summary>
/// 清除仪器当前的保护状态(例如触发 OCP/OVP 被锁死后进行软件解锁)
/// </summary>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($":PROTection:CLEar{ScpiDelimiter}", ct);
}
#endregion
}
}