212 lines
9.2 KiB
C#
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);
|
|
//}
|
|
}
|
|
}
|