NohDoyeon241104 a43a531e00 docs: 미커밋 분석·작업지시서·작업일지 반영 (260805~260810)
- 분석_bit15_Resume_핸드셰이크_260805.md
- 작업지시서_PTOP_PLC핸드셰이크_260805.md
- 분석_HeavyAlarm_비트_동작_260810.md
- 작업일지 2026_08_06.md
2026-08-11 09:46:02 +09:00

7.5 KiB

작업일지 — 2026-08-06

1. Recipe/Page 핸드셰이크 — PLC측 프로토콜 확정

사용자 확인 내용 (현장)

  • "PLC측 시퀀스 확인 함. 레시피, 페이지 동시에 바꿈 → PLC 508번 BIT 살림"
  • PC측 시퀀스: 8번 BIT 체크 → 레시피 확인 → 레시피 활성화(체크 3번) → 페이지 확인 후 변경 → PC_PAGE_CHANGE_COMPLETE 송신
  • "근데 PLC측은 페이지랑 레시피 넘버만 같으면 넘어가도록 되어있음"
  • "PLC 제어는 이제 끝났어요."
  • 30초에 대해: "우선 계속 확인하는거야. 30초 동안 중간에 계속 체크를 하고 있고, 대기하면서 다시 30초 반복해서 체크하는 것 뿐"

이로써 확정된 것

항목 내용
게이트 워드(PC_PAGE_NO/PC_RECIPE_NO). PC 에코가 PLC 값과 같아지면 진행
PC_PAGE_CHANGE_COMPLETE(M70008) PLC 미사용 — 08/04 질문 ★4 해소
확인 주기 상시. 30초는 확인 간격이 아니라 한 번의 확인 창이며 반복

코드 주석이 반대로 적혀 있었음

SeqAutoRunPTOP.cs OnSeqActionStop 의 주석 ②가 "PLC가 보는 게이트는 워드가 아니라 PC_PAGE_CHANGE_COMPLETE 비트" 라고 적고, 그 전제로 에코 워드 0 초기화를 롤백해 뒀다. 확정 내용과 정반대.


2. 방침 전환 — "검증"에서 "에코 보장"으로

사용자 지시:

"어차피 PLC가 검증하니깐, 괜찮을 것 같은데" "우리는 잘 써주는것만 확인하는 방안으로 가야해. 그래야 멈추는 일 없이 시퀀스가 핑퐁이 되지" "PC쪽에서는 페이지랑 레시피 넘버만 잘 WRITE 해주고 다음 시퀀스로 넘어가면 돼"

안전 측면 확인 (코드 검증)

용접 실행은 PLC_WELD_TRIGGER_REQ(M70516) ON 대기가 별도 게이트다 (SeqAutoRunPTOP.cs:196, :705). 페이지를 오독하면 에코 불일치 → PLC가 트리거를 안 줌 → 용접이 나가지 않는다. 오독이 잘못된 용접으로 이어지는 경로는 없음.

그래서 문제가 된 것 — PC가 멈추는 지점

위치 증상
CheckRecipeNoComp:353-365 에코 없이 return 하는 경로 2개(RecipeNo=0 / 미등록)
CheckPageNoComp:534-556 범위 밖이면 3초 주기로 에코 없이 무한 대기
CheckRecipeNoComp:408-419 타임아웃이 시작시각만 리셋해 탈출 못 함
CheckPageNoComp:501 이후 Stopped 가드 없어 정지 중에도 미검증 값 에코

부수 발견

  • CheckPageNoComp 로그는 "3회 연속 검증"이라 하지만 3개 값을 비교하는 코드가 없었다 (판정은 마지막 값 하나). rules.md #1 전형.
  • CheckRecipeNoComp 재폴링의 count++ < 3은 실제로 4회 순회.
  • ReadWord의 err 반환값을 전 구간에서 버리고 있었음. 미연결 시 (err, 0) 반환이라 통신 이상이 자동으로 "RecipeNo=0 → 전환 생략" 경로에 빠짐.

3. 분석 문서 2건 작성

  • docs/분석/2026/08/06/RecipePage_에코보장_방침_분석.md
  • docs/분석/2026/08/06/RecipePage_에코수렴루프_설계.md

08/04 문서(AutoRun재기동_Recipe_Page워드_미반영_원인분석.md)와 상호 링크. 30초 재확인 확인 후 앞 문서의 판단 2건을 정정:

항목 종전 정정
에코 누락 영구 교착 자동 복구 — PC가 맞추는 즉시 진행
범위 밖 PageNo 읽은 값 그대로 에코 에코하지 않고 재시도가 맞다

4. 확정한 설계 결정

