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 { /// /// 直流电源——阿美泰克直流电源 /// [ATSCommand] [DeviceCategory("阿美泰克直流电源\r\n")] public class AMETEKSGX : Tcp { public SemaphoreSlim semaphoreSlimLock { get; set; } = new(1, 1); /// /// 切换为远程模式 阿美泰克直流电源 /// /// 设备 /// /// public async Task Set_RemoteMode(Tcp client, CancellationToken ct = default) { try { await SendAsync(client, $"SYSTem:LOCAL? OFF\n", ct); } catch (Exception ex) { throw new Exception(ex.Message); } finally { semaphoreSlimLock.Release(); } } /// /// 切换为本地模式 /// /// 设备 /// /// public async Task Set_LocalMode(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { await SendAsync(client, $"SYSTem:LOCAL? ON\n", ct); } catch (Exception ex) { throw new Exception(ex.Message); } finally { semaphoreSlimLock.Release(); } } /// /// 设定输出电压值 /// /// 设备 /// 电压 /// 支持中途取消发送指令 /// public async Task Set_General_OutputVoltage(Tcp client, int voltage, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { await SendAsync(client, $"SOURce:VOLTage {voltage}\n", ct); } catch (Exception ex) { throw new Exception(ex.Message); } finally { semaphoreSlimLock.Release(); } } /// /// 设置最大电压 /// /// 设备 /// 输出频率 /// 支持中途取消发送指令 /// public async Task Set_MaxVoltage(Tcp client, float voltage, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { await SendAsync(client, $"SOURce:VOLTage:LIMit {voltage}\n", ct); } catch (Exception ex) { throw new Exception(ex.Message); } finally { semaphoreSlimLock.Release(); } } /// /// 返回AMETEK自身的电压值 /// /// 设备 /// 取消令牌 /// 返回值是:AMETEK自身的电流值 (Amps) public async Task QueryVoltage(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { //查询语法与命令语法相同,只需在命令后添加“?”即可 return await WriteRead(client, $"SOURce:VOLTage?\r\n", "\n", ct: ct); } finally { semaphoreSlimLock.Release(); } } /// /// 设置输出电流 /// /// 设备 /// 输出频率 /// 支持中途取消发送指令 /// public async Task Set_OutputCurrent(Tcp client, float current, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { await SendAsync(client, $"SOURce:CURRent{current}\n", ct); } catch (Exception ex) { throw new Exception(ex.Message); } finally { semaphoreSlimLock.Release(); } } /// /// 设置最大电流 /// /// 设备 /// 输出频率 /// 支持中途取消发送指令 /// public async Task Set_MaxCurrent(Tcp client, float current, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { await SendAsync(client, $"SOURce:CURRent:LIMit {current}\n", ct); } catch (Exception ex) { throw new Exception(ex.Message); } finally { semaphoreSlimLock.Release(); } } /// /// 返回AMETEK自身的电流值 /// /// 设备 /// 取消令牌 /// 返回值是:AMETEK自身的电流值 (Amps) public async Task QueryCurrent(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { //查询语法与命令语法相同,只需在命令后添加“?”即可 return await WriteRead(client, $"SOURce:CURRent?\r\n", "\n", ct: ct); } finally { semaphoreSlimLock.Release(); } } /// /// 设置电源的开启 /// /// 设备 /// 支持中途取消发送指令 /// public async Task Set_Power_ON(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { //1/0 或 ON/OFF都可以 await SendAsync(client, $"OUTPut:STATe ON\n", ct); } catch (Exception ex) { throw new Exception(ex.Message); } finally { semaphoreSlimLock.Release(); } } /// /// 设置电源的关闭 /// /// 设备 /// 支持中途取消发送指令 /// public async Task Set_Power_OFF(Tcp client, CancellationToken ct = default) { await semaphoreSlimLock.WaitAsync(ct); try { await SendAsync(client, $"OUTPut:STATe OFF\n", ct); } catch (Exception ex) { throw new Exception(ex.Message); } finally { semaphoreSlimLock.Release(); } } } }