NohDoyeon241104 ec46b15bf6 feat: PC STOP 시 PAGE/RECIPE 에코 워드 0 초기화 (260811 region)
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
2026-08-11 09:46:01 +09:00

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 만 삭제하면 원복된다.