diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs index ef4fd9c..4943eaa 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs @@ -920,11 +920,16 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences }; } - // Scout Complete 비트(PC→PLC) 기록 - private void WriteScoutCompleteBit(eBitOutput completeBit, bool on, string phase) + // Scout Complete 비트(PC→PLC) 고정 펄스: ON → SCOUT_COMPLETE_PULSE_MS 유지 → OFF. + // (CheckCycleStop이 항상 CheckPageNo로 루프백 → WriteCompletionPLCBit 미도달이므로 여기서 직접 OFF까지 처리) + private const int SCOUT_COMPLETE_PULSE_MS = 400; + private void PulseScoutCompleteBit(eBitOutput completeBit, string phase) { - _PLC.WriteBit((int)completeBit, on); - Log.I($"[{phase}Scout] {completeBit} = {on}"); + _PLC.WriteBit((int)completeBit, true); + Log.I($"[{phase}Scout] {completeBit} = true (펄스 {SCOUT_COMPLETE_PULSE_MS}ms)"); + Thread.Sleep(SCOUT_COMPLETE_PULSE_MS); + _PLC.WriteBit((int)completeBit, false); + Log.I($"[{phase}Scout] {completeBit} = false (펄스 종료)"); } // ── 용접 전 Scout ─────────────────────────────────────────── @@ -948,7 +953,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences Log.E("[PreScout] Scout 실패 → 시퀀스 중단"); return null; } - WriteScoutCompleteBit(eBitOutput.PC_PRE_WELD_SCOUT_COMPLETE, true, "Pre"); + PulseScoutCompleteBit(eBitOutput.PC_PRE_WELD_SCOUT_COMPLETE, "Pre"); Log.I("[PreScout] 완료 → UploadWeldingList 이동"); return SequenceAction.Ok(); } @@ -973,7 +978,7 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences Log.E("[PostScout] Scout 실패 → 시퀀스 중단"); return null; } - WriteScoutCompleteBit(eBitOutput.PC_POST_WELD_SCOUT_COMPLETE, true, "Post"); + PulseScoutCompleteBit(eBitOutput.PC_POST_WELD_SCOUT_COMPLETE, "Post"); Log.I("[PostScout] 완료 → CheckCycleStop 이동"); return SequenceAction.Ok(); }