LGES-OC5-PtoP-Welder/docs/분석_SeqAutoRunPTOP_시퀀스.md
NohDoyeon241104 a69ba578e6 docs: SeqAutoRunPTOP 시퀀스 전체 분석 문서 + 작업일지 추가
- 현재 코드 기준 노드 흐름·PLC 핸드셰이크·레이저 발진 구간 정리
- M70509(Scout, 9번) 분기 특성, 정지/Resume 처리 포함
- 현장 레이저 발진·Scout 이미지 촬영 정상 확인

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 00:38:59 +09:00

6.1 KiB

SeqAutoRunPTOP 시퀀스 전체 분석

대상: Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs 기준일: 2026-06-23 / 현재 코드(field/ptop-1st) 기준


1. 전체 노드 흐름

Init
 → Sequence_Enter            장비 핸들 확보, RecipeManager 확보, PC_AUTO_STATUS=ON
 → CheckInitCondition        (분기) 정상 → CheckPageNo / Resume → UploadList 스킵진입
 → CheckPageNo               PLC_PAGE_CHANGE_REQ(0x08) ON 대기 (단일 게이트)
 → CheckRecipeNoComp         PLC_RECIPE_NO 읽고 필요 시 레시피 전환·Layers 동기 reload·PC_RECIPE_NO 에코
 → CheckPageNoComp           PLC_PAGE_NO 3회 검증 → PC_PAGE_NO 에코 + PC_PAGE_CHANGE_COMPLETE
 → SetUploadWeldingList      PageNo로 Layer 선택, 용접 대상 오브젝트 구성
 → UploadWeldingList(sub)    스캐너에 용접 리스트 업로드
 → GetUploadWeldingList      업로드 결과 확인 (실패 시 중단)
 → WeldingStartReadBit       PLC_WELD_TRIGGER_REQ(M70516) ON 대기
 ──────────────────────────── [용접 전 Scout 분기] ────────────────────────────
 → PreScoutCheck (분기)      M70509(Scout Enable) 읽기
        ├ ON  → PreScoutSetParams → PreScoutRun(SeqScoutNormal) → PreScoutDone(0.1s)
        └ OFF → WaitWeldingStart 로 점프 (촬영 스킵)
 → WaitWeldingStart          PC_WELD_TRIGGER_ACK=ON / PC_WELD_BUSY=ON / PC_WELD_COMPLETE=OFF
 → ExecuteWelding            ★ 실제 레이저 발진 (완료비트는 보류)
 ──────────────────────────── [용접 후 Scout 분기] ────────────────────────────
 → PostScoutCheck (분기)     M70509(Scout Enable) 읽기
        ├ ON  → PostScoutSetParams → PostScoutRun(SeqScoutNormal) → PostScoutDone(0.1s)
        └ OFF → WriteWeldComplete 로 점프 (촬영 스킵)
 → WriteWeldComplete         ACK=OFF / BUSY=OFF / COMPLETE=ON  (용접 완료 통보)
 → CheckCycleStop (분기)     Resume 사이클 정리 → CheckPageNo 로 루프백
 → SaveResultData            스캐너 파형 저장(SaveRecord), 결과 true
 → WriteCompletionPLCBit     RestoreDeviceStatus()로 PLC 출력 비트 리셋
 → Complete                  생산 카운트 +1, 다음 사이클 진입
 → Final

2. 핸드셰이크 단계 (PLC ↔ PC)

단계 PLC 입력(읽기) PC 출력(쓰기)
페이지 변경 요청 PLC_PAGE_CHANGE_REQ(0x08), PLC_PAGE_NO, PLC_RECIPE_NO PC_RECIPE_NO, PC_PAGE_NO, PC_PAGE_CHANGE_COMPLETE
용접 트리거 PLC_WELD_TRIGGER_REQ(M70516) PC_WELD_TRIGGER_ACK, PC_WELD_BUSY
용접 완료 — PC_WELD_COMPLETE
Scout 분기 PLC_SCOUT_ENABLE(M70509) — (분기 판정용, 출력 없음)
  • 단일 게이트: 매 사이클 CheckPageNo의 PAGE_CHANGE_REQ(0x08) 하나로 진입을 통제. Recipe→Page 순서로 확정.
  • 에코 비트 보존: 정지 시(OnSeqActionStop) PC_PAGE_NO/PC_RECIPE_NO 워드는 0으로 지우지 않음 — PLC 정합 확인용 마지막 값 유지.

