From f6da65f9f478710b0a54468f82bc5b0de086cd5b Mon Sep 17 00:00:00 2001 From: to3796zw Date: Mon, 22 Jun 2026 14:49:41 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20Scout=20Complete=20=EB=B9=84=ED=8A=B8=20?= =?UTF-8?q?400ms=20=EA=B3=A0=EC=A0=95=20=ED=8E=84=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존: PreScoutDone/PostScoutDone에서 Complete를 ON으로 래치만 함. CheckCycleStop이 항상 CheckPageNo로 루프백 → WriteCompletionPLCBit (RestoreDeviceStatus) 미도달이라 정상 운전 중 OFF되지 않고 정지까지 ON 유지. 변경: PulseScoutCompleteBit로 ON→400ms 유지→OFF 고정 펄스. 시간값은 SCOUT_COMPLETE_PULSE_MS 상수로 관리. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Sequences/SeqAutoRunPTOP.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) 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(); }