diff --git a/ADP/App.xaml.cs b/ADP/App.xaml.cs
index 080d5e0..bc61c49 100644
--- a/ADP/App.xaml.cs
+++ b/ADP/App.xaml.cs
@@ -84,8 +84,8 @@ namespace ADP
return;
}
- string strUserSn = "ACA89B2C1194650D4E93D97BE189FFCC";
- string strApiKey = "C6D01BCD442347822876F8232245DE9422643C167B8C61CE4DF6049990E7395588675A8FC6AA4BF7AD353D669C993236BEA83F77551753885A47AF34185CC3A7";
+ string strUserSn = "ACC77E6F627236F3D02FA8EA1BE35794";
+ string strApiKey = "9185203127F9DE4FB4BC2F073F6CC583D9BED1B6713EF00A0C06625EDD0FAE862164280F5B2AADC090C4878E96DDFE05DDE3952F9B6F1FA483A340FB34A5D83B";
Byte[] buffer = new Byte[256];
buffer = System.Text.Encoding.Default.GetBytes(strUserSn);
diff --git a/Command/Command.csproj b/Command/Command.csproj
index 0eabc2b..5b176ff 100644
--- a/Command/Command.csproj
+++ b/Command/Command.csproj
@@ -4,6 +4,7 @@
net8.0
enable
enable
+ true
diff --git a/Common/Common.csproj b/Common/Common.csproj
index 366108e..94a29c3 100644
--- a/Common/Common.csproj
+++ b/Common/Common.csproj
@@ -4,6 +4,7 @@
net8.0
enable
enable
+ true
diff --git a/DeviceCommand/DeviceCommand.csproj b/DeviceCommand/DeviceCommand.csproj
index ca7efa5..998d41b 100644
--- a/DeviceCommand/DeviceCommand.csproj
+++ b/DeviceCommand/DeviceCommand.csproj
@@ -4,6 +4,7 @@
net8.0
enable
enable
+ true
diff --git a/DeviceCommand/Devices/GantryControlTcp.cs b/DeviceCommand/Devices/GantryControlTcp.cs
index 9040925..b339ed9 100644
--- a/DeviceCommand/Devices/GantryControlTcp.cs
+++ b/DeviceCommand/Devices/GantryControlTcp.cs
@@ -85,6 +85,8 @@ namespace DeviceCommand.Devices
/// 轴使能控制
///
/// 轴编号 (1 - 6)
+ /// true: 使能轴, false: 禁用轴
+ /// 取消令牌
public async Task SetAxisEnableAsync(int axis, bool enable, CancellationToken ct = default)
{
ushort address = axis switch
@@ -105,6 +107,8 @@ namespace DeviceCommand.Devices
/// 读取指定轴的使能状态
///
/// 1: X轴, 2: Y轴, 3: Z轴
+ /// 取消令牌
+ /// true: 已使能, false: 未使能
public async Task GetAxisEnableAsync(int axis, CancellationToken ct = default)
{
ushort address = axis switch
@@ -125,6 +129,7 @@ namespace DeviceCommand.Devices
/// X轴原点位置 (范围: 0 ~ 50000)
/// Y轴原点位置 (范围: 0 ~ 50000)
/// Z轴原点位置 (范围: 0 ~ 20000)
+ /// 取消令牌
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
///
/// 批量查询当前 X、Y、Z 三轴设定的原点位置值
///
+ /// 取消令牌
/// 返回包含三轴原点位置的元组 (X, Y, Z)
public async Task<(int X, int Y, int Z)> GetHomePositionAsync(CancellationToken ct = default)
{
@@ -163,6 +169,8 @@ namespace DeviceCommand.Devices
///
/// 设置回原点定位速度(带 0 - 100000 范围检查)
///
+ /// 回原点定位速度 (范围: 0 - 100000)
+ /// 取消令牌
public async Task SetHomePositionSpeedAsync(int speed, CancellationToken ct = default)
{
if (speed < 0 || speed > 100000)
@@ -174,6 +182,8 @@ namespace DeviceCommand.Devices
///
/// 查询当前设定的回原点定位速度
///
+ /// 取消令牌
+ /// 当前回原点定位速度值
public async Task 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 范围检查)
///
/// 1: X轴, 2: Y轴, 3: Z轴
+ /// 运行速度 (范围: 0 - 100000)
+ /// 取消令牌
public async Task SetAxisSpeedAsync(int axis, int speed, CancellationToken ct = default)
{
if (speed < 0 || speed > 100000)
@@ -207,6 +219,9 @@ namespace DeviceCommand.Devices
///
/// 读取指定轴当前设定的运行速度
///
+ /// 1: X轴, 2: Y轴, 3: Z轴
+ /// 取消令牌
+ /// 当前设定的运行速度值
public async Task GetAxisSpeedAsync(int axis, CancellationToken ct = default)
{
ushort address = axis switch
@@ -227,6 +242,9 @@ namespace DeviceCommand.Devices
///
/// 写入指定轴的目标位置(动态安全校验:目标位置不能超过 [轴最大物理极限 - 当前轴原点设置值])
///
+ /// 1: X轴, 2: Y轴, 3: Z轴
+ /// 目标位置
+ /// 取消令牌
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
///
/// 读取指定轴当前设定的目标指定位置
///
+ /// 1: X轴, 2: Y轴, 3: Z轴
+ /// 取消令牌
+ /// 当前设定的目标位置值
public async Task GetAxisTargetPositionAsync(int axis, CancellationToken ct = default)
{
ushort address = axis switch
@@ -293,6 +314,8 @@ namespace DeviceCommand.Devices
///
/// 设置系统紧停锁定状态 (true: 锁定激活, false: 解除锁定)
///
+ /// true: 锁定激活, false: 解除锁定
+ /// 取消令牌
public async Task SetEStopStateAsync(bool state, CancellationToken ct = default)
{
await WriteSingleCoilAsync(_slaveAddress, ADDR_M_ESTOP, state, ct);
@@ -301,6 +324,9 @@ namespace DeviceCommand.Devices
///
/// 设置指定轴的停止控制状态 (true: 持续输出停止信号, false: 释放停止信号)
///
+ /// 1: X轴, 2: Y轴, 3: Z轴
+ /// true: 持续输出停止信号, false: 释放停止信号
+ /// 取消令牌
public async Task SetStopStateAsync(int axis, bool state, CancellationToken ct = default)
{
ushort address = axis switch
@@ -317,6 +343,7 @@ namespace DeviceCommand.Devices
///
/// 全局回零(安全校验版:先检查回原点速度是否为 0,为0则拒绝触发)
///
+ /// 取消令牌
public async Task HomeAsync(CancellationToken ct = default)
{
int currentSpeed = await GetHomePositionSpeedAsync(ct);
@@ -331,6 +358,7 @@ namespace DeviceCommand.Devices
/// 单轴指定位置启动(含速度判定、使能自动补齐、动作目标位置独立范围校验)
///
/// 1: X轴, 2: Y轴, 3: Z轴
+ /// 取消令牌
public async Task StartSingleAxisAsync(int axis, CancellationToken ct = default)
{
ushort startAddress;
@@ -388,6 +416,7 @@ namespace DeviceCommand.Devices
///
/// 三轴同时启动(全开:严格校验全部运行轴速度、批量检测与补正1~6号轴使能、联动校验三轴目标范围极限)
///
+ /// 取消令牌
public async Task StartAllAxesAsync(CancellationToken ct = default)
{
// 1. 一次性读取三轴速度,严禁任何一轴速度为 0
@@ -493,6 +522,8 @@ namespace DeviceCommand.Devices
/// 读取指定轴的绝对位置(相对原点的实时位置,只读)
///
/// 轴编号 (1-6)
+ /// 取消令牌
+ /// 指定轴的绝对位置值
public async Task GetAbsolutePositionAsync(int axis, CancellationToken ct = default)
{
ushort address = axis switch
@@ -516,6 +547,7 @@ namespace DeviceCommand.Devices
///
/// 批量读取 1-6 轴的绝对位置(一次性读取 22 个寄存器,高效)
///
+ /// 取消令牌
/// 返回 6 轴绝对位置元组
public async Task<(int Axis1, int Axis2, int Axis3, int Axis4, int Axis5, int Axis6)> GetAllAbsolutePositionsAsync(CancellationToken ct = default)
{
diff --git a/DeviceCommand/Devices/IT7800E.cs b/DeviceCommand/Devices/IT7800E.cs
index a0d8d01..666c2d7 100644
--- a/DeviceCommand/Devices/IT7800E.cs
+++ b/DeviceCommand/Devices/IT7800E.cs
@@ -38,6 +38,21 @@ namespace DeviceCommand.Devices
CURRent
}
+ ///
+ /// 设备相位/输出模式[cite: 2]
+ ///
+ public enum DevicePhaseMode
+ {
+ /// 单相模式
+ ONE,
+ /// 三相模式
+ THRee,
+ /// 反相模式
+ DIFFerence,
+ /// 多通道模式
+ MULTichannel
+ }
+
#endregion
[ADPCommand]
@@ -52,21 +67,39 @@ namespace DeviceCommand.Devices
#region 1. IEEE 488.2 公共命令
+ ///
+ /// 清除错误队列和状态字节
+ ///
+ /// 取消令牌
public virtual async Task 清除错误队列和状态字节(CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct); //[cite: 1]
}
+ ///
+ /// 查询设备标识
+ ///
+ /// 取消令牌
+ /// 设备标识字符串(制造商, 产品型号, 序列号, 固件版本)
public virtual async Task 查询设备标识(CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
+ ///
+ /// 重置设备
+ ///
+ /// 取消令牌
public virtual async Task 重置设备(CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct); //[cite: 1]
}
+ ///
+ /// 读取状态字节
+ ///
+ /// 取消令牌
+ /// 状态字节寄存器值
public virtual async Task 读取状态字节(CancellationToken ct = default)
{
return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -79,6 +112,8 @@ namespace DeviceCommand.Devices
///
/// 设置电源输出源的电气模式/工作耦合模式 (AC, DC, ACDC, DCAC)[cite: 1]
///
+ /// 电气耦合模式 (AC/DC/ACDC/DCAC)
+ /// 取消令牌
public virtual async Task 设置电源模式(PowerCouplingMode 模式, CancellationToken ct = default)
{
await SendAsync($":SOURce:FUNCtion {模式}{ScpiDelimiter}", ct); //[cite: 1]
@@ -87,17 +122,29 @@ namespace DeviceCommand.Devices
///
/// 查询电源当前的工作电气模式[cite: 1]
///
+ /// 取消令牌
+ /// 当前工作电气模式字符串
public virtual async Task 查询电源模式(CancellationToken ct = default)
{
return await WriteReadAsync($":SOURce:FUNCtion?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
+ ///
+ /// 设置DC输出开关
+ ///
+ /// true: 开启输出, false: 关闭输出
+ /// 取消令牌
public virtual async Task 设置DC输出(bool 开启, CancellationToken ct = default)
{
string 参数 = 开启 ? "ON" : "OFF"; //[cite: 1]
await SendAsync($":OUTPut {参数}{ScpiDelimiter}", ct); //[cite: 1]
}
+ ///
+ /// 查询DC输出状态
+ ///
+ /// 取消令牌
+ /// 输出状态字符串(ON 或 OFF)
public virtual async Task 查询DC输出状态(CancellationToken ct = default)
{
return await WriteReadAsync($":OUTPut?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -107,24 +154,44 @@ namespace DeviceCommand.Devices
#region 3. 设定输出参数设置 (AC 电压/频率/DC 电压)
+ ///
+ /// 设置交流电压
+ ///
+ /// 交流电压设定值 (单位: V)
+ /// 取消令牌
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);
}
+ ///
+ /// 设置直流电压
+ ///
+ /// 直流电压设定值 (单位: V)
+ /// 取消令牌
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);
}
+ ///
+ /// 设置频率
+ ///
+ /// 频率设定值 (单位: Hz)
+ /// 取消令牌
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);
}
+ ///
+ /// 设置电流
+ ///
+ /// 电流设定值 (单位: A)
+ /// 取消令牌
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. 测量与数据回测(高频数据轮询核心)
+ ///
+ /// 查询实际电压
+ ///
+ /// 取消令牌
+ /// 实际电压测量值 (单位: V)
[Monitorable("交流电源电压")]
public virtual async Task 查询实际电压(CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:VOLTage?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
+ ///
+ /// 查询实际电流
+ ///
+ /// 取消令牌
+ /// 实际电流测量值 (单位: A)
[Monitorable("交流电源电流")]
public virtual async Task 查询实际电流(CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:CURRent?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
+ ///
+ /// 查询实际功率
+ ///
+ /// 取消令牌
+ /// 实际有功功率测量值 (单位: W)
[Monitorable("交流电源功率")]
public virtual async Task 查询实际功率(CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:POWer?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
+ ///
+ /// 查询视在功率
+ ///
+ /// 取消令牌
+ /// 视在功率测量值 (单位: VA)
public virtual async Task 查询视在功率(CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:POWer:APParent?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
+ ///
+ /// 查询实际频率
+ ///
+ /// 取消令牌
+ /// 实际频率测量值 (单位: Hz)
public virtual async Task 查询实际频率(CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:FREQuency?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
+ ///
+ /// 查询功率因数
+ ///
+ /// 取消令牌
+ /// 功率因数测量值
public virtual async Task 查询功率因数(CancellationToken ct = default)
{
return await WriteReadAsync($":MEASure:POWer:PFACtor?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -172,33 +269,60 @@ namespace DeviceCommand.Devices
#region 5. 保护参数设置与系统监控
+ ///
+ /// 设置过流保护_OCP
+ ///
+ /// 过流保护阈值 (单位: A, RMS值)
+ /// 取消令牌
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);
}
+ ///
+ /// 设置过压保护_OVP
+ ///
+ /// 过压保护阈值 (单位: V, 峰值)
+ /// 取消令牌
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);
}
+ ///
+ /// 查询错误信息
+ ///
+ /// 取消令牌
+ /// 错误代码和描述信息
public virtual async Task 查询错误信息(CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:ERRor?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
}
+ ///
+ /// 切换远程控制模式
+ ///
+ /// 取消令牌
public virtual async Task 切换远程控制模式(CancellationToken ct = default)
{
await SendAsync($":SYSTem:REMote{ScpiDelimiter}", ct); //[cite: 1]
}
+ ///
+ /// 切换本地控制模式
+ ///
+ /// 取消令牌
public virtual async Task 切换本地控制模式(CancellationToken ct = default)
{
await SendAsync($":SYSTem:LOCal{ScpiDelimiter}", ct); //[cite: 1]
}
+ ///
+ /// 清除保护告警
+ ///
+ /// 取消令牌
public virtual async Task 清除保护告警(CancellationToken ct = default)
{
await SendAsync($":OUTPut:PROTection:CLEar{ScpiDelimiter}", ct); //[cite: 1]
@@ -211,6 +335,7 @@ namespace DeviceCommand.Devices
///
/// 清除最近的安时(Ah)与瓦时(Wh)统计数据[cite: 1]
///
+ /// 取消令牌
public virtual async Task 清除充放电电量统计(CancellationToken ct = default)
{
await SendAsync($"SENSe:AHOur:RESet{ScpiDelimiter}", ct); //[cite: 1]
@@ -220,6 +345,8 @@ namespace DeviceCommand.Devices
///
/// 读取当前充放电累计的安时值 (单位: Ah)[cite: 1]
///
+ /// 取消令牌
+ /// 累计安时值 (单位: Ah)
public virtual async Task 查询累计安时_Ah(CancellationToken ct = default)
{
return await WriteReadAsync($"FETCh:AHOur?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -228,6 +355,8 @@ namespace DeviceCommand.Devices
///
/// 读取当前充放电累计的瓦时值 (单位: Wh)[cite: 1]
///
+ /// 取消令牌
+ /// 累计瓦时值 (单位: Wh)
public virtual async Task 查询累计瓦时_Wh(CancellationToken ct = default)
{
return await WriteReadAsync($"FETCh:WHOur?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -236,6 +365,8 @@ namespace DeviceCommand.Devices
///
/// 读取充放电积分持续时间 (单位: 秒)[cite: 1]
///
+ /// 取消令牌
+ /// 积分持续时间 (单位: 秒)
public virtual async Task 查询积分时间(CancellationToken ct = default)
{
return await WriteReadAsync($"FETCh:ENERgy:TIME?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -244,6 +375,8 @@ namespace DeviceCommand.Devices
///
/// 切换设备的操作模式 (VOLTage: 电源模式, LOAD: 负载模式/放电, CURRent: 电流源)[cite: 1]
///
+ /// 操作模式 (VOLTage/LOAD/CURRent)
+ /// 取消令牌
public virtual async Task 设置操作模式(DeviceOperationMode 模式, CancellationToken ct = default)
{
await SendAsync($"SYSTem:OPERation:MODE {模式}{ScpiDelimiter}", ct); //[cite: 1]
@@ -252,6 +385,8 @@ namespace DeviceCommand.Devices
///
/// 设置放电截止电压/电压下限 (单位: V,用于防止电池过放)[cite: 1]
///
+ /// 放电截止电压/电压下限 (单位: V)
+ /// 取消令牌
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]
+
+ ///
+ /// 设置电源相位输出模式 (ONE:单相 / THRee:三相 / DIFFerence:反相 / MULTichannel:多通道)[cite: 2]
+ ///
+ /// 相位输出模式
+ /// 取消令牌
+ public virtual async Task 设置输出模式(DevicePhaseMode 模式, CancellationToken ct = default)
+ {
+ await SendAsync($"SYSTem:FUNCtion {模式}{ScpiDelimiter}", ct); //[cite: 2]
+ }
+
+ ///
+ /// 切换为单相模式 (SYST:FUNC ONE)[cite: 2]
+ ///
+ /// 取消令牌
+ public virtual async Task 切换为单相模式(CancellationToken ct = default)
+ {
+ await SendAsync($"SYSTem:FUNCtion ONE{ScpiDelimiter}", ct); //[cite: 2]
+ }
+
+ ///
+ /// 切换为反相模式 (SYST:FUNC DIFFerence)[cite: 2]
+ ///
+ /// 取消令牌
+ public virtual async Task 切换为反相模式(CancellationToken ct = default)
+ {
+ await SendAsync($"SYSTem:FUNCtion DIFFerence{ScpiDelimiter}", ct); //[cite: 2]
+ }
+
+ ///
+ /// 查询当前输出模式 (单相/三相/反相/多通道)[cite: 2]
+ ///
+ /// 取消令牌
+ /// 返回 ONE, THRee, DIFFerence 或 MULTichannel[cite: 2]
+ public virtual async Task 查询输出模式(CancellationToken ct = default)
+ {
+ return await WriteReadAsync($"SYSTem:FUNCtion?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 2]
+ }
+
+ #endregion
}
}
\ No newline at end of file
diff --git a/DeviceCommand/Devices/N36200.cs b/DeviceCommand/Devices/N36200.cs
index 4144529..2ffe085 100644
--- a/DeviceCommand/Devices/N36200.cs
+++ b/DeviceCommand/Devices/N36200.cs
@@ -27,6 +27,7 @@ namespace DeviceCommand.Devices
///
/// 3.1.1. 清除标准事件状态寄存器和错误队列
///
+ /// 取消令牌
public virtual async Task 清除错误队列和状态字节(CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
@@ -35,6 +36,8 @@ namespace DeviceCommand.Devices
///
/// 3.1.4. 读取直流电源相关信息(制造商、产品型号、系统 SN、软件版本号)
///
+ /// 取消令牌
+ /// 设备标识字符串(制造商, 产品型号, 序列号, 固件版本)
public virtual async Task 查询设备标识(CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -43,6 +46,7 @@ namespace DeviceCommand.Devices
///
/// 3.1.7. 恢复出厂设置 (注意:设备重置保存数据大约需要 10 秒)
///
+ /// 取消令牌
public virtual async Task 重置设备(CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct);
@@ -51,6 +55,8 @@ namespace DeviceCommand.Devices
///
/// 3.1.8. 读取状态字节寄存器(只读寄存器,读取时不会清除位)
///
+ /// 取消令牌
+ /// 状态字节寄存器值
public virtual async Task 读取状态字节(CancellationToken ct = default)
{
return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -63,6 +69,8 @@ namespace DeviceCommand.Devices
///
/// 3.2.1. 设定输出电压值 (单位: V)
///
+ /// 输出电压设定值 (单位: V)
+ /// 取消令牌
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
///
/// 3.2.1. 查询输出电压设定值 (单位: V)
///
+ /// 取消令牌
+ /// 输出电压设定值 (单位: V)
public virtual async Task 查询电压设定(CancellationToken ct = default)
{
return await WriteReadAsync($"SOURce:VOLTage?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -80,6 +90,8 @@ namespace DeviceCommand.Devices
///
/// 3.2.2. 设置输出限流值 (单位: A)
///
+ /// 输出限流设定值 (单位: A)
+ /// 取消令牌
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
///
/// 3.2.2. 查询输出限流值设定值 (单位: A)
///
+ /// 取消令牌
+ /// 输出限流设定值 (单位: A)
public virtual async Task 查询电流设定(CancellationToken ct = default)
{
return await WriteReadAsync($"SOURce:CURRent?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -97,6 +111,8 @@ namespace DeviceCommand.Devices
///
/// 3.2.3. 设置输出模拟内阻值 (单位: mΩ)
///
+ /// 模拟内阻设定值 (单位: mΩ)
+ /// 取消令牌
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
///
/// 3.2.4. 保存当前测试参数到指定存储组 (范围: 1-10)
///
+ /// 存储组编号 (范围: 1-10)
+ /// 取消令牌
public virtual async Task 保存测试参数(int 组别, CancellationToken ct = default)
{
if (组别 < 1 || 组别 > 10) throw new ArgumentOutOfRangeException(nameof(组别), "组别有效范围为 1~10");
@@ -115,6 +133,8 @@ namespace DeviceCommand.Devices
///
/// 3.2.5. 调用指定存储组的测试参数 (范围: 1-10)
///
+ /// 存储组编号 (范围: 1-10)
+ /// 取消令牌
public virtual async Task 调用测试参数(int 组别, CancellationToken ct = default)
{
if (组别 < 1 || 组别 > 10) throw new ArgumentOutOfRangeException(nameof(组别), "组别有效范围为 1~10");
@@ -128,6 +148,8 @@ namespace DeviceCommand.Devices
///
/// 3.3.1. 控制电源输出开关 (True: 开启, False: 关闭)
///
+ /// true: 开启输出, false: 关闭输出
+ /// 取消令牌
public virtual async Task 设置DC输出(bool 开启, CancellationToken ct = default)
{
string 参数 = 开启 ? "ON" : "OFF";
@@ -137,6 +159,8 @@ namespace DeviceCommand.Devices
///
/// 3.3.1. 查询电源输出开关状态 (返回 "ON" 或 "OFF")
///
+ /// 取消令牌
+ /// 输出开关状态字符串("ON" 或 "OFF")
public virtual async Task 查询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: 外部编程)
///
+ /// 工作模式 (NORMal/CHARge/SEQuence/CPOWer/CARWave/APG)
+ /// 取消令牌
public virtual async Task 设置运行模式(string 模式, CancellationToken ct = default)
{
await SendAsync($"OUTPut:MODE {模式}{ScpiDelimiter}", ct);
@@ -154,6 +180,8 @@ namespace DeviceCommand.Devices
///
/// 3.3.2. 查询电源当前运行工作模式
///
+ /// 取消令牌
+ /// 当前运行工作模式字符串
public virtual async Task 查询运行模式(CancellationToken ct = default)
{
return await WriteReadAsync($"OUTPut:MODE?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -162,6 +190,8 @@ namespace DeviceCommand.Devices
///
/// 3.3.11. 设置电源输出 CV/CC 优先权 (CV 或 CC)
///
+ /// 优先模式,只能为 "CV" 或 "CC"
+ /// 取消令牌
public virtual async Task 设置CVCC优先权(string 优先模式, CancellationToken ct = default)
{
if (优先模式 != "CV" && 优先模式 != "CC") throw new ArgumentException("优先模式只能为 'CV' 或 'CC'");
@@ -171,6 +201,8 @@ namespace DeviceCommand.Devices
///
/// 3.3.12. 获取电源状态字(通过解析返回整数的二进制 Bit 位获取全状态环路及告警)
///
+ /// 取消令牌
+ /// 电源状态字(整数字符串,通过二进制位标识各状态及告警)
public virtual async Task 查询设备状态字(CancellationToken ct = default)
{
return await WriteReadAsync($"OUTPut:STATe?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -179,6 +211,8 @@ namespace DeviceCommand.Devices
///
/// 3.3.13. 获取电源事件告警状态值 (返回整数通过位定义标识 UVP/OVP/OCP/OPP/OTP)
///
+ /// 取消令牌
+ /// 事件告警状态值(整数字符串,通过位定义标识 UVP/OVP/OCP/OPP/OTP)
public virtual async Task 查询事件告警状态(CancellationToken ct = default)
{
return await WriteReadAsync($"OUTPut:EVENT?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -187,6 +221,7 @@ namespace DeviceCommand.Devices
///
/// 3.3.13. 清除当前的告警状态
///
+ /// 取消令牌
public virtual async Task 清除告警(CancellationToken ct = default)
{
await SendAsync($"OUTPut:EVENT 0{ScpiDelimiter}", ct);
@@ -195,6 +230,8 @@ namespace DeviceCommand.Devices
///
/// 3.3.16. 打开/关闭设备定时关机功能
///
+ /// true: 开启定时关机, false: 关闭定时关机
+ /// 取消令牌
public virtual async Task 设置定时关机开关(bool 开启, CancellationToken ct = default)
{
string 参数 = 开启 ? "ON" : "OFF";
@@ -204,6 +241,8 @@ namespace DeviceCommand.Devices
///
/// 3.3.17. 设定设备定时关机倒计时时间 (单位: s)
///
+ /// 定时关机倒计时时间 (单位: s)
+ /// 取消令牌
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
///
/// 3.3.18. 控制泄放电路(Bleeder)开关状态
///
+ /// true: 开启泄放电路, false: 关闭泄放电路
+ /// 取消令牌
public virtual async Task 设置泄放电路开关(bool 开启, CancellationToken ct = default)
{
string 参数 = 开启 ? "ON" : "OFF";
@@ -226,6 +267,8 @@ namespace DeviceCommand.Devices
///
/// 3.4.1. 回读通道输出端子上的实时测得电压值 (单位: V)
///
+ /// 取消令牌
+ /// 实时测量电压值 (单位: V)
[Monitorable("高压直流电源电压")]
public virtual async Task 查询实际电压(CancellationToken ct = default)
{
@@ -235,6 +278,8 @@ namespace DeviceCommand.Devices
///
/// 3.4.2. 回读通道输出端子上的实时测得电流值 (单位: A)
///
+ /// 取消令牌
+ /// 实时测量电流值 (单位: A)
[Monitorable("高压直流电源电流")]
public virtual async Task 查询实际电流(CancellationToken ct = default)
{
@@ -244,6 +289,8 @@ namespace DeviceCommand.Devices
///
/// 3.4.3. 回读通道输出端子上的实时测得功率值 (单位: W)
///
+ /// 取消令牌
+ /// 实时测量功率值 (单位: W)
[Monitorable("高压直流电源功率")]
public virtual async Task 查询实际功率(CancellationToken ct = default)
{
@@ -253,6 +300,8 @@ namespace DeviceCommand.Devices
///
/// 3.4.4. 回读电池充电模式下当前累计已充入的容量值 (单位: mAh)
///
+ /// 取消令牌
+ /// 累计已充入容量值 (单位: mAh)
public virtual async Task 查询已充电容量MAH(CancellationToken ct = default)
{
return await WriteReadAsync($"MEASure:MAH?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -261,6 +310,8 @@ namespace DeviceCommand.Devices
///
/// 3.4.5. 获取当前电源的硬件额定电压上限值 (单位: V)
///
+ /// 取消令牌
+ /// 硬件额定电压上限值 (单位: V)
public virtual async Task 获取设备额定电压(CancellationToken ct = default)
{
return await WriteReadAsync($"MEASure:VOLTage:MAXimum?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -269,6 +320,8 @@ namespace DeviceCommand.Devices
///
/// 3.4.6. 获取当前电源的硬件额定电流上限值 (单位: A)
///
+ /// 取消令牌
+ /// 硬件额定电流上限值 (单位: A)
public virtual async Task 获取设备额定电流(CancellationToken ct = default)
{
return await WriteReadAsync($"MEASure:CURRent:MAXimum?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -281,6 +334,8 @@ namespace DeviceCommand.Devices
///
/// 3.5.1. 设置欠压保护门限值 (单位: V)
///
+ /// 欠压保护门限值 (单位: V)
+ /// 取消令牌
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
///
/// 3.5.4. 设置过压保护门限值 (单位: V)
///
+ /// 过压保护门限值 (单位: V)
+ /// 取消令牌
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
///
/// 3.5.6. 设置硬件硬件过流保护硬指标参数 (单位: A)
///
+ /// 过流保护硬指标参数 (单位: A)
+ /// 取消令牌
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
///
/// 3.5.8. 设置硬件过功率保护门限值 (单位: W)
///
+ /// 过功率保护门限值 (单位: W)
+ /// 取消令牌
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
///
/// 3.5.12. 设置可调节的用户软输出电压下限值 (单位: V)
///
+ /// 输出电压下限值 (单位: V)
+ /// 取消令牌
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
///
/// 3.5.13. 设置可调节的用户软输出电压上限值 (单位: V)
///
+ /// 输出电压上限值 (单位: V)
+ /// 取消令牌
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
///
/// 3.5.14. 设置可调节的用户软输出电流下限值 (单位: A)
///
+ /// 输出电流下限值 (单位: A)
+ /// 取消令牌
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
///
/// 3.5.15. 设置可调节的用户软输出电流上限值 (单位: A)
///
+ /// 输出电流上限值 (单位: A)
+ /// 取消令牌
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
///
/// 3.6.1. 设定恒功率工作模式下的限定电压值 (单位: V)
///
+ /// 恒功率模式限定电压值 (单位: V)
+ /// 取消令牌
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
///
/// 3.6.2. 设定恒功率工作模式下的限定电流值 (单位: A)
///
+ /// 恒功率模式限定电流值 (单位: A)
+ /// 取消令牌
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
///
/// 3.6.3. 设定恒功率工作模式下的运行功率目标值 (单位: W)
///
+ /// 恒功率模式运行功率目标值 (单位: W)
+ /// 取消令牌
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
}
-}
\ No newline at end of file
+}
diff --git a/DeviceCommand/Devices/N36600.cs b/DeviceCommand/Devices/N36600.cs
index 5520978..9e24038 100644
--- a/DeviceCommand/Devices/N36600.cs
+++ b/DeviceCommand/Devices/N36600.cs
@@ -30,6 +30,8 @@ namespace DeviceCommand.Devices
///
/// 建立 TCP 连接,成功后自动激活心跳
///
+ /// 取消令牌
+ /// 连接是否成功
public new async Task ConnectAsync(CancellationToken ct = default)
{
bool isConnected = await base.ConnectAsync(ct);
@@ -124,6 +126,8 @@ namespace DeviceCommand.Devices
///
/// 3.1.1 读取电源的相关信息(制造商, 产品标号, 产品序列号, 软件版本号)
///
+ /// 取消令牌
+ /// 设备标识字符串(制造商, 产品标号, 产品序列号, 软件版本号)
public virtual async Task 查询设备标识(CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{SCPIDelimiter}", SCPIDelimiter, ct);
@@ -132,6 +136,8 @@ namespace DeviceCommand.Devices
///
/// 3.1.2 从指定的单位中恢复 *SAV 命令保存的设定值 (参数:1~99)
///
+ /// 存储组编号 (范围: 1~99)
+ /// 取消令牌
public virtual async Task 调用存储状态(int 组别, CancellationToken ct = default)
{
if (组别 < 1 || 组别 > 99) throw new ArgumentOutOfRangeException(nameof(组别), "组别有效范围为 1~99");
@@ -141,6 +147,8 @@ namespace DeviceCommand.Devices
///
/// 3.1.3 将仪器当前系统状态保存到非易失性内存中 (参数:1~99)
///
+ /// 存储组编号 (范围: 1~99)
+ /// 取消令牌
public virtual async Task 保存当前状态(int 组别, CancellationToken ct = default)
{
if (组别 < 1 || 组别 > 99) throw new ArgumentOutOfRangeException(nameof(组别), "组别有效范围为 1~99");
@@ -150,6 +158,7 @@ namespace DeviceCommand.Devices
///
/// 3.1.4 远程控制触发一次
///
+ /// 取消令牌
public virtual async Task 远程触发(CancellationToken ct = default)
{
await SendAsync($"*TRG{SCPIDelimiter}", ct);
@@ -158,6 +167,8 @@ namespace DeviceCommand.Devices
///
/// 3.1.5 返回状态、采集电压、采集电流 (格式: 状态码,电压值,电流值)
///
+ /// 取消令牌
+ /// 状态码,电压值,电流值的组合字符串
public virtual async Task 查询全部状态及采样(CancellationToken ct = default)
{
return await WriteReadAsync($"*ALL?{SCPIDelimiter}", SCPIDelimiter, ct);
@@ -170,6 +181,9 @@ namespace DeviceCommand.Devices
///
/// 3.2.1 设置输出电压和输出电流值
///
+ /// 输出电压设定值 (单位: V)
+ /// 输出电流设定值 (单位: A)
+ /// 取消令牌
public virtual async Task 快捷设置电压电流(double 电压, double 电流, CancellationToken ct = default)
{
// 修正:去除前缀冒号,规范应用 APPL 短格式
@@ -180,6 +194,8 @@ namespace DeviceCommand.Devices
///
/// 3.2.1 查询当前设定的输出电压和电流值
///
+ /// 取消令牌
+ /// 当前输出电压和电流设定值的组合字符串
public virtual async Task 查询快捷电压电流设定(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -193,6 +209,8 @@ namespace DeviceCommand.Devices
///
/// 3.5.1 查询通道输出端子上测得的直流电流值 (A)
///
+ /// 取消令牌
+ /// 实测直流电流值 (单位: A)
[Monitorable("低压直流电源电流")]
public virtual async Task 查询实际电流(CancellationToken ct = default)
{
@@ -203,6 +221,8 @@ namespace DeviceCommand.Devices
///
/// 3.5.2 查询通道输出端子上测得的直流功率值 (W)
///
+ /// 取消令牌
+ /// 实测直流功率值 (单位: W)
[Monitorable("低压直流电源功率")]
public virtual async Task 查询实际功率(CancellationToken ct = default)
{
@@ -213,6 +233,8 @@ namespace DeviceCommand.Devices
///
/// 3.5.3 查询通道输出端子上测得的直流电压值 (V)
///
+ /// 取消令牌
+ /// 实测直流电压值 (单位: V)
[Monitorable("低压直流电源电压")]
public virtual async Task 查询实际电压(CancellationToken ct = default)
{
@@ -223,6 +245,8 @@ namespace DeviceCommand.Devices
///
/// 3.5.4 查询通道输出端子上测得的电压、电流和功率的组合值
///
+ /// 取消令牌
+ /// 电压、电流和功率的组合值字符串
public virtual async Task 查询电压电流功率数组(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -233,6 +257,8 @@ namespace DeviceCommand.Devices
///
/// 3.5.5 查询通道输出端子上测得的输出时间长度
///
+ /// 取消令牌
+ /// 输出时间长度
public virtual async Task 查询总输出时间长度(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -246,6 +272,8 @@ namespace DeviceCommand.Devices
///
/// 3.6.1 设置电源输出开关
///
+ /// true: 开启输出, false: 关闭输出
+ /// 取消令牌
public virtual async Task 设置DC输出(bool 开启, CancellationToken ct = default)
{
// 修正:去除前缀冒号,改用 OUTP 短格式
@@ -256,6 +284,8 @@ namespace DeviceCommand.Devices
///
/// 3.6.1 查询通道输出状态 (返回 ON 或 OFF)
///
+ /// 取消令牌
+ /// 通道输出状态字符串("ON" 或 "OFF")
public virtual async Task 查询DC输出状态(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -265,6 +295,8 @@ namespace DeviceCommand.Devices
///
/// 3.6.2 控制电源输出定时器的开关状态
///
+ /// true: 开启定时器, false: 关闭定时器
+ /// 取消令牌
public virtual async Task 设置定时器状态(bool 开启, CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -275,6 +307,8 @@ namespace DeviceCommand.Devices
///
/// 3.6.3 设定电源输出定时器的时间 (单位: s, 范围: 0.1 ~ 999999.9)
///
+ /// 定时器时间 (单位: s, 范围: 0.1 ~ 999999.9)
+ /// 取消令牌
public virtual async Task 设置定时器时间(double 秒数, CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -285,6 +319,8 @@ namespace DeviceCommand.Devices
///
/// 3.6.4 设定电源输出的模式优先权 (CV优先 或 CC优先)
///
+ /// true: CV优先, false: CC优先
+ /// 取消令牌
public virtual async Task 设置输出模式优先(bool 是CV优先, CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -299,6 +335,7 @@ namespace DeviceCommand.Devices
///
/// 3.7.1.1 清除输出电流保护(OCP)电路状态
///
+ /// 取消令牌
public virtual async Task 清除电流保护状态(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -308,6 +345,8 @@ namespace DeviceCommand.Devices
///
/// 3.7.1.2 使能或禁止当前输出电流保护(OCP)电路
///
+ /// true: 使能OCP, false: 禁止OCP
+ /// 取消令牌
public virtual async Task 设置电流保护使能(bool 启用, CancellationToken ct = default)
{
// 修正:去除前缀冒号,将 STATE 改为更常用的 STAT 简写
@@ -318,6 +357,8 @@ namespace DeviceCommand.Devices
///
/// 3.7.1.4 设置输出电流保护(OCP)阀值 (A)
///
+ /// OCP 保护阀值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置过流保护值(double 电流, CancellationToken ct = default)
{
// 修正:去除前缀冒号。按 NGI 通用指令树,加上层级限制或者直接作用于 CURR:PROT
@@ -328,6 +369,8 @@ namespace DeviceCommand.Devices
///
/// 3.7.1.7 设置电源的输出电流值 (A)
///
+ /// 输出电流设定值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置电流(double 电流, CancellationToken ct = default)
{
// 修正:去除前缀冒号,改用标准 CURR 短格式
@@ -338,6 +381,7 @@ namespace DeviceCommand.Devices
///
/// 3.7.2.1 清除输出电压保护(OVP)电路状态
///
+ /// 取消令牌
public virtual async Task 清除电压保护状态(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -347,6 +391,8 @@ namespace DeviceCommand.Devices
///
/// 3.7.2.2 使能或禁止当前输出电压保护(OVP)电路
///
+ /// true: 使能OVP, false: 禁止OVP
+ /// 取消令牌
public virtual async Task 设置电压保护使能(bool 启用, CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -357,6 +403,8 @@ namespace DeviceCommand.Devices
///
/// 3.7.2.4 设置输出电压保护(OVP)阀值 (V)
///
+ /// OVP 保护阀值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置过压保护值(double 电压, CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -367,6 +415,8 @@ namespace DeviceCommand.Devices
///
/// 3.7.2.7 设置电源的输出电压值 (V)
///
+ /// 输出电压设定值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置电压(double 电压, CancellationToken ct = default)
{
// 修正:去除前缀冒号,改用标准 VOLT 短格式
@@ -377,6 +427,8 @@ namespace DeviceCommand.Devices
///
/// 3.7.2.8 设定电压输出范围的上限电压值 (V)
///
+ /// 上限电压值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置电压上限限制(double 电压, CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -386,14 +438,17 @@ namespace DeviceCommand.Devices
///
/// 3.7.2.9 清除电压上限限制(恢复为设备物理允许的最大电压值)
///
+ /// 取消令牌
public virtual async Task 清除电压上限限制(CancellationToken ct = default)
{
- // 发送 MAXimum 设为最大值以达到“清除限制”的效果
+ // 发送 MAXimum 设为最大值以达到"清除限制"的效果
await SendAsync($"VOLT:LIMIT MAX{SCPIDelimiter}", ct); // 对应手册 3.7.2.8
}
///
/// 3.7.3.1 设置输出功率值 (W)
///
+ /// 输出功率设定值 (单位: W)
+ /// 取消令牌
public virtual async Task 设置功率(double 功率, CancellationToken ct = default)
{
// 修正:去除前缀冒号,改用标准 POW 短格式
@@ -404,6 +459,8 @@ namespace DeviceCommand.Devices
///
/// 3.7.3.2 禁止或使能当前恒功率(CP)输出
///
+ /// true: 使能恒功率输出, false: 禁止恒功率输出
+ /// 取消令牌
public virtual async Task 设置恒功率输出使能(bool 启用, CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -418,6 +475,8 @@ namespace DeviceCommand.Devices
///
/// 3.9.1 控制蜂鸣器开关
///
+ /// true: 开启蜂鸣器, false: 关闭蜂鸣器
+ /// 取消令牌
public virtual async Task 设置蜂鸣器状态(bool 开启, CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -428,6 +487,7 @@ namespace DeviceCommand.Devices
///
/// 3.9.2 使蜂鸣器强制鸣叫一声
///
+ /// 取消令牌
public virtual async Task 蜂鸣器鸣叫(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -437,6 +497,8 @@ namespace DeviceCommand.Devices
///
/// 3.9.4 查询仪器当前出错记录数量 (最大 18 组)
///
+ /// 取消令牌
+ /// 当前出错记录数量(最大 18 组)
public virtual async Task 查询错误记录数量(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -446,6 +508,8 @@ namespace DeviceCommand.Devices
///
/// 3.9.5 读取仪器的出错信息 (成功返回 0,"No error")
///
+ /// 取消令牌
+ /// 错误代码和描述信息(成功返回 0,"No error")
public virtual async Task 查询错误信息(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -455,6 +519,7 @@ namespace DeviceCommand.Devices
///
/// 3.9.7 设置电源为面板控制模式 (本地 Local 状态,前面板按键可用)
///
+ /// 取消令牌
public virtual async Task 切换本地控制模式(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -464,6 +529,7 @@ namespace DeviceCommand.Devices
///
/// 3.9.8 设置电源为远程控制模式 (Remote 状态)
///
+ /// 取消令牌
public virtual async Task 切换远程控制模式(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -473,6 +539,7 @@ namespace DeviceCommand.Devices
///
/// 3.9.9 通过通信接口设置电源为远程控制锁定模式
///
+ /// 取消令牌
public virtual async Task 远程控制模式锁定(CancellationToken ct = default)
{
// 修正:去除前缀冒号
@@ -481,4 +548,4 @@ namespace DeviceCommand.Devices
#endregion
}
-}
\ No newline at end of file
+}
diff --git a/DeviceCommand/Devices/N69200.cs b/DeviceCommand/Devices/N69200.cs
index 8787216..8002ae6 100644
--- a/DeviceCommand/Devices/N69200.cs
+++ b/DeviceCommand/Devices/N69200.cs
@@ -26,6 +26,7 @@ namespace DeviceCommand.Devices
///
/// 清除状态命令。清除标准事件状态寄存器和错误队列 (*CLS)
///
+ /// 取消令牌
public virtual async Task 清除错误队列和状态字节(CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
@@ -33,6 +34,8 @@ namespace DeviceCommand.Devices
///
/// 查询错误信息
///
+ /// 取消令牌
+ /// 错误代码和描述信息
public virtual async Task 查询错误信息(CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:ERRor?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -41,6 +44,8 @@ namespace DeviceCommand.Devices
///
/// 读取电子负载设备识别字符串 (*IDN?)
///
+ /// 取消令牌
+ /// 设备标识字符串(制造商, 产品型号, 序列号, 固件版本)
public virtual async Task 查询设备标识(CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -49,6 +54,7 @@ namespace DeviceCommand.Devices
///
/// 复位命令。使电子负载恢复到出厂默认配置状态 (*RST)
///
+ /// 取消令牌
public virtual async Task 重置设备(CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct);
@@ -57,6 +63,8 @@ namespace DeviceCommand.Devices
///
/// 读取标准状态字节寄存器 (*STB?)
///
+ /// 取消令牌
+ /// 标准状态字节寄存器值
public virtual async Task 读取状态字节(CancellationToken ct = default)
{
return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -65,6 +73,8 @@ namespace DeviceCommand.Devices
///
/// 保存当前系统参数到指定的存储单元 (1~100)
///
+ /// 存储单元编号 (范围: 1~100)
+ /// 取消令牌
public virtual async Task 保存当前状态(int 单元, CancellationToken ct = default)
{
if (单元 < 1 || 单元 > 100)
@@ -76,6 +86,8 @@ namespace DeviceCommand.Devices
///
/// 调用指定存储单元中保存的系统参数 (1~100)
///
+ /// 存储单元编号 (范围: 1~100)
+ /// 取消令牌
public virtual async Task 调用存储状态(int 单元, CancellationToken ct = default)
{
if (单元 < 1 || 单元 > 100)
@@ -91,6 +103,8 @@ namespace DeviceCommand.Devices
///
/// 控制电子负载的输入控制开关(INPut:STATe )
///
+ /// true: 开启拉载, false: 关闭拉载
+ /// 取消令牌
public virtual async Task 设置DC输入(bool 开启, CancellationToken ct = default)
{
string 参数 = 开启 ? "1" : "0";
@@ -100,6 +114,8 @@ namespace DeviceCommand.Devices
///
/// 查询电子负载当前的拉载开关状态 (返回 0 或 1)
///
+ /// 取消令牌
+ /// 拉载开关状态("0" 或 "1")
public virtual async Task 查询DC输入状态(CancellationToken ct = default)
{
return await WriteReadAsync($"INPut:STATe?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -134,6 +150,11 @@ namespace DeviceCommand.Devices
CPD,
SZ
}
+ ///
+ /// 设置负载模式
+ ///
+ /// 电子负载工作模式枚举 (CC, CV, CR, CP 等)
+ /// 取消令牌
public virtual async Task 设置负载模式(DeviceWorkMode 模式, CancellationToken ct = default)
{
await SendAsync($"INPut:FUNCtion {Enum.GetName(模式)}{ScpiDelimiter}", ct);
@@ -142,6 +163,8 @@ namespace DeviceCommand.Devices
///
/// 查询电子负载当前处于何种工作模式
///
+ /// 取消令牌
+ /// 当前工作模式字符串
public virtual async Task 查询负载模式(CancellationToken ct = default)
{
return await WriteReadAsync($"INPut:FUNCtion?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -154,6 +177,8 @@ namespace DeviceCommand.Devices
///
/// 设定恒电流模式(CC)大量程下的拉载电流目标值 (单位: A)
///
+ /// 拉载电流目标值 (单位: A)
+ /// 取消令牌
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
///
/// 查询恒电流模式大量程下设定的拉载电流值
///
+ /// 取消令牌
+ /// 设定的拉载电流值 (单位: A)
public virtual async Task 查询恒电流CC设定(CancellationToken ct = default)
{
return await WriteReadAsync($"STATic:CC:HIGH:LEVel?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -171,6 +198,8 @@ namespace DeviceCommand.Devices
///
/// 设定恒电压模式(CV)大量程下的拉载电压目标值 (单位: V)
///
+ /// 拉载电压目标值 (单位: V)
+ /// 取消令牌
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
///
/// 查询恒电压模式大量程下设定的拉载电压值
///
+ /// 取消令牌
+ /// 设定的拉载电压值 (单位: V)
public virtual async Task 查询恒电压CV设定(CancellationToken ct = default)
{
return await WriteReadAsync($"STATic:CV:HIGH:LEVel?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -188,6 +219,8 @@ namespace DeviceCommand.Devices
///
/// 设定恒功率模式(CP)大量程下的拉载功率目标值 (单位: W)
///
+ /// 拉载功率目标值 (单位: W)
+ /// 取消令牌
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
///
/// 查询恒功率模式大量程下设定的拉载功率值
///
+ /// 取消令牌
+ /// 设定的拉载功率值 (单位: W)
public virtual async Task 查询恒功率CP设定(CancellationToken ct = default)
{
return await WriteReadAsync($"STATic:CP:HIGH:LEVel?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -205,6 +240,8 @@ namespace DeviceCommand.Devices
///
/// 设定恒电阻模式(CR)大量程下的等效拉载电阻阻值 (单位: Ω)
///
+ /// 等效拉载电阻阻值 (单位: Ω)
+ /// 取消令牌
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
///
/// 查询恒电阻模式大量程下设定的拉载电阻值
///
+ /// 取消令牌
+ /// 设定的拉载电阻值 (单位: Ω)
public virtual async Task 查询恒电阻CR设定(CancellationToken ct = default)
{
return await WriteReadAsync($"STATic:CR:HIGH:LEVel?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -226,6 +265,8 @@ namespace DeviceCommand.Devices
///
/// 回读电子负载输入端子上的实时测得电压值 (单位: V)
///
+ /// 取消令牌
+ /// 实时测量电压值 (单位: V)
[Monitorable("高压直流负载电压")]
public virtual async Task 查询实际电压(CancellationToken ct = default)
{
@@ -235,6 +276,8 @@ namespace DeviceCommand.Devices
///
/// 回读电子负载输入端子上的实时测得电流值 (单位: A)
///
+ /// 取消令牌
+ /// 实时测量电流值 (单位: A)
[Monitorable("高压直流负载电流")]
public virtual async Task 查询实际电流(CancellationToken ct = default)
{
@@ -244,6 +287,8 @@ namespace DeviceCommand.Devices
///
/// 回读电子负载输入端子上的实时测得功率值 (单位: W)
///
+ /// 取消令牌
+ /// 实时测量功率值 (单位: W)
[Monitorable("高压直流负载功率")]
public virtual async Task 查询实际功率(CancellationToken ct = default)
{
@@ -257,6 +302,8 @@ namespace DeviceCommand.Devices
///
/// 设置电子负载的电流软保护阈值 (单位: A, 设置为 0 表示关闭)
///
+ /// 电流软保护阈值 (单位: A, 0 表示关闭)
+ /// 取消令牌
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
///
/// 设置电子负载的功率软保护阈值 (单位: W, 设置为 0 表示关闭)
///
+ /// 功率软保护阈值 (单位: W, 0 表示关闭)
+ /// 取消令牌
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
///
/// 设置电子负载的电压软保护阈值 (单位: V, 设置为 0 表示关闭)
///
+ /// 电压软保护阈值 (单位: V, 0 表示关闭)
+ /// 取消令牌
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
///
/// 读取负载报警/事件寄存器信息 (MEASure:EVENT?)
///
+ /// 取消令牌
+ /// 报警/事件寄存器信息
public virtual async Task 查询报警事件信息(CancellationToken ct = default)
{
return await WriteReadAsync($"MEASure:EVENT?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -296,6 +349,7 @@ namespace DeviceCommand.Devices
///
/// 清除负载当前的保护触发锁定状态 (INPut:CLearPROTect)
///
+ /// 取消令牌
public virtual async Task 清除保护告警(CancellationToken ct = default)
{
await SendAsync($"INPut:CLearPROTect{ScpiDelimiter}", ct);
@@ -307,48 +361,123 @@ namespace DeviceCommand.Devices
#region 组合测试 (COMBination:*)
+ ///
+ /// 设置组合量程_CVCC
+ ///
+ /// 量程编号
+ /// 取消令牌
public virtual async Task 设置组合量程_CVCC(int 量程, CancellationToken ct = default)
=> await SendAsync($"COMBination:CVCC:RANGE {量程}{ScpiDelimiter}", ct);
+ ///
+ /// 设置恒压速率_CVCC
+ ///
+ /// 恒压上升速率
+ /// 取消令牌
public virtual async Task 设置恒压速率_CVCC(int 速率, CancellationToken ct = default)
=> await SendAsync($"COMBination:CVCC:HIGH:RATE {速率}{ScpiDelimiter}", ct);
+ ///
+ /// 设置恒压大量程电压_CVCC
+ ///
+ /// 恒压大量程电压设定值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置恒压大量程电压_CVCC(double 电压, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CVCC:HIGH:LEVel {0:F3}{1}", 电压, ScpiDelimiter), ct);
+ ///
+ /// 设置限定电流_CVCC
+ ///
+ /// 限定电流值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置限定电流_CVCC(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CVCC:CLIMit {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置组合量程_CRCC
+ ///
+ /// 量程编号
+ /// 取消令牌
public virtual async Task 设置组合量程_CRCC(int 量程, CancellationToken ct = default)
=> await SendAsync($"COMBination:CRCC:RANGE {量程}{ScpiDelimiter}", ct);
+ ///
+ /// 设置恒阻小量程电阻_CRCC
+ ///
+ /// 恒阻小量程电阻值 (单位: Ω)
+ /// 取消令牌
public virtual async Task 设置恒阻小量程电阻_CRCC(double 电阻, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CRCC:LOW:LEVel {0:F4}{1}", 电阻, ScpiDelimiter), ct);
+ ///
+ /// 设置限定电流_CRCC
+ ///
+ /// 限定电流值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置限定电流_CRCC(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CRCC:CLIMit {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置上升斜率_CRCC
+ ///
+ /// 电流上升斜率 (单位: A/μs)
+ /// 取消令牌
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);
+ ///
+ /// 设置下降斜率_CRCC
+ ///
+ /// 电流下降斜率 (单位: A/μs)
+ /// 取消令牌
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);
+ ///
+ /// 设置组合量程_CPCC
+ ///
+ /// 量程编号
+ /// 取消令牌
public virtual async Task 设置组合量程_CPCC(int 量程, CancellationToken ct = default)
=> await SendAsync($"COMBination:CPCC:RANGE {量程}{ScpiDelimiter}", ct);
+ ///
+ /// 设置恒功率小量程功率_CPCC
+ ///
+ /// 恒功率小量程功率值 (单位: W)
+ /// 取消令牌
public virtual async Task 设置恒功率小量程功率_CPCC(double 功率, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CPCC:LOW:LEVel {0:F3}{1}", 功率, ScpiDelimiter), ct);
+ ///
+ /// 设置限定电流_CPCC
+ ///
+ /// 限定电流值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置限定电流_CPCC(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CPCC:CLIMit {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置组合量程_CVCR
+ ///
+ /// 量程编号
+ /// 取消令牌
public virtual async Task 设置组合量程_CVCR(int 量程, CancellationToken ct = default)
=> await SendAsync($"COMBination:CVCR:RANGE {量程}{ScpiDelimiter}", ct);
+ ///
+ /// 设置恒压大量程电压_CVCR
+ ///
+ /// 恒压大量程电压设定值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置恒压大量程电压_CVCR(double 电压, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "COMBination:CVCR:HIGH:LEVel {0:F3}{1}", 电压, ScpiDelimiter), ct);
+ ///
+ /// 设置限定电阻_CVCR
+ ///
+ /// 限定电阻值 (单位: Ω)
+ /// 取消令牌
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:*)
+ ///
+ /// 设置瞬态运行方式_CC
+ ///
+ /// 运行方式 (0-连续, 1-单次, 2-A/B)
+ /// 取消令牌
public virtual async Task 设置瞬态运行方式_CC(int 模式, CancellationToken ct = default)
=> await SendAsync($"DYNAmic:CC:MODe {模式}{ScpiDelimiter}", ct); // 0-连续, 1-单次, 2-A/B
+ ///
+ /// 设置瞬态量程_CC
+ ///
+ /// 量程编号
+ /// 取消令牌
public virtual async Task 设置瞬态量程_CC(int 量程, CancellationToken ct = default)
=> await SendAsync($"DYNAmic:CC:RANGE {量程}{ScpiDelimiter}", ct);
+ ///
+ /// 设置瞬态主值电流_CC
+ ///
+ /// 主值电流 (单位: A)
+ /// 取消令牌
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);
+ ///
+ /// 设置瞬态瞬态值电流_CC
+ ///
+ /// 瞬态值电流 (单位: A)
+ /// 取消令牌
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);
+ ///
+ /// 设置瞬态上升斜率_CC
+ ///
+ /// 电流上升斜率 (单位: A/μs)
+ /// 取消令牌
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);
+ ///
+ /// 设置瞬态下降斜率_CC
+ ///
+ /// 电流下降斜率 (单位: A/μs)
+ /// 取消令牌
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);
+ ///
+ /// 设置瞬态主值脉宽_CC
+ ///
+ /// 主值脉宽 (单位: ms)
+ /// 取消令牌
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);
+ ///
+ /// 设置瞬态瞬态脉宽_CC
+ ///
+ /// 瞬态脉宽 (单位: ms)
+ /// 取消令牌
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);
+ ///
+ /// 设置瞬态运行方式_CV
+ ///
+ /// 运行方式
+ /// 取消令牌
public virtual async Task 设置瞬态运行方式_CV(int 模式, CancellationToken ct = default)
=> await SendAsync($"DYNAmic:CV:MODe {模式}{ScpiDelimiter}", ct);
+ ///
+ /// 设置瞬态量程_CV
+ ///
+ /// 量程编号
+ /// 取消令牌
public virtual async Task 设置瞬态量程_CV(int 量程, CancellationToken ct = default)
=> await SendAsync($"DYNAmic:CV:RANGE {量程}{ScpiDelimiter}", ct);
+ ///
+ /// 设置瞬态主值电压_CV
+ ///
+ /// 主值电压 (单位: V)
+ /// 取消令牌
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);
+ ///
+ /// 设置瞬态瞬态值电压_CV
+ ///
+ /// 瞬态值电压 (单位: V)
+ /// 取消令牌
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);
+ ///
+ /// 设置瞬态主值脉宽_CV
+ ///
+ /// 主值脉宽 (单位: ms)
+ /// 取消令牌
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);
+ ///
+ /// 设置瞬态瞬态脉宽_CV
+ ///
+ /// 瞬态脉宽 (单位: ms)
+ /// 取消令牌
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:*)
+ ///
+ /// 设置放电电流
+ ///
+ /// 放电电流设定值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置放电电流(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DISCHarge:CURRent {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置放电终止电压
+ ///
+ /// 放电终止电压 (单位: V)
+ /// 取消令牌
public virtual async Task 设置放电终止电压(double 电压, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DISCHarge:VOLTage {0:F3}{1}", 电压, ScpiDelimiter), ct);
+ ///
+ /// 设置放电终止时间
+ ///
+ /// 放电终止时间 (单位: s)
+ /// 取消令牌
public virtual async Task 设置放电终止时间(double 时间_s, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DISCHarge:TIMe {0:F0}{1}", 时间_s, ScpiDelimiter), ct);
+ ///
+ /// 设置放电终止容量
+ ///
+ /// 放电终止容量 (单位: Ah)
+ /// 取消令牌
public virtual async Task 设置放电终止容量(double 容量_Ah, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "DISCHarge:CAPacity {0:F3}{1}", 容量_Ah, ScpiDelimiter), ct);
+ ///
+ /// 查询放电实时时间
+ ///
+ /// 取消令牌
+ /// 当前放电已持续时间 (单位: s)
public virtual async Task 查询放电实时时间(CancellationToken ct = default)
=> await WriteReadAsync($"DISCHarge:ECHO:TIMe?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 查询放电实时容量
+ ///
+ /// 取消令牌
+ /// 当前放电已输出的容量 (单位: Ah)
public virtual async Task 查询放电实时容量(CancellationToken ct = default)
=> await WriteReadAsync($"DISCHarge:ECHo:CAPacity?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 设置充电电流
+ ///
+ /// 充电电流设定值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置充电电流(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "CHARge:CURRent {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置充电电压
+ ///
+ /// 充电电压设定值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置充电电压(double 电压, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "CHARge:VOLTage {0:F3}{1}", 电压, ScpiDelimiter), ct);
+ ///
+ /// 设置充电恒压时间
+ ///
+ /// 恒压充电持续时间 (单位: s)
+ /// 取消令牌
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:*)
+ ///
+ /// 设置OCP初始电流
+ ///
+ /// OCP扫描起始电流 (单位: A)
+ /// 取消令牌
public virtual async Task 设置OCP初始电流(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OCP:BCURrent {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置OCP步进电流
+ ///
+ /// 每步递增电流值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置OCP步进电流(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OCP:SCURrent {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置OCP单步时间
+ ///
+ /// 每步持续时间 (单位: s)
+ /// 取消令牌
public virtual async Task 设置OCP单步时间(double 时间_s, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OCP:Time {0:F1}{1}", 时间_s, ScpiDelimiter), ct);
+ ///
+ /// 设置OCP终止电压
+ ///
+ /// 触发保护时的电压阈值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置OCP终止电压(double 电压, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OCP:EVOLtage {0:F3}{1}", 电压, ScpiDelimiter), ct);
+ ///
+ /// 查询OCP状态
+ ///
+ /// 取消令牌
+ /// OCP扫描测试状态
public virtual async Task 查询OCP状态(CancellationToken ct = default)
=> await WriteReadAsync($"OCP:STAtus?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 读取OCP结果电流
+ ///
+ /// 取消令牌
+ /// OCP测试触发时的电流值 (单位: A)
public virtual async Task 读取OCP结果电流(CancellationToken ct = default)
=> await WriteReadAsync($"OCP:RCURrent?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 设置OPP初始功率
+ ///
+ /// OPP扫描起始功率 (单位: W)
+ /// 取消令牌
public virtual async Task 设置OPP初始功率(double 功率, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OPP:BPOWer {0:F3}{1}", 功率, ScpiDelimiter), ct);
+ ///
+ /// 设置OPP步进功率
+ ///
+ /// 每步递增功率值 (单位: W)
+ /// 取消令牌
public virtual async Task 设置OPP步进功率(double 功率, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OPP:SPOWer {0:F3}{1}", 功率, ScpiDelimiter), ct);
+ ///
+ /// 设置OPP单步时间
+ ///
+ /// 每步持续时间 (单位: s)
+ /// 取消令牌
public virtual async Task 设置OPP单步时间(double 时间_s, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OPP:TIME {0:F1}{1}", 时间_s, ScpiDelimiter), ct);
+ ///
+ /// 设置OPP终止电压
+ ///
+ /// 触发保护时的电压阈值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置OPP终止电压(double 电压, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "OPP:EVOLtage {0:F3}{1}", 电压, ScpiDelimiter), ct);
+ ///
+ /// 查询OPP状态
+ ///
+ /// 取消令牌
+ /// OPP扫描测试状态
public virtual async Task 查询OPP状态(CancellationToken ct = default)
=> await WriteReadAsync($"OPP:STAtus?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 读取OPP结果功率
+ ///
+ /// 取消令牌
+ /// OPP测试触发时的功率值 (单位: W)
public virtual async Task 读取OPP结果功率(CancellationToken ct = default)
=> await WriteReadAsync($"OPP:RPOWer?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -473,45 +777,115 @@ namespace DeviceCommand.Devices
#region 扫频 SWEEP 与 波形拉载 WAVE (SWEEP:* / WAVE:*)
+ ///
+ /// 设置扫频最小电流
+ ///
+ /// 扫频最小电流值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置扫频最小电流(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:TCURrent {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置扫频最大电流
+ ///
+ /// 扫频最大电流值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置扫频最大电流(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:MCURrent {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置扫频起始频率
+ ///
+ /// 扫频起始频率 (单位: Hz)
+ /// 取消令牌
public virtual async Task 设置扫频起始频率(double 频率_Hz, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:SFRequency {0:F1}{1}", 频率_Hz, ScpiDelimiter), ct);
+ ///
+ /// 设置扫频结束频率
+ ///
+ /// 扫频结束频率 (单位: Hz)
+ /// 取消令牌
public virtual async Task 设置扫频结束频率(double 频率_Hz, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:EFRequency {0:F1}{1}", 频率_Hz, ScpiDelimiter), ct);
+ ///
+ /// 设置扫频单步时间
+ ///
+ /// 每个频率点停留时间 (单位: ms)
+ /// 取消令牌
public virtual async Task 设置扫频单步时间(double 时间_ms, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:STPTime {0:F1}{1}", 时间_ms, ScpiDelimiter), ct);
+ ///
+ /// 设置扫频占空比
+ ///
+ /// 占空比值 (单位: %)
+ /// 取消令牌
public virtual async Task 设置扫频占空比(double 占空比, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "SWEEP:DUTYcycle {0:F1}{1}", 占空比, ScpiDelimiter), ct);
+ ///
+ /// 读取扫频当前运行频率
+ ///
+ /// 取消令牌
+ /// 当前扫频运行频率 (单位: Hz)
public virtual async Task 读取扫频当前运行频率(CancellationToken ct = default)
=> await WriteReadAsync($"SWEEP:CFRequency?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 读取扫频测试结果
+ ///
+ /// 取消令牌
+ /// 扫频测试结果
public virtual async Task 读取扫频测试结果(CancellationToken ct = default)
=> await WriteReadAsync($"SWEEP:RESult?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 设置波形量程
+ ///
+ /// 波形量程编号
+ /// 取消令牌
public virtual async Task 设置波形量程(int 量程, CancellationToken ct = default)
=> await SendAsync($"WAVE:RANGe {量程}{ScpiDelimiter}", ct);
+ ///
+ /// 设置波形类型
+ ///
+ /// 波形类型 (0-正弦波, 1-方波, 2-三角波, 3-锯齿波, 4-自定义)
+ /// 取消令牌
public virtual async Task 设置波形类型(int 类型, CancellationToken ct = default)
=> await SendAsync($"WAVE:TYPe {类型}{ScpiDelimiter}", ct); // 0-正弦波, 1-方波, 2-三角波, 3-锯齿波, 4-自定义
+ ///
+ /// 设置波形频率
+ ///
+ /// 波形频率 (单位: Hz)
+ /// 取消令牌
public virtual async Task 设置波形频率(double 频率_Hz, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "WAVE:FREQuency {0:F1}{1}", 频率_Hz, ScpiDelimiter), ct);
+ ///
+ /// 设置波形幅值
+ ///
+ /// 波形幅值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置波形幅值(double 幅值, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "WAVE:SETValue {0:F3}{1}", 幅值, ScpiDelimiter), ct);
+ ///
+ /// 设置波形时间
+ ///
+ /// 波形周期时间 (单位: ms)
+ /// 取消令牌
public virtual async Task 设置波形时间(double 时间_ms, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "WAVE:TIMe {0:F1}{1}", 时间_ms, ScpiDelimiter), ct);
+ ///
+ /// 设置波形叠加值
+ ///
+ /// 直流叠加偏置值 (单位: A)
+ /// 取消令牌
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:*)
+ ///
+ /// 设置ESR带载量程
+ ///
+ /// 带载量程编号
+ /// 取消令牌
public virtual async Task 设置ESR带载量程(int 量程, CancellationToken ct = default)
=> await SendAsync($"ESR:LOADRange {量程}{ScpiDelimiter}", ct);
+ ///
+ /// 设置ESR大量程带载电流
+ ///
+ /// 带载电流值 (单位: A)
+ /// 取消令牌
public virtual async Task 设置ESR大量程带载电流(double 电流, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "ESR:CURRenthigh {0:F3}{1}", 电流, ScpiDelimiter), ct);
+ ///
+ /// 设置ESR测量方法
+ ///
+ /// 测量方法 (0-方波平均法, 1-单脉冲法)
+ /// 取消令牌
public virtual async Task 设置ESR测量方法(int 方法, CancellationToken ct = default)
=> await SendAsync($"ESR:MODE {方法}{ScpiDelimiter}", ct); // 0-方波平均法, 1-单脉冲法
+ ///
+ /// 设置ESR采样量程
+ ///
+ /// 采样量程 (0-1000mV, 1-100mV, 2-10mV)
+ /// 取消令牌
public virtual async Task 设置ESR采样量程(int 量程, CancellationToken ct = default)
=> await SendAsync($"ESR:MEASurerange {量程}{ScpiDelimiter}", ct); // 0-1000mV, 1-100mV, 2-10mV
+ ///
+ /// 查询ESR状态
+ ///
+ /// 取消令牌
+ /// ESR测试状态
public virtual async Task 查询ESR状态(CancellationToken ct = default)
=> await WriteReadAsync($"ESR:STAtus?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 读取ESR结果
+ ///
+ /// 取消令牌
+ /// ESR测试结果 (单位: Ω)
public virtual async Task 读取ESR结果(CancellationToken ct = default)
=> await WriteReadAsync($"ESR:RESult?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -541,30 +945,75 @@ namespace DeviceCommand.Devices
#region MPPT 测试 (MPP:*)
+ ///
+ /// 设置MPPT步进电压
+ ///
+ /// 步进电压值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置MPPT步进电压(double 电压_V, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "MPP:BVOLtage {0:F3}{1}", 电压_V, ScpiDelimiter), ct);
+ ///
+ /// 设置MPPT步进时间
+ ///
+ /// 每步停留时间 (单位: s)
+ /// 取消令牌
public virtual async Task 设置MPPT步进时间(double 时间_s, CancellationToken ct = default)
=> await SendAsync(string.Format(CultureInfo.InvariantCulture, "MPP:TIME {0:F1}{1}", 时间_s, ScpiDelimiter), ct);
+ ///
+ /// 设置MPPT模式
+ ///
+ /// 工作模式 (0-扫描模式, 1-跟踪模式)
+ /// 取消令牌
public virtual async Task 设置MPPT模式(int 模式, CancellationToken ct = default)
=> await SendAsync($"MPP:MODE {模式}{ScpiDelimiter}", ct); // 0-扫描模式, 1-跟踪模式
+ ///
+ /// 查询MPPT状态
+ ///
+ /// 取消令牌
+ /// MPPT测试状态
public virtual async Task 查询MPPT状态(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:STATus?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 读取MPPT最大功率
+ ///
+ /// 取消令牌
+ /// 最大功率值 (单位: W)
public virtual async Task 读取MPPT最大功率(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:MPOWer?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 读取MPPT最大功率电压
+ ///
+ /// 取消令牌
+ /// 最大功率点对应电压 (单位: V)
public virtual async Task 读取MPPT最大功率电压(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:MVOLtage?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 读取MPPT最大功率电流
+ ///
+ /// 取消令牌
+ /// 最大功率点对应电流 (单位: A)
public virtual async Task 读取MPPT最大功率电流(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:MCURrent?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 读取MPPT开路电压
+ ///
+ /// 取消令牌
+ /// 开路电压值 (单位: V)
public virtual async Task 读取MPPT开路电压(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:OVOLtage?{ScpiDelimiter}", ScpiDelimiter, ct);
+ ///
+ /// 读取MPPT短路电流
+ ///
+ /// 取消令牌
+ /// 短路电流值 (单位: A)
public virtual async Task 读取MPPT短路电流(CancellationToken ct = default)
=> await WriteReadAsync($"MPP:SCURrent?{ScpiDelimiter}", ScpiDelimiter, ct);
diff --git a/DeviceCommand/Devices/SDS2000X_HD.cs b/DeviceCommand/Devices/SDS2000X_HD.cs
index 73e509d..615934a 100644
--- a/DeviceCommand/Devices/SDS2000X_HD.cs
+++ b/DeviceCommand/Devices/SDS2000X_HD.cs
@@ -27,6 +27,7 @@ namespace DeviceCommand.Devices
///
/// 清除标准事件状态寄存器和错误队列
///
+ /// 取消令牌
public virtual async Task 清除状态(CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
@@ -34,6 +35,8 @@ namespace DeviceCommand.Devices
///
/// 查询错误信息
///
+ /// 取消令牌
+ /// 错误代码和描述信息
public virtual async Task 查询错误信息(CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:ERRor?{ScpiDelimiter}", ScpiDelimiter, ct); //[cite: 1]
@@ -41,6 +44,8 @@ namespace DeviceCommand.Devices
///
/// 读取示波器识别字符串(制造商、型号、序列号、固件版本)
///
+ /// 取消令牌
+ /// 设备标识字符串(制造商, 型号, 序列号, 固件版本)
public virtual async Task 查询设备标识(CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -49,6 +54,7 @@ namespace DeviceCommand.Devices
///
/// 复位命令。使示波器恢复到默认的出厂设置
///
+ /// 取消令牌
public virtual async Task 重置设备(CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct);
@@ -57,6 +63,8 @@ namespace DeviceCommand.Devices
///
/// 查询先前操作是否完成。
///
+ /// 取消令牌
+ /// true: 操作已完成, false: 操作仍在执行中
public virtual async Task 检查操作完成_OPC(CancellationToken ct = default)
{
string res = await WriteReadAsync($"*OPC?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -70,6 +78,7 @@ namespace DeviceCommand.Devices
///
/// 控制示波器开始捕获波形
///
+ /// 取消令牌
public virtual async Task 启动捕获_RUN(CancellationToken ct = default)
{
await SendAsync($":TRIGger:RUN{ScpiDelimiter}", ct);
@@ -78,6 +87,7 @@ namespace DeviceCommand.Devices
///
/// 停止捕获波形
///
+ /// 取消令牌
public virtual async Task 停止捕获_STOP(CancellationToken ct = default)
{
await SendAsync($"TRIGger:STOP{ScpiDelimiter}", ct);
@@ -86,6 +96,7 @@ namespace DeviceCommand.Devices
///
/// 强制示波器进入单次触发捕获模式
///
+ /// 取消令牌
public virtual async Task 单次触发_SINGLE(CancellationToken ct = default)
{
await SendAsync($":TRIGger:MODE SINGle{ScpiDelimiter}", ct);
@@ -94,6 +105,7 @@ namespace DeviceCommand.Devices
///
/// 触发一次波形采样
///
+ /// 取消令牌
public virtual async Task 强制触发(CancellationToken ct = default)
{
await SendAsync($"::TRIGger:MODE FTRIG{ScpiDelimiter}", ct);
@@ -136,6 +148,9 @@ namespace DeviceCommand.Devices
///
/// 开启或关闭指定的模拟通道 (符合手册 57 页规范)
///
+ /// 通道号 (1 - 4)
+ /// true: 开启通道, false: 关闭通道
+ /// 取消令牌
public virtual async Task 设置通道开关(int channel, bool enable, CancellationToken ct = default)
{
string state = enable ? "ON" : "OFF";
@@ -145,6 +160,9 @@ namespace DeviceCommand.Devices
///
/// 设置指定通道的垂直电压档位 (Volts/Div)
///
+ /// 通道号 (1 - 4)
+ /// 电压档位 (Volts/Div)
+ /// 取消令牌
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
///
/// 查询指定通道当前的电压档位
///
+ /// 通道号 (1 - 4)
+ /// 取消令牌
+ /// 当前电压档位值 (Volts/Div)
public virtual async Task 查询通道电压档位(int channel, CancellationToken ct = default)
{
return await WriteReadAsync($"C{channel}:VDIV?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -162,6 +183,9 @@ namespace DeviceCommand.Devices
///
/// 设置指定通道的垂直偏移量 (Offset)
///
+ /// 通道号 (1 - 4)
+ /// 垂直偏移量 (单位: V)
+ /// 取消令牌
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
/// 1MΩ 阻抗
ONEM
}
+
+ ///
+ /// 设置指定通道的输入阻抗类型
+ ///
+ /// 通道号 (1 - 4)
+ /// 阻抗类型枚举 (FIFty: 50Ω, ONEM: 1MΩ)
+ /// 取消令牌
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
///
/// 设置示波器的水平时基档位 (Time/Div)
///
+ /// 水平时基档位 (Time/Div)
+ /// 取消令牌
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
///
/// 设置示波器的触发水平延迟位置 (Horizontal Delay)
///
+ /// 水平延迟位置 (单位: s)
+ /// 取消令牌
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
///
/// 设置边沿触发的电平值 (Trigger Level)
///
+ /// 触发电平值 (单位: V)
+ /// 取消令牌
public virtual async Task 设置触发电平(double level, CancellationToken ct = default)
{
@@ -224,6 +261,8 @@ namespace DeviceCommand.Devices
///
/// 设置边沿触发的触发源 (例如: C1, C2, C3, C4, EX, LINE)
///
+ /// 触发源通道标识 (例如: "C1", "C2", "EX", "LINE")
+ /// 取消令牌
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
///
/// 查询指定通道自动测量项的当前实时测量数值
///
+ /// 通道号 (1 - 4)
+ /// 测量参数名称 (如 "PKPK", "FREQ", "RMS" 等)
+ /// 取消令牌
+ /// 测量参数的实时数值字符串
public virtual async Task 查询通道测量项参数(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
///
/// 查询指定通道的电压峰峰值 (Vpp)
///
+ /// 通道号 (1 - 4)
+ /// 取消令牌
+ /// 电压峰峰值 (Vpp)
public virtual async Task 查询实际电压峰峰值(int channel, CancellationToken ct = default)
{
return await 查询通道测量项参数(channel, "PKPK", ct);
@@ -253,6 +299,9 @@ namespace DeviceCommand.Devices
///
/// 查询指定通道的频率值 (Frequency)
///
+ /// 通道号 (1 - 4)
+ /// 取消令牌
+ /// 频率值 (单位: Hz)
public virtual async Task 查询实际频率(int channel, CancellationToken ct = default)
{
return await 查询通道测量项参数(channel, "FREQ", ct);
@@ -261,6 +310,9 @@ namespace DeviceCommand.Devices
///
/// 查询指定通道的真均方根电压值 (Vrms)
///
+ /// 通道号 (1 - 4)
+ /// 取消令牌
+ /// 真均方根电压值 (Vrms)
public virtual async Task 查询实际电压均方根(int channel, CancellationToken ct = default)
{
return await 查询通道测量项参数(channel, "RMS", ct);
@@ -269,6 +321,7 @@ namespace DeviceCommand.Devices
#endregion
#region 7. 屏幕截图导出子系统
+ ///
/// 【一键获取并保存截图】
/// 自动下发 :PRINt? PNG 指令,接收示波器返回的纯 PNG 二进制流并直接保存到指定路径。
///
@@ -323,4 +376,4 @@ namespace DeviceCommand.Devices
#endregion
}
-}
\ No newline at end of file
+}
diff --git a/DeviceCommand/Devices/SPAW7000.cs b/DeviceCommand/Devices/SPAW7000.cs
index 07fe720..272c2d2 100644
--- a/DeviceCommand/Devices/SPAW7000.cs
+++ b/DeviceCommand/Devices/SPAW7000.cs
@@ -27,6 +27,7 @@ namespace DeviceCommand.Devices
///
/// 清除状态命令。清除标准事件状态寄存器和错误队列
///
+ /// 取消令牌
public virtual async Task 清除错误队列和状态字节(CancellationToken ct = default)
{
await SendAsync($"*CLS{ScpiDelimiter}", ct);
@@ -42,6 +43,8 @@ namespace DeviceCommand.Devices
///
/// 读取功率分析仪识别字符串(制造商、产品型号、系统 SN、软件版本号)
///
+ /// 取消令牌
+ /// 设备标识字符串(制造商, 产品型号, 系统 SN, 软件版本号)
public virtual async Task 查询设备标识(CancellationToken ct = default)
{
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -50,6 +53,7 @@ namespace DeviceCommand.Devices
///
/// 复位命令。使功率分析仪恢复到出厂默认配置状态
///
+ /// 取消令牌
public virtual async Task 重置设备(CancellationToken ct = default)
{
await SendAsync($"*RST{ScpiDelimiter}", ct);
@@ -58,6 +62,8 @@ namespace DeviceCommand.Devices
///
/// 读取标准状态字节寄存器
///
+ /// 取消令牌
+ /// 标准状态字节寄存器值
public virtual async Task 读取状态字节(CancellationToken ct = default)
{
return await WriteReadAsync($"*STB?{ScpiDelimiter}", ScpiDelimiter, ct);
@@ -70,6 +76,9 @@ namespace DeviceCommand.Devices
///
/// 查询指定通道的实时 RMS 电压值 (单位: V)
///
+ /// 通道号/单元号
+ /// 取消令牌
+ /// 实时 RMS 电压值 (单位: V)
public virtual async Task 查询实际电压(int channel, CancellationToken ct = default)
{
// 1. 先配置 ITEM1 为指定通道的电压有效值 (URMS)
@@ -84,6 +93,9 @@ namespace DeviceCommand.Devices
///
/// 查询指定通道的实时 RMS 电流值 (单位: A)
///
+ /// 通道号/单元号
+ /// 取消令牌
+ /// 实时 RMS 电流值 (单位: A)
public virtual async Task 查询实际电流(int channel, CancellationToken ct = default)
{
// 1. 配置 ITEM1 为指定通道的电流有效值 (IRMS)
@@ -98,6 +110,9 @@ namespace DeviceCommand.Devices
///
/// 查询指定通道的实时有功功率值 (单位: W)
///
+ /// 通道号/单元号
+ /// 取消令牌
+ /// 实时有功功率值 (单位: W)
public virtual async Task 查询实际功率(int channel, CancellationToken ct = default)
{
// 1. 配置 ITEM1 为指定通道的有功功率 (P)
@@ -112,6 +127,9 @@ namespace DeviceCommand.Devices
///
/// 查询指定通道的实时频率值 (单位: Hz)
///
+ /// 通道号/单元号
+ /// 取消令牌
+ /// 实时频率值 (单位: Hz)
public virtual async Task 查询频率(int channel, CancellationToken ct = default)
{
// 1. 配置 ITEM1 为指定通道的电压频率 (FU)
@@ -126,6 +144,9 @@ namespace DeviceCommand.Devices
///
/// 查询指定通道的功率因数 (Power Factor)
///
+ /// 通道号/单元号
+ /// 取消令牌
+ /// 功率因数值
public virtual async Task 查询功率因数(int channel, CancellationToken ct = default)
{
// 1. 配置 ITEM1 为指定通道的功率因数 (LAMBda)
@@ -204,6 +225,8 @@ namespace DeviceCommand.Devices
///
/// 14. 查询仪器型号名称
///
+ /// 取消令牌
+ /// 仪器型号名称字符串
public virtual async Task 查询设备型号(CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:MODel?{ScpiDelimiter}", ScpiDelimiter, ct); //
@@ -212,6 +235,8 @@ namespace DeviceCommand.Devices
///
/// 16. 查询仪器唯一序列号
///
+ /// 取消令牌
+ /// 仪器唯一序列号字符串
public virtual async Task 查询设备序列号(CancellationToken ct = default)
{
return await WriteReadAsync($":SYSTem:SERial?{ScpiDelimiter}", ScpiDelimiter, ct); //
@@ -221,6 +246,7 @@ namespace DeviceCommand.Devices
/// 15. 设置数值数据显示的分辨率 (5位或6位)
///
/// 有效值只能为 5 或 6
+ /// 取消令牌
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
///
/// 13. 设置或查询屏幕 LCD 的亮度级别 (1-10)
///
+ /// 亮度级别 (范围: 1 - 10)
+ /// 取消令牌
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
///
/// 18. 设置或查询触摸锁的开/关状态 (锁定时防止人工误触触控屏)
///
+ /// true: 锁定触摸, false: 解锁触摸
+ /// 取消令牌
public virtual async Task 设置屏幕触摸锁定(bool isLocked, CancellationToken ct = default)
{
string state = isLocked ? "ON" : "OFF";
@@ -249,6 +279,7 @@ namespace DeviceCommand.Devices
/// 17. 设置或读取分析仪当前的系统内部时间
///
/// 格式必须为 "HH:MM:SS"
+ /// 取消令牌
public virtual async Task 设置系统时间(string timeStr, CancellationToken ct = default)
{
await SendAsync($":SYSTem:TIME \"{timeStr}\"{ScpiDelimiter}", ct); //
@@ -256,4 +287,4 @@ namespace DeviceCommand.Devices
#endregion
}
-}
\ No newline at end of file
+}
diff --git a/TestingModule/ViewModels/CommandTreeViewModel.cs b/TestingModule/ViewModels/CommandTreeViewModel.cs
index af240e0..938c7c2 100644
--- a/TestingModule/ViewModels/CommandTreeViewModel.cs
+++ b/TestingModule/ViewModels/CommandTreeViewModel.cs
@@ -192,21 +192,26 @@ namespace TestingModule.ViewModels
var assembly = Assembly.LoadFrom(dllPath);
Assemblies.Add(assembly);
- // 加载对应的XML注释文件 (项目没有用到)
- //string xmlPath = Path.ChangeExtension(dllPath, ".xml");
- //if (File.Exists(xmlPath))
- //{
- // try
- // {
- // XmlDocument xmlDoc = new XmlDocument();
- // xmlDoc.Load(xmlPath);
- // _xmlDocumentCache[assembly.FullName!] = xmlDoc;
- // }
- // catch (Exception xmlEx)
- // {
- // LoggerHelper.WarnWithNotify($"加载XML注释失败: {Path.GetFileName(xmlPath)} - {xmlEx.Message}");
- // }
- //}
+ //加载对应的XML注释文件
+ string xmlPath = Path.ChangeExtension(dllPath, ".xml");
+ if (File.Exists(xmlPath))
+ {
+ try
+ {
+ XmlDocument xmlDoc = new XmlDocument();
+ xmlDoc.Load(xmlPath);
+ XmlDocumentCache[assembly.FullName!] = xmlDoc;
+ LoggerHelper.Info($"[XML注释] 成功加载: {Path.GetFileName(xmlPath)} -> 程序集 [{assembly.FullName}]");
+ }
+ catch (Exception xmlEx)
+ {
+ LoggerHelper.Warn($"加载XML注释失败: {Path.GetFileName(xmlPath)} - {xmlEx.Message}");
+ }
+ }
+ else
+ {
+ LoggerHelper.Warn($"[XML注释] XML文件不存在: {xmlPath}");
+ }
}
catch (Exception ex)
{
@@ -284,6 +289,7 @@ namespace TestingModule.ViewModels
{
Name = subProgram.Name,
Tag = subProgram,
+ Tooltip = subProgram.FilePath
});
}
@@ -368,6 +374,7 @@ namespace TestingModule.ViewModels
{
Name = $"{method.Name}({paramText})",
Tag = method,
+ Tooltip = GetMethodDocumentation(method),
};
typeNode.Children.Add(methodNode);
@@ -433,6 +440,95 @@ namespace TestingModule.ViewModels
}
}
}
+ // 添加获取注释的方法
+ private string? GetMethodDocumentation(MethodInfo method)
+ {
+ if (method.DeclaringType == null) return null;
+
+ try
+ {
+ string assemblyName = method.DeclaringType.Assembly.FullName!;
+ if (!_xmlDocumentCache.TryGetValue(assemblyName, out XmlDocument? xmlDoc))
+ {
+ LoggerHelper.Warn($"[XML注释] 缓存未命中: 程序集 [{assemblyName}],缓存包含 { _xmlDocumentCache.Count} 个条目: [{string.Join(", ", _xmlDocumentCache.Keys)}]");
+ return null;
+ }
+
+ // 生成XML文档中的成员ID
+ string memberName = $"M:{method.DeclaringType.FullName}.{method.Name}";
+ var parameters = method.GetParameters();
+ if (parameters.Length > 0)
+ {
+ memberName += "(" + string.Join(",", parameters.Select(p => p.ParameterType.FullName)) + ")";
+ }
+
+ // 查找注释节点
+ XmlNode? memberNode = xmlDoc.SelectSingleNode($"//member[@name='{memberName}']");
+ if (memberNode == null)
+ {
+ LoggerHelper.Warn($"[XML注释] 节点未找到: {memberName}");
+ return null;
+ }
+
+ // 获取摘要(summary)
+ var summaryNode = memberNode.SelectSingleNode("summary");
+ string documentation = "";
+
+ if (summaryNode != null)
+ {
+ documentation += CleanXmlContent(summaryNode.InnerXml);
+ }
+
+ // 获取参数注释(param)
+ var paramNodes = memberNode.SelectNodes("param");
+ if (paramNodes != null && paramNodes.Count > 0)
+ {
+ documentation += "\n\n参数:";
+ foreach (XmlNode paramNode in paramNodes)
+ {
+ string? paramName = paramNode.Attributes?["name"]?.Value;
+ if (!string.IsNullOrEmpty(paramName))
+ {
+ documentation += $"\n • {paramName}: {CleanXmlContent(paramNode.InnerXml)}";
+ }
+ }
+ }
+
+ // 获取返回值注释(returns)
+ var returnsNode = memberNode.SelectSingleNode("returns");
+ if (returnsNode != null)
+ {
+ documentation += $"\n\n返回值: {CleanXmlContent(returnsNode.InnerXml)}";
+ }
+
+ return string.IsNullOrWhiteSpace(documentation)
+ ? null
+ : System.Net.WebUtility.HtmlDecode(documentation.Trim());
+ }
+ catch (Exception ex)
+ {
+ LoggerHelper.Warn($"获取注释失败: {method.Name} - {ex.Message}");
+ return null;
+ }
+ }
+
+ // 辅助方法:清理XML内容
+ private string CleanXmlContent(string xmlContent)
+ {
+ return xmlContent
+ .Replace("", "")
+ .Replace("", "\n")
+ .Replace("", "")
+ .Replace("", "")
+ .Replace("", "") // 处理代码标签
+ .Replace("", "")
+ .Replace("", "")
+ .Replace("", "")
+ .Trim();
+ }
+
#endregion
#region 指令添加
@@ -515,7 +611,7 @@ namespace TestingModule.ViewModels
var newStep = new StepVM
{
Name = subProgram.Name,
- StepType = "子程序"
+ StepType = "子程序",
};
var jsonstr = File.ReadAllText($"{subProgram.FilePath}");
var tmp = JsonConvert.DeserializeObject(jsonstr);
diff --git a/TestingModule/Views/CommandTree.xaml b/TestingModule/Views/CommandTree.xaml
index 781144b..45bd7d3 100644
--- a/TestingModule/Views/CommandTree.xaml
+++ b/TestingModule/Views/CommandTree.xaml
@@ -53,7 +53,8 @@
-
+
+
diff --git a/TestingModule/Views/SingleStepEdit.xaml b/TestingModule/Views/SingleStepEdit.xaml
index cf3762c..8adf085 100644
--- a/TestingModule/Views/SingleStepEdit.xaml
+++ b/TestingModule/Views/SingleStepEdit.xaml
@@ -103,7 +103,7 @@
-
+
@@ -240,7 +240,7 @@
-
+
diff --git a/UIShare/UIViewModel/InstructionNodeVM.cs b/UIShare/UIViewModel/InstructionNodeVM.cs
index 8d9617f..e280972 100644
--- a/UIShare/UIViewModel/InstructionNodeVM.cs
+++ b/UIShare/UIViewModel/InstructionNodeVM.cs
@@ -32,5 +32,12 @@ namespace UIShare.UIViewModel
get => _tag;
set => SetProperty(ref _tag, value);
}
+
+ private string? _tooltip;
+ public string? Tooltip
+ {
+ get => _tooltip;
+ set => SetProperty(ref _tooltip, value);
+ }
}
}
\ No newline at end of file
diff --git a/ZLGUSBCANFD/USBCANFD.cs b/ZLGUSBCANFD/USBCANFD.cs
index fdc9fca..ac0a75a 100644
--- a/ZLGUSBCANFD/USBCANFD.cs
+++ b/ZLGUSBCANFD/USBCANFD.cs
@@ -358,6 +358,8 @@ namespace ZLGUSBCANFD
/// 0 = 只发送一次;>0 = 按指定间隔循环发送(毫秒)
/// 1 = CANFD,0 = CAN
/// 是否成功启动/发送
+
+ [Browsable(false)]
public virtual bool 发送DBC定义报文(
uint 通道号,
uint 帧ID,
@@ -497,6 +499,7 @@ namespace ZLGUSBCANFD
///
/// 单次发送 DBC 报文(调用方已持有通道锁)。
///
+ [Browsable(false)]
private bool 发送DBC定义报文单次(uint 通道号, uint 帧ID, Dictionary 信号物理值字典, int 是否使用CANFD)
{
uint chDbcHandle = _dbcHandles[通道号];