그동안 미추적으로 쌓여 있던 인수인계 문서를 정리해 올린다. 260903 Door 인터락 현장검증 가이드 / 파워캘 3000W 오적용 환산 260907 Arc 출사 파라미터 시각화 / LaserFrequency 단위계통 / NRE 위험구간 점검 / 레시피화면 사용설명서 260915 레시피화면 작업매뉴얼 260916 PTOP 프로그램 사용설명서 / 자동운전 전환 사전점검 현장용 작업 중 임시본(_backup)은 제외했다.
282 lines
13 KiB
Markdown
282 lines
13 KiB
Markdown
# 파워캘 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 오적용 보정이었음을 교차검증 |
|