# 작업일지 — 2026-06-17 ## 현장 RTC5보드 갈보모터 피드백 관련 - 현장 RTC5보드는 갈보모터 X, Y의 피드백값을 가져오는 게 없어서 DEVICE 상에서 COMMAND 값을 불러오도록 체크 해제 후 진행. - 정확한 피드백값은 확인 불가한 상태. ## Laser 동작 방식 - Laser 동작은 I/O로 하며, 프로그램 내에서 사용할 때 Simulation으로 동작한다. ## Recipe View Laser Ready (DI 9) 미점등 이슈 - Recipe View에서 Laser Ready 부분이 DI(9)를 보고 있는데, 해당 BIT가 Laser를 IO On 해도 번들을 켜도 안 켜져서 전선 다시 확인 중인 상태. - _simulation이어서 true가 되긴 해야 하지만, 한번 확인해볼 것._ - 이전 MOTF 작업하던 프로젝트랑 비교하기. ### [분석 요청] IsLaserReady 조건 — 현재 프로젝트 vs docs/기존파일비교 - 대상: `WeldingComponents/WeldingCommon/Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs` - 요청: 현재 파일의 `IsLaserReady` 조건과 `docs/기존파일비교/`의 같은 파일명 버전(이전 MOTF) 비교 ### [분석 완료] 결론: IsLaserReady 판정 소스가 바뀜 → 미점등의 직접 원인 - **OnMonitoring()의 IsLaserReady 판정 (핵심 차이)** - 기존(MOTF): `if (_Laser.GetLaserReady())` → Laser 디바이스 상태로 판정. Simulation이면 true가 됨. - 현재: `if (_IODevice.ReadDI(9))` (try/catch 포함) → **실제 IO 하드웨어 DI 9번 비트**를 직접 읽음. - → 현재는 Laser 디바이스(시뮬레이션)가 아니라 물리 DI(9)를 보므로, 배선으로 DI(9)가 실제로 들어오지 않으면 simulation이어도 true가 안 됨. 작업일지에 적은 "simulation이면 true여야 한다"는 기존 코드 기준이고, 현재 코드는 그렇게 동작하지 않음. - **PerformCmdLaserReadyCheck() (Laser Ready Check 버튼)** - 기존: `_Laser.GetLaserReady()` 토글 → `_Laser.LaserOn()` / `LaserOff()` (실질적으로 Laser Ready On). - 현재: `toggleIO` 플래그로 `_IODevice._iOUnit.WriteDoBit(9, true)` + `WriteDoBit(13, true)` 직접 출력 (주석: "추후 Write bit 파라미터화 해야함"). - → 버튼이 켜는 것은 **DO 9/13번 출력**인데, 모니터링이 읽는 것은 **DI 9번 입력**. DO9 출력이 DI9 입력으로 되돌아오려면 물리 배선(루프백/외부 결선)이 필요함. 이 결선이 없으면 버튼을 눌러도 IsLaserReady가 안 켜짐 → 지금 전선 확인 중인 이슈와 일치. - **부수 차이 (동작엔 직접 영향 적음)** - 필드 선언: 기존 `private readonly IODevice _IODevice;` → 현재 `private IODevice _IODevice;` (readonly 제거). 추가 필드 `public bool toggleIO = true;`. - using 추가: `WeldingCommon`, `WeldingCommon.Devices.Laser`, `using static ...PAIX_PrismaticScanner`. - 기존 OnMonitoring의 LaserOnLamp WriteDoBit 주석 블록은 현재 제거됨. - PerformCmdRunTeachingRun: 기존은 `PopupSequenceDiagram(...)` 호출, 현재는 주석 처리. OnCompleteTeachingRun도 기존은 성공 처리/ShowWarningToast 활성, 현재는 주석 처리. - **확인/해결 방향** - DI(9)로 판정을 유지하려면 DO9/13 → DI9 물리 결선(또는 레이저 Ready 출력 → DI9 결선)을 확인할 것. - 시뮬레이션에서 동작 확인이 목적이면, 기존처럼 `_Laser.GetLaserReady()` 기반으로 임시 전환하거나, IO 시뮬레이션에서 DI(9)를 강제 On 할 수 있는지 확인. ## Axis Position Interlock 파라미터 추가 - 수평, 수직 + 허용오차 (도) 파라미터 세팅값 입력하는 것 추가함. (현장 PC 업데이트 전) ### [TODO / 추후 작업 예정] - 추후 시퀀스 작업할 때 해당 파라미터(수평·수직 ± 허용오차)를 체크해서, 안전을 위해서라도 인터락을 걸어둘 예정. - 즉, 시퀀스 동작 중 전축 위치(섹터 각도)가 `기준값 ± 허용오차` 범위를 벗어나면 인터락. - 지금은 파라미터 입력 UI만 추가한 상태이고, 인터락 판정 로직은 나중에 작업. - 참고: 설계/위치 분석은 `docs/분석/2026/06/17/144442_sequencesetting_axis_interlock_properties.md` 에 정리해둠. ## PLC 맵 작업 (260617 Laser Interface 반영) - PLC에서 새 맵 받아서, `D:\ILSOSConfig\ILSOS_PrismaticRD_PTOP\External\PLC` 의 기존 `PLC_DeviceMap_*` bit/word 파일들을 `260617_backup` 으로 백업해둠. - `유니셀 PtoP 단동기 Laser Interface_260617.xlsx` 참고해서 4개 맵 CSV(Bit/Word × Input/Output) 내부 매핑 갱신. 파일명·주소행 범위는 유지하고 코드 스타일(PC_/PLC_) 네이밍, 음/양극 둘 다 채움. - Input/Output 방향 검증함 → 안 바뀜(정상). Word_Input 70585~70599 `M` 오기 → `D` 정정. - 소스 enum(base + machine) 정합성은 **아직 안 건드림(보류)**. PLC측 확정 필요한 것들 있음. ### [TODO / 추후 확인] - StepNo(D70502 → RecipeNo로 바뀜), RMS_USED(M70509), 빠진 ALARM_RESET/RMS_READ_REQ/WELD_NG_JUDGE 처리, read count(배수)가 신규 최대 offset 포함하는지 확인. - 체크리스트: `docs/분석/2026/06/17/171642_plc_map_update_checklist.md` - 상세 분석: `docs/분석/2026/06/17/165341_plc_devicemap_update_260617.md`, `171312_plc_map_io_direction_and_enum_alignment.md`