사유: 분석 문서가 다른 PC에서 풀 받을 때 사라지면 안 되어 git에 포함 유지. - .gitignore의 /docs/분석/ 제외 규칙 제거 - docs/분석 전체 재추적(기존 22 + 금일 신규 3 = 25개) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.2 KiB
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.cs27~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