现场程序优化

This commit is contained in:
2026-08-12 18:16:50 +08:00
parent b43090e56e
commit 30f5f6f8d6
16 changed files with 1020 additions and 26 deletions
+449
View File
@@ -26,6 +26,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 清除状态命令。清除标准事件状态寄存器和错误队列 (*CLS)
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
@@ -33,6 +34,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询错误信息
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>错误代码和描述信息</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:ERRor?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -41,6 +44,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取电子负载设备识别字符串 (*IDN?)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设备标识字符串(制造商, 产品型号, 序列号, 固件版本)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -49,6 +54,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 复位命令。使电子负载恢复到出厂默认配置状态 (*RST)
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct);
@@ -57,6 +63,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取标准状态字节寄存器 (*STB?)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>标准状态字节寄存器值</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -65,6 +73,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 保存当前系统参数到指定的存储单元 (1~100)
/// </summary>
/// <param name="单元">存储单元编号 (范围: 1~100)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int , CancellationToken ct = default)
{
if ( < 1 || > 100)
@@ -76,6 +86,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 调用指定存储单元中保存的系统参数 (1~100)
/// </summary>
/// <param name="单元">存储单元编号 (范围: 1~100)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int , CancellationToken ct = default)
{
if ( < 1 || > 100)
@@ -91,6 +103,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 控制电子负载的输入控制开关(INPut:STATe <bool>
/// </summary>
/// <param name="开启">true: 开启拉载, false: 关闭拉载</param>
/// <param name="ct">取消令牌</param>
public virtual async Task DC输入(bool , CancellationToken ct = default)
{
string = ? "1" : "0";
@@ -100,6 +114,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询电子负载当前的拉载开关状态 (返回 0 或 1)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>拉载开关状态("0" 或 "1"</returns>
public virtual async Task<string> DC输入状态(CancellationToken ct = default)
{
return await WriteReadAsync($"INPut:STATe?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -134,6 +150,11 @@ namespace DeviceCommand.Devices
CPD,
SZ
}
/// <summary>
/// 设置负载模式
/// </summary>
/// <param name="模式">电子负载工作模式枚举 (CC, CV, CR, CP 等)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (DeviceWorkMode , CancellationToken ct = default)
{
await SendAsync($"INPut:FUNCtion {Enum.GetName(模式)}{ScpiDelimiter}", ct);
@@ -142,6 +163,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询电子负载当前处于何种工作模式
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>当前工作模式字符串</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"INPut:FUNCtion?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -154,6 +177,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设定恒电流模式(CC)大量程下的拉载电流目标值 (单位: A)
/// </summary>
/// <param name="电流">拉载电流目标值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task CC(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "STATic:CC:HIGH:LEVel {0:F4}{1}", , ScpiDelimiter);
@@ -163,6 +188,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询恒电流模式大量程下设定的拉载电流值
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设定的拉载电流值 (单位: A)</returns>
public virtual async Task<string> CC设定(CancellationToken ct = default)
{
return await WriteReadAsync($"STATic:CC:HIGH:LEVel?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -171,6 +198,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设定恒电压模式(CV)大量程下的拉载电压目标值 (单位: V)
/// </summary>
/// <param name="电压">拉载电压目标值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task CV(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "STATic:CV:HIGH:LEVel {0:F3}{1}", , ScpiDelimiter);
@@ -180,6 +209,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询恒电压模式大量程下设定的拉载电压值
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设定的拉载电压值 (单位: V)</returns>
public virtual async Task<string> CV设定(CancellationToken ct = default)
{
return await WriteReadAsync($"STATic:CV:HIGH:LEVel?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -188,6 +219,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设定恒功率模式(CP)大量程下的拉载功率目标值 (单位: W)
/// </summary>
/// <param name="功率">拉载功率目标值 (单位: W)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task CP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "STATic:CP:HIGH:LEVel {0:F3}{1}", , ScpiDelimiter);
@@ -197,6 +230,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询恒功率模式大量程下设定的拉载功率值
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设定的拉载功率值 (单位: W)</returns>
public virtual async Task<string> CP设定(CancellationToken ct = default)
{
return await WriteReadAsync($"STATic:CP:HIGH:LEVel?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -205,6 +240,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设定恒电阻模式(CR)大量程下的等效拉载电阻阻值 (单位: Ω)
/// </summary>
/// <param name="电阻">等效拉载电阻阻值 (单位: Ω)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task CR(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "STATic:CR:HIGH:LEVel {0:F4}{1}", , ScpiDelimiter);
@@ -214,6 +251,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询恒电阻模式大量程下设定的拉载电阻值
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设定的拉载电阻值 (单位: Ω)</returns>
public virtual async Task<string> CR设定(CancellationToken ct = default)
{
return await WriteReadAsync($"STATic:CR:HIGH:LEVel?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -226,6 +265,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 回读电子负载输入端子上的实时测得电压值 (单位: V)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实时测量电压值 (单位: V)</returns>
[Monitorable("高压直流负载电压")]
public virtual async Task<string> (CancellationToken ct = default)
{
@@ -235,6 +276,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 回读电子负载输入端子上的实时测得电流值 (单位: A)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实时测量电流值 (单位: A)</returns>
[Monitorable("高压直流负载电流")]
public virtual async Task<string> (CancellationToken ct = default)
{
@@ -244,6 +287,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 回读电子负载输入端子上的实时测得功率值 (单位: W)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实时测量功率值 (单位: W)</returns>
[Monitorable("高压直流负载功率")]
public virtual async Task<string> (CancellationToken ct = default)
{
@@ -257,6 +302,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置电子负载的电流软保护阈值 (单位: A, 设置为 0 表示关闭)
/// </summary>
/// <param name="电流">电流软保护阈值 (单位: A, 0 表示关闭)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _OCP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "INPut:CURRent:PROTection {0:F3}{1}", , ScpiDelimiter);
@@ -266,6 +313,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置电子负载的功率软保护阈值 (单位: W, 设置为 0 表示关闭)
/// </summary>
/// <param name="功率">功率软保护阈值 (单位: W, 0 表示关闭)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _OPP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "INPut:POWer:PROTection {0:F3}{1}", , ScpiDelimiter);
@@ -275,6 +324,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置电子负载的电压软保护阈值 (单位: V, 设置为 0 表示关闭)
/// </summary>
/// <param name="电压">电压软保护阈值 (单位: V, 0 表示关闭)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _OVP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "INPut:VOLTage:PROTection {0:F3}{1}", , ScpiDelimiter);
@@ -288,6 +339,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取负载报警/事件寄存器信息 (MEASure:EVENT?)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>报警/事件寄存器信息</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"MEASure:EVENT?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -296,6 +349,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 清除负载当前的保护触发锁定状态 (INPut:CLearPROTect)
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"INPut:CLearPROTect{ScpiDelimiter}", ct);
@@ -307,48 +361,123 @@ namespace DeviceCommand.Devices
#region (COMBination:*)
/// <summary>
/// 设置组合量程_CVCC
/// </summary>
/// <param name="量程">量程编号</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CVCC(int , CancellationToken ct = default)
=> await SendAsync($"COMBination:CVCC:RANGE {量程}{ScpiDelimiter}", ct);
/// <summary>
/// 设置恒压速率_CVCC
/// </summary>
/// <param name="速率">恒压上升速率</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CVCC(int , CancellationToken ct = default)
=> await SendAsync($"COMBination:CVCC:HIGH:RATE {速率}{ScpiDelimiter}", ct);
/// <summary>
/// 设置恒压大量程电压_CVCC
/// </summary>
/// <param name="电压">恒压大量程电压设定值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CVCC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CVCC:HIGH:LEVel {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置限定电流_CVCC
/// </summary>
/// <param name="电流">限定电流值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CVCC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CVCC:CLIMit {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置组合量程_CRCC
/// </summary>
/// <param name="量程">量程编号</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CRCC(int , CancellationToken ct = default)
=> await SendAsync($"COMBination:CRCC:RANGE {量程}{ScpiDelimiter}", ct);
/// <summary>
/// 设置恒阻小量程电阻_CRCC
/// </summary>
/// <param name="电阻">恒阻小量程电阻值 (单位: Ω)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CRCC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CRCC:LOW:LEVel {0:F4}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置限定电流_CRCC
/// </summary>
/// <param name="电流">限定电流值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CRCC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CRCC:CLIMit {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置上升斜率_CRCC
/// </summary>
/// <param name="斜率">电流上升斜率 (单位: A/μs)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CRCC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CRCC:LOW:SLEWRate:RAIse {0:F1}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置下降斜率_CRCC
/// </summary>
/// <param name="斜率">电流下降斜率 (单位: A/μs)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CRCC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CRCC:LOW:SLEWRate:FALL {0:F1}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置组合量程_CPCC
/// </summary>
/// <param name="量程">量程编号</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CPCC(int , CancellationToken ct = default)
=> await SendAsync($"COMBination:CPCC:RANGE {量程}{ScpiDelimiter}", ct);
/// <summary>
/// 设置恒功率小量程功率_CPCC
/// </summary>
/// <param name="功率">恒功率小量程功率值 (单位: W)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CPCC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CPCC:LOW:LEVel {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置限定电流_CPCC
/// </summary>
/// <param name="电流">限定电流值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CPCC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CPCC:CLIMit {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置组合量程_CVCR
/// </summary>
/// <param name="量程">量程编号</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CVCR(int , CancellationToken ct = default)
=> await SendAsync($"COMBination:CVCR:RANGE {量程}{ScpiDelimiter}", ct);
/// <summary>
/// 设置恒压大量程电压_CVCR
/// </summary>
/// <param name="电压">恒压大量程电压设定值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CVCR(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CVCR:HIGH:LEVel {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置限定电阻_CVCR
/// </summary>
/// <param name="电阻">限定电阻值 (单位: Ω)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CVCR(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CVCR:CLIMit {0:F4}{1}", , ScpiDelimiter), ct);
@@ -356,45 +485,115 @@ namespace DeviceCommand.Devices
#region (DYNAmic:*)
/// <summary>
/// 设置瞬态运行方式_CC
/// </summary>
/// <param name="模式">运行方式 (0-连续, 1-单次, 2-A/B)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CC(int , CancellationToken ct = default)
=> await SendAsync($"DYNAmic:CC:MODe {模式}{ScpiDelimiter}", ct); // 0-连续, 1-单次, 2-A/B
/// <summary>
/// 设置瞬态量程_CC
/// </summary>
/// <param name="量程">量程编号</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CC(int , CancellationToken ct = default)
=> await SendAsync($"DYNAmic:CC:RANGE {量程}{ScpiDelimiter}", ct);
/// <summary>
/// 设置瞬态主值电流_CC
/// </summary>
/// <param name="电流">主值电流 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CC:HIGH:LEVel:MAIN {0:F4}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置瞬态瞬态值电流_CC
/// </summary>
/// <param name="电流">瞬态值电流 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CC:HIGH:LEVel:TRANSient {0:F4}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置瞬态上升斜率_CC
/// </summary>
/// <param name="斜率">电流上升斜率 (单位: A/μs)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CC:HIGH:SLEWRate:RAIse {0:F1}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置瞬态下降斜率_CC
/// </summary>
/// <param name="斜率">电流下降斜率 (单位: A/μs)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CC(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CC:HIGH:SLEWRate:FALL {0:F1}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置瞬态主值脉宽_CC
/// </summary>
/// <param name="时间_ms">主值脉宽 (单位: ms)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CC(double _ms, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CC:WIDth:MAIN {0:F1}{1}", _ms, ScpiDelimiter), ct);
/// <summary>
/// 设置瞬态瞬态脉宽_CC
/// </summary>
/// <param name="时间_ms">瞬态脉宽 (单位: ms)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CC(double _ms, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CC:WIDth:TRANSient {0:F1}{1}", _ms, ScpiDelimiter), ct);
/// <summary>
/// 设置瞬态运行方式_CV
/// </summary>
/// <param name="模式">运行方式</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CV(int , CancellationToken ct = default)
=> await SendAsync($"DYNAmic:CV:MODe {模式}{ScpiDelimiter}", ct);
/// <summary>
/// 设置瞬态量程_CV
/// </summary>
/// <param name="量程">量程编号</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CV(int , CancellationToken ct = default)
=> await SendAsync($"DYNAmic:CV:RANGE {量程}{ScpiDelimiter}", ct);
/// <summary>
/// 设置瞬态主值电压_CV
/// </summary>
/// <param name="电压">主值电压 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CV(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CV:HIGH:LEVel:MAIN {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置瞬态瞬态值电压_CV
/// </summary>
/// <param name="电压">瞬态值电压 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CV(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CV:HIGH:LEVel:TRANSient {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置瞬态主值脉宽_CV
/// </summary>
/// <param name="时间_ms">主值脉宽 (单位: ms)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CV(double _ms, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CV:WIDth:MAIN {0:F1}{1}", _ms, ScpiDelimiter), ct);
/// <summary>
/// 设置瞬态瞬态脉宽_CV
/// </summary>
/// <param name="时间_ms">瞬态脉宽 (单位: ms)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _CV(double _ms, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DYNAmic:CV:WIDth:TRANSient {0:F1}{1}", _ms, ScpiDelimiter), ct);
@@ -402,30 +601,75 @@ namespace DeviceCommand.Devices
#region (DISCHarge:* / CHARge:*)
/// <summary>
/// 设置放电电流
/// </summary>
/// <param name="电流">放电电流设定值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DISCHarge:CURRent {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置放电终止电压
/// </summary>
/// <param name="电压">放电终止电压 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DISCHarge:VOLTage {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置放电终止时间
/// </summary>
/// <param name="时间_s">放电终止时间 (单位: s)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double _s, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DISCHarge:TIMe {0:F0}{1}", _s, ScpiDelimiter), ct);
/// <summary>
/// 设置放电终止容量
/// </summary>
/// <param name="容量_Ah">放电终止容量 (单位: Ah)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double _Ah, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DISCHarge:CAPacity {0:F3}{1}", _Ah, ScpiDelimiter), ct);
/// <summary>
/// 查询放电实时时间
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>当前放电已持续时间 (单位: s)</returns>
public virtual async Task<string> (CancellationToken ct = default)
=> await WriteReadAsync($"DISCHarge:ECHO:TIMe?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 查询放电实时容量
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>当前放电已输出的容量 (单位: Ah)</returns>
public virtual async Task<string> (CancellationToken ct = default)
=> await WriteReadAsync($"DISCHarge:ECHo:CAPacity?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 设置充电电流
/// </summary>
/// <param name="电流">充电电流设定值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "CHARge:CURRent {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置充电电压
/// </summary>
/// <param name="电压">充电电压设定值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "CHARge:VOLTage {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置充电恒压时间
/// </summary>
/// <param name="时间_s">恒压充电持续时间 (单位: s)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int _s, CancellationToken ct = default)
=> await SendAsync($"CHARge:TIMe {时间_s}{ScpiDelimiter}", ct);
@@ -433,39 +677,99 @@ namespace DeviceCommand.Devices
#region OCP / OPP (OCP:* / OPP:*)
/// <summary>
/// 设置OCP初始电流
/// </summary>
/// <param name="电流">OCP扫描起始电流 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task OCP初始电流(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OCP:BCURrent {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置OCP步进电流
/// </summary>
/// <param name="电流">每步递增电流值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task OCP步进电流(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OCP:SCURrent {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置OCP单步时间
/// </summary>
/// <param name="时间_s">每步持续时间 (单位: s)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task OCP单步时间(double _s, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OCP:Time {0:F1}{1}", _s, ScpiDelimiter), ct);
/// <summary>
/// 设置OCP终止电压
/// </summary>
/// <param name="电压">触发保护时的电压阈值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task OCP终止电压(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OCP:EVOLtage {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 查询OCP状态
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>OCP扫描测试状态</returns>
public virtual async Task<string> OCP状态(CancellationToken ct = default)
=> await WriteReadAsync($"OCP:STAtus?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 读取OCP结果电流
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>OCP测试触发时的电流值 (单位: A)</returns>
public virtual async Task<string> OCP结果电流(CancellationToken ct = default)
=> await WriteReadAsync($"OCP:RCURrent?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 设置OPP初始功率
/// </summary>
/// <param name="功率">OPP扫描起始功率 (单位: W)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task OPP初始功率(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OPP:BPOWer {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置OPP步进功率
/// </summary>
/// <param name="功率">每步递增功率值 (单位: W)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task OPP步进功率(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OPP:SPOWer {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置OPP单步时间
/// </summary>
/// <param name="时间_s">每步持续时间 (单位: s)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task OPP单步时间(double _s, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OPP:TIME {0:F1}{1}", _s, ScpiDelimiter), ct);
/// <summary>
/// 设置OPP终止电压
/// </summary>
/// <param name="电压">触发保护时的电压阈值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task OPP终止电压(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OPP:EVOLtage {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 查询OPP状态
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>OPP扫描测试状态</returns>
public virtual async Task<string> OPP状态(CancellationToken ct = default)
=> await WriteReadAsync($"OPP:STAtus?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 读取OPP结果功率
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>OPP测试触发时的功率值 (单位: W)</returns>
public virtual async Task<string> OPP结果功率(CancellationToken ct = default)
=> await WriteReadAsync($"OPP:RPOWer?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -473,45 +777,115 @@ namespace DeviceCommand.Devices
#region SWEEP WAVE (SWEEP:* / WAVE:*)
/// <summary>
/// 设置扫频最小电流
/// </summary>
/// <param name="电流">扫频最小电流值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:TCURrent {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置扫频最大电流
/// </summary>
/// <param name="电流">扫频最大电流值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:MCURrent {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置扫频起始频率
/// </summary>
/// <param name="频率_Hz">扫频起始频率 (单位: Hz)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double _Hz, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:SFRequency {0:F1}{1}", _Hz, ScpiDelimiter), ct);
/// <summary>
/// 设置扫频结束频率
/// </summary>
/// <param name="频率_Hz">扫频结束频率 (单位: Hz)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double _Hz, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:EFRequency {0:F1}{1}", _Hz, ScpiDelimiter), ct);
/// <summary>
/// 设置扫频单步时间
/// </summary>
/// <param name="时间_ms">每个频率点停留时间 (单位: ms)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double _ms, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:STPTime {0:F1}{1}", _ms, ScpiDelimiter), ct);
/// <summary>
/// 设置扫频占空比
/// </summary>
/// <param name="占空比">占空比值 (单位: %)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:DUTYcycle {0:F1}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 读取扫频当前运行频率
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>当前扫频运行频率 (单位: Hz)</returns>
public virtual async Task<string> (CancellationToken ct = default)
=> await WriteReadAsync($"SWEEP:CFRequency?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 读取扫频测试结果
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>扫频测试结果</returns>
public virtual async Task<string> (CancellationToken ct = default)
=> await WriteReadAsync($"SWEEP:RESult?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 设置波形量程
/// </summary>
/// <param name="量程">波形量程编号</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int , CancellationToken ct = default)
=> await SendAsync($"WAVE:RANGe {量程}{ScpiDelimiter}", ct);
/// <summary>
/// 设置波形类型
/// </summary>
/// <param name="类型">波形类型 (0-正弦波, 1-方波, 2-三角波, 3-锯齿波, 4-自定义)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int , CancellationToken ct = default)
=> await SendAsync($"WAVE:TYPe {类型}{ScpiDelimiter}", ct); // 0-正弦波, 1-方波, 2-三角波, 3-锯齿波, 4-自定义
/// <summary>
/// 设置波形频率
/// </summary>
/// <param name="频率_Hz">波形频率 (单位: Hz)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double _Hz, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "WAVE:FREQuency {0:F1}{1}", _Hz, ScpiDelimiter), ct);
/// <summary>
/// 设置波形幅值
/// </summary>
/// <param name="幅值">波形幅值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "WAVE:SETValue {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置波形时间
/// </summary>
/// <param name="时间_ms">波形周期时间 (单位: ms)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double _ms, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "WAVE:TIMe {0:F1}{1}", _ms, ScpiDelimiter), ct);
/// <summary>
/// 设置波形叠加值
/// </summary>
/// <param name="叠加值">直流叠加偏置值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "WAVE:BVALue {0:F3}{1}", , ScpiDelimiter), ct);
@@ -519,21 +893,51 @@ namespace DeviceCommand.Devices
#region ESR (ESR:*)
/// <summary>
/// 设置ESR带载量程
/// </summary>
/// <param name="量程">带载量程编号</param>
/// <param name="ct">取消令牌</param>
public virtual async Task ESR带载量程(int , CancellationToken ct = default)
=> await SendAsync($"ESR:LOADRange {量程}{ScpiDelimiter}", ct);
/// <summary>
/// 设置ESR大量程带载电流
/// </summary>
/// <param name="电流">带载电流值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task ESR大量程带载电流(double , CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "ESR:CURRenthigh {0:F3}{1}", , ScpiDelimiter), ct);
/// <summary>
/// 设置ESR测量方法
/// </summary>
/// <param name="方法">测量方法 (0-方波平均法, 1-单脉冲法)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task ESR测量方法(int , CancellationToken ct = default)
=> await SendAsync($"ESR:MODE {方法}{ScpiDelimiter}", ct); // 0-方波平均法, 1-单脉冲法
/// <summary>
/// 设置ESR采样量程
/// </summary>
/// <param name="量程">采样量程 (0-1000mV, 1-100mV, 2-10mV)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task ESR采样量程(int , CancellationToken ct = default)
=> await SendAsync($"ESR:MEASurerange {量程}{ScpiDelimiter}", ct); // 0-1000mV, 1-100mV, 2-10mV
/// <summary>
/// 查询ESR状态
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>ESR测试状态</returns>
public virtual async Task<string> ESR状态(CancellationToken ct = default)
=> await WriteReadAsync($"ESR:STAtus?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 读取ESR结果
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>ESR测试结果 (单位: Ω)</returns>
public virtual async Task<string> ESR结果(CancellationToken ct = default)
=> await WriteReadAsync($"ESR:RESult?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -541,30 +945,75 @@ namespace DeviceCommand.Devices
#region MPPT (MPP:*)
/// <summary>
/// 设置MPPT步进电压
/// </summary>
/// <param name="电压_V">步进电压值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task MPPT步进电压(double _V, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "MPP:BVOLtage {0:F3}{1}", _V, ScpiDelimiter), ct);
/// <summary>
/// 设置MPPT步进时间
/// </summary>
/// <param name="时间_s">每步停留时间 (单位: s)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task MPPT步进时间(double _s, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "MPP:TIME {0:F1}{1}", _s, ScpiDelimiter), ct);
/// <summary>
/// 设置MPPT模式
/// </summary>
/// <param name="模式">工作模式 (0-扫描模式, 1-跟踪模式)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task MPPT模式(int , CancellationToken ct = default)
=> await SendAsync($"MPP:MODE {模式}{ScpiDelimiter}", ct); // 0-扫描模式, 1-跟踪模式
/// <summary>
/// 查询MPPT状态
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>MPPT测试状态</returns>
public virtual async Task<string> MPPT状态(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:STATus?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 读取MPPT最大功率
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>最大功率值 (单位: W)</returns>
public virtual async Task<string> MPPT最大功率(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:MPOWer?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 读取MPPT最大功率电压
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>最大功率点对应电压 (单位: V)</returns>
public virtual async Task<string> MPPT最大功率电压(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:MVOLtage?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 读取MPPT最大功率电流
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>最大功率点对应电流 (单位: A)</returns>
public virtual async Task<string> MPPT最大功率电流(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:MCURrent?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 读取MPPT开路电压
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>开路电压值 (单位: V)</returns>
public virtual async Task<string> MPPT开路电压(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:OVOLtage?{ScpiDelimiter}", ScpiDelimiter, ct);
/// <summary>
/// 读取MPPT短路电流
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>短路电流值 (单位: A)</returns>
public virtual async Task<string> MPPT短路电流(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:SCURrent?{ScpiDelimiter}", ScpiDelimiter, ct);