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