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

212 lines
9.2 KiB
C#

using Aurora.Api;
using System.Collections.Generic;
using System.Threading;
namespace AuroraLaser.Ekspla
{
public class LaserMonitor
{
private static readonly Logger Log = new Logger("LaserMonitoring");
private const int SLEEP_TIME_MS = 50;
private const string INIT = "Init";
private const string CHECK_ACTIVE = "Check Activated";
private const string CHECK_LASER_STATUS = "Check Stutus";
private const string CHECK_LASER_FAULT_CODE = "Check Fault Code";
private const string CHECK_LASER_PUMP_LEVEL = "Check Pump Level";
private const string CHECK_LASER_FAULT_MSG = "Check Fault Msg";
private const string CHECK_LASER_WAVELENGTH = "Check WaveLength";
private const string CHECK_LASER_ENERGYLEVEL = "Check EnergyLevel";
private const string CHECK_LASER_TTEC1 = "Check TTEC1";
private const string CHECK_LASER_BURSTMODE = "Check BurstMode";
private const string CHECK_LASER_QSWADJ_DELAY = "Check QSWADJ Delay";
private const string CHECK_LASER_BURSTLENTH = "Check BurstLength";
private const string CHECK_LASER_SYNCMODE = "Check SyncMode";
private const string CHECK_LASER_SH1TEMP = "Check SH1 Temp";
private const string CHECK_LASER_ATTNTRANS = "Check AttnTrans";
private const string CHECK_LASER_REPRATE = "Check Repetition Rate";
private const string CHECK_LASER_SHOTCNT = "Check Shot Count";
private static string DeviceId;
private static NL202Laser _laser;
public static SequenceBuilder Builder(string laserDeviceId)
{
DeviceId = laserDeviceId;
SequenceBuilder sb = new SequenceBuilder(1000, true); // 무한, 시퀀스 Stop시 최대 대기시간.
sb.AddAction(INIT, Init);
sb.AddDecision(CHECK_ACTIVE, CheckActive);
sb.AddDecision(CHECK_LASER_STATUS, CheckStatus);
sb.AddAction(CHECK_LASER_FAULT_CODE, CheckLaserFaultCode);
sb.AddAction(CHECK_LASER_PUMP_LEVEL, CheckLaserPumpLevel);
sb.AddAction(CHECK_LASER_FAULT_MSG, CheckLaserFaultMsg);
sb.AddAction(CHECK_LASER_WAVELENGTH, CheckLaserWaveLength);
sb.AddAction(CHECK_LASER_ENERGYLEVEL, CheckLaserEnergyLevel);
sb.AddAction(CHECK_LASER_TTEC1, CheckLaserTTEC1);
sb.AddAction(CHECK_LASER_BURSTMODE, CheckLaserBurstMode);
sb.AddAction(CHECK_LASER_QSWADJ_DELAY, CheckLaserQSWADJDelay);
sb.AddAction(CHECK_LASER_BURSTLENTH, CheckLaserBurstLength);
sb.AddAction(CHECK_LASER_SYNCMODE, CheckLaserSyncMode);
sb.AddAction(CHECK_LASER_SH1TEMP, CheckLaserSH1Temp);
sb.AddAction(CHECK_LASER_ATTNTRANS, CheckLaserAttnTrans);
sb.AddAction(CHECK_LASER_REPRATE, CheckLaserReprate);
sb.AddAction(CHECK_LASER_SHOTCNT, CheckLaserShotCnt);
sb.Flows(sb.Init > sb[INIT] > sb[CHECK_ACTIVE]);
sb.Flows(sb[CHECK_ACTIVE] > sb[CHECK_LASER_STATUS]);
sb.Flows(sb[CHECK_ACTIVE] > sb.Final);
sb.Flows(sb[CHECK_LASER_STATUS] > sb[CHECK_LASER_FAULT_CODE] > sb[CHECK_LASER_FAULT_MSG] > sb[CHECK_LASER_PUMP_LEVEL]);
sb.Flows(sb[CHECK_LASER_STATUS] > sb[CHECK_LASER_PUMP_LEVEL]);
sb.Flows(sb[CHECK_LASER_PUMP_LEVEL] > sb[CHECK_LASER_WAVELENGTH] > sb[CHECK_LASER_ENERGYLEVEL] > sb[CHECK_LASER_TTEC1] > sb[CHECK_LASER_BURSTMODE]
> sb[CHECK_LASER_QSWADJ_DELAY] > sb[CHECK_LASER_BURSTLENTH] > sb[CHECK_LASER_SYNCMODE] > sb[CHECK_LASER_SH1TEMP] > sb[CHECK_LASER_ATTNTRANS]
> sb[CHECK_LASER_REPRATE] > sb[CHECK_LASER_SHOTCNT] > sb[CHECK_ACTIVE]);
sb.OnStopped(OnStopped);
sb.OnForceError(OnForceError);
//sb.Draw("LaserMonitoring.pdf");
return sb;
}
private static void OnForceError(SequenceContext arg1, string arg2)
{
}
private static void OnStopped(SequenceContext obj)
{
}
private static SequenceActionResult Init(SequenceContext context, string id, SequenceActionResult param)
{
_laser = context.Devices[DeviceId] as NL202Laser;
return SequenceAction.Ok();
}
private static string CheckActive(SequenceContext context, string id, ICollection<string> branches, SequenceActionResult param)
{
while (!context.Stopped) {
if (_laser.IsActivated) {
return CHECK_LASER_STATUS;
}
Thread.Sleep(SLEEP_TIME_MS);
}
return SeqNodeIds.FINAL;
}
private static string CheckStatus(SequenceContext context, string id, ICollection<string> branches, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_State);
int state = _laser.GetState();
if (state == 2 || state == 3) {
return CHECK_LASER_FAULT_CODE;
}
return CHECK_LASER_PUMP_LEVEL;
}
private static SequenceActionResult CheckLaserFaultCode(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_FaultCode);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserPumpLevel(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_PumpLevel);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserFaultMsg(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_FaultMsg);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserWaveLength(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_Wavelenth);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserEnergyLevel(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_EnergyLevel);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserTTEC1(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_TTec1);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserBurstMode(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_BurstMode);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserQSWADJDelay(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_QSWAdjDelay);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserBurstLength(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_BurstLenth);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserSyncMode(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_SyncMode);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserSH1Temp(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_SH1Temp);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserAttnTrans(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_AttnTrans);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserReprate(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_RepetitionRate);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckLaserShotCnt(SequenceContext context, string id, SequenceActionResult param)
{
_laser.GetLaserParam((int)NL202.ReadParam.NL202_Get_ShotCnt);
return SequenceAction.Ok();
}
//// 멈춤 상태에서 데이터 가져와라
//bool CLaserMonitorThread::GetDataOnPause()
//{
// if (m_iLaserMonitorPaused == LASER_MONITOR::CHECK_LASER_NOTHING) {
// m_iLaserMonitorPaused = LASER_MONITOR::CHECK_CONNECTION;
// return true;
// }
// return false;
//}
//// 멈춤 상태에서 데이터 가져오는 중이냐?
//bool CLaserMonitorThread::IsReadingDataOnPause()
//{
// return (m_iLaserMonitorPaused != LASER_MONITOR::CHECK_LASER_NOTHING);
//}
}
}