4.7 KiB
Raw Blame History

작업일지 — 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.