# 작업일지 — 2026-08-11 ## 1. PC STOP 시 PAGE/RECIPE 에코 워드 0 초기화 적용 ### 요청 PC측에서 STOP 할 때 PAGE·RECIPE 워드 쓰던 부분을 초기화한다. 기존 내용은 유지하고 오늘 날짜 `#region` / `#endregion` 으로 묶어서 넣는다. 나중에 다시 삭제해도 되는 실험적 적용. ### 기존 상태 (변경 전) | 위치 | 동작 | |---|---| | `SeqAutoRunPTOP.cs` `OnSeqActionStop()` | 비트만 OFF. **에코 워드는 0으로 안 지움** (260621 방침) | | `SeqStatusMonitor.cs:104-108` | Auto OFF 시 `PC_RECIPE_NO`/`PC_PAGE_NO` 0 — 단 `M70515` 살아있으면 보존 | | `UCMainAutoRunViewModel.cs:226-227` | bit15 Resume 이 "OnSeqActionStop 이 워드 0 안 씀"을 전제로 `ResumeMode = true` | 워드를 지우지 않던 근거는 소스 주석에 260805·260806 두 차례 기록돼 있었다. 260806 에 PLC측 시퀀스가 확정되면서 **PLC가 보는 핸드셰이크 게이트는 비트가 아니라 워드** (`PC_PAGE_NO`/`PC_RECIPE_NO`)임이 확인됐다. ### 수정 `Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs` — `OnSeqActionStop()` 안, 기존 260805 region 이 닫힌 직후에 추가. ```csharp #region 260811 정지 시 에코 워드 0 초기화 (원복 시 이 region 삭제) _PLC.WriteWord(eWordOutput.PC_RECIPE_NO, 0); _PLC.WriteWord(eWordOutput.PC_PAGE_NO, 0); Log.I($"[OnSeqActionStop] 에코 워드 0 초기화 (PC_RECIPE_NO/PC_PAGE_NO)"); #endregion ``` - 260805·260806 주석 원문과 `if (!ResumeMode)` 로그 블록은 **그대로 보존**. - `ResumeMode` 와 무관하게 무조건 0을 쓴다. ### 판단 근거 Resume bit 가 살아 있어도 재시작하면 `CheckRecipeNoComp` → `CheckPageNoComp` 가 Recipe 부터 Page 까지 다시 확인·재에코하므로 보존값이 없어도 핸드셰이크는 성립한다. ### 남는 문제 - `SeqStatusMonitor` 의 Auto OFF 0 초기화와 **중복 쓰기**이고, 거기 있던 `M70515 살아있으면 보존` 예외를 이번 코드가 무시한다 → bit15 Resume 은 보존값을 잃는다. - [추론] PLC 가 0 을 중간상태로 어떻게 해석하는지는 미검증. PLC 쪽이 꼬일 가능성 있음. ### 검증 빌드·런타임 모두 **미검증**. 우선 적용하고 현장에서 돌려보며 확인하기로 함. 문제가 있으면 `260811` region 만 삭제하면 원복된다.