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