2026-08-06 11:29:00 +09:00

10 KiB
Raw Blame History

PTOP 소스 → 산출물 필드 매핑

이 파일은 소스 파일과 산출물 필드 간 1:1 매핑 인덱스. 다른 PC에서 스킬 실행 시 이 파일을 보고 어떤 소스를 읽어야 할지 판단한다.


A. PLC-PC 인터페이스 신호정의서

출력: 02.설계/IO_DB설계/PLC_PC_인터페이스_신호정의서.md

시트 소스 파일 읽어야 할 심볼
통신 사양 Device/PLC/PLCContoller.Config.cs PLCControllerPTOP 생성자 인자(ePLCNetType, PLCMMapFileType, isSimul) — 이 파일은 18줄이며 주소 정의는 없다
PC→PLC (Write) Device/PLC/PLCController.Address.cs eBitOutput, eWordOutput enum 전수
PLC→PC (Read) Device/PLC/PLCController.Address.cs eBitInput, eWordInput enum 전수
핸드셰이크 시퀀스 Sequences/SeqAutoRunPTOP.cs CheckPageNo, CheckRecipeNoComp, CheckPageNoComp, WaitWeldingStart, WriteWeldComplete

PLC 주소 규칙 — ⚠ 소스에 없는 값이다. M70000·D70000·D70500은 .cs 전체에서 0건이고, 근거는 분석 문서(docs/분석/2026/06/17/171312_plc_map_io_direction_and_enum_alignment.md)뿐이며 그 문서와 docs/분석/2026/06/20/141528_산출물문서_분석_및_PTOP_채움안.md(06/20 폴더다 — 06/17에는 없다)가 서로 다르게 기술한다. 산출물에 옮기기 전 소스로 재확인하고 파일:라인을 병기하라. 확인되지 않으면 미확인으로 남긴다 (rules.md §검증·표기 판정표의 토큰만 쓴다).

  • eBitOutput offset → M70000 + offset
  • eBitInput offset → M70500 + offset
  • eWordOutput offset → D70000 + offset
  • eWordInput offset → D70500 + offset
  • 두 번째 블록(0x65~, 양극 P) → M70600~ (현재 미사용)

B. 모션축·IO 맵 정의서

출력: 02.설계/IO_DB설계/모션축_IO맵_정의서.md

시트 소스 파일 읽어야 할 심볼
통신·제어 구성 EquipmentSetup.cs:138 RegisterDevices(IDeviceRegistry registry) 내 registry.Register(...) 호출. 주석 처리된 것이 다수다(OCT·LBAD·CellTracker 등) — 활성 등록만 센다(현재 3건)
모션축 정의 docs/architecture.md §4 AuroraACS(X/Y), AuroraMotionBoard(Z). RTC(Scanner)는 이 문서에 0건 — 출처는 ubisam-format-map/SKILL.md §6 PTOP 채움 시 참고값 의 주요 디바이스 문장이다
I/O 맵 DI Device/IO/PAIX_PTOP.cs ePrismaticDIAddress enum — 채널 번호·신호명
I/O 맵 DO Device/IO/PAIX_PTOP.cs ePrismaticDOAddress enum — 채널 번호·신호명

모션축 주의사항:

  • X/Y 행정·속도·Home 방식 = 소스에 없음 → 전부 (제안) 표기.
  • AuroraACS = EtherCAT SPiiPlus. AuroraMotionBoard = Ajin 모션 보드 (AuroraDevices/AuroraMotionBoard/Ajin/AJINDevice.cs·AJINMotor.cs — 벤더 구현이 이것 하나뿐이다).
  • ⚠ 런타임 벤더 선택은 모션이 아니라 IO 보드 쪽이다. eIOBoardType(Ajin·PAIX·ACS)은 AuroraDevices/AuroraIO/IODevice.cs:18 정의이고 :154-158에서 IOUnitConfig.BoardType 으로 분기한다. IO 보드 벤더를 Ajin으로 단정하지 말 것 — PTOP 실제 IO는 PAIX_PTOP 이다. 모션 보드 벤더 주의문과 혼동하지 않는다(둘은 다른 디바이스다).

