LGES-OC5-PtoP-Welder/docs/분석/2026/06/19/124752_guidebeam_trupulse_analysis.md
NohDoyeon241104 6c435ec04a revert: docs/분석 다시 git 추적 (커밋 포함 유지)
사유: 분석 문서가 다른 PC에서 풀 받을 때 사라지면 안 되어 git에 포함 유지.
- .gitignore의 /docs/분석/ 제외 규칙 제거
- docs/분석 전체 재추적(기존 22 + 금일 신규 3 = 25개)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 14:48:19 +09:00

3.2 KiB

가이드빔(Guide Beam) 제어 경로 분석 — TruPulse — 2026-06-19

계기: 레시피 Guide Beam 버튼/상태가 현장에서 동작하지 않음. IO(DO)→Laser 순으로 추적. 결론: 가이드빔은 Laser(TruPulse) 디바이스 기능이며, 제어 콜백 ExtPilotOnOff가 미구현(미할당). 관련: 110333_alarm_subsystem_analysis


1. 잘못된 경로였던 IO(DO 17) 시도 요약

  • 레시피 ViewModel(UCScannerObjectTeachingControlBoxViewModel.cs)에서 _IODevice(메인 IO_Board=PAIX_PTOP)의 DO 17(EX_Red_Control) 을 read/write 하도록 수정 → 상태 표시(읽기)는 동작 확인.
  • 그러나 물리적 가이드빔(적색광)은 출력 안 됨.
  • 현장 확인: 번들(DBW-MC Laser SW)의 RedLight Opened/Closed 이벤트는 번들의 RedClosed 버튼 수동 조작 결과로, 우리 DO 17과 무관. Mod1_IO:000100↔000000 비트만 DO 17과 일치.
  • → DO 17(IO) 경로는 가이드빔 제어가 아님. (메인 IO_Board와 레이저 가이드빔 입력은 별개)
  • 현 상태: 원복하지 않고 주석 토글로 필요시 전환(도연님 운용). 기존 _Laser 코드는 주석 보존됨.

2. 실제 경로 = Laser(TruPulse) 디바이스

레이저 타입 = TruPulse (eLaserType.TruPulse, Laser.cs:70).

_Laser.PilotLaserOn()                         (베이스 Laser, Laser.cs)
  └ IsSimul 이면 return E1.OK (no-op)          ← 현재 시뮬이라 여기서 멈춤
  └ 실모드: TruPulse.PilotLaserOn()            (TruPulse.cs:817)
       └ return PilotOnOffFunc(true)
            └ (Laser.cs:74) core.PilotOnOffFunc = (on) => ExtPilotOnOff(on)
                 └ ExtPilotOnOff(true)         ← ★ 레이저 IO 보드 write 의도 콜백

상태 읽기:

GetPilotLaserStatus() → PilotLaserEnable ← (TruPulse.cs:174) Di2 & (1<<9)
   (QueryStatusHwInterface 로 TruPulse 컨트롤러에서 직접 읽음)

3. ★ 핵심 문제: ExtPilotOnOff 미구현(미할당)

  • Laser.cs 27~29줄에 ExtLaserEnable / ExtLaserDisable / ExtPilotOnOff 선언만 존재.
  • 전체 소스에 ExtPilotOnOff = ... 할당부 없음(검색 0건). updateCore 구독(UCTruPulseManualViewModel)도 core 참조만 받고 콜백 미주입.
  • 결과:
    • 시뮬(현재): 베이스에서 no-op → 빔 안 나옴, 상태 항상 true. (정상)
    • 실모드: ExtPilotOnOff(true) 호출 시 null → NullReferenceException 위험.
  • → "레이저 IO 보드로 가이드빔 제어"는 설계 의도이나 구현 미완(TODO).

4. 결론 / TODO

구간 상태
가이드빔 제어 의도 TruPulse → ExtPilotOnOff → 레이저 IO 보드 DO
실제 구현 ❌ 미구현 (ExtPilotOnOff 미할당)
현재 운영 시뮬 → no-op (물리 빔 안 나오는 게 정상)
레시피 DO 17(_IODevice) 변경 잘못된 경로(메인 IO_Board), 원복 안 함 — 주석 토글로 운용

추후 실제 가이드빔 구현 시:

  • _Laser.ExtPilotOnOff = (on) => { 레이저IO보드._iOUnit.WriteDoBit(<가이드빔 DO>, on); return 0; }; 구현
  • "레이저 IO 보드" 디바이스/DO 주소 확정 (메인 PAIX와 별개 여부)
  • Laser 디바이스 비시뮬 + Activated