31 Commits

Author SHA1 Message Date
dc012d9313 feat: 자동운전 관측용 로그계측 추가 (동작 무변경)
자동 전환 전 판단 근거 확보를 위한 로그만 추가. 분기/리턴/비트쓰기 무수정.

- [Enter] 활성 레시피 페이지별 객체 수 1회 스캔 (빈 레이어 사전 경고)

- [CheckPageNo] REQ 진입 시점 ON 여부 (레벨/엣지 전환 판단 근거)

- [DoorCond] 출사 직전 Door 판정 기록 전용 - 차단하지 않음

- [사이클요약] 레시피/페이지/객체수/용접ms/GateON ms/PAGE_CMP/Resume 1줄

- [중알람] H알람 정지 대상 ID 불일치 경고 (StopSequence 호출은 그대로)

Door 차단과 정지 ID 수정은 극성/알람목록 확인 후 별건으로 진행한다. 원복: 마커 [로그계측 2026-09-16] 전수 검색 후 삭제 (2파일 10곳).
2026-09-16 16:21:16 +09:00
7c974628d7 fix: 메뉴얼 모드 Door Open 시 레이저 출사 차단 (ISSUE-260902-01)
## 배경 (현장 사고 2026-09-02)
파워측정 / 파워캘 / 롱텀(1시간 연속출사) 작업 중 Door Open 상태에서 레이저가
출사되었다. 현장 요청: "메뉴얼에서도 Door open 상태에서 레이저 출사 안 되도록
Interlock 필요".

## 원인 (수정 전)

1) SeqComponentTeachingRun.CheckCondition_Interlock()
   Door 차단 코드가 '#warning to KSJ > 지워도 무방해보임' 과 함께 전체 주석 처리
   되어 있었다. 남은 검사는 HasAlarmLevelHigh() 뿐이라 Door Open 이어도 통과한다.
   이 함수가 Manual 경로(Teaching Run / Laser Shot On / Scanner Calibration)의
   유일한 출사 게이트였다.

2) UCScannerLaserControlViewModel.PerformCmdLaserShotOnPercent / ...OnWatt
   IsUseLaserAutoOffChecked == false 분기(= 파워측정 직접 출사)는 시퀀스를 아예
   타지 않고 _Scanner.LaserSignalOn() 을 직접 호출한다. 이 분기에는 Door / EMO /
   Busy / LaserReady 어떤 인터락도 없었다. LaserSignalOn 은 자동 오프가 없어
   Shot Off 를 누를 때까지 계속 출사되며, 이것이 롱텀 1시간 연속출사의 구현
   경로다. 이번 사고의 실제 경로.

3) Door 신호 2계통이 모두 출사를 막지 않고 있었다
   - PLC 비트: AlarmManager.IsPlcDoorOpen() 을 호출하는 살아있는 코드가 0곳
     (SeqComponentTeachingRun 주석, UCMainAutoRunViewModel 블록 주석)
   - IO DI 접점: IODevice.MonitorIOInterfaceMap 이 DoorLockOpen1~4 를 읽지만
     타워램프 점등과 EVENT_DOOR_INTERLOCK 발행만 하고, 그 이벤트의 구독자가 없다

## 변경 (수정 후)

[WeldingCommon/Alarm/AlarmManager.cs]
- IsDoorOpen(caller) 신규: PLC 비트(PLC_DOOR_INTERLOCK)와 IO DI 접점
  (DoorLockOpen1~4)을 OR 판정. 한쪽 배선/맵이 틀려도 다른 쪽이 잡도록 했다.
- IsIoDoorOpen(), GetDoorStateText() 신규.
- PAIXIO.ReadDiBit 은 비트 1개마다 DI 배열 전체를 읽으므로(PAIXIO.cs:305~307)
  80ms TTL 캐시를 두어 100ms 감시 1틱당 실제 읽기 1회로 제한했다.
