113 lines
4.7 KiB
C#
113 lines
4.7 KiB
C#
using Common.Attributes;
|
|
using DeviceCommand.Base;
|
|
using System.Globalization;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace DeviceCommand.Device
|
|
{
|
|
[BOBCommand]
|
|
public class SQ0030G1D : Tcp
|
|
{
|
|
public SQ0030G1D(string ip, int port, int sendTimeout, int receiveTimeout)
|
|
{
|
|
ConfigureDevice(ip, port, sendTimeout, receiveTimeout);
|
|
}
|
|
|
|
public SQ0030G1D() { }
|
|
|
|
// ===================== 基础封装 =====================
|
|
|
|
protected virtual Task 写命令(string cmd, CancellationToken ct = default)
|
|
=> SendAsync(cmd + "\n", ct);
|
|
|
|
protected virtual async Task<string> 查询命令(string cmd, CancellationToken ct = default)
|
|
{
|
|
await SendAsync(cmd + "\n", ct);
|
|
return await ReadAsync(ct: ct);
|
|
}
|
|
|
|
// ===================== 1. 基础控制 =====================
|
|
|
|
public async Task 启动电源()
|
|
{
|
|
await 写命令($"OUTPut 1\n");
|
|
}
|
|
|
|
public async Task 关闭电源()
|
|
{
|
|
await 写命令($"OUTPut 0\n");
|
|
}
|
|
|
|
public virtual Task<string> 获取设备ID(CancellationToken ct = default)
|
|
=> 查询命令("*IDN?", ct);
|
|
|
|
public virtual Task 重置设备(CancellationToken ct = default)
|
|
=> 写命令("*RST", ct);
|
|
|
|
public virtual Task 设置远程控制(CancellationToken ct = default)
|
|
=> 写命令("SYST:REM", ct);
|
|
|
|
public virtual Task 设置本地控制(CancellationToken ct = default)
|
|
=> 写命令("SYST:LOC", ct);
|
|
|
|
public virtual Task 设置输出状态(bool on, CancellationToken ct = default)
|
|
=> 写命令($"OUTP:STAT {(on ? "ON" : "OFF")}", ct);
|
|
|
|
public virtual async Task<bool> 获取输出状态(CancellationToken ct = default)
|
|
=> (await 查询命令("OUTP:STAT?", ct)).Trim().ToUpper() == "ON";
|
|
|
|
// ===================== 2. 电压/频率控制 =====================
|
|
|
|
public virtual Task 设置输出电压(double value, CancellationToken ct = default)
|
|
=> 写命令($"VOLT {value}", ct);
|
|
|
|
public virtual async Task<double> 获取输出电压(CancellationToken ct = default)
|
|
=> double.Parse((await 查询命令("VOLT?", ct)).Replace("V", ""), CultureInfo.InvariantCulture);
|
|
|
|
public virtual Task 设置输出频率(double freq, CancellationToken ct = default)
|
|
=> 写命令($"FREQ {freq}", ct);
|
|
|
|
public virtual async Task<double> 获取输出频率(CancellationToken ct = default)
|
|
=> double.Parse((await 查询命令("FREQ?", ct)).Replace("Hz", ""), CultureInfo.InvariantCulture);
|
|
|
|
// ===================== 3. 保护 =====================
|
|
|
|
public virtual Task 设置过压保护(double v, CancellationToken ct = default)
|
|
=> 写命令($"VOLT:PROT {v}", ct);
|
|
|
|
public virtual async Task<double> 获取过压保护(CancellationToken ct = default)
|
|
=> double.Parse((await 查询命令("VOLT:PROT?", ct)).Replace("V", ""), CultureInfo.InvariantCulture);
|
|
|
|
public virtual Task 设置过流保护(double a, CancellationToken ct = default)
|
|
=> 写命令($"CURR:PROT {a}", ct);
|
|
|
|
public virtual async Task<double> 获取过流保护(CancellationToken ct = default)
|
|
=> double.Parse((await 查询命令("CURR:PROT?", ct)).Replace("A", ""), CultureInfo.InvariantCulture);
|
|
|
|
public virtual Task 清除保护(CancellationToken ct = default)
|
|
=> 写命令("SYST:PROT:CLE", ct);
|
|
|
|
// ===================== 4. 测量 =====================
|
|
|
|
public virtual async Task<double> 测量输出电压(CancellationToken ct = default)
|
|
=> double.Parse((await 查询命令("MEAS:VOLT?", ct)).Replace("V", ""), CultureInfo.InvariantCulture);
|
|
|
|
public virtual async Task<double> 测量输出电流(CancellationToken ct = default)
|
|
=> double.Parse((await 查询命令("MEAS:CURR?", ct)).Replace("A", ""), CultureInfo.InvariantCulture);
|
|
|
|
public virtual async Task<double> 测量输出功率(CancellationToken ct = default)
|
|
=> double.Parse((await 查询命令("MEAS:POW?", ct)).Replace("W", ""), CultureInfo.InvariantCulture);
|
|
|
|
public virtual async Task<(double volt, double curr, double pow)> 测量所有参数(CancellationToken ct = default)
|
|
{
|
|
var parts = (await 查询命令("MEAS:ARR?", ct)).Split(',');
|
|
return (
|
|
double.Parse(parts[0].Replace("V", ""), CultureInfo.InvariantCulture),
|
|
double.Parse(parts[1].Replace("A", ""), CultureInfo.InvariantCulture),
|
|
double.Parse(parts[2].Replace("W", ""), CultureInfo.InvariantCulture)
|
|
);
|
|
}
|
|
}
|
|
}
|