现场程序优化

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
+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
}
}