115 lines
4.8 KiB
C#
115 lines
4.8 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() { }
|
|
|
|
// ===================== 基础封装 =====================
|
|
|
|
private Task WriteAsync(string cmd, CancellationToken ct = default)
|
|
=> SendAsync(cmd + "\n", ct);
|
|
|
|
private async Task<string> QueryAsync(string cmd, CancellationToken ct = default)
|
|
{
|
|
await SendAsync(cmd + "\n", ct);
|
|
return await ReadAsync(ct: ct);
|
|
}
|
|
|
|
// ===================== 1. 基础控制 =====================
|
|
|
|
public Task<string> GetIdAsync(CancellationToken ct = default)
|
|
=> QueryAsync("*IDN?", ct);
|
|
|
|
public Task ResetAsync(CancellationToken ct = default)
|
|
=> WriteAsync("*RST", ct);
|
|
|
|
public Task SetRemoteAsync(CancellationToken ct = default)
|
|
=> WriteAsync("SYST:REM", ct);
|
|
|
|
public Task SetLocalAsync(CancellationToken ct = default)
|
|
=> WriteAsync("SYST:LOC", ct);
|
|
|
|
public Task SetOutputAsync(bool on, CancellationToken ct = default)
|
|
=> WriteAsync($"OUTP:STAT {(on ? "ON" : "OFF")}", ct);
|
|
|
|
public async Task<bool> GetOutputAsync(CancellationToken ct = default)
|
|
=> (await QueryAsync("OUTP:STAT?", ct)).Trim().ToUpper() == "ON";
|
|
|
|
// ===================== 2. 电压/频率控制 =====================
|
|
|
|
public Task SetVoltageAsync(double value, CancellationToken ct = default)
|
|
=> WriteAsync($"VOLT {value}", ct);
|
|
|
|
public async Task<double> GetVoltageAsync(CancellationToken ct = default)
|
|
=> double.Parse((await QueryAsync("VOLT?", ct)).Replace("V", ""), CultureInfo.InvariantCulture);
|
|
|
|
public Task SetFrequencyAsync(double freq, CancellationToken ct = default)
|
|
=> WriteAsync($"FREQ {freq}", ct);
|
|
|
|
public async Task<double> GetFrequencyAsync(CancellationToken ct = default)
|
|
=> double.Parse((await QueryAsync("FREQ?", ct)).Replace("Hz", ""), CultureInfo.InvariantCulture);
|
|
|
|
// ===================== 3. 保护 =====================
|
|
|
|
public Task SetOVPAsync(double v, CancellationToken ct = default)
|
|
=> WriteAsync($"VOLT:PROT {v}", ct);
|
|
|
|
public async Task<double> GetOVPAsync(CancellationToken ct = default)
|
|
=> double.Parse((await QueryAsync("VOLT:PROT?", ct)).Replace("V", ""), CultureInfo.InvariantCulture);
|
|
|
|
public Task SetOCPAsync(double a, CancellationToken ct = default)
|
|
=> WriteAsync($"CURR:PROT {a}", ct);
|
|
|
|
public async Task<double> GetOCPAsync(CancellationToken ct = default)
|
|
=> double.Parse((await QueryAsync("CURR:PROT?", ct)).Replace("A", ""), CultureInfo.InvariantCulture);
|
|
|
|
public Task ClearProtectionAsync(CancellationToken ct = default)
|
|
=> WriteAsync("SYST:PROT:CLE", ct);
|
|
|
|
// ===================== 4. 测量 =====================
|
|
|
|
public async Task<double> MeasureVoltageAsync(CancellationToken ct = default)
|
|
=> double.Parse((await QueryAsync("MEAS:VOLT?", ct)).Replace("V", ""), CultureInfo.InvariantCulture);
|
|
|
|
public async Task<double> MeasureCurrentAsync(CancellationToken ct = default)
|
|
=> double.Parse((await QueryAsync("MEAS:CURR?", ct)).Replace("A", ""), CultureInfo.InvariantCulture);
|
|
|
|
public async Task<double> MeasurePowerAsync(CancellationToken ct = default)
|
|
=> double.Parse((await QueryAsync("MEAS:POW?", ct)).Replace("W", ""), CultureInfo.InvariantCulture);
|
|
|
|
public async Task<(double volt, double curr, double pow)> MeasureArrayAsync(CancellationToken ct = default)
|
|
{
|
|
var parts = (await QueryAsync("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)
|
|
);
|
|
}
|
|
|
|
// ===================== 5.(可选)瞬态 =====================
|
|
|
|
public Task SetTransientOnAsync(bool on, CancellationToken ct = default)
|
|
=> WriteAsync($"TRAN:STAT {(on ? "ON" : "OFF")}", ct);
|
|
|
|
public Task SetTransientStepVoltageAsync(int step, double volt, CancellationToken ct = default)
|
|
=> WriteAsync($"TRAN:STEP {step}:VOLT {volt}", ct);
|
|
|
|
public Task RunTransientAsync(CancellationToken ct = default)
|
|
=> WriteAsync("TRAN:RUN", ct);
|
|
}
|
|
}
|