现场程序优化

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
+1
View File
@@ -4,6 +4,7 @@
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
<ItemGroup>
+32
View File
@@ -85,6 +85,8 @@ namespace DeviceCommand.Devices
/// 轴使能控制
/// </summary>
/// <param name="axis">轴编号 (1 - 6)</param>
/// <param name="enable">true: 使能轴, false: 禁用轴</param>
/// <param name="ct">取消令牌</param>
public async Task SetAxisEnableAsync(int axis, bool enable, CancellationToken ct = default)
{
ushort address = axis switch
@@ -105,6 +107,8 @@ namespace DeviceCommand.Devices
/// 读取指定轴的使能状态
/// </summary>
/// <param name="axis">1: X轴, 2: Y轴, 3: Z轴</param>
/// <param name="ct">取消令牌</param>
/// <returns>true: 已使能, false: 未使能</returns>
public async Task<bool> GetAxisEnableAsync(int axis, CancellationToken ct = default)
{
ushort address = axis switch
@@ -125,6 +129,7 @@ namespace DeviceCommand.Devices
/// <param name="xPos">X轴原点位置 (范围: 0 ~ 50000)</param>
/// <param name="yPos">Y轴原点位置 (范围: 0 ~ 50000)</param>
/// <param name="zPos">Z轴原点位置 (范围: 0 ~ 20000)</param>
/// <param name="ct">取消令牌</param>
public async Task SetHomePositionAsync(int xPos, int yPos, int zPos, CancellationToken ct = default)
{
if (xPos < 0 || xPos > 50000)
@@ -144,6 +149,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 批量查询当前 X、Y、Z 三轴设定的原点位置值
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>返回包含三轴原点位置的元组 (X, Y, Z)</returns>
public async Task<(int X, int Y, int Z)> GetHomePositionAsync(CancellationToken ct = default)
{
@@ -163,6 +169,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置回原点定位速度(带 0 - 100000 范围检查)
/// </summary>
/// <param name="speed">回原点定位速度 (范围: 0 - 100000)</param>
/// <param name="ct">取消令牌</param>
public async Task SetHomePositionSpeedAsync(int speed, CancellationToken ct = default)
{
if (speed < 0 || speed > 100000)
@@ -174,6 +182,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询当前设定的回原点定位速度
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>当前回原点定位速度值</returns>
public async Task<int> GetHomePositionSpeedAsync(CancellationToken ct = default)
{
ushort[] registers = await ReadHoldingRegistersAsync(_slaveAddress, ADDR_HD_HOME_POS_SPEED, 2, ct);
@@ -188,6 +198,8 @@ namespace DeviceCommand.Devices
/// 设置指定轴的运行速度(带 0 - 100000 范围检查)
/// </summary>
/// <param name="axis">1: X轴, 2: Y轴, 3: Z轴</param>
/// <param name="speed">运行速度 (范围: 0 - 100000)</param>
/// <param name="ct">取消令牌</param>
public async Task SetAxisSpeedAsync(int axis, int speed, CancellationToken ct = default)
{
if (speed < 0 || speed > 100000)
@@ -207,6 +219,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取指定轴当前设定的运行速度
/// </summary>
/// <param name="axis">1: X轴, 2: Y轴, 3: Z轴</param>
/// <param name="ct">取消令牌</param>
/// <returns>当前设定的运行速度值</returns>
public async Task<int> GetAxisSpeedAsync(int axis, CancellationToken ct = default)
{
ushort address = axis switch
@@ -227,6 +242,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 写入指定轴的目标位置(动态安全校验:目标位置不能超过 [轴最大物理极限 - 当前轴原点设置值])
/// </summary>
/// <param name="axis">1: X轴, 2: Y轴, 3: Z轴</param>
/// <param name="targetPos">目标位置</param>
/// <param name="ct">取消令牌</param>
public async Task SetAxisTargetPositionAsync(int axis, int targetPos, CancellationToken ct = default)
{
var (xHome, yHome, zHome) = await GetHomePositionAsync(ct);
@@ -272,6 +290,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取指定轴当前设定的目标指定位置
/// </summary>
/// <param name="axis">1: X轴, 2: Y轴, 3: Z轴</param>
/// <param name="ct">取消令牌</param>
/// <returns>当前设定的目标位置值</returns>
public async Task<int> GetAxisTargetPositionAsync(int axis, CancellationToken ct = default)
{
ushort address = axis switch
@@ -293,6 +314,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置系统紧停锁定状态 (true: 锁定激活, false: 解除锁定)
/// </summary>
/// <param name="state">true: 锁定激活, false: 解除锁定</param>
/// <param name="ct">取消令牌</param>
public async Task SetEStopStateAsync(bool state, CancellationToken ct = default)
{
await WriteSingleCoilAsync(_slaveAddress, ADDR_M_ESTOP, state, ct);
@@ -301,6 +324,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置指定轴的停止控制状态 (true: 持续输出停止信号, false: 释放停止信号)
/// </summary>
/// <param name="axis">1: X轴, 2: Y轴, 3: Z轴</param>
/// <param name="state">true: 持续输出停止信号, false: 释放停止信号</param>
/// <param name="ct">取消令牌</param>
public async Task SetStopStateAsync(int axis, bool state, CancellationToken ct = default)
{
ushort address = axis switch
@@ -317,6 +343,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 全局回零(安全校验版:先检查回原点速度是否为 0,为0则拒绝触发)
/// </summary>
/// <param name="ct">取消令牌</param>
public async Task HomeAsync(CancellationToken ct = default)
{
int currentSpeed = await GetHomePositionSpeedAsync(ct);
@@ -331,6 +358,7 @@ namespace DeviceCommand.Devices
/// 单轴指定位置启动(含速度判定、使能自动补齐、动作目标位置独立范围校验)
/// </summary>
/// <param name="axis">1: X轴, 2: Y轴, 3: Z轴</param>
/// <param name="ct">取消令牌</param>
public async Task StartSingleAxisAsync(int axis, CancellationToken ct = default)
{
ushort startAddress;
@@ -388,6 +416,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 三轴同时启动(全开:严格校验全部运行轴速度、批量检测与补正1~6号轴使能、联动校验三轴目标范围极限)
/// </summary>
/// <param name="ct">取消令牌</param>
public async Task StartAllAxesAsync(CancellationToken ct = default)
{
// 1. 一次性读取三轴速度,严禁任何一轴速度为 0
@@ -493,6 +522,8 @@ namespace DeviceCommand.Devices
/// 读取指定轴的绝对位置(相对原点的实时位置,只读)
/// </summary>
/// <param name="axis">轴编号 (1-6)</param>
/// <param name="ct">取消令牌</param>
/// <returns>指定轴的绝对位置值</returns>
public async Task<int> GetAbsolutePositionAsync(int axis, CancellationToken ct = default)
{
ushort address = axis switch
@@ -516,6 +547,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 批量读取 1-6 轴的绝对位置(一次性读取 22 个寄存器,高效)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>返回 6 轴绝对位置元组</returns>
public async Task<(int Axis1, int Axis2, int Axis3, int Axis4, int Axis5, int Axis6)> GetAllAbsolutePositionsAsync(CancellationToken ct = default)
{
+177
View File
@@ -38,6 +38,21 @@ namespace DeviceCommand.Devices
CURRent
}
/// <summary>
/// 设备相位/输出模式[cite: 2]
/// </summary>
public enum DevicePhaseMode
{
/// <summary> 单相模式 </summary>
ONE,
/// <summary> 三相模式 </summary>
THRee,
/// <summary> 反相模式 </summary>
DIFFerence,
/// <summary> 多通道模式 </summary>
MULTichannel
}
#endregion
[ADPCommand]
@@ -52,21 +67,39 @@ namespace DeviceCommand.Devices
#region 1. IEEE 488.2
/// <summary>
/// 清除错误队列和状态字节
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct); //[cite: 1]
}
/// <summary>
/// 查询设备标识
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设备标识字符串(制造商, 产品型号, 序列号, 固件版本)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
/// <summary>
/// 重置设备
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct); //[cite: 1]
}
/// <summary>
/// 读取状态字节
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>状态字节寄存器值</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -79,6 +112,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置电源输出源的电气模式/工作耦合模式 (AC, DC, ACDC, DCAC)[cite: 1]
/// </summary>
/// <param name="模式">电气耦合模式 (AC/DC/ACDC/DCAC)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (PowerCouplingMode , CancellationToken ct = default)
{
await SendAsync($":SOURce:FUNCtion {模式}{ScpiDelimiter}", ct); //[cite: 1]
@@ -87,17 +122,29 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询电源当前的工作电气模式[cite: 1]
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>当前工作电气模式字符串</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":SOURce:FUNCtion?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
/// <summary>
/// 设置DC输出开关
/// </summary>
/// <param name="开启">true: 开启输出, false: 关闭输出</param>
/// <param name="ct">取消令牌</param>
public virtual async Task DC输出(bool , CancellationToken ct = default)
{
string = ? "ON" : "OFF"; //[cite: 1]
await SendAsync($":OUTPut {参数}{ScpiDelimiter}", ct); //[cite: 1]
}
/// <summary>
/// 查询DC输出状态
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>输出状态字符串(ON 或 OFF</returns>
public virtual async Task<string> DC输出状态(CancellationToken ct = default)
{
return await WriteReadAsync($":OUTPut?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -107,24 +154,44 @@ namespace DeviceCommand.Devices
#region 3. (AC //DC )
/// <summary>
/// 设置交流电压
/// </summary>
/// <param name="电压">交流电压设定值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:VOLTage {0:F2}{1}", , ScpiDelimiter); //[cite: 1]
await SendAsync(cmd, ct);
}
/// <summary>
/// 设置直流电压
/// </summary>
/// <param name="电压">直流电压设定值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:VOLTage:DC {0:F2}{1}", , ScpiDelimiter); //[cite: 1]
await SendAsync(cmd, ct);
}
/// <summary>
/// 设置频率
/// </summary>
/// <param name="频率">频率设定值 (单位: Hz)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:FREQuency {0:F2}{1}", , ScpiDelimiter); //[cite: 1]
await SendAsync(cmd, ct);
}
/// <summary>
/// 设置电流
/// </summary>
/// <param name="电流">电流设定值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:CURRent {0:F3}{1}", , ScpiDelimiter); //[cite: 1]
@@ -135,34 +202,64 @@ namespace DeviceCommand.Devices
#region 4.
/// <summary>
/// 查询实际电压
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实际电压测量值 (单位: V)</returns>
[Monitorable("交流电源电压")]
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:VOLTage?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
/// <summary>
/// 查询实际电流
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实际电流测量值 (单位: A)</returns>
[Monitorable("交流电源电流")]
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:CURRent?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
/// <summary>
/// 查询实际功率
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实际有功功率测量值 (单位: W)</returns>
[Monitorable("交流电源功率")]
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:POWer?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
/// <summary>
/// 查询视在功率
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>视在功率测量值 (单位: VA)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:POWer:APParent?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
/// <summary>
/// 查询实际频率
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实际频率测量值 (单位: Hz)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:FREQuency?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
/// <summary>
/// 查询功率因数
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>功率因数测量值</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:POWer:PFACtor?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -172,33 +269,60 @@ namespace DeviceCommand.Devices
#region 5.
/// <summary>
/// 设置过流保护_OCP
/// </summary>
/// <param name="电流">过流保护阈值 (单位: A, RMS值)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _OCP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:CURRent:PROTection:RMS {0:F3}{1}", , ScpiDelimiter); //[cite: 1]
await SendAsync(cmd, ct);
}
/// <summary>
/// 设置过压保护_OVP
/// </summary>
/// <param name="电压">过压保护阈值 (单位: V, 峰值)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _OVP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:VOLTage:PROTection:PEAK {0:F2}{1}", , ScpiDelimiter); //[cite: 1]
await SendAsync(cmd, ct);
}
/// <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]
}
/// <summary>
/// 切换远程控制模式
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($":SYSTem:REMote{ScpiDelimiter}", ct); //[cite: 1]
}
/// <summary>
/// 切换本地控制模式
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($":SYSTem:LOCal{ScpiDelimiter}", ct); //[cite: 1]
}
/// <summary>
/// 清除保护告警
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($":OUTPut:PROTection:CLEar{ScpiDelimiter}", ct); //[cite: 1]
@@ -211,6 +335,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 清除最近的安时(Ah)与瓦时(Wh)统计数据[cite: 1]
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"SENSe:AHOur:RESet{ScpiDelimiter}", ct); //[cite: 1]
@@ -220,6 +345,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取当前充放电累计的安时值 (单位: Ah)[cite: 1]
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>累计安时值 (单位: Ah)</returns>
public virtual async Task<string> _Ah(CancellationToken ct = default)
{
return await WriteReadAsync($"FETCh:AHOur?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -228,6 +355,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取当前充放电累计的瓦时值 (单位: Wh)[cite: 1]
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>累计瓦时值 (单位: Wh)</returns>
public virtual async Task<string> _Wh(CancellationToken ct = default)
{
return await WriteReadAsync($"FETCh:WHOur?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -236,6 +365,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取充放电积分持续时间 (单位: 秒)[cite: 1]
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>积分持续时间 (单位: 秒)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"FETCh:ENERgy:TIME?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -244,6 +375,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 切换设备的操作模式 (VOLTage: 电源模式, LOAD: 负载模式/放电, CURRent: 电流源)[cite: 1]
/// </summary>
/// <param name="模式">操作模式 (VOLTage/LOAD/CURRent)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (DeviceOperationMode , CancellationToken ct = default)
{
await SendAsync($"SYSTem:OPERation:MODE {模式}{ScpiDelimiter}", ct); //[cite: 1]
@@ -252,6 +385,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置放电截止电压/电压下限 (单位: V,用于防止电池过放)[cite: 1]
/// </summary>
/// <param name="电压">放电截止电压/电压下限 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, ":SOURce:VOLTage:LIMit:LOW {0:F2}{1}", , ScpiDelimiter); //[cite: 1]
@@ -259,5 +394,47 @@ namespace DeviceCommand.Devices
}
#endregion
#region 7. (//)[cite: 2]
/// <summary>
/// 设置电源相位输出模式 (ONE:单相 / THRee:三相 / DIFFerence:反相 / MULTichannel:多通道)[cite: 2]
/// </summary>
/// <param name="模式">相位输出模式</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (DevicePhaseMode , CancellationToken ct = default)
{
await SendAsync($"SYSTem:FUNCtion {模式}{ScpiDelimiter}", ct); //[cite: 2]
}
/// <summary>
/// 切换为单相模式 (SYST:FUNC ONE)[cite: 2]
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"SYSTem:FUNCtion ONE{ScpiDelimiter}", ct); //[cite: 2]
}
/// <summary>
/// 切换为反相模式 (SYST:FUNC DIFFerence)[cite: 2]
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"SYSTem:FUNCtion DIFFerence{ScpiDelimiter}", ct); //[cite: 2]
}
/// <summary>
/// 查询当前输出模式 (单相/三相/反相/多通道)[cite: 2]
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>返回 ONE, THRee, DIFFerence 或 MULTichannel[cite: 2]</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"SYSTem:FUNCtion?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 2]
}
#endregion
}
}
+76 -1
View File
@@ -27,6 +27,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.1.1. 清除标准事件状态寄存器和错误队列
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
@@ -35,6 +36,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.1.4. 读取直流电源相关信息(制造商、产品型号、系统 SN、软件版本号)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设备标识字符串(制造商, 产品型号, 序列号, 固件版本)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -43,6 +46,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.1.7. 恢复出厂设置 (注意:设备重置保存数据大约需要 10 秒)
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct);
@@ -51,6 +55,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.1.8. 读取状态字节寄存器(只读寄存器,读取时不会清除位)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>状态字节寄存器值</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -63,6 +69,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.2.1. 设定输出电压值 (单位: V)
/// </summary>
/// <param name="电压">输出电压设定值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "SOURce:VOLTage {0:F3}{1}", , ScpiDelimiter);
@@ -72,6 +80,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.2.1. 查询输出电压设定值 (单位: V)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>输出电压设定值 (单位: V)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"SOURce:VOLTage?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -80,6 +90,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.2.2. 设置输出限流值 (单位: A)
/// </summary>
/// <param name="电流">输出限流设定值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "SOURce:CURRent {0:F3}{1}", , ScpiDelimiter);
@@ -89,6 +101,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.2.2. 查询输出限流值设定值 (单位: A)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>输出限流设定值 (单位: A)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"SOURce:CURRent?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -97,6 +111,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.2.3. 设置输出模拟内阻值 (单位: mΩ)
/// </summary>
/// <param name="内阻">模拟内阻设定值 (单位: mΩ)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "SOURce:INTErnalres {0:F1}{1}", , ScpiDelimiter);
@@ -106,6 +122,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.2.4. 保存当前测试参数到指定存储组 (范围: 1-10)
/// </summary>
/// <param name="组别">存储组编号 (范围: 1-10)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int , CancellationToken ct = default)
{
if ( < 1 || > 10) throw new ArgumentOutOfRangeException(nameof(), "组别有效范围为 1~10");
@@ -115,6 +133,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.2.5. 调用指定存储组的测试参数 (范围: 1-10)
/// </summary>
/// <param name="组别">存储组编号 (范围: 1-10)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int , CancellationToken ct = default)
{
if ( < 1 || > 10) throw new ArgumentOutOfRangeException(nameof(), "组别有效范围为 1~10");
@@ -128,6 +148,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.1. 控制电源输出开关 (True: 开启, False: 关闭)
/// </summary>
/// <param name="开启">true: 开启输出, false: 关闭输出</param>
/// <param name="ct">取消令牌</param>
public virtual async Task DC输出(bool , CancellationToken ct = default)
{
string = ? "ON" : "OFF";
@@ -137,6 +159,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.1. 查询电源输出开关状态 (返回 "ON" 或 "OFF")
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>输出开关状态字符串("ON" 或 "OFF"</returns>
public virtual async Task<string> DC输出开关状态(CancellationToken ct = default)
{
return await WriteReadAsync($"OUTPut:ONOFF?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -146,6 +170,8 @@ namespace DeviceCommand.Devices
/// 3.3.2. 设定电源工作模式
/// (NORMal: 普通模式, CHARge: 电池充电, SEQuence: 序列模式, CPOWer: 恒功率模式, CARWave: 汽车测试, APG: 外部编程)
/// </summary>
/// <param name="模式">工作模式 (NORMal/CHARge/SEQuence/CPOWer/CARWave/APG)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (string , CancellationToken ct = default)
{
await SendAsync($"OUTPut:MODE {模式}{ScpiDelimiter}", ct);
@@ -154,6 +180,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.2. 查询电源当前运行工作模式
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>当前运行工作模式字符串</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"OUTPut:MODE?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -162,6 +190,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.11. 设置电源输出 CV/CC 优先权 (CV 或 CC)
/// </summary>
/// <param name="优先模式">优先模式,只能为 "CV" 或 "CC"</param>
/// <param name="ct">取消令牌</param>
public virtual async Task CVCC优先权(string , CancellationToken ct = default)
{
if ( != "CV" && != "CC") throw new ArgumentException("优先模式只能为 'CV' 或 'CC'");
@@ -171,6 +201,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.12. 获取电源状态字(通过解析返回整数的二进制 Bit 位获取全状态环路及告警)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>电源状态字(整数字符串,通过二进制位标识各状态及告警)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"OUTPut:STATe?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -179,6 +211,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.13. 获取电源事件告警状态值 (返回整数通过位定义标识 UVP/OVP/OCP/OPP/OTP)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>事件告警状态值(整数字符串,通过位定义标识 UVP/OVP/OCP/OPP/OTP</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"OUTPut:EVENT?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -187,6 +221,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.13. 清除当前的告警状态
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"OUTPut:EVENT 0{ScpiDelimiter}", ct);
@@ -195,6 +230,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.16. 打开/关闭设备定时关机功能
/// </summary>
/// <param name="开启">true: 开启定时关机, false: 关闭定时关机</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (bool , CancellationToken ct = default)
{
string = ? "ON" : "OFF";
@@ -204,6 +241,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.17. 设定设备定时关机倒计时时间 (单位: s)
/// </summary>
/// <param name="秒数">定时关机倒计时时间 (单位: s)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "OUTPut:TIMing:DWELI {0:F1}{1}", , ScpiDelimiter);
@@ -213,6 +252,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.3.18. 控制泄放电路(Bleeder)开关状态
/// </summary>
/// <param name="开启">true: 开启泄放电路, false: 关闭泄放电路</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (bool , CancellationToken ct = default)
{
string = ? "ON" : "OFF";
@@ -226,6 +267,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.4.1. 回读通道输出端子上的实时测得电压值 (单位: V)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实时测量电压值 (单位: V)</returns>
[Monitorable("高压直流电源电压")]
public virtual async Task<string> (CancellationToken ct = default)
{
@@ -235,6 +278,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.4.2. 回读通道输出端子上的实时测得电流值 (单位: A)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实时测量电流值 (单位: A)</returns>
[Monitorable("高压直流电源电流")]
public virtual async Task<string> (CancellationToken ct = default)
{
@@ -244,6 +289,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.4.3. 回读通道输出端子上的实时测得功率值 (单位: W)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实时测量功率值 (单位: W)</returns>
[Monitorable("高压直流电源功率")]
public virtual async Task<string> (CancellationToken ct = default)
{
@@ -253,6 +300,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.4.4. 回读电池充电模式下当前累计已充入的容量值 (单位: mAh)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>累计已充入容量值 (单位: mAh)</returns>
public virtual async Task<string> MAH(CancellationToken ct = default)
{
return await WriteReadAsync($"MEASure:MAH?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -261,6 +310,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.4.5. 获取当前电源的硬件额定电压上限值 (单位: V)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>硬件额定电压上限值 (单位: V)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"MEASure:VOLTage:MAXimum?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -269,6 +320,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.4.6. 获取当前电源的硬件额定电流上限值 (单位: A)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>硬件额定电流上限值 (单位: A)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"MEASure:CURRent:MAXimum?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -281,6 +334,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.1. 设置欠压保护门限值 (单位: V)
/// </summary>
/// <param name="电压">欠压保护门限值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _UVP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "PROTect:LESS:VOLTage {0:F3}{1}", , ScpiDelimiter);
@@ -290,6 +345,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.4. 设置过压保护门限值 (单位: V)
/// </summary>
/// <param name="电压">过压保护门限值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _OVP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "PROTect:OVER:VOLTage {0:F3}{1}", , ScpiDelimiter);
@@ -299,6 +356,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.6. 设置硬件硬件过流保护硬指标参数 (单位: A)
/// </summary>
/// <param name="电流">过流保护硬指标参数 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _OCP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "PROTect:CURRent {0:F3}{1}", , ScpiDelimiter);
@@ -308,6 +367,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.8. 设置硬件过功率保护门限值 (单位: W)
/// </summary>
/// <param name="功率">过功率保护门限值 (单位: W)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task _OPP(double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "PROTect:POWer {0:F3}{1}", , ScpiDelimiter);
@@ -317,6 +378,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.12. 设置可调节的用户软输出电压下限值 (单位: V)
/// </summary>
/// <param name="电压">输出电压下限值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "SOURce:VOLTage:LEVel:LIMit:LOW {0:F3}{1}", , ScpiDelimiter);
@@ -326,6 +389,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.13. 设置可调节的用户软输出电压上限值 (单位: V)
/// </summary>
/// <param name="电压">输出电压上限值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "SOURce:VOLTage:LEVel:LIMit {0:F3}{1}", , ScpiDelimiter);
@@ -335,6 +400,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.14. 设置可调节的用户软输出电流下限值 (单位: A)
/// </summary>
/// <param name="电流">输出电流下限值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "SOURce:CURRent:LEVel:LIMit:LOW {0:F3}{1}", , ScpiDelimiter);
@@ -344,6 +411,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.15. 设置可调节的用户软输出电流上限值 (单位: A)
/// </summary>
/// <param name="电流">输出电流上限值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "SOURce:CURRent:LEVel:LIMit {0:F3}{1}", , ScpiDelimiter);
@@ -357,6 +426,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.6.1. 设定恒功率工作模式下的限定电压值 (单位: V)
/// </summary>
/// <param name="电压">恒功率模式限定电压值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "CPOWer:VOLTage {0:F3}{1}", , ScpiDelimiter);
@@ -366,6 +437,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.6.2. 设定恒功率工作模式下的限定电流值 (单位: A)
/// </summary>
/// <param name="电流">恒功率模式限定电流值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "CPOWer:CURRent {0:F3}{1}", , ScpiDelimiter);
@@ -375,6 +448,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.6.3. 设定恒功率工作模式下的运行功率目标值 (单位: W)
/// </summary>
/// <param name="功率">恒功率模式运行功率目标值 (单位: W)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "CPOWer:POWer {0:F3}{1}", , ScpiDelimiter);
@@ -383,4 +458,4 @@ namespace DeviceCommand.Devices
#endregion
}
}
}
+69 -2
View File
@@ -30,6 +30,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 建立 TCP 连接,成功后自动激活心跳
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>连接是否成功</returns>
public new async Task<bool> ConnectAsync(CancellationToken ct = default)
{
bool isConnected = await base.ConnectAsync(ct);
@@ -124,6 +126,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.1.1 读取电源的相关信息(制造商, 产品标号, 产品序列号, 软件版本号)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设备标识字符串(制造商, 产品标号, 产品序列号, 软件版本号)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{SCPIDelimiter}", SCPIDelimiter, ct);
@@ -132,6 +136,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.1.2 从指定的单位中恢复 *SAV 命令保存的设定值 (参数:1~99)
/// </summary>
/// <param name="组别">存储组编号 (范围: 1~99)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int , CancellationToken ct = default)
{
if ( < 1 || > 99) throw new ArgumentOutOfRangeException(nameof(), "组别有效范围为 1~99");
@@ -141,6 +147,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.1.3 将仪器当前系统状态保存到非易失性内存中 (参数:1~99)
/// </summary>
/// <param name="组别">存储组编号 (范围: 1~99)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int , CancellationToken ct = default)
{
if ( < 1 || > 99) throw new ArgumentOutOfRangeException(nameof(), "组别有效范围为 1~99");
@@ -150,6 +158,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.1.4 远程控制触发一次
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*TRG{SCPIDelimiter}", ct);
@@ -158,6 +167,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.1.5 返回状态、采集电压、采集电流 (格式: 状态码,电压值,电流值)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>状态码,电压值,电流值的组合字符串</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*ALL?{SCPIDelimiter}", SCPIDelimiter, ct);
@@ -170,6 +181,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.2.1 设置输出电压和输出电流值
/// </summary>
/// <param name="电压">输出电压设定值 (单位: V)</param>
/// <param name="电流">输出电流设定值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , double , CancellationToken ct = default)
{
// 修正:去除前缀冒号,规范应用 APPL 短格式
@@ -180,6 +194,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.2.1 查询当前设定的输出电压和电流值
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>当前输出电压和电流设定值的组合字符串</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -193,6 +209,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.1 查询通道输出端子上测得的直流电流值 (A)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实测直流电流值 (单位: A)</returns>
[Monitorable("低压直流电源电流")]
public virtual async Task<string> (CancellationToken ct = default)
{
@@ -203,6 +221,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.2 查询通道输出端子上测得的直流功率值 (W)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实测直流功率值 (单位: W)</returns>
[Monitorable("低压直流电源功率")]
public virtual async Task<string> (CancellationToken ct = default)
{
@@ -213,6 +233,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.3 查询通道输出端子上测得的直流电压值 (V)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>实测直流电压值 (单位: V)</returns>
[Monitorable("低压直流电源电压")]
public virtual async Task<string> (CancellationToken ct = default)
{
@@ -223,6 +245,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.4 查询通道输出端子上测得的电压、电流和功率的组合值
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>电压、电流和功率的组合值字符串</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -233,6 +257,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.5.5 查询通道输出端子上测得的输出时间长度
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>输出时间长度</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -246,6 +272,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.6.1 设置电源输出开关
/// </summary>
/// <param name="开启">true: 开启输出, false: 关闭输出</param>
/// <param name="ct">取消令牌</param>
public virtual async Task DC输出(bool , CancellationToken ct = default)
{
// 修正:去除前缀冒号,改用 OUTP 短格式
@@ -256,6 +284,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.6.1 查询通道输出状态 (返回 ON 或 OFF)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>通道输出状态字符串("ON" 或 "OFF"</returns>
public virtual async Task<string> DC输出状态(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -265,6 +295,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.6.2 控制电源输出定时器的开关状态
/// </summary>
/// <param name="开启">true: 开启定时器, false: 关闭定时器</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (bool , CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -275,6 +307,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.6.3 设定电源输出定时器的时间 (单位: s, 范围: 0.1 ~ 999999.9)
/// </summary>
/// <param name="秒数">定时器时间 (单位: s, 范围: 0.1 ~ 999999.9)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -285,6 +319,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.6.4 设定电源输出的模式优先权 (CV优先 或 CC优先)
/// </summary>
/// <param name="是CV优先">true: CV优先, false: CC优先</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (bool CV优先, CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -299,6 +335,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.1.1 清除输出电流保护(OCP)电路状态
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -308,6 +345,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.1.2 使能或禁止当前输出电流保护(OCP)电路
/// </summary>
/// <param name="启用">true: 使能OCP, false: 禁止OCP</param>
/// <param name="ct">取消令牌</param>
public virtual async Task 使(bool , CancellationToken ct = default)
{
// 修正:去除前缀冒号,将 STATE 改为更常用的 STAT 简写
@@ -318,6 +357,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.1.4 设置输出电流保护(OCP)阀值 (A)
/// </summary>
/// <param name="电流">OCP 保护阀值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
// 修正:去除前缀冒号。按 NGI 通用指令树,加上层级限制或者直接作用于 CURR:PROT
@@ -328,6 +369,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.1.7 设置电源的输出电流值 (A)
/// </summary>
/// <param name="电流">输出电流设定值 (单位: A)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
// 修正:去除前缀冒号,改用标准 CURR 短格式
@@ -338,6 +381,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.2.1 清除输出电压保护(OVP)电路状态
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -347,6 +391,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.2.2 使能或禁止当前输出电压保护(OVP)电路
/// </summary>
/// <param name="启用">true: 使能OVP, false: 禁止OVP</param>
/// <param name="ct">取消令牌</param>
public virtual async Task 使(bool , CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -357,6 +403,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.2.4 设置输出电压保护(OVP)阀值 (V)
/// </summary>
/// <param name="电压">OVP 保护阀值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -367,6 +415,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.2.7 设置电源的输出电压值 (V)
/// </summary>
/// <param name="电压">输出电压设定值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
// 修正:去除前缀冒号,改用标准 VOLT 短格式
@@ -377,6 +427,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.2.8 设定电压输出范围的上限电压值 (V)
/// </summary>
/// <param name="电压">上限电压值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -386,14 +438,17 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.2.9 清除电压上限限制(恢复为设备物理允许的最大电压值)
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
// 发送 MAXimum 设为最大值以达到清除限制的效果
// 发送 MAXimum 设为最大值以达到"清除限制"的效果
await SendAsync($"VOLT:LIMIT MAX{SCPIDelimiter}", ct); // 对应手册 3.7.2.8
}
/// <summary>
/// 3.7.3.1 设置输出功率值 (W)
/// </summary>
/// <param name="功率">输出功率设定值 (单位: W)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double , CancellationToken ct = default)
{
// 修正:去除前缀冒号,改用标准 POW 短格式
@@ -404,6 +459,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.7.3.2 禁止或使能当前恒功率(CP)输出
/// </summary>
/// <param name="启用">true: 使能恒功率输出, false: 禁止恒功率输出</param>
/// <param name="ct">取消令牌</param>
public virtual async Task 使(bool , CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -418,6 +475,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.9.1 控制蜂鸣器开关
/// </summary>
/// <param name="开启">true: 开启蜂鸣器, false: 关闭蜂鸣器</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (bool , CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -428,6 +487,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.9.2 使蜂鸣器强制鸣叫一声
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -437,6 +497,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.9.4 查询仪器当前出错记录数量 (最大 18 组)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>当前出错记录数量(最大 18 组)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -446,6 +508,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.9.5 读取仪器的出错信息 (成功返回 0,"No error")
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>错误代码和描述信息(成功返回 0,"No error"</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -455,6 +519,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.9.7 设置电源为面板控制模式 (本地 Local 状态,前面板按键可用)
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -464,6 +529,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.9.8 设置电源为远程控制模式 (Remote 状态)
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -473,6 +539,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 3.9.9 通过通信接口设置电源为远程控制锁定模式
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -481,4 +548,4 @@ namespace DeviceCommand.Devices
#endregion
}
}
}
+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);
+54 -1
View File
@@ -27,6 +27,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 清除标准事件状态寄存器和错误队列
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
@@ -34,6 +35,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>
/// 读取示波器识别字符串(制造商、型号、序列号、固件版本)
/// </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>
/// 复位命令。使示波器恢复到默认的出厂设置
/// </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>
/// 查询先前操作是否完成。
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>true: 操作已完成, false: 操作仍在执行中</returns>
public virtual async Task<bool> _OPC(CancellationToken ct = default)
{
string res = await WriteReadAsync($"*OPC?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -70,6 +78,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 控制示波器开始捕获波形
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task _RUN(CancellationToken ct = default)
{
await SendAsync($":TRIGger:RUN{ScpiDelimiter}", ct);
@@ -78,6 +87,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 停止捕获波形
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task _STOP(CancellationToken ct = default)
{
await SendAsync($"TRIGger:STOP{ScpiDelimiter}", ct);
@@ -86,6 +96,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 强制示波器进入单次触发捕获模式
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task _SINGLE(CancellationToken ct = default)
{
await SendAsync($":TRIGger:MODE SINGle{ScpiDelimiter}", ct);
@@ -94,6 +105,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 触发一次波形采样
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"::TRIGger:MODE FTRIG{ScpiDelimiter}", ct);
@@ -136,6 +148,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 开启或关闭指定的模拟通道 (符合手册 57 页规范)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="enable">true: 开启通道, false: 关闭通道</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int channel, bool enable, CancellationToken ct = default)
{
string state = enable ? "ON" : "OFF";
@@ -145,6 +160,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置指定通道的垂直电压档位 (Volts/Div)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="volts">电压档位 (Volts/Div)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int channel, double volts, CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "C{0}:VDIV {1:F4}{2}", channel, volts, ScpiDelimiter);
@@ -154,6 +172,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道当前的电压档位
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="ct">取消令牌</param>
/// <returns>当前电压档位值 (Volts/Div)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
return await WriteReadAsync($"C{channel}:VDIV?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -162,6 +183,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置指定通道的垂直偏移量 (Offset)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="offset">垂直偏移量 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int channel, double offset, CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "C{0}:OFST {1:F4}{2}", channel, offset, ScpiDelimiter);
@@ -178,6 +202,13 @@ namespace DeviceCommand.Devices
/// <summary>1MΩ 阻抗</summary>
ONEM
}
/// <summary>
/// 设置指定通道的输入阻抗类型
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="impedance">阻抗类型枚举 (FIFty: 50Ω, ONEM: 1MΩ)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int channel, ImpedanceType impedance, CancellationToken ct = default)
{
// 例如发送:C1:IMPedance FIFty\n 或 C1:IMPedance ONEM\n
@@ -192,6 +223,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置示波器的水平时基档位 (Time/Div)
/// </summary>
/// <param name="scale">水平时基档位 (Time/Div)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double scale, CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "TDIV {0:E6}{1}", scale, ScpiDelimiter);
@@ -201,6 +234,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置示波器的触发水平延迟位置 (Horizontal Delay)
/// </summary>
/// <param name="delay">水平延迟位置 (单位: s)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double delay, CancellationToken ct = default)
{
string cmd = string.Format(CultureInfo.InvariantCulture, "TRDL {0:E6}{1}", delay, ScpiDelimiter);
@@ -214,6 +249,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置边沿触发的电平值 (Trigger Level)
/// </summary>
/// <param name="level">触发电平值 (单位: V)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (double level, CancellationToken ct = default)
{
@@ -224,6 +261,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 设置边沿触发的触发源 (例如: C1, C2, C3, C4, EX, LINE)
/// </summary>
/// <param name="source">触发源通道标识 (例如: "C1", "C2", "EX", "LINE")</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (string source, CancellationToken ct = default)
{
await SendAsync($"TRSE EDGE,SR,{source.ToUpper()}{ScpiDelimiter}", ct);
@@ -236,6 +275,10 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道自动测量项的当前实时测量数值
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="paramName">测量参数名称 (如 "PKPK", "FREQ", "RMS" 等)</param>
/// <param name="ct">取消令牌</param>
/// <returns>测量参数的实时数值字符串</returns>
public virtual async Task<string> (int channel, string paramName, CancellationToken ct = default)
{
string query = string.Format(CultureInfo.InvariantCulture, "C{0}:PAVA? {1}{2}", channel, paramName.ToUpper(), ScpiDelimiter);
@@ -245,6 +288,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的电压峰峰值 (Vpp)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="ct">取消令牌</param>
/// <returns>电压峰峰值 (Vpp)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
return await (channel, "PKPK", ct);
@@ -253,6 +299,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的频率值 (Frequency)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="ct">取消令牌</param>
/// <returns>频率值 (单位: Hz)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
return await (channel, "FREQ", ct);
@@ -261,6 +310,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的真均方根电压值 (Vrms)
/// </summary>
/// <param name="channel">通道号 (1 - 4)</param>
/// <param name="ct">取消令牌</param>
/// <returns>真均方根电压值 (Vrms)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
return await (channel, "RMS", ct);
@@ -269,6 +321,7 @@ namespace DeviceCommand.Devices
#endregion
#region 7.
/// <summary>
/// 【一键获取并保存截图】
/// 自动下发 :PRINt? PNG 指令,接收示波器返回的纯 PNG 二进制流并直接保存到指定路径。
/// </summary>
@@ -323,4 +376,4 @@ namespace DeviceCommand.Devices
#endregion
}
}
}
+32 -1
View File
@@ -27,6 +27,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 清除状态命令。清除标准事件状态寄存器和错误队列
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
@@ -42,6 +43,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取功率分析仪识别字符串(制造商、产品型号、系统 SN、软件版本号)
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>设备标识字符串(制造商, 产品型号, 系统 SN, 软件版本号)</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -50,6 +53,7 @@ namespace DeviceCommand.Devices
/// <summary>
/// 复位命令。使功率分析仪恢复到出厂默认配置状态
/// </summary>
/// <param name="ct">取消令牌</param>
public virtual async Task (CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct);
@@ -58,6 +62,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 读取标准状态字节寄存器
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>标准状态字节寄存器值</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -70,6 +76,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的实时 RMS 电压值 (单位: V)
/// </summary>
/// <param name="channel">通道号/单元号</param>
/// <param name="ct">取消令牌</param>
/// <returns>实时 RMS 电压值 (单位: V)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
// 1. 先配置 ITEM1 为指定通道的电压有效值 (URMS)
@@ -84,6 +93,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的实时 RMS 电流值 (单位: A)
/// </summary>
/// <param name="channel">通道号/单元号</param>
/// <param name="ct">取消令牌</param>
/// <returns>实时 RMS 电流值 (单位: A)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
// 1. 配置 ITEM1 为指定通道的电流有效值 (IRMS)
@@ -98,6 +110,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的实时有功功率值 (单位: W)
/// </summary>
/// <param name="channel">通道号/单元号</param>
/// <param name="ct">取消令牌</param>
/// <returns>实时有功功率值 (单位: W)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
// 1. 配置 ITEM1 为指定通道的有功功率 (P)
@@ -112,6 +127,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的实时频率值 (单位: Hz)
/// </summary>
/// <param name="channel">通道号/单元号</param>
/// <param name="ct">取消令牌</param>
/// <returns>实时频率值 (单位: Hz)</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
// 1. 配置 ITEM1 为指定通道的电压频率 (FU)
@@ -126,6 +144,9 @@ namespace DeviceCommand.Devices
/// <summary>
/// 查询指定通道的功率因数 (Power Factor)
/// </summary>
/// <param name="channel">通道号/单元号</param>
/// <param name="ct">取消令牌</param>
/// <returns>功率因数值</returns>
public virtual async Task<string> (int channel, CancellationToken ct = default)
{
// 1. 配置 ITEM1 为指定通道的功率因数 (LAMBda)
@@ -204,6 +225,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 14. 查询仪器型号名称
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>仪器型号名称字符串</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:MODel?{ScpiDelimiter}", ScpiDelimiter, ct); //
@@ -212,6 +235,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 16. 查询仪器唯一序列号
/// </summary>
/// <param name="ct">取消令牌</param>
/// <returns>仪器唯一序列号字符串</returns>
public virtual async Task<string> (CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:SERial?{ScpiDelimiter}", ScpiDelimiter, ct); //
@@ -221,6 +246,7 @@ namespace DeviceCommand.Devices
/// 15. 设置数值数据显示的分辨率 (5位或6位)
/// </summary>
/// <param name="resolution">有效值只能为 5 或 6</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int resolution, CancellationToken ct = default)
{
if (resolution != 5 && resolution != 6) throw new ArgumentException("分辨率只能设置为 5 或 6 位");
@@ -230,6 +256,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 13. 设置或查询屏幕 LCD 的亮度级别 (1-10)
/// </summary>
/// <param name="brightness">亮度级别 (范围: 1 - 10)</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (int brightness, CancellationToken ct = default)
{
if (brightness < 1 || brightness > 10) throw new ArgumentOutOfRangeException(nameof(brightness), "亮度范围必须在 1~10 之间");
@@ -239,6 +267,8 @@ namespace DeviceCommand.Devices
/// <summary>
/// 18. 设置或查询触摸锁的开/关状态 (锁定时防止人工误触触控屏)
/// </summary>
/// <param name="isLocked">true: 锁定触摸, false: 解锁触摸</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (bool isLocked, CancellationToken ct = default)
{
string state = isLocked ? "ON" : "OFF";
@@ -249,6 +279,7 @@ namespace DeviceCommand.Devices
/// 17. 设置或读取分析仪当前的系统内部时间
/// </summary>
/// <param name="timeStr">格式必须为 "HH:MM:SS"</param>
/// <param name="ct">取消令牌</param>
public virtual async Task (string timeStr, CancellationToken ct = default)
{
await SendAsync($":SYSTem:TIME \"{timeStr}\"{ScpiDelimiter}", ct); //
@@ -256,4 +287,4 @@ namespace DeviceCommand.Devices
#endregion
}
}
}