RnD_Welder 69679864ef feat: 260415 장비 활성화 추가 및 알람매니저에 AutoRunACS 추가
-> 사용안하는 Device의 AxisY1,Y2 주석처리
-> 모터 동작에 영향 x , 스캐너 갈보모터 영향 X 확인
2026-04-15 10:49:19 +09:00

184 lines
6.8 KiB
C#

using ACS.SPiiPlusNET;
using Aurora;
using Aurora.Api;
using Aurora.Framework.Alarm;
using AuroraACS;
using AuroraChiller;
using AuroraIO;
using AuroraLaser;
using AuroraLaser.Trumpf;
using AuroraLaserScanner;
using AuroraLBAD;
using AuroraMotionBoard.Ajin;
using AuroraOCT;
using Hermes.Functional;
using WeldingCommon.Alarm;
using WeldingCommon.Device;
using WeldingCommon.Device.ACS;
using WeldingCommon.Process;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WeldingCommon;
using WeldingCommon.Alarm;
using WeldingCommon.Devices;
using WeldingCommon.Sequences;
using WeldingCommon.Settings;
using WeldingCommon.Utils;
using WeldingCommon.Devices.ACS;
namespace WeldingCommon.Sequences.Monitoring
{
public class SeqAlarmMonitor
{
static readonly Logger Log = new Logger("AlarmMonitoring");
const string SEQ_START = "SEQ START"; // 딱 한번 Sequence 진입 시에만 실행될 Node
const string SEQ_LoopFirst = "SEQ Loop First";
public const string CHECK_ALARM_PLC = "Check Alarm PLC";
public const string CHECK_ALARM_ACS = "Check Alarm ACS";
public const string CHECK_ALARM_LASER = "Check Alarm Laser";
public const string CHECK_ALARM_IO = "Check Alarm IO";
private static SequenceSetting _SequenceSetting;
private static Laser _laser;
private static LaserTruFiber _laserCore;
private static ScannerACS _acs; // 26.04.13
private static ACSMotor _axisX, _axisZ; //, _axisY1, _axisY2,
public const int NODE_SLEEP = 100; // msec
public static SequenceBuilder Builder()
{
SequenceBuilder sb = new SequenceBuilder(1000, true);
sb.AddAction(SEQ_START, StartNode);
sb.AddDecision(SEQ_LoopFirst, LoopFirstNode);
sb.AddAction(CHECK_ALARM_LASER, CheckAlarmLaser);
sb.AddAction(CHECK_ALARM_IO, CheckAlarmIO);
sb.AddAction(CHECK_ALARM_ACS, CheckAlarmAcs);
sb.Flows(sb.Init > sb[SEQ_START] > sb[SEQ_LoopFirst]
> sb[CHECK_ALARM_LASER] > sb[CHECK_ALARM_IO] > sb[CHECK_ALARM_ACS]
> sb[SEQ_LoopFirst]);
sb.Flows(sb[SEQ_LoopFirst] > sb.Final);
sb.OnStopped(OnStopped);
sb.OnForceError(OnForceError);
//sb.Draw("SeqAlarmMonitor.pdf");
return sb;
}
//StartNode 알람
private static SequenceActionResult StartNode(SequenceContext context, string id, SequenceActionResult param)
{
_SequenceSetting = context.Settings[CommonSettingIds.Sequence] as SequenceSetting;
if (_laser is null)
_laser = context.Devices[CommonDeviceIds.Laser] as Laser;
_laserCore = _laser.getCore() as LaserTruFiber;
if (_acs is null)
_acs = context.Devices[CommonDeviceIds.ACS] as ScannerACS;
if (_axisX is null)
_axisX = context.Devices[CommonMotorIds.AxisX2] as ACSMotor;
//if (_axisY1 is null)
// _axisY1 = context.Devices[CommonMotorIds.AxisY1] as ACSMotor;
//if (_axisY2 is null)
// _axisY2 = context.Devices[CommonMotorIds.AxisY2] as ACSMotor;
if (_axisZ is null)
_axisZ = context.Devices[CommonMotorIds.AxisZ] as ACSMotor;
return SequenceAction.Ok();
}
private static string LoopFirstNode(SequenceContext context, string id, ICollection<string> branches, SequenceActionResult param)
{
while (!context.Stopped) {
return CHECK_ALARM_PLC;
}
Thread.Sleep(NODE_SLEEP);
return SeqNodeIds.FINAL;
}
private static SequenceActionResult CheckAlarmAcs(SequenceContext context, string id, SequenceActionResult param)
{
if ((_acs.HasHeavyAlarm | _acs.HasLightAlarm) & _acs.IsActivated) {
foreach (var alarm in _acs.HaveAlarmCodes) {
if (alarm != 0) {
if (!AlarmManager.IsOccuredAlarm(alarm))
Log.E($"{context.AlarmAccured(alarm)}");
}
}
}
Thread.Sleep(NODE_SLEEP);
return SequenceAction.Ok();
}
private static SequenceActionResult CheckAlarmLaser(SequenceContext context, string id, SequenceActionResult param)
{
#region 26.04.13 잠시 주석처리
_laserCore = _laser.getCore() as LaserTruFiber;
if (_laserCore.GetEStopOpen())
{
if (!AlarmManager.IsOccuredAlarm(AlarmCode_PrismaticGun.DEVICE_IO_LASER_EMO))
Log.E($"{context.AlarmAccured(AlarmCode_PrismaticGun.DEVICE_IO_LASER_EMO)}");
}
if (_laserCore.GetFaultLaser())
{
if (!AlarmManager.IsOccuredAlarm(AlarmCode_PrismaticGun.DEVICE_LASER_ERROR_MSG))
{
string alarmCode = $"{Convert.ToString(_laserCore.GetLastMessageCompID(), 16).ToUpper().PadLeft(2, '0')}{Convert.ToString(_laserCore.GetLastMessageCompNum(), 16).ToUpper().PadLeft(2, '0')} {Convert.ToString(_laserCore.GetLastMessageMsgCode(), 16).ToUpper().PadLeft(2, '0')}";
string alarmDescription = $" {_laserCore.GetLastMessageShortText()}";
Log.E($"{context.AlarmAccured(AlarmCode_PrismaticGun.DEVICE_LASER_ERROR_MSG)} >> code desc {alarmCode + alarmDescription}");
}
}
else if (_laserCore.GetMonitoring())
{
if (!AlarmManager.IsOccuredAlarm(AlarmCode_PrismaticGun.DEVICE_LASER_WARNING_MSG))
{
string alarmCode = $"{Convert.ToString(_laserCore.GetLastMessageCompID(), 16).ToUpper().PadLeft(2, '0')}{Convert.ToString(_laserCore.GetLastMessageCompNum(), 16).ToUpper().PadLeft(2, '0')} {Convert.ToString(_laserCore.GetLastMessageMsgCode(), 16).ToUpper().PadLeft(2, '0')}";
string alarmDescription = $" {_laserCore.GetLastMessageShortText()}";
Log.E($"{context.AlarmAccured(AlarmCode_PrismaticGun.DEVICE_LASER_WARNING_MSG)} >> code desc {alarmCode + alarmDescription}");
}
}
Thread.Sleep(NODE_SLEEP);
#endregion
return SequenceAction.Ok();
}
private static SequenceActionResult CheckAlarmIO(SequenceContext context, string id, SequenceActionResult param)
{
return SequenceAction.Ok();
}
private static void OnStopped(SequenceContext context)
{
}
private static void OnForceError(SequenceContext context, string arg2)
{
}
}
}