diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/Monitoring/SeqStatusMonitor.cs b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/Monitoring/SeqStatusMonitor.cs index f9d5603..5053c43 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/Monitoring/SeqStatusMonitor.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/Monitoring/SeqStatusMonitor.cs @@ -91,6 +91,23 @@ namespace WeldingCommon.Sequences context.EventPublisher.Publish(new EventMessage("SeqStatusMonitor", CommonEventIds.EVENT_RESET_ALL_ALARMS_REQUEST)); } + // ── Auto State OFF 시 에코 워드(PC_RECIPE_NO/PC_PAGE_NO) 0 초기화 ────────────── + // PLC Auto OFF : 무조건 초기화 + // PC Auto OFF : M70515(PLC_WELD_READY_REQ, Weld_01 Ready) 살아있으면 보존(초기화 생략) + bool plcAutoOff = ChangeChecker.IsChangedBoolMonitoring("PlcAutoStateOff", + _plc.ReadBit(PLCControllerPTOP.eBitInput.PLC_AUTO_STATUS).data, false); + bool pcAutoOff = ChangeChecker.IsChangedBoolMonitoring("PcAutoStateOff", + _plc.ReadOutBit(PLCControllerPTOP.eBitOutput.PC_AUTO_STATUS).data, false); + + bool weldReadyAlive = _plc.ReadBit(PLCControllerPTOP.eBitInput.PLC_WELD_READY_REQ).data; // M70515 + + if (plcAutoOff || (pcAutoOff && !weldReadyAlive)) + { + _plc.WriteWord(PLCControllerPTOP.eWordOutput.PC_RECIPE_NO, 0); + _plc.WriteWord(PLCControllerPTOP.eWordOutput.PC_PAGE_NO, 0); + Log.W($"[StatusMonitor] Auto OFF(PLC:{plcAutoOff}/PC:{pcAutoOff}, M70515:{weldReadyAlive}) → PC_RECIPE_NO/PC_PAGE_NO 0 초기화"); + } + Thread.Sleep(NODE_SLEEP); return SequenceAction.Ok(); } diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs index d4406bc..11e5342 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs @@ -518,8 +518,11 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences //MessageUtil.ShowErrorToast($"WriteWord -> {plcPageNo}"); //Thread.Sleep(1000); - _PLC.WriteBit(eBitOutput.PC_PAGE_CHANGE_COMPLETE, false); - Log.I("[CheckPageNoComp] Set PC_PAGE_CHANGE_COMPLETE false"); + // 에코한 PC_PAGE_NO(plcPageNo)와 현재 PLC_PAGE_NO 비교 → 같으면 ACK ON, 다르면 OFF + short curPlcPageNo = _PLC.ReadWord(eWordInput.PLC_PAGE_NO).data; + bool pageMatched = (plcPageNo == curPlcPageNo); + _PLC.WriteBit(eBitOutput.PC_PAGE_CHANGE_COMPLETE, pageMatched); + Log.I($"[CheckPageNoComp] PC_PAGE_NO({plcPageNo}) == PLC_PAGE_NO({curPlcPageNo}) ? → PC_PAGE_CHANGE_COMPLETE {pageMatched}"); //Thread.Sleep(5); // UI 페이지 업데이트 알림 @@ -753,14 +756,14 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences Status.GetProcessingWeldingData().WeldingEndTime = DateTime.Now; - if (_CurrentPageNo == 1) - { - Log.D(string.Format($"[ExecuteWelding] -->(Wedling TackTime) {_CurrentPageNo} Welding Complete Time : {_WeldingSpanTime.TotalMilliseconds}")); - } - else - { - Log.D(string.Format($"[ExecuteWelding] -->(Wedling TackTime) {_CurrentPageNo} Welding Complete Time : {_WeldingSpanTime.TotalMilliseconds}")); - } + //if (_CurrentPageNo == 1) + //{ + // Log.D(string.Format($"[ExecuteWelding] -->(Wedling TackTime) {_CurrentPageNo} Welding Complete Time : {_WeldingSpanTime.TotalMilliseconds}")); + //} + //else + //{ + // Log.D(string.Format($"[ExecuteWelding] -->(Wedling TackTime) {_CurrentPageNo} Welding Complete Time : {_WeldingSpanTime.TotalMilliseconds}")); + //} @@ -783,14 +786,14 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences Log.D($"[ExecuteWelding] JumpAbs + SelectCorrectionTable Time: {_WeldingSpanTime.TotalMilliseconds}ms"); Log.D(string.Format($"[ExecuteWelding] Change SelectCorrectionTable Time : {_WeldingSpanTime.TotalMilliseconds}")); - + Thread.Sleep(50); // 양극(P) 미사용 → 모든 페이지 음극 완료 비트로 응답 _PLC.WriteBit((int)eBitOutput.PC_WELD_TRIGGER_ACK, false); Log.I($"[ExecuteWelding] 용접완료 송신 - READY_ACK=false (PageNo:{plcPageNo})"); - Thread.Sleep(5); + Thread.Sleep(50); _PLC.WriteBit((int)eBitOutput.PC_WELD_BUSY, false); Log.I($"[ExecuteWelding] 용접완료 송신 - BUSY=false (PageNo:{plcPageNo})"); - Thread.Sleep(5); + Thread.Sleep(50); _PLC.WriteBit((int)eBitOutput.PC_WELD_COMPLETE, true); Log.I($"[ExecuteWelding] 용접완료 송신 - COMPLETE=true (PageNo:{plcPageNo})"); Thread.Sleep(5);