메뉴얼/레시피 화면에 DI Laser_EMISSION_ON(10) 기반 출사중 램프 추가. 260904 현장 실측으로 DI 10 이 DO 9 의 에코가 아닌 실제 발진 피드백임을 확증하여 LaserIOControl 주석도 정정. 출사조건 스냅샷은 [LaserCond] 로그로 4개 시점(ShotOn/Heartbeat/ShotOff/DoorForceOff)에 기록. 표시·기록 전용이며 출사 차단 로직은 변경 없음.
11 KiB
메뉴얼 화면 레이저 출사중 표시 및 출사조건 로그 (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. 배경
현장 요청 두 가지였다.
- 메뉴얼에서 레이저 출사 시 IO EMISSION 이 점등되니, 그걸 화면에도 표시해 달라.
- 출사가 안 되면 무엇이 체크되지 않았는지(도어락 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이라는 것이다.<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단 표시 설계가 현장에서 확증됐다.
절차
Manual > Scanner Operation진입 → 램프가OFF/IO 미연결중 무엇인지 확인- 레시피 화면에서
Laser Ready버튼 ON → 램프가출사 대기 (Remote ON)(주황) 으로 바뀌는지- 이때
DI:가OFF여야 정상.ON이면 DI 10 은 게이트 에코이며 3단 판정을 재검토해야 한다
- 이때
Laser On→ 램프가레이저 출사중(적색) 으로 바뀌는지Laser Off→ 램프 복귀 확인- 출사 중 문을 열어 강제 OFF 동작 + 램프 복귀 +
[LaserCond][DoorForceOff]로그 확인 - 로그에서
[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 주석 정정 |
노도연 |