52 lines
4.7 KiB
Markdown
52 lines
4.7 KiB
Markdown
# 작업일지 — 2026-06-21
|
||
|
||
## 1. 가접 레시피(20~23) 추가 — 시퀀스 무수정 방식 확정
|
||
|
||
- 가접을 시퀀스로 추가하지 않고 **레시피 번호만 추가**해서 처리. (레시피 활성화+페이지별 용접 행위가 동일하므로)
|
||
- 코드 검증: 레시피 조회 `.Id` 1:1(하드코딩 없음), 페이지 검증 `Layers.Count()` 가변 → **노드 수정 불필요, 레시피 데이터만 추가.**
|
||
- Recipe Number 시트 구조 (`…_260621_가접용접추가.xlsx`):
|
||
- 11: 양극/음극 탭 비드(기존, 2P) · 31: 상면(기존, 2P) · 32: 하면(기존, 2P)
|
||
- **20: Pre 가변 전면(가접) / 21: 전면 본접 / 22: Pre 가변 후면(가접) / 23: 후면 본접** (각 1~5P)
|
||
- PRE(가접)→본접을 레시피 쌍으로 분리(전면 20→21, 후면 22→23).
|
||
|
||
## 2. Recipe/Page 핸드셰이크 — 이미 구현·커밋 확인 (`25edd79`)
|
||
|
||
- 현장 결정: PLC가 전환마다 RECIPE_REQ는 안 주고 **양극에서 PAGE_REQ만** 줌.
|
||
- 동작 = Page 신호만 체크 → Recipe/Page WORD 읽기 → RecipeNum 변화 시 활성화 → PageNum 받고 → ACK 송신. (이미 `SeqAutoRunPTOP.cs`에 반영됨)
|
||
- `CheckPageNo`: `PLC_PAGE_CHANGE_REQ`만 대기
|
||
- `CheckRecipeNoComp`: `PLC_RECIPE_NO` 읽기 → 0/미등록/현재활성 동일이면 스킵, 다를 때만 `ActivateRecipe` + `Dispatcher.Invoke(OnActiveReloaded)` 동기 Layers 재로드(stale 방지) + `PC_RECIPE_NO` 에코
|
||
- `CheckPageNoComp`: `PLC_PAGE_NO` 3회 검증 → `Layers.Count()` 범위검증 → `PC_PAGE_NO` 에코 + `PC_PAGE_CHANGE_COMPLETE`(ACK)
|
||
- 인터페이스와 1:1 일치: PAGE 핸드셰이크 `M70508/M70608`(REQ)·`M70008/M70108`(COMPLETE), 워드 `D70502/D70501`(PLC) ↔ `D70002/D70001`(PC 에코). 레시피 COMP 비트(`M70509/M70009`)는 미사용(워드 에코만).
|
||
|
||
## 3. 기동 시 디바이스 연결 vs 알람체크 타이밍 (분석단계, 소스 미수정)
|
||
|
||
- 증상: 기동 직후 연결 확립 전에 알람이 뜸.
|
||
- 결론: 순서는 이미 "활성화 → 알람모니터"로 맞음(`OnStartUp` `await ActivateDevices()` 후 `SeqAlarmMonitor.Start()`). **진짜 갭은 `Activate()≠Connected`** — 첫 알람 루프가 연결 전 `GetConnected()=false`를 읽어 오알람.
|
||
- 비대칭: PLC는 `PLC_LIVE_STATUS` 2000ms grace 있음 / **Laser·OCT·Chiller·LBAD는 즉시 알람(grace 없음)** → 오알람 주범.
|
||
- 권고 레버: **`SeqAlarmMonitor.StartNode`에 연결확립 대기 게이트 추가**(권장) > no-op `WaitTime` 노드 활용 > `OnStartUp`에서 연결 await.
|
||
|
||
## 4. bit15(MODECHANGE) 기능 구현 — 팝업 + Auto→Manual + Resume (빌드 0오류, 커밋 `ff4fc03`)
|
||
|
||
보완항목 확정: 1=작업지시서, 2=(나)작업자 수동 RunWelding, 3=작업지시서, 4=작업지시서, 5=현행유지.
|
||
|
||
- **bit 정의**: 입력 `PLC_MODE_CHANGE=0x0F(M70515)`/`_P=0x73(M70615)`, 출력 `PC_MODE_CHANGE=0x0F(M70015)`/`_P=0x73(M70115)`.
|
||
- **정지 보존(#1)**: `OnSeqActionStop`에서 `ResumeMode`면 `PC_PAGE_NO/RECIPE_NO=0` 쓰기 스킵(에코 보존).
|
||
- **확인 핸들러(#2-나)**: `ResumeMode=true`→Stop(보존)→팝업(`MessageDialog.Show` OK-only)→Manual 전환. 레시피 이미 활성이라 재활성/롤백 안 함. 가변 용접은 작업자가 Manual에서 직접.
|
||
- **핸드셰이크 스킵(#3)**: `CheckInitCondition`에서 `ResumeMode`면 `SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ`로 분기(+Flow 엣지).
|
||
- **출력 bit15 수명(#4)**: `OnAutoRunResume`에서 ON+Auto 재개, `CheckCycleStop`에서 한 사이클 후 OFF+`ResumeMode=false`.
|
||
- **감지(#5)**: `UCMainAutoRunViewModel.OnMonitoring`(화면 타이머) 현행 유지.
|
||
- 버튼 **[AutoRun Resume]** = Equipment Status 그룹 좌측, `IsModeChangeActive`(bit15 ON) 때만 표시. 확인창 없이 즉시 재개.
|
||
- 재용접 중복은 **PLC가 레이저 차단**으로 합의(option2).
|
||
|
||
## 5. 미확정 / 확인 필요 (다음 액션)
|
||
|
||
- **현장 실증 전** — 빌드만 통과. bit15 흐름·레시피 전환·실제 Laser 발진은 현장 테스트 필요.
|
||
- **PLC 협의**:
|
||
- 출력 `PC_MODE_CHANGE`(bit15) false 처리 위치 — 현재 `CheckCycleStop`. 대안: 다음 `PAGE_CHANGE_REQ` 수신 블록에서 false (PLC 인식 타이밍과 합의 후 확정).
|
||
- bit15 주소(M70515/M70615/M70015/M70115) 실맵 대조.
|
||
- bit15 발생 정책: 가변 페이지마다 vs 가변 레시피당 1회.
|
||
- 레시피 시트 "Pre **가변**" 표기가 PRE **가접** 오타인지 확인.
|
||
- 20~23 페이지 수 미확정(코드는 `Layers.Count()` 가변 대응).
|
||
- 알람 타이밍: `device.Activate()`가 연결완료까지 동기인지/개시만인지 디바이스별 확인.
|
||
- 제품 1개 = Recipe×Page 사이클 예상 시나리오: `docs/분석/2026/06/21/121750_제품1개_recipe_page_사이클_예상시나리오.md`.
|