C. 기능명세서 / UI 설계

출력: 02.설계/UIUX_기능설계/기능명세서.md

탭 소스 파일 읽어야 할 심볼
메뉴 구조 EquipmentSetup.cs:256 RegisterViews(IViewManager manager) 내 AddSubMenu(CommonViewIds.*, UserControl). 총 26건 중 8건이 주석 처리 → 활성 18건만 센다(위 RegisterDevices 행과 같은 규칙). ⚠ MenuId·ViewType·AuthLevel 은 소스에 없는 심볼이다 — 지어내지 마라
메뉴 권한 EquipmentSetup.cs:261,266,289,302,310,318,323,330 AddSubMenu 는 2인자라 권한이 없지만 MainMenu 생성자 3번째 인자가 PermissionLevel 이다. 메인메뉴 8건이 값을 가진다 — NONE ×6 / :318 Device=LEVEL3 / :323 Setting=LEVEL1. (:288 주석의 LEVEL4는 비활성, :337 StreamDevice는 2인자 오버로드이며 UseStream 조건부라 권한 인자가 없다)
MainView Views/Main/UCMainAutoRun*.cs 버튼·이벤트·바인딩 목록
RecipeView EquipmentSetup.cs 등록부 UCRecipe, UCRecipeChangeHistory — 공유 컴포넌트이며 PTOP Views/ 아래에 없다
ManualView EquipmentSetup.cs 등록부 UCManualScannerOperation, UCManualModelFinder — 공유 컴포넌트
MonitoringView EquipmentSetup.cs 등록부 UCIOInterfaceView 등 — 공유 컴포넌트
DeviceView EquipmentSetup.cs:318-319·:310-314 CommonViewIds.Device(DeviceSettingView) + Monitoring 메뉴의 PLCBitMonitoring·PLCWordMonitoring·IOInterfaceView. 탭 내용 기준은 05-form-schemas.md 8탭 표의 DeviceView 행 (StreamDevice는 :337 별도 메인메뉴이며 SettingView 탭 소속)
SettingView EquipmentSetup.cs 등록부 CommonViewIds.Setting·LogSetting·AutoBackupView 등록 항목
VisionView EquipmentSetup.cs:342-343 (해당없음) — AuroraVision 미사용. // Vision (미사용) + //VisionFactory.RegisterViews(manager); 주석 처리. CommonViewIds.Scanner·PixelResolution(:303·:306)은 비전 탭이 아니라 Calibration 메뉴(:302) 소속이다
OverView docs/architecture.md CommonViewIds 에 대응 메뉴는 없다 — 이 탭은 등록부가 아니라 SW 개요(플랫폼·OS·.NET·모션·레이저·PLC·비전)로 채운다
Sequence 흐름 Sequences/SeqAutoRunPTOP.cs Builder() 노드 목록 순서대로

PTOP의 Views/ 하위는 Main/과 Model/ 둘뿐이다. Recipe·Manual·Monitoring 화면은 공유 컴포넌트라 EquipmentSetup.cs의 AddSubMenu(...) 등록부에서 타입을 확인해야 한다.

8탭 고정 (xlsx ref 호환): OverView / MainView / RecipeView / ManualView / DeviceView / SettingView / VisionView / Sequence 흐름

⚠ 탭 목록·탭별 내용의 상위 진실원은 ubisam-deliverables/references/05-form-schemas.md §C. 기능명세서 / UI 설계 의 8탭 표다. 위 표는 "그 탭을 채우려면 어느 소스를 읽는가"만 말한다. 두 문서가 어긋나면 05-form-schemas.md 를 기준으로 삼고 같은 편집에서 이 표를 맞춘다 (docs/harness-ptop.md §소비처 확인 의무).

위 표는 이 8탭을 전부 담고 있다. 추가로 있는 메뉴 구조·MonitoringView 행은 탭이 아니라 탭을 채우기 위해 읽을 진실원이다. 탭 수를 셀 때 포함하지 않는다.


D. 제어 시퀀스·인터락 정의서

