BOB/DeviceCommand/Device/SQ0030G1D.cs

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)
);
}
}
}