메뉴얼/레시피 화면에 DI Laser_EMISSION_ON(10) 기반 출사중 램프 추가. 260904 현장 실측으로 DI 10 이 DO 9 의 에코가 아닌 실제 발진 피드백임을 확증하여 LaserIOControl 주석도 정정. 출사조건 스냅샷은 [LaserCond] 로그로 4개 시점(ShotOn/Heartbeat/ShotOff/DoorForceOff)에 기록. 표시·기록 전용이며 출사 차단 로직은 변경 없음.
230 lines
11 KiB
Markdown
230 lines
11 KiB
Markdown
# 메뉴얼 화면 레이저 출사중 표시 및 출사조건 로그 (2026-09-04)
|
|
|
|
> **목적** : 메뉴얼 조작 중 레이저가 실제로 출사되고 있는지 화면에서 즉시 알 수 있게 하고,
|
|
> 출사가 안 될 때 무엇이 걸렸는지 로그로 추적할 수 있게 한다.
|
|
>
|
|
> - 대상 설비 : PtoP 각형화 단동 용접기 (유니셀)
|
|
> - 이슈번호 : `ISSUE-260904-01`
|
|
> - 관련 문서 : `Doc/인수인계/260903_Door인터락_현장검증_가이드.html` (260902 Door 인터락)
|
|
|
|
**표기 규칙** (기존 인수인계 문서와 동일)
|
|
|
|
| 표기 | 의미 |
|
|
|---|---|
|
|
| 🟩 **소스확인** | PC 소스/설정 파일에서 직접 대조해 확인한 사실 |
|
|
| 🟦 **현장기록** | 현장 로그·시험 기록에 남아 있는 값 |
|
|
| 🟨 **미확보** | 아직 확인되지 않음. 이어받는 사람이 채워야 할 항목 |
|
|
|
|
---
|
|
|
|
## 1. 한 줄 요약
|
|
|
|
`Manual > Scanner Operation` 화면에 **레이저 출사중 램프**를 추가했다.
|
|
판정은 **DI `Laser_EMISSION_ON`(10)** 과 **DO `Laser_REMOTE`(9)** 두 신호를 함께 보고,
|
|
출사 조건 스냅샷은 화면이 아니라 **로그(`[LaserCond]`)** 로 남긴다.
|
|
|
|
> **출사 차단 로직은 한 줄도 바꾸지 않았다.** 표시·기록 전용이다.
|
|
> 차단은 260902 에 넣은 Door 인터락이 여전히 유일하다.
|
|
|
|
---
|
|
|
|
## 2. 배경
|
|
|
|
현장 요청 두 가지였다.
|
|
|
|
1. 메뉴얼에서 레이저 출사 시 IO EMISSION 이 점등되니, 그걸 화면에도 표시해 달라.
|
|
2. 출사가 안 되면 무엇이 체크되지 않았는지(도어락 OPEN, 알람 미해제 등) 알 수 있으면 좋겠다.
|
|
|
|
2번은 **화면에 체크리스트를 띄우지 않고 로그로만** 남기기로 확정했다(260904 협의).
|
|
현장에서 이미 돌고 있는 코드라 화면·동작 변경을 최소화하는 쪽을 택했다.
|
|
|
|
---
|
|
|
|
## 3. 판정 신호 두 개
|
|
|
|
| 신호 | 의미 | 근거 |
|
|
|---|---|---|
|
|
| DI `Laser_EMISSION_ON` = **10** | **실제 발진 피드백** | 🟦 260904 현장 실측 — 이 램프가 들어올 때 실제로 레이저가 출사 중이었다 |
|
|
| DO `Laser_REMOTE` = **9** | External Start = **Emission 게이트** | 🟩 레이저 38핀 매뉴얼. 🟦 260826 현장 검증 완료 |
|
|
|
|
### 3.1 코드 주석 정정 🟩
|
|
|
|
`LaserIOControl.cs` 의 DI 10 주석에 **"DO Laser_REMOTE(External Start) 의 에코"** 라고 적혀 있었으나
|
|
**오기**다. 260904 현장 실측으로 실제 발진 피드백임이 확인되어 주석을 정정했다(동작 무관, 주석만).
|
|
|
|
> 260826 에 레시피 화면 `Laser Ready` 표시를 DI 10 대신 DO 9 되읽기로 정한 판단은 **그대로 유효**하다.
|
|
> DI 10 은 출사 중에만 뜨는 신호라 애초에 Ready 램프로는 쓸 수 없다.
|
|
|
|
### 3.2 왜 두 신호를 같이 보나
|
|
|
|
DI 가 현장에서 어떻게 거동할지 확신이 없는 상태라, **이미 검증되어 돌고 있는 DO 9 표시를 빼지 않고**
|
|
새 DI 를 함께 얹었다. 램프 안에 `DI:ON / DO:ON` 을 같이 찍으므로 두 신호를 각각 대조할 수 있다.
|
|
|
|
---
|
|
|
|
## 4. 화면 표시 규칙
|
|
|
|
`Manual > Scanner Operation` 우측 **최상단** `Laser Emission` 그룹박스.
|
|
|
|
> **왜 최상단인가 (260904 현장 확인 후 이동)** 🟦
|
|
> 처음에는 패널 맨 아래(비어 있던 4번째 행)에 뒀는데 현장에서 **화면에 보이지 않았다.**
|
|
> 원인은 `UCScannerLaserControl.xaml` 의 컨버터가 `Collapsed` 가 아니라 **`Hidden`** 이라는 것이다.
|
|
>
|
|
> ```xml
|
|
> <view:BoolConverter x:Key="convTrueVisible" TrueValue="Visible" FalseValue="Hidden"/>
|
|
> ```
|
|
>
|
|
> `Marking On The Fly` 그룹이 이 컨버터를 쓰는데 PTOP 은 `IsUseMarkingOnTheFly = false`
|
|
> (`EquipmentSetup.cs:297` 에서 `false` 주입) 라 **안 보이면서도 높이는 그대로 점유**한다.
|
|
> 그 아래 행은 패널 밖으로 밀려난다. → 램프를 0행으로 올려 다른 행 상태와 무관하게 항상 보이도록 했다.
|
|
|
|
| DI 10 | DO 9 | 표시 문구 | 색 |
|
|
|---|---|---|---|
|
|
| ON | — | `레이저 출사중` | 적색 `#C62828` |
|
|
| OFF | ON | `출사 대기 (Remote ON)` | 주황 `#EF6C00` |
|
|
| OFF | OFF | `OFF` | 회색 `#3E3E42` |
|
|
| \- | \- | `IO 미연결` / `IO 읽기 실패` | 어두운 회색 `#2A2A2E` |
|
|
|
|
단순 OR 로 "출사중"만 쓰면 레시피 화면에서 `Laser Ready` 버튼만 켜 둔 상태에서도 출사중으로
|
|
보이기 때문에 문구를 3단으로 나눴다.
|
|
|
|
**갱신 주기 200ms.** 기존 100ms `DispatcherTimer`(`OnMonitoring`)에 얹었고 2틱마다 읽는다.
|
|
PAIX·Ajin 드라이버 모두 비트 1개를 읽을 때마다 DI(DO) 배열 전체를 조회하므로 매 틱 읽지 않는다.
|
|
|
|
> ⚠️ **화면을 벗어나면 타이머가 멈춘다.** 단, 직접 출사(`No Use Spot Time`) 중에는 260902 조치로
|
|
> 타이머가 유지된다. 롱텀 출사 중에는 화면을 벗어나지 말 것.
|
|
|
|
---
|
|
|
|
## 5. 출사조건 로그
|
|
|
|
### 5.1 형식
|
|
|
|
```
|
|
[LaserCond][ShotOn(Percent)] Door=CLOSE(PLC=False,IO=False) EMO=False Alarm=없음
|
|
DI8_READY=T DI9_ALARM=정상 DO9_REMOTE=T NoLaser=False SpotTime=True Busy=False
|
|
Model=U-Frame SeqTeaching=Idle
|
|
```
|
|
|
|
| 필드 | 의미 | 비고 |
|
|
|---|---|---|
|
|
| `Door` | PLC 비트 OR IO DI 4점 | 괄호 안이 계통별 값 |
|
|
| `EMO` | PLC EMO 비트 | |
|
|
| `Alarm` | 현재 발생 알람 코드 | **표시 전용 — 출사를 막지 않는다** |
|
|
| `DI8_READY` | 레이저 Ready (전원 ON & No error) | 전원만 들어오면 상시 T |
|
|
| `DI9_ALARM` | 레이저 알람 | **Active-Low** — `정상`/`알람` 으로 변환해 기록 |
|
|
| `DO9_REMOTE` | Emission 게이트 | F 면 출사 자체가 불가 |
|
|
| `NoLaser` | `No Laser (전압만)` 토글 | **T 면 발진신호를 생략** — 출사 안 되는 흔한 원인 |
|
|
| `SpotTime` | `Use Spot Time` 토글 | 아래 5.3 참고 |
|
|
| `Busy` / `Model` / `SeqTeaching` | 스캐너·모델·시퀀스 상태 | |
|
|
|
|
### 5.2 찍히는 시점
|
|
|
|
| 태그 | 시점 |
|
|
|---|---|
|
|
| `ShotOn(Percent)` / `ShotOn(Watt)` | Laser On 버튼을 누른 즉시 (**Door 차단 여부와 무관하게 먼저**) |
|
|
| `Heartbeat` | 직접 출사 중 10초 주기 (기존 Door 하트비트에 편승) |
|
|
| `ShotOff` | Laser Off 실행 후 |
|
|
| `DoorForceOff` | Door Open 감지로 강제 OFF 한 직후 |
|
|
|
|
`DoorForceOff` 로그의 `DI8/DI9/DO9` 값으로 **강제 OFF 가 실제로 먹었는지**를 신호로 증명할 수 있다.
|
|
|
|
### 5.3 알아둘 것 — 출사 경로가 두 개다 🟩
|
|
|
|
Laser On 버튼은 `Use Spot Time` 토글에 따라 완전히 다른 코드로 갈린다.
|
|
|
|
| | Use Spot Time (ON) | **No Use Spot Time (OFF) = 직접 출사** |
|
|
|---|---|---|
|
|
| 방식 | `SeqTeachingRun` 시퀀스 경유 | `LaserSignalOn()` 직타 |
|
|
| 자동 OFF | 있음 | **없음. Shot Off 누를 때까지 계속 출사** |
|
|
| 사전 검사 | Scanner Busy / Laser Ready / 시퀀스 중복 / Model 선택 | **Door 게이트가 유일** |
|
|
|
|
파워측정·파워캘·롱텀은 전부 오른쪽이다. 260902 사고가 여기서 났다.
|
|
|
|
---
|
|
|
|
## 6. 아직 확인되지 않은 것 🟨
|
|
|
|
| 항목 | 내용 |
|
|
|---|---|
|
|
| 적색(`레이저 출사중`) 표시 | 🟨 **아직 미확인.** 회색·주황은 확인됨(아래 §7 참고) |
|
|
| Door 인터락 극성 | 260902 조치의 DI/PLC 비트 극성이 **실장비 미검증**. 이 로그의 `Door=...(PLC=,IO=)` 로 검증 가능 |
|
|
| `_Laser.GetLaserReady()` | `Laser.json` 이 `IsSimul:true` 라 현장에서 항상 true 로 알려져 있음. `Use Spot Time` 경로의 Ready 검사가 실질 무력일 가능성 |
|
|
|
|
---
|
|
|
|
## 7. 현장 검증 절차 및 결과
|
|
|
|
### 검증 결과 (2026-09-04) 🟦
|
|
|
|
| 단계 | 결과 |
|
|
|---|---|
|
|
| `OFF`(회색) | ✅ 확인 |
|
|
| `출사 대기 (Remote ON)`(주황) | ✅ 확인 |
|
|
| `레이저 출사중`(적색) | 🟨 미확인 |
|
|
| Door 강제 OFF 연동 | 🟨 미확인 |
|
|
|
|
> **주황 확인의 의미** — `Laser Ready`(DO 9) 만 ON 인 상태에서 램프가 주황(`DI:OFF / DO:ON`)이라는 것은
|
|
> **DI 10 이 DO 9 의 에코가 아님**을 뜻한다. 에코였다면 그 즉시 적색으로 갔어야 한다.
|
|
> §3.1 의 주석 오기 판정과 3단 표시 설계가 현장에서 확증됐다.
|
|
|
|
### 절차
|
|
|
|
1. `Manual > Scanner Operation` 진입 → 램프가 `OFF` / `IO 미연결` 중 무엇인지 확인
|
|
2. 레시피 화면에서 `Laser Ready` 버튼 ON → 램프가 **`출사 대기 (Remote ON)`(주황)** 으로 바뀌는지
|
|
- 이때 `DI:` 가 `OFF` 여야 정상. `ON` 이면 DI 10 은 게이트 에코이며 3단 판정을 재검토해야 한다
|
|
3. `Laser On` → 램프가 **`레이저 출사중`(적색)** 으로 바뀌는지
|
|
4. `Laser Off` → 램프 복귀 확인
|
|
5. 출사 중 문을 열어 강제 OFF 동작 + 램프 복귀 + `[LaserCond][DoorForceOff]` 로그 확인
|
|
6. 로그에서 `[LaserCond]` 로 검색해 위 4개 태그가 모두 남는지 확인
|
|
|
|
---
|
|
|
|
## 8. 변경 파일
|
|
|
|
| 파일 | 변경 |
|
|
|---|---|
|
|
| `Views/Manual/Scanner/UCScannerLaserControl.xaml` | `Laser Emission` 그룹박스 신설 (**0행 = 최상단**). 기존 그룹박스 3개는 `Grid.Row` 번호만 +1 |
|
|
| `Views/Manual/Scanner/UCScannerLaserControlViewModel.cs` | 램프 프로퍼티 3개, `RefreshEmissionIndicator()`, `LogLaserCondition()` 추가 및 호출 5곳 |
|
|
| `Views/Recipes/UCScannerObjectTeachingControlBox.xaml` | `Laser Control` 그룹박스에 4행 추가 — 출사중 박스 1개 |
|
|
| `Views/Recipes/UCScannerObjectTeachingControlBoxViewModel.cs` | `EmissionText`/`EmissionColor` + `SetEmission()`, 기존 `OnMonitoring` 3개 분기에 반영 |
|
|
| `Devices/Laser/LaserIOControl.cs` | DI 10 주석 정정 (동작 무관) |
|
|
|
|
전부 `WeldingComponents/WeldingCommon/` 하위다.
|
|
|
|
### 8.1 레시피 화면은 2단이다
|
|
|
|
`Recipe > Scanner Object Teaching` 의 `Laser Control` 그룹박스, `Laser Ready` 버튼 아래.
|
|
|
|
| DI 10 | 표시 | 색 |
|
|
|---|---|---|
|
|
| ON | `레이저 출사중` | 적색 `#C62828` |
|
|
| OFF | `출사 없음` | 회색 `#3E3E42` |
|
|
| \- | `IO 미연결` | 어두운 회색 `#2A2A2E` |
|
|
|
|
메뉴얼 화면의 주황(`출사 대기`) 단계가 없는 이유는, 이 화면에는 바로 위에 **`Laser Ready Status` 박스가
|
|
이미 DO 9 를 초록으로 보여주고 있어** 중복이기 때문이다. 여기서는 출사중 여부만 본다.
|
|
색 의미는 메뉴얼 화면과 동일하게 맞췄다 — 같은 신호가 화면마다 다른 색이면 위험하다.
|
|
|
|
신규 파일 없음 → **`.csproj` 수정 불필요.**
|
|
전부 `[출사 표시 2026-09-04]` 마커가 붙어 있어 원복 시 검색으로 찾을 수 있다.
|
|
|
|
---
|
|
|
|
## 9. 하지 않은 것 (의도적 범위 밖)
|
|
|
|
- **알람 미해제 시 출사 차단** — 표시·기록만 한다. 현재 메뉴얼 출사 경로에는 알람 검사가 전혀 없으며,
|
|
차단을 넣으면 상시 알람이 떠 있을 때 파워캘·롱텀 작업이 막힐 수 있어 협의 후 진행하기로 했다.
|
|
- **직접 출사 분기에 Laser Ready / Busy 게이트 추가**
|
|
- **EMO 차단 추가**
|
|
- `OnMonitoring` 의 기존 결함 — 스캐너 미활성 시 `_MonitorTimer.Stop()` 후 `return` 이 없어
|
|
바로 아래 `GetEncoder()` 를 호출한다. 이번 건과 무관해 손대지 않았다.
|
|
|
|
---
|
|
|
|
## 변경 이력
|
|
|
|
| 일자 | 내용 | 작성 |
|
|
|---|---|---|
|
|
| 2026-09-04 | 최초 작성. 출사중 램프 + `[LaserCond]` 로그 추가, DI 10 주석 정정 | 노도연 |
|