diff --git a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs index bccf494..4aebf18 100644 --- a/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs +++ b/Machines/ILSOS_PrismaticRD_PTOP/Sequences/SeqAutoRunPTOP.cs @@ -1485,6 +1485,11 @@ namespace ILSOS_PrismaticRD_PTOP.Sequences } #endregion + #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 Log.I("[PLCInterface] PC All Bit Off (Auto, ReadyAck, Busy, Complete)"); diff --git a/docs/작업일지/2026_08_11.md b/docs/작업일지/2026_08_11.md new file mode 100644 index 0000000..912900c --- /dev/null +++ b/docs/작업일지/2026_08_11.md @@ -0,0 +1,53 @@ +# 작업일지 — 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 만 삭제하면 원복된다.