# 가이드빔(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**