출력: 02.설계/시퀀스_인터록/제어시퀀스_인터락_정의서.md

섹션 소스 파일 읽어야 할 심볼
메인 시퀀스 노드 흐름 SeqAutoRunPTOP.cs AddAction(17)·AddDecision(4)·AddSubsequence(3)와 Flows(...)(6). ⚠ AddNode·AddTransition 은 소스에 없는 심볼이다(Aurora API가 아니다)
단계별 동작 요약 SeqAutoRunPTOP.cs 각 노드 메서드 구현 첫 줄 주석·로그
인터락 정의 Settings/LaserInterlockSetting.cs HeadThetaInterlockEnabled, HeadThetaTolerance
인터락 정의 (추가) SeqAutoRunPTOP.cs LaserInterlock 처리
중알람 감시 Sequences/Monitoring/SeqAlarmMonitor.cs PLC_HEAVY_ALARM_STATUS 처리 (정의는 PLCController.Address.cs) — SeqAutoRunPTOP.cs에는 없다
정지/에러 처리 SeqAutoRunPTOP.cs OnStopped, OnForceError, ResumeMode

Resume(bit15) 흐름: PLC_WELD_READY_REQ(0x0F) 수신 → 팝업 + Auto→Manual 전환 → PC_WELD_READY_ACK(0x0F) ON → 1사이클 후 OFF.

출처 주의 — 네 곳으로 나뉜다. 시퀀스 파일만 뒤지면 못 찾는다. UCMainAutoRunViewModel.cs:209=수신 · :270=ACK ON · :271-277=1초 펄스 OFF(DispatcherTimer) · SeqAutoRunPTOP.cs:875=사이클 종료 OFF. OFF 경로가 둘이다 — 1초 타이머와 사이클 종료.


E. TactTime 산정서

출력: 02.설계/시퀀스_인터록/TactTime_산정서.md

아래 상수는 반드시 소스에서 재확인하고 파일:라인을 병기한다. 표에 적힌 값은 마지막 확인 시점의 것이고, 심볼이 사라지거나 값이 바뀌었을 수 있다. 찾지 못하면 지어내지 말고 미확인으로 남긴다.

단위동작 소스 파일 상수/값 최종 확인
Gate ON delay SeqAutoRunPTOP.cs laserEmissionGateDelayMs 실재 확인 (2026-08-03)
Jump 복귀 SeqAutoRunPTOP.cs Thread.Sleep(500) 실재 확인 (2026-08-03)
Pre/Post Scout SeqAutoRunPTOP.cs SCOUT_PROCEED_DELAY_MS 실재 확인 (2026-08-03)
실제 발진 SeqAutoRunPTOP.cs 로그 "TactTime: [Nms]" — 런타임 값. 실측 없이 기재 금지 —
Page 검증 지연 SeqAutoRunPTOP.cs 해당 상수를 소스에서 찾아 기입 미확인
준비 응답 지연 SeqAutoRunPTOP.cs 해당 상수를 소스에서 찾아 기입 미확인
완료비트 지연 SeqAutoRunPTOP.cs 해당 상수를 소스에서 찾아 기입 미확인

F. _task.md 진행률 기준 (현황 기준)

이 표는 실행 시점에 재산출한다. 아래 값은 작성 당시 스냅샷이며, 그대로 복사하면 안 된다. 각 단계 폴더의 실제 산출물 존재 여부를 세어 진행률을 다시 계산하라.

단계 상태 진행률(스냅샷) 근거
1.분석/협의 미산출 미산출 — 실행 시 계산 슬롯 폴더의 실제 산출물 수로 산정
2.설계 미산출 미산출 — 실행 시 계산 〃
3.제작 미산출 미산출 — 실행 시 계산 〃
4.셋업 미산출 미산출 — 실행 시 계산 〃
5.양산 미산출 미산출 — 실행 시 계산 〃
6.CS 미산출 미산출 — 실행 시 계산 〃

이 값은 스킬 실행 시점 기준. 재실행 시 소스·폴더 현황 재확인 후 갱신.