- IsPlcDoorOpen(): _Plc 지연 조회 보완. 기존에는 AlarmManager 생성 시점에 PLC
  등록이 안 끝났으면 _Plc 가 null 로 남아 영구히 false 를 반환 → Door 인터락이
  조용히 무력화될 수 있었다.
- PLC/IO 미연결 계통은 판정에서 제외(의도적 fail-open). Door 맵이 없는 타 설비가
  이 변경으로 갑자기 출사 불가가 되는 것을 막기 위함. PTOP 는 둘 다 연결되어 있다.

[WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs]
- PerformCmdLaserShotOnPercent / ...OnWatt 진입부에 Door 게이트 추가
  -> 시퀀스 분기와 직접 출사 분기를 모두 커버한다.
- OnMonitoring(100ms)에 MonitorDoorInterlock() 추가: 출사 중 Door 가 열리면
  StopExecution + LaserSignalOff + SetStandby 로 강제 차단한다. 시작 게이트만으로는
  롱텀 도중 문이 열리는 이번 사고 상황을 막을 수 없어 추가했다.
- VisibleChanged: 직접 출사 중에는 화면을 벗어나도 감시 타이머를 유지한다.
  기존처럼 Stop 하면 롱텀 출사 중 Door 감시가 통째로 사라진다.
- 롱텀 추적용 10초 주기 하트비트 로그(Door 상태 + DA1/DA2 전압) 추가.

[ILSOS_PrismaticRD_PTOP/Sequences/Manual/SeqComponentTeachingRun.cs]
- CheckCondition_Interlock(): 주석 처리돼 있던 Door 차단을 IsDoorOpen() 으로 복구.
- DoComponentWelding(): ExecuteList 직전 최종 게이트 추가. 시작 게이트는 시퀀스
  진입 시 1회만 돌아, 객체가 여러 개일 때 매 출사 직전 재확인이 필요하다.

## 영향 범위
- SeqAutoRunPTOP 은 자체 ExecuteWelding(SeqAutoRunPTOP.cs:1314)을 사용하며
  SeqComponentTeachingRun 을 서브시퀀스로 타지 않는다 -> Auto 생산 동작 변경 없음.
- WeldingCommon 공용 파일을 수정했으나, Door 맵이 없는 설비는 fail-open 으로
  기존 동작이 유지된다.

## 남은 사항 (별건)
- 본 변경은 SW 방어이지 안전 인터락이 아니다. Door 감시가 UI 스레드
  DispatcherTimer 기반이라 UI 정지 시 함께 멈춘다. Class 4 레이저 기준 최종
  차단은 PLC/하드와이어 안전회로로 별도 협의가 필요하다.
- SeqComponentTeachingRun 의 EMO 차단(IsPlcEmoAlarm)도 함께 주석 처리되어 있다.
  이번 범위에서 제외했으며, PLC_EMO_STATUS 맵 확인 후 복구 여부를 결정한다.
- UCMainAutoRunViewModel.ApproveAutorunByUserOrAuto() 전체가 블록 주석
  (399~431행)이다. Auto 시작 게이트 복구는 Vision Recipe 검사까지 함께 살아나므로
  별건으로 검토한다.
2026-09-02 22:34:17 +09:00
18ca9bc3f4 feat: CheckPageNo 핸드셰이크 진단계측 (ISSUE-260826-01)
본접 레시피(23/24)에서 page 5 완료 후 page 6 으로 진행되지 않는 건의 원인 구간을
좁히기 위해 CheckPageNo 대기 중 PLC/PC 신호 전체 스냅샷을 기록한다.
2026-08-26 현장 재현으로 원인 확정 완료.

진단계측 (마커 [진단계측 2026-08-26], region 삭제로 원복):
- CheckPageNo 대기 진입 시 스냅샷 1회
- 1초 주기 변화 감지 (값이 바뀔 때만 기록 -> 정상 통과 구간은 1~2줄, 로그 폭주 없음)
- 기존 60초 TIMEOUT 로그에 누적 대기시간 + 스냅샷 추가
- REQ 수신 순간 확정값 (성공 케이스 기준선)
- 기록: PLC 입력 9종(REQ/PAGE/RECIPE/AUTO/AUTO_REQ/M70515/TRIG_REQ/CMP_ACK/D70510)
        + PC 출력 되읽기 7종. 읽기 실패는 E 로 표기해 "0 인지 못 읽은 건지" 구분
