2026-06-05 13:44:39 +09:00

243 lines
6.7 KiB
C#

using Aurora.Api;
using Aurora.Api.Devices;
using Hermes;
using System.Linq;
namespace AuroraLaser.Coherent
{
public enum eCoherentIRLaser
{
RapidLX
}
// IR
public class LaserRapidLX : Device
{
LaserRapidLXTcp _LaserRapidLX;
public int Trigger { get; private set; }
public bool State { get; private set; }
public int Burst { get; private set; }
public int RepRate { get; private set; }
public double Power { get; private set; }
public double MonitorPower { get; private set; }
public double MonitorSeed { get; private set; }
public string Fault { get; private set; }
public string Serial { get; private set; }
public string FirmVer { get; private set; }
public string Model { get; private set; }
public string Status { get; private set; }
public string Warning { get; private set; }
public double Flow { get; private set; }
public double Temp { get; private set; }
public double SeederTime { get; private set; }
public double HeadTime { get; private set; }
public LaserRapidLX(string deviceId, bool isSimul)
{
IsSimul = isSimul;
_LaserRapidLX = new LaserRapidLXTcp(deviceId, isSimul);
}
protected override int DoActivate(IDeviceConfig config)
{
if (IsSimul) {
return E1.OK;
}
return _LaserRapidLX.OnInit(config.ConnConfig as SocketConnConfig);
}
protected override int DoDeactivate()
{
return _LaserRapidLX.OnClose();
}
public bool IsConnected()
{
if (!IsActivated) {
return false;
}
IsCommError = _LaserRapidLX._IsCommError;
if (IsCommError) {
return false;
}
return true;
}
public int SetAlarmReset()
{
if (!IsActivated) {
return E2.NOT_CONNECTED;
}
if (IsSimul) {
return E1.OK;
}
return _LaserRapidLX.SetAlarmReset();
}
public int SetEmission(bool bEmission)
{
if (!IsActivated) {
return E2.NOT_CONNECTED;
}
if (IsSimul) {
State = bEmission;
return E1.OK;
}
return _LaserRapidLX.SetEmission(bEmission);
}
public int SetPower(double dPower)
{
if (!IsActivated) {
return E2.NOT_CONNECTED;
}
if (IsSimul) {
Power = dPower;
return E1.OK;
}
return _LaserRapidLX.SetPower(dPower);
}
public int SetRepRate(int iRepRate)
{
if (!IsActivated) {
return E2.NOT_CONNECTED;
}
if (IsSimul) {
RepRate = iRepRate;
return E1.OK;
}
return _LaserRapidLX.SetRepRate(iRepRate);
}
public int SetBurst(int iBurst)
{
if (!IsActivated) {
return E2.NOT_CONNECTED;
}
if (IsSimul) {
Burst = iBurst;
return E1.OK;
}
return _LaserRapidLX.SetBurst(iBurst);
}
public int SetTrigger(int iTrigger)
{
if (!IsActivated) {
return E2.NOT_CONNECTED;
}
if (IsSimul) {
Trigger = iTrigger;
return E1.OK;
}
return _LaserRapidLX.SetTrigger(iTrigger);
}
public void UpdateStatus()
{
if (!IsActivated) {
return;
}
var status = _LaserRapidLX.GetStatus();
if (status == null) {
return;
}
int iValue;
double dValue;
var strList = status.Split('r');
for (int i = 0; i < strList.Count(); i++) {
var splited = strList[i].Split('=');
if (splited.Count() < 2) {
continue;
}
var command = splited[0];
var strValue = splited[1];
if (strValue.Length > 20) {
return;
}
switch (command) {
case "\nBURST":
if (int.TryParse(strValue, out iValue)) {
Burst = iValue;
}
break;
case "\nF":
Fault = strValue;
break;
case "\nW":
Warning = strValue;
break;
case "\nWF":
if (double.TryParse(strValue, out dValue)) {
Temp = dValue;
}
break;
case "\nSH":
if (double.TryParse(strValue, out dValue)) {
SeederTime = dValue;
}
break;
case "\nHH":
if (double.TryParse(strValue, out dValue)) {
HeadTime = dValue;
}
break;
case "\nRL":
if (double.TryParse(strValue, out dValue)) {
Power = dValue;
}
break;
case "\nPD4P":
if (double.TryParse(strValue, out dValue)) {
MonitorSeed = dValue;
}
break;
case "\nPOUT":
if (double.TryParse(strValue, out dValue)) {
MonitorPower = dValue;
}
break;
case "\nRRAMPSET":
if (int.TryParse(strValue, out iValue)) {
RepRate = iValue;
}
break;
case "\nPM":
if (int.TryParse(strValue, out iValue)) {
Trigger = iValue;
}
break;
case "\nSTATE":
if (int.TryParse(strValue, out iValue)) {
State = iValue == 1;
}
break;
}
}
}
}
}