# 작업일지 — 2026-06-26 ## 1. Laser Display On 타이밍 관련 busy bit 위치 변경 - Laser Display On 타이밍을 맞추기 위해 busy bit 위치를 변경. - (상세 구현 내용 추후 보완) ## 2. 레시피 Scanner Cam 팝업 모션/좌표 표시 수정 - **증상**: 레시피 화면 Scanner Cam 팝업(`WDScannerCamMotion`)에서 방향 Jog·Move X/Y 모션이 동작하지 않고, 갈보모터 X/Y 값이 0으로 고정됨. (CAM 영상 자체는 정상) - **원인**: - 팝업이 `UCScannerMotionViewModel`을 `publishMode: true`(이벤트 발행 전용)로 띄움 → 실제 이동은 매뉴얼 측 execute VM이 수행하는 구조. - execute VM의 Limit(`CommandPosLimitMin/MaxX/Y`)는 매뉴얼 화면이 보일 때(`VisibleChanged → Init_XYLimitPos`)만 설정되는데, 팝업 조작 시 매뉴얼 화면은 비표시 → Limit가 0 → `CheckOverLimitPos`가 모든 목표를 "범위 초과"로 reject → 조용히 무동작. - 팝업의 X/Y 표시는 `_MonitorTimer`로 갱신되나, 타이머는 `UCScannerMotion.xaml`의 `IsVisible` 트리거 → `VisibleChanged`로만 시작됨. 창 호스팅(코드비하인드 DataContext 주입 + Show/Hide)에선 이 트리거가 발동하지 않아 타이머 미작동 → 값 0 고정. - **수정**: `WeldingComponents/WeldingCommon/Views/Recipes/WDScannerCamMotion.xaml.cs` **한 파일**만 변경. - VM 참조 필드(`_MotionVM`) 추가. - 생성자: `publishMode: true` → **`publishMode: false`**(매뉴얼과 동일한 직접 실행 모드)로 생성 + 참조 보관. - `Window_IsVisibleChanged`에서 `_MotionVM.CMD_VisibleChanged.Execute(isVisible)` 호출 → 모니터 타이머 시작 + `Init_XYLimitPos()` 보장. - **결과(기대)**: 팝업 모션이 매뉴얼 Scanner 화면과 동일하게 동작, X/Y 실시간 표시. `UCScannerMotionViewModel`은 무수정(매뉴얼 로직 100% 재사용). - **검증**: `WeldingCommon` Debug|x64 컴파일 통과(에러 0). - **남은 작업**: 실기 동작 확인 후, 미사용이 된 publish 우회 경로(`ScannerCommandMoveParam`·`PublishMotion`·`EVENT_SCANNER_COMMAND_MOVE` 구독/핸들러·`_PublishMode` 분기) dead code 정리 예정.