- REQ 폴링은 10ms 유지, 스냅샷만 1초 주기(MC 개별읽기 16회라 주기 단축 금지)

계측 결과 (상세 문서는 로컬 전용 — docs/ 는 .gitignore 추적 제외):
  docs/분석/2026/08/26/Page5_Page6_REQ_미발행_PLC문의_260826.md
- page5->6 진입 시 PC 출력이 가접/본접 비트 단위로 완전 동일한데 PLC 반응만 다름
  가접 21/22: 2.39s / 2.41s 후 REQ:1 -> page6 진행
  본접 23   : 76.6s 동안 REQ:0 / PAGE:5 / AUTO:1 무변화 -> 이동 스텝 미진입
- PC_WELD_COMPLETE 는 전환 조건이 아님이 증명됨(전 구간 0 인데 가접은 정상 진행)
- 에코 워드 0/0 에서도 REQ 발행됨 -> "PC 에코 == PLC 워드" 조건 아님 (260820 문항 c 종결)
- REQ 가 페이지 워드보다 약 200ms 먼저 올라옴(성공 케이스 포함) -> PLC 에 순서 교정 요청

PLC 제어팀 전달 완료, 회신 대기 중.
2026-08-27 09:27:25 +09:00
5be34e612e feat: 본 레이저 단일 발진기 전환 - IO 채널 재정의 및 enum 단일화
레이저 발진기 교체(임시 Core/Ring 2대 -> 본 레이저 Max MFMC-2000/2000M 1대)에
따른 IO 재정의. 현장 적용 후 정상 동작 확인.

- ePrismaticDIAddress / ePrismaticDOAddress 를 본 레이저 38핀 커넥터 매뉴얼 기준으로
  재정의. 상태 신호 8개 -> 4개. 도면(엑셀) 라벨 오기도 함께 정정
  (Laser_FIRE -> Laser_MAIN_PWR_STATE)
- PAIX_PTOP / SeqAutoRunPTOP 의 중복 enum 정의 제거.
  WeldingCommon 의 PAIX_PrismaticScanner 를 IO 채널 번호의 단일 소스로 통일
- 발진 게이트를 Core/Ring_Control 2발 -> Laser_REMOTE 1발로 변경
  (ExecuteWelding ON/OFF, 정지 시 해제)
- DO 8 충돌 제거: Auto 시작 시 PCLBADReadyStatus(=8) write 삭제.
  본 레이저 배선에서 DO 8 = Laser_AC_KEY 라 그대로 두면 Auto 시작이
  레이저 AC KEY 릴레이를 켠다. LBAD 는 미등록 디바이스라 무의미
- GetLaserReady() 를 Laser_READY 단독 판정으로 변경
- 가이드빔 DO 를 EX_Red_Control -> Laser_GUIDE_BEAM_CONTROL 로 전환
- IO Board 에 설정 화면(UCIOInterfaceView) 연결
- IsLaserReady 표시를 DO Laser_REMOTE 되읽기로 확정 (260826 협의, 현장 미검증)

원복: 각 파일의 "260824 이전 원본" region 을 살리고 아래 블록을 제거하면 된다.
2026-08-26 11:45:40 +09:00
c054439c19 feat: Recipe 작업 화면 상단에 PLC 지시 Recipe/Page 표시
bit15(M70515) 팝업은 상승엣지 1회라 닫으면 값이 사라져, 현장에서 작업자가
레시피/페이지를 잊는 문제가 있었다. 팝업과 같은 기준·같은 워드를 화면 상단
전폭 띠로 ON 구간 내내 표시한다(Collapsed 시 높이 0이라 평소 화면 영향 없음).

