添加项目文件。

This commit is contained in:
czj
2026-06-05 10:57:09 +08:00
parent f29671b374
commit d960cb5912
166 changed files with 15996 additions and 0 deletions

View File

@@ -0,0 +1,294 @@
using Common.Attributes;
using DeviceCommand.Base;
using System;
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;
namespace DeviceCommand.Device
{
[ADPCommand]
public class N69200 : Tcp
{
// 手册第 15 页 2.2.4 明确规定:命令结束符为换行符 (ASCII 字符 LF即 \n)
private const string ScpiDelimiter = "\n";
/// <summary>
/// 构造函数:初始化 N69200 电子负载通信参数
/// </summary>
public N69200(string ipAddress, int port, int sendTimeout, int receiveTimeout)
{
ConfigureDevice(ipAddress, port, sendTimeout, receiveTimeout);
}
#region 3.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);
}
/// <summary>
/// 保存当前系统参数到指定的存储单元 (单元范围依型号而定)
/// </summary>
public virtual async Task (int , CancellationToken ct = default)
{
await SendAsync($"*SAV {单元}{ScpiDelimiter}", ct);
}
/// <summary>
/// 调用指定存储单元中保存的系统参数
/// </summary>
public virtual async Task (int , CancellationToken ct = default)
{
await SendAsync($"*RCL {单元}{ScpiDelimiter}", ct);
}
#endregion
#region 3.2.
/// <summary>
/// 控制电子负载的输入控制开关True: 开启拉载输入, False: 关闭拉载输入)
/// </summary>
public virtual async Task DC输入(bool , CancellationToken ct = default)
{
string = ? "ON" : "OFF";
await SendAsync($":INPut {参数}{ScpiDelimiter}", ct);
}
/// <summary>
/// 查询电子负载当前的拉载开关状态 (返回 ON 或 OFF)
/// </summary>
public virtual async Task<string> DC输入状态(CancellationToken ct = default)
{
return await WriteReadAsync($":INPut?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 设置电子负载的基本工作模式
/// (CC: 恒电流, CV: 恒电压, CP: 恒功率, CR: 恒电阻)
/// </summary>
public virtual async Task (string , CancellationToken ct = default)
{
// 转换为大写以确保设备命令解析兼容
string modeUpper = .ToUpper();
if (modeUpper != "CC" && modeUpper != "CV" && modeUpper != "CP" && modeUpper != "CR")
throw new ArgumentException("工作模式只能为 CC, CV, CP, 或 CR");
await SendAsync($":MODE {modeUpper}{ScpiDelimiter}", ct);
}
/// <summary>
/// 查询电子负载当前处于何种工作模式
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MODE?{ScpiDelimiter}", ScpiDelimiter, ct);
}
#endregion
#region 3.3. (CC / CV / CP / CR)
/// <summary>
/// 设定恒电流模式(CC)下的拉载电流目标值 (单位: A)
/// </summary>
public virtual async Task CC(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":CURRent {0:F4}{1}", , ScpiDelimiter);
await SendAsync(cmd, ct);
}
/// <summary>
/// 查询恒电流模式下设定的拉载电流值
/// </summary>
public virtual async Task<string> CC设定(CancellationToken ct = default)
{
return await WriteReadAsync($":CURRent?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 设定恒电压模式(CV)下的拉载电压目标值 (单位: V)
/// </summary>
public virtual async Task CV(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":VOLTage {0:F3}{1}", , ScpiDelimiter);
await SendAsync(cmd, ct);
}
/// <summary>
/// 查询恒电压模式下设定的拉载电压值
/// </summary>
public virtual async Task<string> CV设定(CancellationToken ct = default)
{
return await WriteReadAsync($":VOLTage?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 设定恒功率模式(CP)下的拉载功率目标值 (单位: W)
/// </summary>
public virtual async Task CP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":POWer {0:F3}{1}", , ScpiDelimiter);
await SendAsync(cmd, ct);
}
/// <summary>
/// 查询恒功率模式下设定的拉载功率值
/// </summary>
public virtual async Task<string> CP设定(CancellationToken ct = default)
{
return await WriteReadAsync($":POWer?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 设定恒电阻模式(CR)下的等效拉载电阻阻值 (单位: Ω)
/// </summary>
public virtual async Task CR(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":RESistance {0:F4}{1}", , ScpiDelimiter);
await SendAsync(cmd, ct);
}
/// <summary>
/// 查询恒电阻模式下设定的拉载电阻值
/// </summary>
public virtual async Task<string> CR设定(CancellationToken ct = default)
{
return await WriteReadAsync($":RESistance?{ScpiDelimiter}", ScpiDelimiter, ct);
}
#endregion
#region 3.4.
/// <summary>
/// 回读电子负载输入端子上的实时测得电压值 (单位: V)
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:VOLTage?{ScpiDelimiter}", ScpiDelimiter, ct);
}
/// <summary>
/// 回读电子负载输入端子上的实时测得电流值 (单位: 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>
/// 一键回读当前负载测得的电压、电流和功率的组合数组数据
/// </summary>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:VAP?{ScpiDelimiter}", ScpiDelimiter, ct);
}
#endregion
#region 3.5.
/// <summary>
/// 设置电子负载的过流保护(OCP)报警值 (单位: A)
/// </summary>
public virtual async Task _OCP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":PROTection:CURRent {0:F3}{1}", , ScpiDelimiter);
await SendAsync(cmd, ct);
}
/// <summary>
/// 设置电子负载的过功率保护(OPP)报警值 (单位: W)
/// </summary>
public virtual async Task _OPP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":PROTection:POWer {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, ":PROTection:VOLTage {0:F3}{1}", , ScpiDelimiter);
await SendAsync(cmd, ct);
}
#endregion
#region 3.6.
/// <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:LOCal{ScpiDelimiter}", ct);
}
/// <summary>
/// 切换电子负载到远程计算机操作状态 (前面板按键锁定)
/// </summary>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($":SYSTem:REMote{ScpiDelimiter}", ct);
}
/// <summary>
/// 清除负载当前的软件过流/过功率等保护(Protection)锁定触发状态
/// </summary>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($":PROTection:CLEar{ScpiDelimiter}", ct);
}
#endregion
}
}