From 1a92f19364c76f9c98cc5206dc74245cc3dcd8c4 Mon Sep 17 00:00:00 2001 From: NohDoyeon241104 Date: Sun, 21 Jun 2026 16:31:02 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=99=95=EC=A0=95=20PLC=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=EC=99=80=20=EB=A0=88?= =?UTF-8?q?=EC=8B=9C=ED=94=BC(=EA=B0=80=EC=A0=91=EC=9A=A9=EC=A0=91=20?= =?UTF-8?q?=EB=A0=88=EC=8B=9C=ED=94=BC=20=EC=B6=94=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...셀 PtoP 단동기 Laser Interface_260621_가접용접추가.xlsx | Bin 47313 -> 47311 bytes docs/작업일지/2026_06_21.md | 106 +++++++----------- 2 files changed, 39 insertions(+), 67 deletions(-) diff --git a/docs/PtoP 유니셀 용접기 PLC 인터페이스/유니셀 PtoP 단동기 Laser Interface_260621_가접용접추가.xlsx b/docs/PtoP 유니셀 용접기 PLC 인터페이스/유니셀 PtoP 단동기 Laser Interface_260621_가접용접추가.xlsx index 87a39885946e3ea71c1c3a0b9a7972e6e76655ed..d221fe54605515e035f37a9fc564557ba62a13ac 100644 GIT binary patch delta 15451 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 delta 15447 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 no-op `WaitTime` 노드 활용 > `OnStartUp`에서 연결 await. -### 분석 결론 -- **순서 자체는 이미 "활성화 먼저 → 알람모니터"로 맞음.** `OnStartUp`은 `await ActivateDevices()`(모든 `device.Activate()` 완료 대기) 후에 `SeqAlarmMonitor.Start()` 호출(EquipmentSetup.cs:92→105). -- **진짜 갭은 "Activate ≠ Connected"**: `Activate()`는 연결 개시까지만 보장. 알람 체크 코드가 `IsActivated`와 `GetConnected()`를 따로 봄(프레임워크가 활성화/연결 구분) → 첫 루프가 연결 확립 전 `GetConnected()=false`를 읽어 오알람. -- **비대칭**: PLC는 `PLC_LIVE_STATUS` 2000ms 타임아웃 폴링이라 grace 있음. **Laser/OCT/Chiller/LBAD는 `!GetConnected()` 즉시 알람(grace 없음)** → 기동 직후 오알람은 주로 이쪽. +## 4. bit15(MODECHANGE) 기능 구현 — 팝업 + Auto→Manual + Resume (빌드 0오류, 커밋 `ff4fc03`) -### 타이밍 조작 레버 (우선순위) -1. **(권장) `SeqAlarmMonitor.StartNode`에 "연결 확립 대기" 게이트 추가** — 시퀀스 진입 1회 실행 지점에서 활성 디바이스 `GetConnected()`/`IsActivated`(PLC는 live bit) true까지 타임아웃 폴링 후 루프 진입. 연결 상태 기준이라 견고. -2. 비어 있는 `WaitTime` 노드(현재 no-op) 활용 — 손쉽지만 고정시간이라 추측값. -3. `OnStartUp`에서 연결 확인까지 await 후 `Start()` — 단 `Activate()`가 연결완료까지 동기인지 확인 필요. -4. `OnPostDeviceActivated` 훅 — "활성화"지 "연결완료"가 아니라 게이트로는 부적절. +보완항목 확정: 1=작업지시서, 2=(나)작업자 수동 RunWelding, 3=작업지시서, 4=작업지시서, 5=현행유지. -### 적용 전 확인 포인트 -- `device.Activate()`가 연결완료까지 동기인가, 개시만인가 (디바이스별: Laser OPCUA/IO, PLC MXComponent, Chiller 등). +- **bit 정의**: 입력 `PLC_MODE_CHANGE=0x0F(M70515)`/`_P=0x73(M70615)`, 출력 `PC_MODE_CHANGE=0x0F(M70015)`/`_P=0x73(M70115)`. +- **정지 보존(#1)**: `OnSeqActionStop`에서 `ResumeMode`면 `PC_PAGE_NO/RECIPE_NO=0` 쓰기 스킵(에코 보존). +- **확인 핸들러(#2-나)**: `ResumeMode=true`→Stop(보존)→팝업(`MessageDialog.Show` OK-only)→Manual 전환. 레시피 이미 활성이라 재활성/롤백 안 함. 가변 용접은 작업자가 Manual에서 직접. +- **핸드셰이크 스킵(#3)**: `CheckInitCondition`에서 `ResumeMode`면 `SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ`로 분기(+Flow 엣지). +- **출력 bit15 수명(#4)**: `OnAutoRunResume`에서 ON+Auto 재개, `CheckCycleStop`에서 한 사이클 후 OFF+`ResumeMode=false`. +- **감지(#5)**: `UCMainAutoRunViewModel.OnMonitoring`(화면 타이머) 현행 유지. +- 버튼 **[AutoRun Resume]** = Equipment Status 그룹 좌측, `IsModeChangeActive`(bit15 ON) 때만 표시. 확인창 없이 즉시 재개. +- 재용접 중복은 **PLC가 레이저 차단**으로 합의(option2). -## 10:19 — 가접 레시피 추가된 PLC 인터페이스 문서 확인 +## 5. 미확정 / 확인 필요 (다음 액션) -대상: `docs/PtoP 유니셀 용접기 PLC 인터페이스/유니셀 PtoP 단동기 Laser Interface_260621_가접용접추가.xlsx` (시트: M70K 비트 / D70K 워드 / Recipe Number) - -### Recipe Number 시트 — 가접 레시피 추가 구조 -- 11: 양극/음극 탭 비드 용접 (page 1~2, 기존) -- **20: Pre 가변 전면 용접 (page 1~5)** ← 신규, PRE(가접) 전면 -- **21: 전면 용접 (page 1~5)** ← 신규, 본접 전면(U-Frame 전면) -- **22: Pre 가변 후면 용접 (page 1~5)** ← 신규, PRE(가접) 후면 -- **23: 후면 용접 (page 1~5)** ← 신규, 본접 후면(U-Frame 후면) -- 31: 상면 용접 (page 1~2, 기존) / 32: 하면 용접 (page 1~2, 기존) -- → 가접을 시퀀스 아닌 **레시피 번호(20~23)** 로 추가, PRE(가접)→본접을 레시피 쌍으로 분리(전면 20→21, 후면 22→23). - -### 신호 인터페이스 — 그대로(가접 추가로 신호 신설 없음), 커밋 25edd79 코드와 1:1 일치 -- PAGE 핸드셰이크만 사용: `M70508`(-)/`M70608`(+) PLC→PC Page_CHG Request, `M70008`/`M70108` PC→PLC Page_CHG Complete(ACK) -- 레시피·페이지는 워드: `D70502` PLC_RecipeNo, `D70501` PLC_PageNo / 에코 `D70002` PC_RecipeNo, `D70001` PC_PageNo -- `M70509/M70009` Recipe_CHG Req/Comp 비트는 표에 있으나 현장 결정대로 게이트 미사용 → RecipeNo는 PAGE_REQ 시점 워드(D70502)로 읽음. - -### 확인 필요 -- 셀 표기 "Pre **가변** 전면/후면 용접" → 의도는 PRE **가접**(tack)일 텐데 오타인지 확인 필요. -- 20~23 페이지 수 미확정(표상 1~5). 코드는 `Layers.Count()` 가변이라 2↔5페이지 혼재 자동 대응. -- 음극(-)/양극(+) 비대칭: -측은 Page+Recipe CHG 둘 다, +측은 Page_CHG만(기존 단동기 구조, 가접이 바꾸지 않음). - -## bit15(MODECHANGE) 기능 구현 — 팝업 + Auto→Manual + Resume (빌드 0오류) - -작업지시서 2종(`bit15_resume_재진입_문제분석…`, `2026_06_21_bit15_resume_구현.md`) 기준 보완 구현. 보완항목 사용자 확정: 1=작업지시서, 2=(나)작업자 수동 RunWelding, 3=작업지시서, 4=작업지시서, 5=현행유지. - -- **bit 정의**(PLCController.Address.cs): 입력 `PLC_MODE_CHANGE=0x0F(M70515)`/`PLC_MODE_CHANGE_P=0x73(M70615)`, 출력 `PC_MODE_CHANGE=0x0F(M70015)`/`PC_MODE_CHANGE_P=0x73(M70115)`. -- **#1 정지 보존**: `SeqAutoRunPTOP.OnSeqActionStop`에서 `ResumeMode`면 `PC_PAGE_NO/PC_RECIPE_NO=0` 쓰기 스킵(에코 보존). -- **#2(나)**: 확인 핸들러 = `ResumeMode=true`→Stop(보존)→팝업(`MessageDialog.Show` OK-only)→Manual 전환. 레시피 이미 활성이라 `ActivateRecipe/OnActiveReloaded` 제거. 가변 용접은 작업자가 Manual에서 직접. -- **#3 핸드셰이크 스킵**: `CheckInitCondition`에서 `ResumeMode`면 `SEQ_SET_PARAMS_UPLOAD_WELDING_LIST_SEQ`로 분기(+Builder Flow 엣지). -- **#4 출력 bit15 수명**: `OnAutoRunReStart`에서 `PC_MODE_CHANGE ON`+Auto 재개, `CheckCycleStop`에서 한 사이클 후 OFF+`ResumeMode=false`. -- **#5**: 감지는 `UCMainAutoRunViewModel.OnMonitoring`(화면 타이머) 현행 유지. -- ReStart는 "자동운전 시작?" 확인창 없이 즉시 재개(전용 경로)로 변경. -- 재용접 중복: option2 채택, **PLC측이 레이저 차단**하기로 함. -- ReStart 버튼 = AutoRun 화면 Equipment Status 그룹 좌측, `IsModeChangeActive`(bit15 ON) 때만 표시. - -### PLC 협의 대기 (기록) -- **출력 PC_MODE_CHANGE(bit15) false 처리 위치**: 현재 `CheckCycleStop`에서 OFF. **대안** — 시퀀스 1바퀴 후 다시 PageChange 신호를 보고 있을 때(다음 `PAGE_CHANGE_REQ`가 true로 들어오는 코드블록 안)에서 false 처리. PLC가 출력 bit15 클리어를 인식하는 타이밍과 맞춰야 하므로 **PLC측과 합의 후 위치 확정.** -- bit15 PLC 주소(M70515/M70615/M70015/M70115) 실제 맵 대조 필요. +- **현장 실증 전** — 빌드만 통과. bit15 흐름·레시피 전환·실제 Laser 발진은 현장 테스트 필요. +- **PLC 협의**: + - 출력 `PC_MODE_CHANGE`(bit15) false 처리 위치 — 현재 `CheckCycleStop`. 대안: 다음 `PAGE_CHANGE_REQ` 수신 블록에서 false (PLC 인식 타이밍과 합의 후 확정). + - bit15 주소(M70515/M70615/M70015/M70115) 실맵 대조. + - bit15 발생 정책: 가변 페이지마다 vs 가변 레시피당 1회. +- 레시피 시트 "Pre **가변**" 표기가 PRE **가접** 오타인지 확인. +- 20~23 페이지 수 미확정(코드는 `Layers.Count()` 가변 대응). +- 알람 타이밍: `device.Activate()`가 연결완료까지 동기인지/개시만인지 디바이스별 확인. +- 제품 1개 = Recipe×Page 사이클 예상 시나리오: `docs/분석/2026/06/21/121750_제품1개_recipe_page_사이클_예상시나리오.md`.