공용(WeldingCommon)은 Status만 읽고 PTOP을 참조하지 않는다 —
값을 넣지 않는 타 설비는 분기문 없이 자동 미표시.
2026-08-21 00:06:30 +09:00
83018da4ac fix: 정지 시 PC_RECIPE_NO/PC_PAGE_NO 0 초기화 제거
PLC는 PC 에코 워드가 0이면 레이저 출사 신호를 내지 않는다(2026-08-20 PLC측 확정).
bit15 가접 운전은 페이지마다 정지하므로 OnSeqActionStop의 무조건 0 초기화가
페이지마다 0/0 창을 열었고, PC는 다음 PAGE_CHANGE_REQ를 받아야만 재에코한다.
0 초기화는 SeqStatusMonitor가 Auto OFF 시에만 담당하도록 일원화.
2026-08-21 00:06:29 +09:00
172a273b90 feat: Recipe/Page 재동기 노드 + Page 수렴 후 Recipe 최종 확인
- 260813: ResyncRecipePage 노드 추가. ResumeMode·시뮬·PLC 워드 무효 시
  재동기를 생략하고 CheckPageNo 의 REQ 대기로 넘긴다.
  재동기 상한 10초(RESYNC_TIMEOUT_SEC) 초과 시 수렴 미완으로 포기.
- 260818: CheckPageNoComp 를 outer while 로 감싸 Page 수렴 후 PLC 의
  Recipe/Page 를 다시 읽어 PC 확정값과 대조. 어긋나면 Recipe 부터
  재확정 후 Page 재수렴.
  260812 15:17:29 로그 대응 — Page 수렴 중 PLC 가 Page 를 6→2 로 바꾸며
  Recipe 도 함께 바꿨을 때 PC 가 옛 Recipe(22)를 에코한 채 남아
  PLC_WELD_TRIGGER_REQ 가 오지 않고 타임아웃만 반복되던 문제.

원복: 각 region 통째로 삭제 (260818 은 outer while 제거 후 들여쓰기 복원).
2026-08-19 11:59:36 +09:00
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
594c6ba24a fix: Page 에코 수렴 확인 전 PLC 업데이트 주기 대기 추가
CheckPageNoComp 에코 수렴 루프에서 PC_PAGE_NO 를 쓴 직후 되읽어 비교하면
PLC 데이터 업데이트 주기가 반영되기 전 값을 읽어 수렴 판정이 흔들릴 수 있다.
WriteWord 이후 되읽기 전에 200ms 대기를 넣는다.

대상: SeqAutoRunPTOP.cs CheckPageNoComp() "4. 되읽어 수렴 확인" 직전
2026-08-10 16:42:26 +09:00
c7f12b0bda feat: Recipe/Page 핸드셰이크 에코 수렴 루프 적용
PLC가 PC 에코 넘버(PC_PAGE_NO/PC_RECIPE_NO) 일치를 상시 확인하는 것으로 확정(260806)됨에 따라, PC 책임을 검증에서 '정확히 읽고 → 내부 상태 갱신 → 에코'로 전환.

- CheckRecipeNoComp/CheckPageNoComp를 수렴 루프로 재작성 (에코 후 되읽어 일치 확인, 어긋나면 재읽기, 맞는 즉시 다음 노드로)
- 에코 없이 return 하던 경로 제거 (RecipeNo=0/미등록 → 에코 안 하고 재시도)
- 범위 밖 PageNo: 3초 무한대기 → 200ms 재읽기, 에코 안 함
- Page 3회 수집(600ms)·Recipe 800ms 재폴링 제거 → 정상 흐름 지연 0
- while 탈출 후 context.Stopped 가드 추가
- ReadOutWord(eWordOutput) 헬퍼 추가 (ReadOutBit 패턴 준용)
- 시뮬레이션 가드: IsSimul이면 수렴 생략 (PLC 워드가 항상 0이라 못 빠져나감)

