fix: Scout Complete 비트 400ms 고정 펄스로 변경

기존: 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) <noreply@anthropic.com>
This commit is contained in:
to3796zw 2026-06-22 14:49:41 +09:00
parent 5e01c9a63c
commit f6da65f9f4

View File

@ -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();
}