docs: 작업일지 2026-06-19 - Head Theta 인터락·Scout sleep 기록

- 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>
This commit is contained in:
to3796zw 2026-06-19 15:37:10 +09:00
parent e263ab8a5a
commit de7450474a

View File

@ -157,3 +157,48 @@
- 이유: **Canvas(Scan field) 영역을 넓혀서** Scout Image 이동 시 sleep을 더 줘야 **제대로(안정적으로) 촬영**됨 (스캐너 Jump 후 정착 시간 확보)
- 흐름: Scanner JumpAbs → `Thread.Sleep(moveSleepTime)` → ChildImage Grab
- 빌드 산출물: **WeldingCommon.dll**
## 15:04 — Laser Head Theta 각도 인터락 추가
### 목적
- 레이저 발진 시 헤드 각도(Theta)가 **수평/수직이 아니면 발진 차단**(인터락)
- 절대값 하드코딩 대신 **세팅값 ±허용오차** 범위에서만 발진 허용 (수평/수직 둘 다 허용)
### 변경 내용 (PTOP 로컬, 7파일)
- `Machines/ILSOS_PrismaticRD_PTOP/Settings/LaserInterlockSetting.cs` (신규) — `ISettingItem`, 세팅 메뉴에 자동 UI
- `인터락 사용`(체크박스, 기본 false) / 수평·수직 각도(deg) / 허용오차(±2.5) / PLC 스케일(deg×10, 미확정→세팅화)
- `EquipDef.cs` — `SettingIds.LaserInterlock` 키
- `EquipmentSetup.cs` — `RegisterSettings`에 세팅 등록(메뉴 노출)
- `Alarm/AlarmCode_PTOP.cs` — `ALARM_LASER_HEAD_THETA_INTERLOCK = 210620`
- `Device/PLC/PLCController.Address.cs` — `eWordInput.HEAD_THETA_POSITION`(= D70510, index 10; 기존 EMPTY_10)
- `Sequences/SeqAutoRunPTOP.cs` — `ExecuteWelding`의 Laser Gate ON 직전 인터락
- 체크박스 ON 시에만 동작 / PLC 미연결·미활성·스케일0 시 **fail-closed(차단)** / 알람 호출 try-catch / `return null`(발진 차단)
### 검증
- WeldingCommon→PTOP 빌드 통과(Debug|x64, exit 0)
- 서브에이전트 리뷰로 fail-open 등 지적 → fail-closed·스케일0 가드·알람 방어 보강
- `raw`/`deg` 로그 남겨 실기에서 deg×10 스케일 확인 가능
### 런타임 설정(별도, 사용자 영역)
- CSV: `D:\ILSOSConfig\ILSOS_PrismaticRD_PTOP\External\PLC\PLC_DeviceMap_Word_Input_D_Device.csv` index10 = D70510
- 알람표: `...\_alarm\AlarmDescriptions.xlsm` 에 Code 210620 / Level H 행 추가
- 세팅 메뉴에서 "인터락 사용" 체크 + 수평/수직 값 설정
- → 커밋·push (0e73086)
## 15:25 — Scout Image Sleep Time 사용자 설정 추가
### 목적
- ScoutNormal 이미지 스캔 시 **같은 행 이동**과 **행 전환 이동(먼 거리)** 의 sleep을 분리
- 두 값을 **Recipe View > Scout Image 그룹에서 사용자 입력**, 시퀀스가 RowIdx 기준으로 적용
### 변경 내용 (WeldingCommon, 4파일)
- `Settings/SystemParameter.cs` — `[Category("Scout")]` `ScoutSameRowSleepMs`(150) / `ScoutRowChangeSleepMs`(300)
- `Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs` — 바인딩 프로퍼티 2개(SetProperty) + `SaveScoutSleep()`(SettingEntry.Save) + ctor 초기화
- `Views/Recipes/UCScannerObjectTeachingControlBox.xaml` — Scout Image 그룹 4→6행, Selected Type↔Run 버튼 사이 입력 2줄, 버튼 그리드 재번호(Row 3/4)
- `Sequences/Main/SeqScoutNormal.cs` `CaptureNextPosition` — `prevRowIdx` 추적해 `isRowChange ? RowChange : SameRow` 분기 (기존 `moveSleepTime=150` 대체)
### 검증
- WeldingCommon.dll 빌드 통과(XAML 포함, exit 0)
- 서브에이전트 검증 통과(로직·XAML 그리드·VM·인코딩 PASS) → 작업지시서 삭제
- 공유(WeldingCommon)라 같은행은 150(기존 동일), **행 전환 기본 300ms**(기존 150) — 타 머신도 영향, Recipe View에서 조정 가능
- → 커밋·push (e263ab8)