- namespace/using ILSOS_PrismaticScanner → ILSOS_PrismaticRD_PTOP (전 .cs/.xaml) - 파일/클래스 리네임 7개: AlarmCode/AlarmManager/PAIX/EquipmentSpecificModel→_PTOP, RMSHandlerForScanner→ForPTOP, SettingUploadDataListForScanner→ForPTOP, SeqAutoRunPrismaticScanner→SeqAutoRunPrismatic, PLCControllerPrismaticScanner→PLCControllerPTOP - PAIX_PrismaticScanner: 머신 참조만 PAIX_PTOP로 변경, WeldingCommon 공유 참조(SeqTestRun)는 보존 - XAML 3종(x:Class/clr-namespace/code-behind) 일치, csproj Compile Include 갱신 - csproj 빌드 경로 TDC→PTOP(_out_prismatic_rd_ptop) - sln에서 Scanner/Gun/CleanLaser 제거 및 해당 머신 소스 삭제 → Machines에 PTOP만 - 분석/작업일지 문서 추가 (참고본: 정리후(빌드완) 기준) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
120 lines
4.1 KiB
C#
120 lines
4.1 KiB
C#
using Aurora.Api;
|
|
using AuroraIO;
|
|
using AuroraLaser;
|
|
using ILSOS_PrismaticRD_PTOP.Device;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using WeldingCommon.Alarm;
|
|
using WeldingCommon.Settings;
|
|
using WeldingCommon.Utils;
|
|
|
|
namespace WeldingCommon.Sequences
|
|
{
|
|
public class SeqStatusMonitor
|
|
{
|
|
static readonly Logger Log = new Logger("SeqStatusMonitor");
|
|
|
|
const string SEQ_START = "SEQ START"; // 딱 한번 Sequence 진입 시에만 실행될 Node
|
|
|
|
const string SEQ_LoopFirst = "SEQ Loop First";
|
|
|
|
public const string UPDATE_STATUS = "Update Status";
|
|
public const string UPDATE_UI = "Update UI";
|
|
public const string UPDATE_IO = "Update IO";
|
|
|
|
private static SequenceSetting _SequenceSetting;
|
|
|
|
private static Laser _laser;
|
|
private static PLCControllerPTOP _plc;
|
|
private static IODevice _io;
|
|
|
|
public const int TIMEOUT_PLC_LIVE_CHECK = 2000; // msec
|
|
public const int NODE_SLEEP = 20;
|
|
public static SequenceBuilder Builder()
|
|
{
|
|
SequenceBuilder sb = new SequenceBuilder(1000, true);
|
|
|
|
sb.AddAction(SEQ_START, StartNode);
|
|
sb.AddDecision(SEQ_LoopFirst, LoopFirstNode);
|
|
sb.AddAction(UPDATE_STATUS, UpdateStatus);
|
|
sb.AddAction(UPDATE_UI, UpdateUI);
|
|
sb.AddAction(UPDATE_IO, UpdateIO);
|
|
|
|
sb.Flows(sb.Init > sb[SEQ_START] > sb[SEQ_LoopFirst]
|
|
> sb[UPDATE_STATUS] > sb[UPDATE_UI]
|
|
> sb[UPDATE_IO] > sb[SEQ_LoopFirst]);
|
|
|
|
sb.Flows(sb[SEQ_LoopFirst] > sb.Final);
|
|
|
|
sb.OnStopped(OnStopped);
|
|
sb.OnForceError(OnForceError);
|
|
|
|
//sb.Draw("SeqAlarmMonitor.pdf");
|
|
|
|
return sb;
|
|
|
|
}
|
|
|
|
private static SequenceActionResult StartNode(SequenceContext context, string id, SequenceActionResult param)
|
|
{
|
|
_SequenceSetting = context.Settings[CommonSettingIds.Sequence] as SequenceSetting;
|
|
|
|
if (_plc is null)
|
|
_plc = context.Devices[CommonDeviceIds.PLCDevice] as PLCControllerPTOP;
|
|
|
|
if (_laser is null)
|
|
_laser = context.Devices[CommonDeviceIds.Laser] as Laser;
|
|
|
|
if (_io is null)
|
|
_io = context.Devices[CommonDeviceIds.IODevice] as IODevice;
|
|
|
|
return SequenceAction.Ok();
|
|
}
|
|
|
|
private static string LoopFirstNode(SequenceContext context, string id, ICollection<string> branches, SequenceActionResult param)
|
|
{
|
|
while (!context.Stopped) {
|
|
Thread.Sleep(NODE_SLEEP);
|
|
return UPDATE_STATUS;
|
|
}
|
|
|
|
return SeqNodeIds.FINAL;
|
|
}
|
|
|
|
private static SequenceActionResult UpdateStatus(SequenceContext context, string id, SequenceActionResult param)
|
|
{
|
|
_plc.WriteBit(PLCControllerPTOP.eBitOutput.PC_HEAVY_ALARM_STATUS, AlarmManager.HasAlarmLevelHigh());
|
|
_plc.WriteBit(PLCControllerPTOP.eBitOutput.PC_LIGHT_ALARM_STATUS, AlarmManager.HasAlarmLevelLow());
|
|
|
|
var boolian = _plc.ReadBit(PLCControllerPTOP.eBitInput.PLC_ALARM_RESET).data;
|
|
if (ChangeChecker.IsChangedBoolMonitoring("AlarmReset", boolian, true)){
|
|
context.EventPublisher.Publish(new EventMessage("SeqStatusMonitor", CommonEventIds.EVENT_RESET_ALL_ALARMS_REQUEST));
|
|
}
|
|
|
|
Thread.Sleep(NODE_SLEEP);
|
|
return SequenceAction.Ok();
|
|
}
|
|
|
|
private static SequenceActionResult UpdateUI(SequenceContext context, string id, SequenceActionResult param)
|
|
{
|
|
Thread.Sleep(NODE_SLEEP);
|
|
return SequenceAction.Ok();
|
|
}
|
|
|
|
private static SequenceActionResult UpdateIO(SequenceContext context, string id, SequenceActionResult param)
|
|
{
|
|
Status.RMSUse = _plc.ReadBit(PLCControllerPTOP.eBitInput.PLC_RMS_USED).data;
|
|
Thread.Sleep(NODE_SLEEP);
|
|
return SequenceAction.Ok();
|
|
}
|
|
|
|
private static void OnStopped(SequenceContext context)
|
|
{
|
|
}
|
|
|
|
private static void OnForceError(SequenceContext context, string arg2)
|
|
{
|
|
}
|
|
}
|
|
}
|