spaw7000设备命令修改
This commit is contained in:
@@ -58,108 +58,142 @@ namespace DeviceCommand.Device
|
||||
|
||||
#endregion
|
||||
|
||||
#region 2. MEASure / NUMeric 核心数据测量与轮询 (高频轮询核心)
|
||||
#region 2. NUMeric 核心数据测量与轮询 (动态单项读取)
|
||||
|
||||
/// <summary>
|
||||
/// 查询指定通道的实时 RMS 电压值 (单位: V)
|
||||
/// </summary>
|
||||
/// <param name="channel">通道号 (例如: 1, 2, 3...)</param>
|
||||
public virtual async Task<string> 查询实际电压(int channel, CancellationToken ct = default)
|
||||
{
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":MEASure:NUMeric:VALue? U,{0}{1}", channel, ScpiDelimiter);
|
||||
// 1. 先配置 ITEM1 为指定通道的电压有效值 (URMS)
|
||||
string setItem = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:ITEM1 URMS,{0}{1}", channel, ScpiDelimiter);
|
||||
await SendAsync(setItem, ct);
|
||||
|
||||
// 2. 再读取 ITEM1 的值
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:VALue? 1{0}", ScpiDelimiter);
|
||||
return await WriteReadAsync(query, ScpiDelimiter, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询指定通道的实时 RMS 电流值 (单位: A)
|
||||
/// </summary>
|
||||
/// <param name="channel">通道号 (例如: 1, 2, 3...)</param>
|
||||
public virtual async Task<string> 查询实际电流(int channel, CancellationToken ct = default)
|
||||
{
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":MEASure:NUMeric:VALue? I,{0}{1}", channel, ScpiDelimiter);
|
||||
// 1. 配置 ITEM1 为指定通道的电流有效值 (IRMS)
|
||||
string setItem = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:ITEM1 IRMS,{0}{1}", channel, ScpiDelimiter);
|
||||
await SendAsync(setItem, ct);
|
||||
|
||||
// 2. 读取 ITEM1 的值
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:VALue? 1{0}", ScpiDelimiter);
|
||||
return await WriteReadAsync(query, ScpiDelimiter, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询指定通道的实时有功功率值 (单位: W)
|
||||
/// </summary>
|
||||
/// <param name="channel">通道号 (例如: 1, 2, 3...)</param>
|
||||
public virtual async Task<string> 查询实际功率(int channel, CancellationToken ct = default)
|
||||
{
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":MEASure:NUMeric:VALue? P,{0}{1}", channel, ScpiDelimiter);
|
||||
// 1. 配置 ITEM1 为指定通道的有功功率 (P)
|
||||
string setItem = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:ITEM1 P,{0}{1}", channel, ScpiDelimiter);
|
||||
await SendAsync(setItem, ct);
|
||||
|
||||
// 2. 读取 ITEM1 的值
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:VALue? 1{0}", ScpiDelimiter);
|
||||
return await WriteReadAsync(query, ScpiDelimiter, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询指定通道的实时频率值 (单位: Hz)
|
||||
/// </summary>
|
||||
/// <param name="channel">通道号 (例如: 1, 2, 3...)</param>
|
||||
public virtual async Task<string> 查询频率(int channel, CancellationToken ct = default)
|
||||
{
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":MEASure:NUMeric:VALue? FREQuency,{0}{1}", channel, ScpiDelimiter);
|
||||
// 1. 配置 ITEM1 为指定通道的电压频率 (FU)
|
||||
string setItem = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:ITEM1 FU,{0}{1}", channel, ScpiDelimiter);
|
||||
await SendAsync(setItem, ct);
|
||||
|
||||
// 2. 读取 ITEM1 的值
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:VALue? 1{0}", ScpiDelimiter);
|
||||
return await WriteReadAsync(query, ScpiDelimiter, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询指定通道的功率因数 (Power Factor)
|
||||
/// </summary>
|
||||
/// <param name="channel">通道号 (例如: 1, 2, 3...)</param>
|
||||
public virtual async Task<string> 查询功率因数(int channel, CancellationToken ct = default)
|
||||
{
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":MEASure:NUMeric:VALue? PF,{0}{1}", channel, ScpiDelimiter);
|
||||
return await WriteReadAsync(query, ScpiDelimiter, ct);
|
||||
}
|
||||
// 1. 配置 ITEM1 为指定通道的功率因数 (LAMBda)
|
||||
string setItem = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:ITEM1 LAMBda,{0}{1}", channel, ScpiDelimiter);
|
||||
await SendAsync(setItem, ct);
|
||||
|
||||
/// <summary>
|
||||
/// 自定义组合参数批量读取接口
|
||||
/// </summary>
|
||||
/// <param name="parameter">参数助记符 (如 "U,I,P" 或 "S,Q,LAMBda")</param>
|
||||
/// <param name="channel">通道号</param>
|
||||
public virtual async Task<string> 查询自定义测量组合(string parameter, int channel, CancellationToken ct = default)
|
||||
{
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":MEASure:NUMeric:VALue? {0},{1}{2}", parameter, channel, ScpiDelimiter);
|
||||
// 2. 读取 ITEM1 的值
|
||||
string query = string.Format(CultureInfo.InvariantCulture, ":NUMeric:NORMal:VALue? 1{0}", ScpiDelimiter);
|
||||
return await WriteReadAsync(query, ScpiDelimiter, ct);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 3. INPut 通道电气参数配置
|
||||
/// <summary>
|
||||
/// SPAW7000 电压量程枚举 (单位: V)
|
||||
/// </summary>
|
||||
public enum VoltageRange
|
||||
{
|
||||
V_15 = 15,
|
||||
V_30 = 30,
|
||||
V_60 = 60,
|
||||
V_100 = 100,
|
||||
V_150 = 150,
|
||||
V_300 = 300,
|
||||
V_600 = 600,
|
||||
V_1000 = 1000
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置指定通道的电压量程 (例如: 15, 30, 60, 150, 300, 600, 1000)
|
||||
/// SPAW7000 电流量程枚举 (单位: A)
|
||||
/// </summary>
|
||||
public virtual async Task 设置电压量程(int channel, double range, CancellationToken ct = default)
|
||||
public enum CurrentRange
|
||||
{
|
||||
string cmd = string.Format(CultureInfo.InvariantCulture, ":INPut:VOLTage:RANGe {0},{1:F1}{2}", channel, range, ScpiDelimiter);
|
||||
A_1 = 1,
|
||||
A_2 = 2,
|
||||
A_5 = 5,
|
||||
A_10 = 10,
|
||||
A_20 = 20,
|
||||
A_50 = 50
|
||||
}
|
||||
/// <summary>
|
||||
/// 设置指定通道的电压量程
|
||||
/// </summary>
|
||||
/// <param name="channel">通道号/单元号 (1 - 7)</param>
|
||||
/// <param name="range">电压量程枚举</param>
|
||||
/// <param name="ct">取消令牌</param>
|
||||
public virtual async Task 设置电压量程(int channel, VoltageRange range, CancellationToken ct = default)
|
||||
{
|
||||
// 正确格式例如: :INPut:VOLTage:RANGe:ELEMent1 300\n
|
||||
string cmd = string.Format(CultureInfo.InvariantCulture,
|
||||
":INPut:VOLTage:RANGe:ELEMent{0} {1}{2}",
|
||||
channel, (int)range, ScpiDelimiter);
|
||||
|
||||
await SendAsync(cmd, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置指定通道的电流量程 (取决于接线单元或传感器输入类型)
|
||||
/// 设置指定通道的电流量程
|
||||
/// </summary>
|
||||
public virtual async Task 设置电流量程(int channel, double range, CancellationToken ct = default)
|
||||
/// <param name="channel">通道号/单元号 (1 - 7)</param>
|
||||
/// <param name="range">电流量程枚举</param>
|
||||
/// <param name="ct">取消令牌</param>
|
||||
public virtual async Task 设置电流量程(int channel, CurrentRange range, CancellationToken ct = default)
|
||||
{
|
||||
string cmd = string.Format(CultureInfo.InvariantCulture, ":INPut:CURRent:RANGe {0},{1:F3}{2}", channel, range, ScpiDelimiter);
|
||||
// 正确格式例如: :INPut:CURRent:RANGe:ELEMent1 5\n
|
||||
string cmd = string.Format(CultureInfo.InvariantCulture,
|
||||
":INPut:CURRent:RANGe:ELEMent{0} {1}{2}",
|
||||
channel, (int)range, ScpiDelimiter);
|
||||
|
||||
await SendAsync(cmd, ct);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设置通道的耦合模式 (AC, DC, ACDC)
|
||||
/// </summary>
|
||||
public virtual async Task 设置通道耦合模式(int channel, string mode, CancellationToken ct = default)
|
||||
{
|
||||
string modeUpper = mode.ToUpper();
|
||||
if (modeUpper != "AC" && modeUpper != "DC" && modeUpper != "ACDC")
|
||||
throw new ArgumentException("耦合模式只能为 AC, DC, 或 ACDC");
|
||||
|
||||
string cmd = string.Format(CultureInfo.InvariantCulture, ":INPut:COUPling {0},{1}{2}", channel, modeUpper, ScpiDelimiter);
|
||||
await SendAsync(cmd, ct);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 4. SYSTem 系统设置与状态查询
|
||||
|
||||
/// <summary>
|
||||
/// 14. 查询仪器型号名称
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user