PLC가 Page Change bit(0x08) 하나만 트리거로 보내면 Recipe No와
Page No를 함께 읽어 Recipe를 먼저 전환한 뒤 Page를 전환하도록 변경.
Recipe Change bit(0x09)는 트리거로 미사용(enum 정의는 보존).
- CheckRecipeNo Decision 제거, 흐름 재배선(CheckPageNo→Recipe→Page)
- Recipe No 1회 읽기, 0/음수/미등록/동일이면 전환 생략(정지 안 함)
- 실제 전환 시 ActivateRecipe 후 Dispatcher.Invoke(OnActiveReloaded)로
Model.Layers 동기 갱신 + 페이지 검증/레이어 선택을 UI 스레드 직렬화
(ActivateRecipe-Layers 비동기 race 차단)
- PC_RECIPE_CHANGE_COMPLETE 미사용 처리, PC_RECIPE_NO 에코는 유지
VS Rebuild(Debug|x64) EXITCODE=0 확인.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 분석(191351): 동시수신 대응 단일 PAGE 게이트 핸드셰이크 확정안(8장)
+ ActivateRecipe→Layers 비동기 2-홉 race 분석, 대응안 A/B/C
- 작업지시서(2026_06_21): 4노드→1노드 통합 구현 절차/검증/완료기준
- 작업일지: 19:xx 분석 + 일일요약 추가 (원격 PLC PC I/O Check 섹션 병합)
- 소스 미수정 (문서만)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
증상: 레시피 전환 후에도 이전 레시피의 Scout Field 영역이 그대로 적용됨.
원인: RecipeFieldScan(싱글톤)은 페이지명으로만 키잉되어 레시피 식별자가 없고,
ReloadRecipe에서 필드 재로드가 주석 처리됨. 또한 UpdateWeldingLinesRecipe →
콤보박스 SelectedIndexChanged → SaveAndLoadFieldScanFromLasaDb 경로가
WorkRecipeFile은 새 경로/싱글톤은 stale인 상태로 SaveFieldHelper를 호출해
이전 레시피 데이터를 새 레시피 FieldHelper.json에 덮어쓰는 손상까지 유발.
- 가드 플래그(_suppressPageFieldSync) 추가, 콤보박스 핸들러 저장 호출을 가드
- ReloadRecipe에서 UpdateWeldingLinesRecipe를 try/finally로 감싸 전환 중 저장 억제
- 로드 전용 LoadFieldScanFromLasaDb 추가, 전환 후 새 레시피 필드만 싱글톤에 로드
- 기존 소스는 삭제 없이 주석/가드로 보존
- 빌드 검증: MSBuild Debug|x64 솔루션 오류 0개, 현장 동작 확인 완료
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- FieldHelper.json 분석 및 selectedIndexNo stale 버그 원인 정리
- A안(SeqScoutNormal PageIndex 주입) 수정안 작업지시서 작성 (소스 미수정, null 가드 포함)
- 작업일지 16:30 항목 + 주말 출근(06.20~06.21) 기록
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 15:04 Laser Head Theta 각도 인터락 추가 (0e73086)
- 15:25 Scout Image Sleep Time 사용자 설정 추가 (e263ab8)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 분석 문서 4종 추가 (docs/분석/2026/06/19):
알람부 종합 / MX Component PLC 연결 / AjinIO.ReadDoBit / 가이드빔 TruPulse(ExtPilotOnOff 미구현)
- AjinIO.ReadDoBit(int): 스텁(return true) 유지 + 구현(ReadDiBit 패턴) 주석 보존
- SeqComponentTeachingRun: 중알람 인터락 임시 주석 (현장 PLC 미연결 우회, 추후 원복)
- 레시피 Guide Beam: DO 17 read/write + IsConnected 가드 주석 (필요시 주석 토글 운용)
- 작업일지 2026-06-19 정리
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
DA1/DA2 Voltage UniformGrid에 Visibility 바인딩(IsNoLaser, convTrueVisible) 추가.
Time이 Use Spot Time 체크 시 표시되듯, No Laser 체크 시에만 전압 표시.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Manual: IsNoLaser 추가, Laser On 직접 분기(Percent/Watt)의 LaserSignalOn을
if(!IsNoLaser)로 가드 → 체크 시 발진 없이 전압만 인가
- Manual XAML: Use Spot Time과 동일 ToggleSwitch 디자인의 'No Laser(전압만)' 토글 추가
(Timer Set: UseSpotTime → Time(체크시) → NoLaser → DA1/DA2 Voltage)
- Recipe(UCScannerObjectTeachingControlBox): NoLaser 완전 제거(원래 의도가 Manual),
PerformCmdLaserReadyCheck를 WriteDoBit(9/13,true)로 환원. DI 11&15 변경은 유지.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ed36f8d에서 분석 문서만 들어가, 실제 구현 소스를 함께 커밋.
- ScannerObj.GetAnalogOut(abstract) + RTC5/RTC6(n_get_value, signal=portNo+32)/Simul(0) + Scanner 파사드(-1)
- UCScannerLaserControlViewModel: AnalogOut1/2Voltage + ReadbackAnalogOut(raw/4095*10 V), Laser On 직접 분기 WriteDA 직후 호출
- UCScannerLaserControl.xaml: Control Setting에 DA1/DA2 Voltage [V] 표시
- 작업일지 13:55 기록
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
IO 결선 변경에 따라 Laser Ready 입력 판정을
ReadDI(12) && ReadDI(24) → ReadDI(11) && ReadDI(15)로 수정. 로직 동일.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- 작업일지: 레이저 미발진 + Analog만 살려 Power Cal 파일 생성 가능 여부 요청 기록
- docs PLC 인터페이스 폴더 정리(구 _260617 폴더 → 신규 폴더로 이동)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- docs/작업일지: 06-17, 06-18 작업일지 추가 (조명 컨트롤러 연결, 현장 PC 원격 접속, 현장 소스 반영)
- docs/현장update파일: 현장 반영용 변경 파일(SequenceSetting.cs, UCScannerObjectTeachingControlBoxViewModel.cs) 및 README 정리
- docs/분석: 260617 분석 문서(Laser Ready DI 변경, Axis Position Interlock, PLC DeviceMap, EROOM Light RS232 등) 추가
- docs/architecture.md, CLAUDE.md, harness-ptop.md 갱신
- PLC 인터페이스 엑셀 및 기존파일비교 자료 추가
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>