- 현재 코드 기준 노드 흐름·PLC 핸드셰이크·레이저 발진 구간 정리 - M70509(Scout, 9번) 분기 특성, 정지/Resume 처리 포함 - 현장 레이저 발진·Scout 이미지 촬영 정상 확인 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.1 KiB
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]로 주석 처리 상태(항상 통과). 현장 안정화 후 복원 검토 대상.