구버전은 #region 260806 으로 전량 주석 보존 — 원복 시 블록 교체.
분석: docs/분석/2026/08/06/
2026-08-06 11:41:58 +09:00
to3796zw
9c1daaee1d fix: Busy bit 위치 변경 및 Scanner Cam 팝업 모션 수정
- Laser On Display 타이밍을 맞추기 위해 PC_WELD_BUSY bit
  기록 위치 변경 (SeqAutoRunPTOP)
- 레시피 Scanner Cam 팝업(WDScannerCamMotion)을 직접 실행
  모드(publishMode:false)로 변경하고, 창 표시 시 모니터
  타이머/Limit 초기화를 호출해 모션 미동작·좌표 0 고정 해소
- 작업일지 2026-06-26 추가, Laser Interface 문서 갱신

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 15:02:21 +09:00
to3796zw
041c15550c feat: 레시피별 Front/Down 레이저 인터락 추가
Use Interlock ON 시 ① 안전구역 게이트(기존) 유지 + ② 레시피별 방향 차단(신규). Recipe 폴더의 Recipe_Laser_Interlock.json(Front/Down 0/1)에 저장하고, 경로는 FieldHelper.json과 동일 소스(DB.Dao.SystemRecipe.WorkRecipeFile) 사용. Auto/Manual 양쪽 적용(Manual은 ①+② 신규), VM 체크박스는 레시피 전환 시 Background 우선순위 재로드로 stale 방지.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 22:30:57 +09:00
to3796zw
2871db6e8f feat: 카메라 각도(D70510) 기반 Laser 발진 offset 분기
각도에 따라 발진 위치가 달라져, Front/Down angle 평균을 임계값으로
Front/Down offset을 자동 선택해 적용(자동·수동 발진 공통).

- LaserInterlock: Horizontal/Vertical → Front/Down angle 로 변경
- SystemParameter: CellCenterOffset X/Y → Front/Down offset X/Y (4개)
- LaserAngleOffsetSelector 헬퍼 신규 + 선택값 LOG
- PLC 미연결 시 Front offset fallback

주의: 설정 프로퍼티명 변경으로 기존 저장값 자동 이관 안 됨(재입력 필요)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 17:34:46 +09:00
to3796zw
90adf1d1f9 fix: Auto 발진에 셀 offset 적용 — 매뉴얼과 정합
Auto(SeqAutoRunPTOP)가 CellMeasureCenterOffset을 0으로 넘겨
매뉴얼(SeqComponentTeachingRun)과 발진 위치가 어긋남.
매뉴얼과 동일 수식(CellPosMeasureCenterOffset + CellCenterOffset)
으로 변경하여 자동/매뉴얼 발진 위치 정합.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 22:43:32 +09:00
to3796zw
020840e678 fix: Auto 발진 직전 보정테이블(1) 선택 — 매뉴얼과 위치 정합
Auto(SeqAutoRunPTOP.ExecuteWelding)가 발진 직전 보정테이블을 선택하지
않아 직전 상태로 발진 → 매뉴얼과 위치 어긋남. ExecuteList 직전
SelectCorrectionTable(1) 명시 추가(장비측 보정도 테이블 1 기준 정합).
2026-06-23 작업일지 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-23 09:17:07 +09:00
to3796zw
4f03a0a7ce feat: M70509 기반 용접 전/후 Scout 추가
M70509(Scout Enable) 상시 ON 시, 용접 트리거(M70516) 감지 후 pre scout,
발진 완료 후 완료비트 송신 전 post scout 수행(각각 SeqScoutNormal 재사용,
0.1초 후 진행). M70509 OFF면 기존과 동일하게 용접만.

- eBitInput 0x09: PLC_RECIPE_CHANGE_REQ(미사용) → PLC_SCOUT_ENABLE 재정의
- 용접 완료비트(ACK off/BUSY off/COMPLETE on)를 WriteWeldComplete 노드로
  분리해 post scout 뒤에 송신
