LGES-OC5-PtoP-Welder/Doc/인수인계/260903_파워캘_3000W오적용_레시피환산.md
NohDoyeon241104 a3238cc2d6 docs: 인수인계 산출물 일괄 커밋 (260903~260916)
그동안 미추적으로 쌓여 있던 인수인계 문서를 정리해 올린다.

260903 Door 인터락 현장검증 가이드 / 파워캘 3000W 오적용 환산

260907 Arc 출사 파라미터 시각화 / LaserFrequency 단위계통 / NRE 위험구간 점검 / 레시피화면 사용설명서

260915 레시피화면 작업매뉴얼

260916 PTOP 프로그램 사용설명서 / 자동운전 전환 사전점검 현장용

작업 중 임시본(_backup)은 제외했다.
2026-09-16 17:10:50 +09:00

282 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 파워캘 CSV 3000W 오적용 및 레시피 Power 환산 (2026-09-03)
> **목적** : 2000W 발진기에 3000W 기준 파워캘 CSV가 적용되어 있어 레시피 지령값의 2/3만
> 실제 출사되던 건의 원인·근거·환산값을 남긴다.
>
> - 대상 설비 : PtoP 각형화 단동 용접기 (유니셀)
> - 관련 문서 : `Doc/인수인계/2026_08_28_레이저발진기교체_및_진행현황.md` §2.4
> - 파라미터 원본 : `docs/파라미터PTOP_260903.xlsx` 시트 `260903`
**표기 규칙** (기존 인수인계 문서와 동일)
| 표기 | 의미 |
|---|---|
| 🟩 **소스확인** | PC 소스/설정 파일에서 직접 대조해 확인한 사실 |
| 🟦 **현장기록** | 현장 로그·시험 기록에 남아 있는 값 |
| 🟨 **미확보** | 아직 확인되지 않음. 이어받는 사람이 채워야 할 항목 |
---
## 1. 한 줄 요약
발진기는 **2000W/2000W (Core/Ring, 싱글모드)** 인데 파워캘 CSV가 **만점 3000W** 짜리로 물려 있어,
레시피에 적힌 W의 **2/3만 실제로 출사**되고 있었다. CSV를 2000W 기준으로 재작성했으므로
**레시피의 Power #1 / #2 를 × 2/3 으로 환산**해야 종전과 같은 실출력이 유지된다.
```
레시피 1500W → 지령 50% → DA 5.0V → 2000W × 50% = 1000W 출사
```
---
## 2. 원인 🟩
### 2.1 레시피 W 는 발진기로 그대로 가지 않는다
`SeqUploadWeldingList.cs:639-671` — 자동 용접 시 파워를 싣는 경로.
```
레시피 LaserPower1/2 (W)
→ CalibrateWattToPercent(W) ← 파워캘 CSV 조회
→ percentLaser1/2 (0~100)
→ WriteDA(DA1/DA2, percent) ← ×40.95 → 12bit DAC → 0~10V
→ 발진기 아날로그 입력 = 자기 정격의 그 %
```
**CSV의 만점이 곧 "설비가 믿고 있는 발진기 정격"** 이다.
`MaxCenterPower` / `MaxRingPower` 도 레이저 Config 가 아니라 **CSV 마지막 행**에서 읽는다
(`LaserPowerCalParam.cs:70-71`). 발진기를 바꿔도 CSV 를 안 바꾸면 소프트웨어는 옛 정격으로 계산한다.
### 2.2 실제로 참조되는 열
현장은 로그상 `Normal Models::` 분기(`TruFiberType` 미지정)를 탄다. 이 분기의 `CalibrateWattToPercent` 가
보는 열은 두 개뿐이다.
| 열 | 이름 | 용도 |
|---|---|---|
| 0 | Index (%) | **반환값 — 그대로 `WriteDA` 지령** |
| 1 | DesiredPower | 이 분기에선 미사용 |
| 2 | CalibratedPower | **조회 키 — 레시피 W 를 여기서 찾음** |
| 3 | volt | 이 분기에선 미사용 |
> `TruFiberType` 을 `TruFiberP` / `CalPercentToMeasuredVoltage` 로 바꾸면 3열(전압)을 쓰는
> 다른 분기로 넘어간다. CSV 를 새로 만들 때는 **어느 분기를 타는지부터 확인**할 것.
---
## 3. 근거
### 3.1 로그 실측 🟦
`Original Power → Calibrated Percent` 가 전부 정확히 `W ÷ 3000 × 100` 이다.
| 로그 | 지령 W | Calibrated % | 검산 |
|---|---|---|---|
| Aurora_20260825.log | 150 | 5.000 | 150/3000 |
| Aurora_20260826.log | 500 | 16.667 | 500/3000 |
| Aurora_20260826.log | 800 | 26.667 | 800/3000 |
| Aurora_20260826.log | 600 | 20.000 | 600/3000 |
| Aurora_20260826.log | 1100 | 36.667 | 1100/3000 |
Center · Ring 양쪽 모두 3000 으로 나뉘었다.
### 3.2 CSV 대조 🟩
| 파일 | 관계 | 성격 |
|---|---|---|
| `docs/3000W_CenterPower.csv` · `3000W_RingPower.csv` (구) | 파워 = **30 × Index** | 선형, 보정 없음 (CalibratedPower = DesiredPower) |
| `docs/2000W_CenterPower.csv` · `2000W_RingPower.csv` (신) | 파워 = **20 × Index** | 선형, 보정 없음 |
**양쪽 다 선형이므로 환산계수 `2000/3000 = 2/3` 는 근사가 아니라 정확값이다.**
`volt` 열이 Center/Ring 미세하게 다르지만(50% 에서 5.0 vs 4.8) `Normal Models` 분기는 이 열을 쓰지 않는다.
### 3.3 ⭐ 교차검증 — 「출력을 올려야 했다」의 정체 🟦
기존 인수인계 문서 §2.4 에 **발진기 교체 후 기존 출력으로는 접합이 되지 않아 출력을 올렸다**는 기록이 있다.
이번 건으로 계산해 보면 **실제 출사 파워는 거의 그대로였다.**
| 12_1page (CC Anode) | 레시피 값 | 당시 CSV | 실제 출사 | 결과 |
|---|---|---|---|---|
| 교체 전 (3000W 발진기) | 450 | 3000 (정상) | **450W** | 접합 O |
| 교체 직후 | 450 | 3000 (오적용) | **300W** | 접합 X |
| 탐색 | 500 / 550 | 3000 (오적용) | 333 / 367W | 접합 X |
| 최종 적용 | **650** | 3000 (오적용) | **433W** | 접합 O |
즉 **접합에 필요한 실출력은 계속 430~450W 였고**, 레시피 숫자를 450 → 650 으로 올린 것은
공정상 필요가 아니라 **CSV 오적용을 사람이 손으로 보정한 것**이었다.
× 2/3 환산으로 650 → **433** 이 되는데, 이는 교체 전 정상값 450 과 사실상 같은 실출력이다.
(싱글모드 전환으로 파워밀도가 높아져 약간 낮은 값에서 접합되는 것도 방향이 맞다.)
> 12_2page · 12_3page 는 Ramping 변경(50%→70%)과 싱글모드 효과가 섞여 있어 이만큼 깔끔하게 떨어지지 않는다.
---
## 4. 환산
### 4.1 규칙
```
새 레시피 W = 기존 레시피 W × 2/3
```
### 4.2 환산 대상 / 제외 🟩
| 항목 | 환산 | 이유 |
|---|---|---|
| **Power #1 (Core, W)** | **× 2/3** | 절대 W → 지령 % 로 변환되는 값 |
| **Power #2 (Ring, W)** | **× 2/3** | Ring 표도 만점 3000 선형이었음 |
| Ramping Start/End Power | 그대로 | **%** 단위. `percentLaser1 × RampingStartPower / 100` 이라 자동 추종 (`SeqUploadWeldingList.cs:1319-1323`) |
| Laser Duty | 그대로 | % |
| Draw/Jump speed, 각종 Delay | 그대로 | 파워 무관 |
| Frequency / Pulse Duration | 그대로 | 파워 무관 |
| Wobbel · Zigzag | 그대로 | 파워 무관 |
| Center/Ring 비율 | 자동 | 코드가 `round(100×P1/(P1+P2))` 로 매번 계산 |
| 레이저 프로그램 워드 IW03/IW04 | 자동 | Power #1/#2 에서 파생 (`SeqWaitWeldOrChangePage.cs:205-223`) |
### 4.3 환산표 — `파라미터PTOP_260903.xlsx` 시트 `260903` 기준 🟦
| 레시피 | No | Page | 항목 | 기존 (W) | 지령 % | **변경 (W)** |
|---|---|---|---|---|---|---|
| cc welding | 12 | 1 (직렬 음) | Power #1 | 650 | 21.67 | **433** |
| | | | Power #2 | 1050 | 35.00 | **700** |
| | | 2 (sensing) | Power #1 | 550 | 18.33 | **367** |
| | | | Power #2 | 1050 | 35.00 | **700** |
| | | 3 (직렬 양) | Power #1 | 600 | 20.00 | **400** |
| | | | Power #2 | 1200 | 40.00 | **800** |
| U-Frame_pre | 21 | 1~6 | Power #1 | 700 | 23.33 | **467** |
| | | | Power #2 | 900 | 30.00 | **600** |
| U-Frame_Back_pre | 22 | 1~6 | Power #1 | 700 | 23.33 | **467** |
| | | | Power #2 | 900 | 30.00 | **600** |
| U-Frame_Main | 23 | 1~6 | Power #1 | 700 | 23.33 | **467** |
| | | | Power #2 | 900 | 30.00 | **600** |
| U-Frame_Back_Main | 24 | 1~6 | Power #1 | 700 | 23.33 | **467** |
| | | | Power #2 | 900 | 30.00 | **600** |
| Top_Frame | 31 | 1~2 | Power #1 | 700 | 23.33 | **467** |
| | | | Power #2 | 900 | 30.00 | **600** |
| Top_Frame | 32 | 1~2 | Power #1 | 700 | 23.33 | **467** |
| | | | Power #2 | 900 | 30.00 | **600** |
고유값 7개 — `550→367, 600→400, 650→433, 700→467, 900→600, 1050→700, 1200→800`
### 4.4 검산
**지령 % 불변** — 환산 목적이 "기존에 실제로 나가던 파워 재현"이므로 지령 % 와 DA 전압은 변하지 않아야 한다.
```
기존 : 700W ÷ 30 = 23.33% → DA 2.33V → 2000W × 23.33% = 467W
신규 : 467W ÷ 20 = 23.35% → DA 2.33V → 2000W × 23.35% = 467W ✅
```
**Center/Ring 비율 유지** — 반올림 후에도 전부 동일하다.
| | 기존 | 신규 |
|---|---|---|
| cc 1page (650/1050) | 38 | 38 (433/700) |
| cc 2page (550/1050) | 34 | 34 (367/700) |
| cc 3page (600/1200) | 33 | 33 (400/800) |
| U-Frame · Top (700/900) | 44 | 44 (467/600) |
정수 반올림 오차는 최대 0.08 % (433 vs 433.33) 로 무시 가능하다.
---
## 5. ⚠ 주의
### 5.1 환산 전에 신 CSV 만 적용된 상태는 위험하다 🟩
| 기존 레시피 값 | 신 CSV 에서의 결과 |
|---|---|
| 2000 이하 | 의도의 **1.5배 과출력** |
| 2000 초과 | `CalibrateWattToPercent` 가 구간을 못 찾아 **0 반환 → 0V, 무출력** |
같은 레시피 안에서 과출력 라인과 무출력 라인이 섞인다. 환산은 한 번에 끝낼 것.
(환산 후에는 모든 값이 2000 이하가 되어 이 함정은 사라진다.)
### 5.2 지령 상한 클램프가 없다 🟩
`percentLaser1/2` 는 `WriteDA` 로 가기 전 **상한 검사를 받지 않는다** (`SeqUploadWeldingList.cs:665-671`).
램핑 구간만 `<= 100 ? … : 100` 으로 막혀 있다.
따라서 **열 구성이 어긋난 CSV**(예: 0열에 Index % 대신 W 가 들어간 파일)를 물리면
`WriteDA(600)` → `600 × 40.95 = 24570` → DAC 풀스케일 부근 → **정격 전출력**이 나간다.
CSV 를 교체할 때는 0열이 0~100 인지 반드시 확인할 것.
### 5.3 환산은 W 를 복원할 뿐, 용접 결과를 복원하지 않는다 🟦
듀얼모드(3000W/3000W) → **싱글모드(2000W/2000W)** 전환이라 빔 품질(BPP/M²)이 달라졌다.
같은 W 라도 집광 스팟이 작아 **파워밀도(W/mm²)가 훨씬 높다.**
| | 환산으로 해결 | 남는 것 |
|---|---|---|
| 실제 출사 W | ✅ 종전과 동일 복원 | — |
| 용입 깊이 | ❌ | 싱글모드라 더 깊음 |
| 비드 폭 | ❌ | 싱글모드라 더 좁음 |
현장 기록에도 싱글모드는 **"깊게 쏨 / 얇게 나옴"** 으로 적혀 있다.
환산값은 **재튜닝의 출발점**이지 최종값이 아니다. 실물 비드 기준 재검증이 필요하다.
---
## 6. 추적성 — 어떤 CSV 가 물렸는지 확인하는 방법 🟩
**소프트웨어는 적용된 CSV 의 경로도 값도 로그에 남기지 않는다.** 남는 것은 아래뿐이다.
| 방법 | 얻는 것 |
|---|---|
| `_config_setting/LaserPowerCalParam.json` | **현재** 물린 Center/Ring CSV 경로 (이력 없음, 덮어쓰기) |
| 로그 `AURORA_SYS_SETTING_CHANGED :: Param[LaserPowerCalParam]` | 설정을 **바꾼 시점** (경로는 안 나옴) |
| 로그 `Original Power1 : X … Calibrated Percent1 : Y` | **X ÷ Y × 100 = 그 시점 CSV 만점** ← 가장 확실한 역산 수단 |
| CSV 파일 수정일시 | 경로 그대로 두고 내용만 고친 경우의 유일한 단서 |
> 출사 시마다 `Initialize()` 가 CSV 를 다시 읽으므로(`UCScannerLaserControlViewModel.cs:332`, `:422`,
> `SeqUploadWeldingList.cs:154`), 앱 재기동 없이 파일 내용만 바꿔도 즉시 반영된다.
### 이력 확인 결과 🟦
| 로그 | `Param[LaserPowerCalParam]` 변경 |
|---|---|
| Aurora_20260825.log | 0 건 |
| Aurora_20260826.log | 0 건 |
| Aurora_20260902.log | **1 건 — 11:44:32 `From[USER_via_UI]`** |
2026-09-02 11:44:32 이 CSV 경로 교체 시점이고, 이어진 13:45~15:03 의 `Laser On` 58 회가
2000W 재캘리브레이션 작업이다.
---
## 7. 이어받는 사람에게
- 🟨 **발진기 교체 시에는 CSV 재작성과 레시피 W 환산을 반드시 한 세트로 처리할 것.**
둘 중 하나만 하면 이번과 같이 조용히 1.5배 또는 2/3 로 어긋난다.
- 🟨 파워 이상 신고가 오면 §6 의 `Original Power1 / Calibrated Percent1` 비로 CSV 만점부터 역산할 것.
- 🟨 §5.3 의 싱글모드 재검증은 **미완**이다. 환산 적용 후 비드 단면 확인 필요.
- 🟨 CSV 경로·값을 로그에 남기는 계측을 추가하면 이런 추적이 훨씬 쉬워진다.
출사 시작 로그(`UCScannerLaserControlViewModel.cs:361`, `:452`)에 CSV 경로 + Max 파워 +
산출된 `powerVolt1/2` 를 붙이는 것만으로 충분하다. **미적용.**
---
## 8. 참고 파일 위치
| 구분 | 경로 |
|---|---|
| 파라미터 원본 | `docs/파라미터PTOP_260903.xlsx` 시트 `260903`, 환산 이력 시트 `260903_2000W환산` |
| 구 파워캘 CSV | `docs/3000W_CenterPower.csv` · `docs/3000W_RingPower.csv` |
| 신 파워캘 CSV | `docs/2000W_CenterPower.csv` · `docs/2000W_RingPower.csv` |
| 현장 로그 | `docs/Aurora_20260825.log` · `20260826` · `20260902` |
| 파워캘 설정 클래스 | `WeldingComponents/WeldingCommon/Settings/LaserPowerCalParam.cs` |
| 자동 용접 파워 적용부 | `WeldingComponents/WeldingCommon/Sequences/Main/SeqUploadWeldingList.cs:639-671` |
| 수동 출사 파워 적용부 | `WeldingComponents/WeldingCommon/Views/Manual/Scanner/UCScannerLaserControlViewModel.cs:329-345`, `:419-436` |
| DA 전압 변환 | `AuroraDevices/AuroraLaserScanner/ScannerRTC5.cs:342-351` |
| 발진기 교체 경위 | `Doc/인수인계/2026_08_28_레이저발진기교체_및_진행현황.md` §2.4 |
---
## 변경 이력
| 일자 | 작성 | 내용 |
|---|---|---|
| 2026-09-03 | 노도연 | 최초 작성. 3000W CSV 오적용 원인·근거·환산표·주의사항 정리. 기존 인수인계 §2.4 「출력을 올려야 했다」가 CSV 오적용 보정이었음을 교차검증 |