# PTOP 소스 → 산출물 필드 매핑 > 이 파일은 소스 파일과 산출물 필드 간 1:1 매핑 인덱스. > 다른 PC에서 스킬 실행 시 이 파일을 보고 어떤 소스를 읽어야 할지 판단한다. --- ## A. PLC-PC 인터페이스 신호정의서 출력: `02.설계/IO_DB설계/PLC_PC_인터페이스_신호정의서.md` | 시트 | 소스 파일 | 읽어야 할 심볼 | |---|---|---| | 통신 사양 | `Device/PLC/PLCContoller.Config.cs` | `ePLCNetType`, `PLCMMapFileType`, 베이스 주소 설정 | | 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 주소 규칙**: - `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` | `RegisterDevices()` 내 모든 `Register*Device` 호출 | | 모션축 정의 | `docs/architecture.md §4` | AuroraACS(X/Y), AuroraMotionBoard(Z), RTC(Scanner) | | 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 보드. --- ## C. 기능명세서 / UI 설계 출력: `02.설계/UIUX_기능설계/기능명세서.md` | 탭 | 소스 파일 | 읽어야 할 심볼 | |---|---|---| | 메뉴 구조 | `EquipmentSetup.cs` | `RegisterViews()` 전수 (MenuId, ViewType, AuthLevel) | | MainView | `Views/Main/UCMainAutoRun*.cs` | 버튼·이벤트·바인딩 목록 | | RecipeView | `Views/Recipe/UCRecipe*.cs` | ActivateRecipe, RecipeChangeHistory, UCModel | | ManualView | `Views/Manual/UCManualScannerOperation*.cs` | ScannerOperation, ModelFinder | | MonitoringView | `Views/Monitoring/UCPLC*.cs`, `UCIOInterfaceView.cs` | PLCBit, PLCWord, IOInterface | | Sequence 흐름 | `Sequences/SeqAutoRunPTOP.cs` | Builder() 노드 목록 순서대로 | **8탭 고정** (xlsx ref 호환): OverView / MainView / RecipeView / ManualView / DeviceView / SettingView / VisionView / Sequence 흐름 --- ## D. 제어 시퀀스·인터락 정의서 출력: `02.설계/시퀀스_인터록/제어시퀀스_인터락_정의서.md` | 섹션 | 소스 파일 | 읽어야 할 심볼 | |---|---|---| | 메인 시퀀스 노드 흐름 | `SeqAutoRunPTOP.cs` | `Builder()` 내 모든 AddNode·AddTransition | | 단계별 동작 요약 | `SeqAutoRunPTOP.cs` | 각 노드 메서드 구현 첫 줄 주석·로그 | | 인터락 정의 | `Settings/LaserInterlockSetting.cs` | `HeadThetaInterlockEnabled`, `ThetaTolerance` | | 인터락 정의 (추가) | `SeqAutoRunPTOP.cs` | `LaserInterlock`, `PLC_HEAVY_ALARM_STATUS` 처리 | | 정지/에러 처리 | `SeqAutoRunPTOP.cs` | `OnStopped`, `OnForceError`, `ResumeMode` | **Resume(bit15) 흐름**: `PLC_WELD_READY_REQ(0x0F)` 수신 → 팝업 + Auto→Manual 전환 → `PC_WELD_READY_ACK(0x0F)` ON → 1사이클 후 OFF. --- ## E. TactTime 산정서 출력: `02.설계/시퀀스_인터록/TactTime_산정서.md` | 단위동작 | 소스 파일 | 상수/값 | |---|---|---| | Page 3회 검증 | `SeqAutoRunPTOP.cs` | `PAGE_VERIFY_DELAY_MS` × 3 (≈200ms×3 = 600ms) | | 준비 응답 | `SeqAutoRunPTOP.cs` | `WELD_START_DELAY_MS` (200ms) + 소신호(5ms) | | Gate ON delay | `SeqAutoRunPTOP.cs` | `laserEmissionGateDelayMs` = 15ms | | 실제 발진 | `SeqAutoRunPTOP.cs` | 로그 "TactTime: [Nms]" — 예시 285ms (라인 수 의존) | | Jump 복귀 | `SeqAutoRunPTOP.cs` | `Thread.Sleep(500)` | | 완료비트 | `SeqAutoRunPTOP.cs` | 50ms + 5ms | | Pre/Post Scout | `SeqAutoRunPTOP.cs` | `SCOUT_PROCEED_DELAY_MS` = 100ms/회 (M70509 ON 시) | --- ## F. _task.md 진행률 기준 (현황 기준) | 단계 | 상태 | 진행률 | 근거 | |---|---|---|---| | 1.분석/협의 | 해야 할 일 | 0% | 사양서 미입수 | | 2.설계 | 업무 진행중 | 85% | xlsx 4종 완료, 모션 파라미터 미확정 | | 3.제작 | 해야 할 일 | 0% | CheckList 미작성 | | 4.셋업 | 해야 할 일 | 0% | 현장 셋업 미완료 | | 5.양산 | 업무 진행중 | 40% | 운영매뉴얼 3종 완료, 나머지 미완료 | | 6.CS | 해야 할 일 | 0% | 미착수 | > 이 값은 스킬 실행 시점 기준. 재실행 시 소스·폴더 현황 재확인 후 갱신.