292 lines
7.7 KiB
C#
292 lines
7.7 KiB
C#
using Aurora.Api;
|
|
using Aurora.Api.DataType;
|
|
using Aurora.Api.Devices;
|
|
using Hermes;
|
|
using PropertyTools.DataAnnotations;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO.Ports;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace AuroraPowerMeter.Gentec
|
|
{
|
|
// Gentec
|
|
// refer https://www.gentec-eo.com/Content/downloads/user-manual/User_Manual_P-LINK_V14.pdf
|
|
public class PowerMeterGT : SerialConn, IPowerMeter
|
|
{
|
|
public const string CMD_ATTENUATOR_ON = "*ATT";
|
|
public const string CMD_ATTENUATOR_OFF = "*ATF";
|
|
public const string CMD_ENDCAUMODE = "*CSU";
|
|
public const string CMD_RETURNSINGLEMEASUREMENT = "*CVU";
|
|
|
|
public const string CMD_ANTICIPATION_ON = "*ANT";
|
|
public const string CMD_ANTICIPATION_OFF = "*ANF";
|
|
public const string CMD_POWERCORRECTION_ON = "*CFT";
|
|
public const string CMD_POWERCORRECTION_OFF = "*CFF";
|
|
public const string CMD_ENERGYMODE_ON = "*CMW";
|
|
public const string CMD_ENERGYMODE_OFF = "*CMX";
|
|
|
|
public const string CMD_SENDDATAPOINT = "*CAU";
|
|
|
|
|
|
public const string CMD_RESETDEVICE = "*RST";
|
|
public const string CMD_SETZEROOFFSET = "*SOU";
|
|
public const string CMD_PHYSICALSCALEDOWN = "*SHI";
|
|
public const string CMD_PHYSICALSCALEUP = "*SLO";
|
|
public const string CMD_AUTOSCALEMODEON = "*FAS";
|
|
|
|
public const string CMD_WAVELENGTHCORRECTION = "*PWC{0:D5}";
|
|
public const string CMD_MODIFYTRIGGERLEVEL = "*TLC{0:0.00E+00}";
|
|
public const string CMD_MODIFYMULTIFACTOR = "*MUL{0:0.00E+0}";
|
|
public const string CMD_MODIFYOFFSET = "*OFF{0:0.00E+00}";
|
|
|
|
public const string REPLY_ACK = "ACK";
|
|
|
|
private SerialConnConfig _connConfig;
|
|
|
|
public PowerMeterGT(string deviceId, bool isSimul) : base(deviceId, isSimul)
|
|
{
|
|
}
|
|
|
|
public int Connect(SerialConnConfig config)
|
|
{
|
|
_connConfig = config;
|
|
if (IsPortOpen()) {
|
|
return E1.OK;
|
|
}
|
|
|
|
return Open(config);
|
|
}
|
|
|
|
public int Disconnect()
|
|
{
|
|
return Close();
|
|
}
|
|
|
|
public int Reconnect()
|
|
{
|
|
// 1. 컴포트가 열려있으면 닫기
|
|
Disconnect();
|
|
|
|
// 2. 연결
|
|
if (IsPortOpen()) {
|
|
return E1.OK;
|
|
}
|
|
|
|
return Open(_connConfig);
|
|
|
|
//throw new NotImplementedException();
|
|
}
|
|
|
|
public bool Measure(out double power)
|
|
{
|
|
power = 0;
|
|
|
|
var reply = SendAndRepely(CMD_RETURNSINGLEMEASUREMENT);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
reply = ReadLine();
|
|
if (string.IsNullOrEmpty(reply)) {
|
|
return false;
|
|
}
|
|
|
|
try {
|
|
decimal value = decimal.Parse(reply, System.Globalization.NumberStyles.Float);
|
|
power = decimal.ToDouble(value);
|
|
return true;
|
|
} catch (Exception ex) {
|
|
Log.FuncE(ex.Message);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public bool SetZero()
|
|
{
|
|
var reply = SendAndRepely(CMD_SETZEROOFFSET);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private string SendAndRepely(string commnad)
|
|
{
|
|
var reply = WriteAndReadLine(commnad);
|
|
if (string.IsNullOrEmpty(reply)) {
|
|
return null;
|
|
}
|
|
|
|
return reply.Trim("\r\n ".ToCharArray());
|
|
}
|
|
|
|
public bool AttenuatorOn(bool bOn) // On / Off 같이 쓰자
|
|
{
|
|
string cmd = bOn ? CMD_ATTENUATOR_ON : CMD_ATTENUATOR_OFF;
|
|
|
|
var reply = SendAndRepely(cmd);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// 미사용..리턴값도 잘못되었다..“9.793354e-01\r\r\n
|
|
// Not Complete
|
|
public bool SendDataPoint()
|
|
{
|
|
var reply = SendAndRepely(CMD_SENDDATAPOINT);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// 미사용
|
|
public bool EndCAUMode()
|
|
{
|
|
var reply = SendAndRepely(CMD_ENDCAUMODE);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
// 미사용
|
|
public bool AnticipationOn(bool bOn) // on/off 같이 쓰지
|
|
{
|
|
string cmd = bOn ? CMD_ANTICIPATION_ON : CMD_ANTICIPATION_OFF;
|
|
|
|
var reply = SendAndRepely(cmd);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// 미사용
|
|
public bool PowerCorrectionOn(bool bOn)
|
|
{
|
|
string cmd = bOn ? CMD_POWERCORRECTION_ON : CMD_POWERCORRECTION_OFF;
|
|
|
|
var reply = SendAndRepely(cmd);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// 미사용
|
|
public bool ResetDevice()
|
|
{
|
|
var reply = SendAndRepely(CMD_RESETDEVICE);
|
|
if (reply == null || reply != "") {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// 사용
|
|
public bool WaveLengthCorrection(int nLength)
|
|
{
|
|
string cmd = string.Format(CMD_WAVELENGTHCORRECTION, nLength);
|
|
if (!Write(cmd)) {
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// 미사용
|
|
public bool ModifyTriggerLevel(double fLevel)
|
|
{
|
|
string cmd = string.Format(CMD_MODIFYTRIGGERLEVEL, fLevel);
|
|
|
|
var reply = SendAndRepely(cmd);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool ModifyMultiFactor(double fFactor)
|
|
{
|
|
string cmd = string.Format(CMD_MODIFYMULTIFACTOR, fFactor);
|
|
|
|
var reply = SendAndRepely(cmd);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool ModifyOffset(int nOffset)
|
|
{
|
|
string cmd = string.Format(CMD_MODIFYOFFSET, nOffset);
|
|
|
|
var reply = SendAndRepely(cmd);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool EnergyModeOn(bool bOn)
|
|
{
|
|
string cmd = bOn ? CMD_ENERGYMODE_ON : CMD_ENERGYMODE_OFF;
|
|
|
|
var reply = SendAndRepely(cmd);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool PhysicalScaleDown()
|
|
{
|
|
var reply = SendAndRepely(CMD_PHYSICALSCALEDOWN);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool PhysicalScaleUp()
|
|
{
|
|
var reply = SendAndRepely(CMD_PHYSICALSCALEUP);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public bool AutoScaleModeOn()
|
|
{
|
|
var reply = SendAndRepely(CMD_AUTOSCALEMODEON);
|
|
if (reply == null || reply != REPLY_ACK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|