207 lines
7.8 KiB
C#
207 lines
7.8 KiB
C#
using Common.Attributes;
|
|
using DeviceCommand.Base;
|
|
using Model.Models;
|
|
using System;
|
|
using System.Globalization;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace DeviceCommand.Devices
|
|
{
|
|
/// <summary>
|
|
/// 交流源 一拖三 (Chroma 61800系列)
|
|
/// </summary>
|
|
[ACPCommand]
|
|
public class Chroma61800 : Tcp
|
|
{
|
|
// Chroma SCPI 默认使用 \n 作为结束符
|
|
private const string ScpiDelimiter = "\n";
|
|
|
|
public Chroma61800(TcpConfig config) : base(config)
|
|
{
|
|
}
|
|
|
|
#region 1. 基础系统与公共指令
|
|
|
|
/// <summary>
|
|
/// 清除错误队列 (*CLS)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task 清除错误队列Async(CancellationToken ct = default)
|
|
{
|
|
await SendAsync($"*CLS{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 重设仪器为初始状态 (*RST)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task 复位Async(CancellationToken ct = default)
|
|
{
|
|
await SendAsync($"*RST{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询仪器识别码 (*IDN?)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task<string> 查询设备信息Async(CancellationToken ct = default)
|
|
{
|
|
return await WriteReadAsync($"*IDN?{ScpiDelimiter}", ScpiDelimiter, ct);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 2. 基础输出与耦合控制 (OUTPut 子系统)[cite: 1]
|
|
|
|
/// <summary>
|
|
/// 设置输出开关状态 (OUTP ON / OFF)[cite: 1]
|
|
/// </summary>
|
|
/// <param name="isOn">true: 开启输出, false: 关闭输出</param>
|
|
public virtual async Task 设置输出开关Async(bool isOn, CancellationToken ct = default)
|
|
{
|
|
string state = isOn ? "ON" : "OFF";
|
|
await SendAsync($"OUTP {state}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置输出耦合模式 (OUTP:COUP AC | DC | ACDC)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task 设置耦合模式Async(string couplingMode, CancellationToken ct = default)
|
|
{
|
|
// 有效参数: AC, DC, ACDC
|
|
await SendAsync($"OUTP:COUP {couplingMode}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置输出继电器状态 (OUTP:REL ON | OFF)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task 设置输出继电器Async(bool isOn, CancellationToken ct = default)
|
|
{
|
|
string state = isOn ? "ON" : "OFF";
|
|
await SendAsync($"OUTP:REL {state}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 3. 电源核心参数设置 (SOURCE 子系统)[cite: 1]
|
|
|
|
/// <summary>
|
|
/// 设置交流电压 (VOLT:AC)[cite: 1]
|
|
/// </summary>
|
|
/// <param name="voltage">电压值 (0 ~ 300V 或高压选配范围)</param>
|
|
public virtual async Task 设置交流电压Async(double voltage, CancellationToken ct = default)
|
|
{
|
|
string valStr = voltage.ToString("0.###", CultureInfo.InvariantCulture);
|
|
await SendAsync($"VOLT:AC {valStr}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置直流电压 (VOLT:DC)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task 设置直流电压Async(double voltage, CancellationToken ct = default)
|
|
{
|
|
string valStr = voltage.ToString("0.###", CultureInfo.InvariantCulture);
|
|
await SendAsync($"VOLT:DC {valStr}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置输出频率 (FREQ)[cite: 1]
|
|
/// </summary>
|
|
/// <param name="frequency">频率值 (Hz)</param>
|
|
public virtual async Task 设置频率Async(double frequency, CancellationToken ct = default)
|
|
{
|
|
string valStr = frequency.ToString("0.###", CultureInfo.InvariantCulture);
|
|
await SendAsync($"FREQ {valStr}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置波形选择 (FUNC:SHAP:A SINE / SQUA / CSIN 等)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task 设置波形Async(string shape, CancellationToken ct = default)
|
|
{
|
|
await SendAsync($"FUNC:SHAP:A {shape}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 4. 相位与多相模式控制 (INST & PHASE 子系统)[cite: 1]
|
|
|
|
/// <summary>
|
|
/// 设置单/三相工作模式 (INST:PHAS THREE / SINGLE)[cite: 1]
|
|
/// </summary>
|
|
/// <param name="isThreePhase">true: 三相模式, false: 单相模式</param>
|
|
public virtual async Task 设置单三相模式Async(bool isThreePhase, CancellationToken ct = default)
|
|
{
|
|
string mode = isThreePhase ? "THREE" : "SINGLE";
|
|
await SendAsync($"INST:PHAS {mode}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置三相模式下的相互关系 (PHASE:THREE INDEPEND / SAMEFREQ / BALANCE)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task 设置三相关系Async(string relation, CancellationToken ct = default)
|
|
{
|
|
// 有效参数: INDEPEND, SAMEFREQ, BALANCE
|
|
await SendAsync($"PHASE:THREE {relation}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置输出开启相位角 (PHASE:ON)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task 设置开机角度Async(double degree, CancellationToken ct = default)
|
|
{
|
|
string valStr = degree.ToString("0.###", CultureInfo.InvariantCulture);
|
|
await SendAsync($"PHASE:ON {valStr}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置输出关闭相位角 (PHASE:OFF)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task 设置关机角度Async(double degree, CancellationToken ct = default)
|
|
{
|
|
string valStr = degree.ToString("0.###", CultureInfo.InvariantCulture);
|
|
await SendAsync($"PHASE:OFF {valStr}{ScpiDelimiter}", ct);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 5. 参数测量查询 (MEASure 子系统)[cite: 1]
|
|
|
|
/// <summary>
|
|
/// 查询交流电压均方根值 (MEAS:VOLT:AC?)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task<double> 读取交流电压Async(CancellationToken ct = default)
|
|
{
|
|
string resp = await WriteReadAsync($"MEAS:VOLT:AC?{ScpiDelimiter}", ScpiDelimiter, ct);
|
|
return double.TryParse(resp, NumberStyles.Any, CultureInfo.InvariantCulture, out double val) ? val : 0.0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询交流电流均方根值 (MEAS:CURR:AC?)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task<double> 读取交流电流Async(CancellationToken ct = default)
|
|
{
|
|
string resp = await WriteReadAsync($"MEAS:CURR:AC?{ScpiDelimiter}", ScpiDelimiter, ct);
|
|
return double.TryParse(resp, NumberStyles.Any, CultureInfo.InvariantCulture, out double val) ? val : 0.0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询输出频率 (MEAS:FREQ?)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task<double> 读取频率Async(CancellationToken ct = default)
|
|
{
|
|
string resp = await WriteReadAsync($"MEAS:FREQ?{ScpiDelimiter}", ScpiDelimiter, ct);
|
|
return double.TryParse(resp, NumberStyles.Any, CultureInfo.InvariantCulture, out double val) ? val : 0.0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 查询真实输出功率 (MEAS:POW:AC?)[cite: 1]
|
|
/// </summary>
|
|
public virtual async Task<double> 读取真实功率Async(CancellationToken ct = default)
|
|
{
|
|
string resp = await WriteReadAsync($"MEAS:POW:AC?{ScpiDelimiter}", ScpiDelimiter, ct);
|
|
return double.TryParse(resp, NumberStyles.Any, CultureInfo.InvariantCulture, out double val) ? val : 0.0;
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
} |