3. 레이저 발진 구간 (ExecuteWelding)

1. HeadTheta 인터락(옵션 ON 시): PLC 미연결/각도 벗어남 → AlarmManager.Alarm + return null (발진 차단, fail-closed)
2. DO9  CoreLaser_Control = ON
   DO13 RingLaser_Control = ON           → Laser Gate ON
3. 15ms 대기 (laserEmissionGateDelayMs, 매뉴얼 ≥10ms + 여유)
4. _Scanner.ExecuteList(LIST1)           → 스캐너 발진
5. _Scanner.WaitForListTaskCompleted(1000)
6. DO9/DO13 = OFF                         → Laser Gate OFF (발진 완료 즉시)
7. JumpAbs(0,0) + SelectCorrectionTable(1) (비전용 보정테이블 복원)
8. 완료비트 송신 보류 → PostScoutCheck 로 이동
  • 게이트 DO 주소: Core=9, Ring=13 (ePrismaticDOAddress). PLC 입력 비트 M70509("9번 신호")와는 별개 도메인.

4. Scout(M70509) 동작 특성

  • 판정 시점이 독립적: PreScoutCheck와 PostScoutCheck가 각각 그 시점에 M70509를 재읽기 → pre/post 사이 값이 바뀌면 한쪽만 촬영 가능.
  • 완전 직렬: pre 촬영 → 0.1s → 발진 → post 촬영 → 0.1s → 완료비트. 촬영과 발진은 겹치지 않음.
  • 완료비트 지연: M70509 ON이면 PC_WELD_COMPLETE가 (post 촬영시간 + 0.1s)만큼 늦게 전달됨 → Tact 영향 구간.
  • OFF면 기존 흐름과 동일: 촬영 노드 자체를 건너뛰고 바로 용접/완료비트로 점프.
  • 파일 태그: auto_{recipeNo}_{pageNo}_{pre|post} (ScoutSaveTag), 페이지는 현재 _CurrentPageNo(0-base) 기준.

5. 사이클 종료/리셋 처리

  • WriteWeldComplete: ACK→BUSY→COMPLETE 순으로 50ms 간격 송신.
  • SaveResultData → SaveScannerRecordFileForamt: SaveRecord("AutoRunTDC") 후 JumpAbs(0,0)+CorrectionTable(1) 복귀.
  • WriteCompletionPLCBit → RestoreDeviceStatus: PC_PAGE_CHANGE_COMPLETE / WELD_TRIGGER_ACK / WELD_BUSY / WELD_COMPLETE 모두 OFF.
  • Complete: 성공 시 Total/Today 생산 카운트 +1, 다음 사이클 진입(루프백은 CheckCycleStop이 CheckPageNo로).

6. 정지/예외 처리 (OnStopped / OnForceError → OnSeqActionStop)

  • PLC 출력 음극 비트 전부 OFF (AUTO_STATUS, TRIGGER_ACK, BUSY, COMPLETE, PAGE_CHANGE_COMPLETE).
  • 에코 워드(PC_PAGE_NO/PC_RECIPE_NO)는 보존(0 초기화 안 함).
  • DO9/DO13 Laser Control OFF (try/catch).
  • 스캐너 StopExecution + JumpAbs(0,0) + CorrectionTable(1) 복귀.

7. Resume 모드 (bit15 연계)

  • ResumeMode=true면 CheckInitCondition이 핸드셰이크를 스킵하고 UploadWeldingList부터 진입.
  • 1사이클 완료 후 CheckCycleStop에서 PC_WELD_READY_ACK=OFF + ResumeMode 해제 → 정상 루프 복귀.

8. 비고 — 비활성 코드

  • CheckCondition / CheckDeviceReady / CheckCondition_Interlock / Alarm 체크 일부는 [TEST_BYPASS]로 주석 처리 상태(항상 통과). 현장 안정화 후 복원 검토 대상.