항목 결정
PLC_RECIPE_NO == 0 이상값 → 에코하지 않고 재시도
범위 밖 PageNo 에코하지 않고 재읽기
CheckPageNo 레벨 → 상승엣지 이번 범위 아님 (수렴 루프가 스테일 오독을 자동 복구)
수렴 지연 시 토스트만 (알람 승격 안 함)

불변식

  • CheckRecipeNoComp — PC_RECIPE_NO == PLC_RECIPE_NO 그리고 활성 레시피 Id == 그 번호
  • CheckPageNoComp — PC_PAGE_NO == PLC_PAGE_NO 그리고 _CurrentPageNo == PC_PAGE_NO - 1

워드만 맞추면 안 된다. 내부 상태를 같이 안 고치면 PLC는 통과시키는데 PC는 옛 페이지로 용접한다. 이 경우는 PLC 게이트로도 안 막힌다(에코가 맞으니 트리거가 나옴).


5. 구현 — 원복 가능 방식으로

사용자 지시: "쓰다가 문제 생기면 원복 하면 되니깐", "원복할 수 있도록 #region 등으로 기존 소스를 삭제하지 말고 분리해서 주석 처리"

기존 코드 삭제 0건. 구버전은 /* */로 감싸 #region 260806 구버전 보존에 남기고, 신규는 #region 260806 신규로 표시. 마커 260806으로 전량 검색 가능.

파일 region
Device/PLC/PLCController.Logic.cs 신규 — ReadOutWord(eWordOutput) (ReadOutBit 패턴 준용)
Sequences/SeqAutoRunPTOP.cs 상수 신규 / plcPageNoList 보존 / CheckRecipeNoComp 보존·신규 / CheckPageNoComp 보존·신규 / OnSeqActionStop 주석 정정

주요 변경

  • 두 노드를 수렴 루프로 재작성 — 에코 후 되읽어 일치 확인, 어긋나면 재읽기, 맞는 즉시 다음 노드로
  • Page 3회 수집(600ms)·Recipe 800ms 재폴링 제거 → 정상 흐름 지연 0
  • while 탈출 후 context.Stopped 가드 추가
  • 시뮬레이션 가드 — IsSimul이면 수렴 생략. PLC 워드가 항상 0이라 안 넣으면 시뮬에서 AutoRun이 CheckRecipeNoComp를 못 빠져나감

계획에서 바꾼 것

using Hermes; 추가 → 완전 한정명 Hermes.E1.OK(4곳)로 변경. 이 파일이 이미 다수 네임스페이스와 static using 2개를 열고 있어 Log·Status 같은 흔한 이름에서 모호성(CS0104)이 날 위험이 있었음.

구현 중 확인

CheckInitCondition이 무조건 SEQ_CHECK_PAGENO를 반환한다(:336). :224의 Resume 핸드셰이크 스킵 분기는 선언만 있고 타는 경로가 없다. → 수렴 루프는 Resume 경로에서도 항상 실행되지만 PLC 값을 따라가며 에코를 최신화할 뿐이라 보존값을 훼손하지 않음(충돌 없음).


6. 빌드·커밋·배포

  • 빌드 통과 (사용자 확인: "빌드는 돼")
  • 현장 PC에 파일 덮어쓰기 완료 — "현장에 파일 덮어쓰기는 했고, 추후 확인해볼게"
  • 머지 진행 중이라 부분 커밋이 안 돼(cannot do a partial commit during a merge) 머지 마무리 → 코드 커밋 순으로 진행. 커밋·푸시 완료

커밋에 포함하지 않은 것

docs/PtoP 유니셀 용접기 PLC 인터페이스/ 하위 삭제 13건(xlsx 6·7z 2·zip 1·txt 3 등)이 unstaged로 잡혀 있었음. 이번 작업과 무관해 그대로 둠.


7. 남은 것

런타임 검증 미실시. 우선순위 순:

  1. 시뮬레이션 기동 — IsSimul 가드가 실제로 먹는지 (가장 위험)
  2. 정상 핸드셰이크 — 로그가 수렴 완료 (1회차)로 찍히는지
  3. 정지 동작 — 수렴 루프 중 Stop 시 에코가 안 나가는지
  4. 범위 밖 PageNo 복구 — 토스트 후 정상값 복귀 시 재시작 없이 이어지는지

미착수 별건

  • CheckPageNo 레벨 → 상승엣지 전환 (08/04 조치 A)
  • bit15 ResumeMode 교착 (08/04 조치 C·D)
  • PLC 질문 ★1(Manual/정지 시 M70508 OFF 여부)·★2·★5 미해소

환경 변화

Serena MCP 제거됨 → 이 세션에 셸 실행 경로 없음. 빌드·git은 사용자가 직접 실행.