- 이미지 파일명 접미어: {기존}_auto_{recipeNo}_{pageNo}_{pre|post}.PNG

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 16:04:12 +09:00
15e5f5ba27 docs: 매뉴얼 화면 도식 분석·가접 용어 정리·SW Version 진척 반영
- 산출물 23. SW 점검결과 xlsx: SW Version 작업이력 추가(핸드셰이크/bit15 Resume/RecipeNo 등),
  IO List bit15 신규(M70515 PLC_WELD_READY_REQ / M70015 PC_WELD_READY_ACK)·rename 반영
- architecture.md §8 용어 정리(가접 용접 = Tack Welding) 추가
- docs/분석 2026/06/22: AuroraUIComponent 재사용 UC·메인 View 도식 분석
- 기타 산출물 문서(DR 회의록·SOP·ILSOSConfig 등) 및 작업일지 포함
- SeqAutoRunPTOP.cs: 기존 로컬 변경 포함

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 12:04:38 +09:00
dd4f087e95 fix: 페이지 핸드셰이크 ACK 정정 + Auto OFF 시 에코워드 조건부 초기화
- CheckPageNoComp: PC_PAGE_NO 에코값과 현재 PLC_PAGE_NO 비교해
  일치 시 PC_PAGE_CHANGE_COMPLETE=true, 불일치 시 false (기존 무조건 false)
  → 동일 Recipe/Page 반복 시 완료 ACK 전달
- SeqStatusMonitor: PLC/PC Auto State OFF 에지 감시 →
  PC_RECIPE_NO/PC_PAGE_NO 0 초기화. 단 PC Auto OFF는
  M70515(Weld_01 Ready) 살아있으면 보존(Resume 시나리오)
- ExecuteWelding: 완료비트 송신 간 딜레이 5→50ms 여유 확보

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 00:55:27 +09:00
to3796zw
159eda2d4d fix: RecipeNo 재폴링 널가드 + PC_PAGE_NO 보존 + 새 Page 정상 처리
- CheckRecipeNoComp: 동일레시피 시 PLC_RECIPE_NO 재폴링(늦은 갱신 대응),
  recipe==null(0/미등록) 널 가드 추가, 에코는 활성 레시피 기준으로 null-safe 처리
- OnSeqActionStop: PC_ERROR_CODE 0 쓰기 삭제(WriteDWord가 인접 PC_PAGE_NO까지
  0으로 덮던 버그 해소) → 정지 시 에코워드 보존
- CheckInitCondition: ResumeMode 핸드셰이크 스킵 제거(옵션A) → bit15 후 PLC가
  주는 새 Recipe/Page를 정상 핸드셰이크로 처리. Resume 주석/로그도 정정
- 빌드 0오류

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 23:17:41 +09:00
to3796zw
e61e99f9ab feat: bit15 보강·양극 미사용 정리·로그 개편
- D70002(PC_RECIPE_NO): 동일 레시피여도 매 핸드셰이크 에코 유지
- 정지 시 에코워드(Page/Recipe No) 0 초기화 제거(보존)
- bit15 Manual 전환 시 레시피 활성화+로드, bit15 ON 중 AUTO_REQ 자동시작 무시
- [AutoRun Resume] PC bit15(0x0F) 1초 펄스 OFF
- 양극(P) 미사용: PC_AUTO_STATUS_P/양극 용접 핸드셰이크 제거, 용접 응답 음극 통일
- 공유 eCommon READY(0x0F) 제거(PTOP enum은 유지)
- SeqAutoRunPTOP 로그 설명형 개편(노드 Start/End 제거)
- 빌드 0오류. Recipe/Page 수정분은 현장 미적용(추후 검증 예정)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 20:15:43 +09:00
e28f915b44 fix: 현장 확정 PLC맵 정합 — bit15=Weld_01 Ready 명칭 정정 + 확정 DeviceMap
- bit15(0x0F): 임시명 MODE_CHANGE → 확정명 WELD_READY_REQ/ACK (Weld_01 Ready, Resume 트리거 겸용)
- 원래 Ready(0x10) → WELD_TRIGGER_REQ/ACK (용접 발진). 주소 불변=동작 동일, 명칭만 정정
- 양극 _P(0x73) 미러 제거(현장 단일블록), 공통 enum 동기화
- 수정: PTOP/공통 PLCController.Address.cs, SeqAutoRunPTOP/ComponentWeld/Prismatic/TestRun/WaitWeldOrChangePage, UCMainAutoRunViewModel
- 현장 확정 PLC DeviceMap CSV 4종 추가, 작업일지 갱신

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 17:23:41 +09:00
ff4fc03d2e feat: bit15(MODECHANGE) 팝업+Auto→Manual+Resume 구현 및 가접 레시피/문서 정리
- PLCController.Address.cs: bit15 입출력 정의 (PLC/PC_MODE_CHANGE 0x0F, 양극 _P 0x73)
- SeqAutoRunPTOP: ResumeMode 플래그, 정지 시 에코워드(PC_PAGE_NO/RECIPE_NO) 보존,
  CheckInitCondition Resume 핸드셰이크 스킵, CheckCycleStop bit15 OFF/해제
