OnSeqActionStop()에서 PC_RECIPE_NO/PC_PAGE_NO를 0으로 초기화한다. ResumeMode 여부와 무관하게 지운다 - 재기동 시 CheckRecipeNoComp -> CheckPageNoComp가 PLC 워드를 다시 읽어 재에코하므로 핸드셰이크는 성립. - 260805/260806 주석 원문과 if(!ResumeMode) 로그 블록은 그대로 보존 - SeqStatusMonitor의 Auto OFF 초기화와 중복이며, 거기 있던 M70515 보존 예외는 이번 코드가 무시 -> bit15 Resume은 보존값 상실 - 빌드/런타임 미검증. 문제 시 260811 region 삭제로 원복 작업일지: docs/작업일지/2026_08_11.md
2.3 KiB
2.3 KiB
작업일지 — 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 이 닫힌 직후에 추가.
#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 만 삭제하면 원복된다.