using Common.Attributes; using DeviceCommand.Base; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static Common.Attributes.ATSCommandAttribute; namespace DeviceCommand.Device { /// /// 万用表(型号:Truevolt 系列) /// [ATSCommand] [DeviceCategory("万用表")] // 添加分类属性 public class KeySight_Truevolt : Tcp { public SemaphoreSlim semaphoreSlimLock { get; set; } = new(1, 1); /// /// 耦合模式(AC DC) /// public enum Coupling_Mode { AC, DC, } #region 测量电压 /// /// 复位仪器 /// /// 设备 /// 支持中途取消发送指令 /// public async Task SYSTem_PRESet(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { await SendAsync(client, $"SYSTem:PRESet\n", ct); } finally { semaphoreSlimLock.Release(); } } /// /// 设置电压量程(直流电压DC) /// /// 设备 /// 量程 /// 支持中途取消发送指令 /// public async Task Set_VoltageDCRange(Tcp client, float range, CancellationToken ct = default) { if (range > 1000) { throw new ArgumentNullException($"{range}超出规定的最大量程"); } await semaphoreSlimLock.WaitAsync(ct); try { //CONFigure[:VOLTage]:{AC|DC}[{|AUTO|MIN|MAX|DEF}[, {|MIN|MAX|DEF}]] await SendAsync(client, $"CONFigure:VOLTage:DC:RANGe {range}\n", ct); // 使用 \n 作为 SCPI 命令结束符 } finally { semaphoreSlimLock.Release(); } } /// /// 读取默认配置电压测量结果 /// /// 设备 /// 取消令牌 /// 返回值是:定通道电源输出的实际电压值 (Amps) public async Task Default_QueryVoltage(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { return await WriteRead(client, $"MEAS:VOLT:DC? AUTO\r\n", "\n", ct: ct); } finally { semaphoreSlimLock.Release(); } } /// /// 读取自定义量程电压测量结果 /// /// 设备 /// 量程 /// 取消令牌 /// 返回值是:定通道电源输出的实际电压值 (Amps) public async Task Range_QueryVoltage(Tcp client, float range, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { //MEASure[:VOLTage]:{AC|DC}? [{|AUTO|MIN|MAX|DEF} MIN/MAX仪器默认最小和最大值 return await WriteRead(client, $"MEAS:VOLT:DC?{range}\r\n", "\n", ct: ct); } finally { semaphoreSlimLock.Release(); } } /// /// 触发并读取结果 /// /// 设备 /// 取消令牌 /// 返回值是:定通道电源输出的实际电压值 (Amps) public async Task Read_Voltage(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { //MEASure[:VOLTage]:{AC|DC}? [{|AUTO|MIN|MAX|DEF} MIN/MAX仪器默认最小和最大值 return await WriteRead(client, $"READ?\r\n", "\n", ct: ct); } finally { semaphoreSlimLock.Release(); } } /// /// 启用自动输入阻抗模式 /// /// 设备 /// 支持中途取消发送指令 /// public async Task StartIMPAuto_VoltageDC(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { //CONFigure[:VOLTage]:{AC|DC}[{|AUTO|MIN|MAX|DEF}[, {|MIN|MAX|DEF}]] await SendAsync(client, $"VOLTage:DC:IMPedance:AUTO ON\n", ct); } finally { semaphoreSlimLock.Release(); } } /// /// 关闭自动输入阻抗模式 /// /// 设备 /// 支持中途取消发送指令 /// public async Task StopIMPAuto_VoltageDC(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { //CONFigure[:VOLTage]:{AC|DC}[{|AUTO|MIN|MAX|DEF}[, {|MIN|MAX|DEF}]] await SendAsync(client, $"VOLTage:DC:IMPedance:AUTO OFF\n", ct); } finally { semaphoreSlimLock.Release(); } } /// /// 启动DC电压和比例测量禁用或启用自动归零模式 /// /// 设备 /// 支持中途取消发送指令 /// public async Task Start_VoltageDCAUTO_ZERO(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { //CONFigure[:VOLTage]:{AC|DC}[{|AUTO|MIN|MAX|DEF}[, {|MIN|MAX|DEF}]] await SendAsync(client, $"VOLTage:DC:ZERO:AUTO ON\n", ct); // 使用 \n 作为 SCPI 命令结束符 } finally { semaphoreSlimLock.Release(); } } /// /// 关闭DC电压和比例测量禁用或启用自动归零模式 /// /// 设备 /// 量程 /// 支持中途取消发送指令 /// public async Task Stop_VoltageDCAUTO_ZERO(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { //CONFigure[:VOLTage]:{AC|DC}[{|AUTO|MIN|MAX|DEF}[, {|MIN|MAX|DEF}]] await SendAsync(client, $"VOLTage:DC:ZERO:AUTO OFF\n", ct); // 使用 \n 作为 SCPI 命令结束符 } finally { semaphoreSlimLock.Release(); } } #endregion } }