- UCMainAutoRun(VM/XAML): bit15 상승엣지 감지→팝업→Manual 전환, AutoRun Resume 버튼(bit15 ON시 표시)
- docs: bit15 resume 작업지시서/분석/예상시나리오, 가접 레시피 인터페이스(20~23), 작업일지, 산출물 갱신

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 13:17:55 +09:00
to3796zw
25edd79325 feat: Page Change bit로 Recipe+Page 전환 통합
PLC가 Page Change bit(0x08) 하나만 트리거로 보내면 Recipe No와
Page No를 함께 읽어 Recipe를 먼저 전환한 뒤 Page를 전환하도록 변경.
Recipe Change bit(0x09)는 트리거로 미사용(enum 정의는 보존).

- CheckRecipeNo Decision 제거, 흐름 재배선(CheckPageNo→Recipe→Page)
- Recipe No 1회 읽기, 0/음수/미등록/동일이면 전환 생략(정지 안 함)
- 실제 전환 시 ActivateRecipe 후 Dispatcher.Invoke(OnActiveReloaded)로
  Model.Layers 동기 갱신 + 페이지 검증/레이어 선택을 UI 스레드 직렬화
  (ActivateRecipe-Layers 비동기 race 차단)
- PC_RECIPE_CHANGE_COMPLETE 미사용 처리, PC_RECIPE_NO 에코는 유지

VS Rebuild(Debug|x64) EXITCODE=0 확인.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 00:04:35 +09:00
9330fb20ea revert: TeachingRun H알람 인터락 임시 우회 원복 (현장 PLC 연결 완료)
현장 PLC 미연결로 임시 주석 처리했던 CheckCondition_Interlock()의
High(중대) 알람 인터락 블록을 원복. 현장 PLC 연결 완료에 따라 정상 동작.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 18:48:39 +09:00
to3796zw
00cdd8ac9b fix: Axis Position Interlock 삭제, Theta 영어화
SequenceSetting의 Axis Position Interlock 속성 4개를 제거하고
(참조처 없음), LaserInterlock의 Head Theta DisplayName을 영어로
전환해 세팅 UI 표기를 정리. 빌드 검증 통과(오류 0).
2026-06-20 09:41:53 +09:00
to3796zw
0e73086b14 feat: 레이저 Head Theta 인터락 추가
발진(ExecuteWelding) 직전 PLC Head_Theta_Position(D70510)을 읽어
헤드 각도가 수평/수직 ±허용오차를 둘 다 벗어나면 알람 후 발진 차단.

- 세팅 메뉴 UI: 수평/수직/허용오차/PLC스케일 + 사용 체크박스
  (LaserInterlockSetting, 기본 미사용)
- fail-closed: PLC 미연결/미활성·스케일0 시 차단, 알람 호출 try/catch
- eWordInput.HEAD_THETA_POSITION(=D70510), 알람코드 210620 추가
- 런타임 설정(CSV 주소맵 D70510, AlarmDescriptions.xlsm 210620 행)은 별도 필요

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:04:05 +09:00
3b8799aa51 feat/docs: 가이드빔·알람·PLC(MXComponent) 분석 및 현장 임시 수정
- 분석 문서 4종 추가 (docs/분석/2026/06/19):
  알람부 종합 / MX Component PLC 연결 / AjinIO.ReadDoBit / 가이드빔 TruPulse(ExtPilotOnOff 미구현)
- AjinIO.ReadDoBit(int): 스텁(return true) 유지 + 구현(ReadDiBit 패턴) 주석 보존
- SeqComponentTeachingRun: 중알람 인터락 임시 주석 (현장 PLC 미연결 우회, 추후 원복)
- 레시피 Guide Beam: DO 17 read/write + IsConnected 가드 주석 (필요시 주석 토글 운용)
- 작업일지 2026-06-19 정리

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 12:49:08 +09:00
42c5565249 feat: PLC Recipe Change 핸드셰이크 구현 (SeqAutoRunPTOP) + 주소 정합
근거: 가이드 + Excel 260618(빨간셀 M70509/M70009/D70502/D70002). Page Change 미러링.
- 주소 enum: PLC_RECIPE_CHANGE_REQ(0x09)/PC_RECIPE_CHANGE_COMPLETE(0x09)/
  PLC_RECIPE_NO(idx2)/PC_RECIPE_NO(idx2). 공용 eCommonBitOutput 동기화.
  충돌: SeqStatusMonitor RMS_USED 읽기 주석, SeqAutoRunPrismatic 참조 이름만 교체.
- 시퀀스: CheckRecipeNo(논블로킹 Decision) + CheckRecipeNoComp(.Id 1:1 조회/활성화/
  반영폴링/에코·완료비트), Builder 흐름·엣지·루프백, 리셋 비트·워드, _RecipeManager Enter 확보.
- Page 검증 상한 하드코딩 제거 → 활성 Recipe Layers.Count() 가변.
- (별도) D:\ILSOSConfig\...\External\PLC CSV 디바이스맵 4종 라벨 정합(.bak260618 백업).

빌드는 VS Rebuild로 검증 필요(레거시 포함). STEP5 UI/PLC 사양 최종정합은 후속.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 15:31:43 +09:00
aa5928ce3e refactor: PTOP 네임스페이스/클래스 정리(Scanner→PTOP) 및 머신 PTOP 단독화
- namespace/using ILSOS_PrismaticScanner → ILSOS_PrismaticRD_PTOP (전 .cs/.xaml)
- 파일/클래스 리네임 7개: AlarmCode/AlarmManager/PAIX/EquipmentSpecificModel→_PTOP,
  RMSHandlerForScanner→ForPTOP, SettingUploadDataListForScanner→ForPTOP,
  SeqAutoRunPrismaticScanner→SeqAutoRunPrismatic, PLCControllerPrismaticScanner→PLCControllerPTOP
- PAIX_PrismaticScanner: 머신 참조만 PAIX_PTOP로 변경, WeldingCommon 공유 참조(SeqTestRun)는 보존
- XAML 3종(x:Class/clr-namespace/code-behind) 일치, csproj Compile Include 갱신
- csproj 빌드 경로 TDC→PTOP(_out_prismatic_rd_ptop)
- sln에서 Scanner/Gun/CleanLaser 제거 및 해당 머신 소스 삭제 → Machines에 PTOP만
- 분석/작업일지 문서 추가 (참고본: 정리후(빌드완) 기준)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 11:28:19 +09:00
0fcb32ae5a docs: 작업일지 06-18 요청사항 추가 및 PLC 인터페이스 폴더 정리
- 작업일지: 레이저 미발진 + Analog만 살려 Power Cal 파일 생성 가능 여부 요청 기록
- docs PLC 인터페이스 폴더 정리(구 _260617 폴더 → 신규 폴더로 이동)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 10:23:58 +09:00
d28e76c2fe file update 2026-06-05 13:44:39 +09:00