101 lines
7.1 KiB
Markdown
101 lines
7.1 KiB
Markdown
# 작업일지 — 2026-07-31
|
||
|
||
## 21:00
|
||
|
||
### 샘플 1개 전체 AUTORUN (CC&센싱 + UF 장변 PRE + UF 장변 본접 + UF 단변)
|
||
|
||
- CC&센싱 + UF 장변 PRE + UF 장변 본접 + UF 단변 샘플 한 개 돌려보기 (전체 AUTORUN)
|
||
- CC 용접 OK, **UF 장변 PRE 출사 중 드로잉과 출사 위치 매칭이 안되는 이슈 발생**
|
||
- → 캘판 확인 결과 문제 없음 확인
|
||
- → front 위치 값 변경해서 확인 중
|
||
- → source 상 확인 중 front일 때 ct5이 적용된 상태로 쏴지는 지 확인 중 (pm9시)
|
||
|
||
---
|
||
|
||
### [결과] front일 때도 ct5는 적용된 상태로 출사됨 — "ct5 미적용"은 아님
|
||
|
||
> **소스 수정 없음. 분석만 기록.**
|
||
|
||
#### 1. ct5(보정테이블) 적용 여부 — Auto / Manual 모두 정상
|
||
|
||
| 경로 | 테이블 2(레이저 ct5) 선택 | 출사 | 테이블 1(Vision) 원복 |
|
||
|---|---|---|---|
|
||
| Auto | `SeqAutoRunPTOP.cs:796` (Laser Gate ON 직전) | `ExecuteList` | `:853` / `:993` / `:1237` |
|
||
| Manual | `SeqComponentTeachingRun.cs:301` (`InitializeDeviceStatus`, 진입 시) | `:616` `ExecuteList` | `:688` (`EndWelding`) |
|
||
| Manual(공통) | `SeqTeachingRun.cs:222` | `:362` `ExecuteList` | `:389` |
|
||
|
||
- 티칭런은 원복이 **루프 밖 `EndWelding`** 에 있어, 분할 객체 그룹을 몇 번 반복 출사하든 **전 구간이 테이블 2 상태**로 실행됨.
|
||
로그의 `Change SelectCorrectionTable Time` 이 run 당 1회만 찍히는 것과 일치(19:36 run = offset 로그 2회/원복 로그 1회).
|
||
- RTC 는 보정을 **리스트 실행 시점**에 적용하므로, Auto 가 업로드 뒤에 테이블을 고르는 순서 차이는 동작에 영향 없음.
|
||
- `SeqUploadWeldingList.cs` 자체는 `SelectCorrectionTable` 을 호출하지 않음(테이블 선택은 호출측 시퀀스 담당).
|
||
|
||
#### 2. Front offset 적용 여부 — 외곽 포함 전 객체 정상 반영
|
||
|
||
- `LaserAngleOffsetSelector.cs:26~36` — `D70510=89.0deg` < `avg 135` (Front=90/Down=180) → **Front 판정**,
|
||
`SystemParameter.FrontOffsetX/Y` 를 `SeqUploadWeldingList_InitParam.CellMeasureCenterOffsetX/Y` 로 전달.
|
||
- `SeqUploadWeldingList.cs:288~289` → `_ExternalCommandOffset` → 각 `Load*ScannerParam()` 의 `xOffset/yOffset`.
|
||
- 절대좌표 명령 **전수 확인 결과 누락 없음** — `JumpAbs / MarkAbs / ArcAbs / ParaJumpAbs / ParaMarkAbs` 60여 개 호출 전부
|
||
`+xOffset, +yOffset` 적용. Line·Dot·Spline·SnowMan·**Arc(외곽선+해칭)**·Arc3Point·ZigZag·Group 모두 해당.
|
||
- ⚠ **로그 함정**: `[Line Weld] Jump (x,y)` / `[Arc Weld] Arc center (...)` 는 **offset 적용 前 원본 좌표**를 찍음
|
||
(`:877`, `:1224`, `:1379`). 로그만 보면 offset 미적용처럼 보이나 실제 `JumpAbs()` 인자에는 들어감.
|
||
- 설정 변경은 **재기동 없이 다음 발진에 즉시 반영됨** — 오늘 로그 전체가 동일 프로세스(PID 4984)인데
|
||
FrontOffset 이 18:24 `(0.25, 0.11)` → 19:36 `(1.05, -0.1)` 로 바뀐 채 기록됨.
|
||
|
||
#### 3. 진짜 문제 — ct5 는 Front/Down 구분이 없음
|
||
|
||
- 스캐너 초기화 시 **테이블 2개만** 로드 (`ScannerRTC5.cs:65~80`, `ScannerRTC6.cs:69~84`)
|
||
- 테이블 1 = `Config.CorrectionFile` (Vision)
|
||
- 테이블 2 = `Config.LaserCorrectionFile` (Laser, 발진용)
|
||
- 즉 **수직(Down) 자세에서 취득한 ct5 를 Front 자세에도 그대로 사용**하고,
|
||
자세 차이는 `Front Offset X/Y` **상수 평행이동 하나로만** 보정 중.
|
||
- 좌표 자유도가 평행이동뿐임을 파이프라인 전체에서 확인:
|
||
- `Scanner.cs:314/418` — `JumpAbs/MarkAbs` 는 좌표를 그대로 통과시키는 래퍼(변환 없음)
|
||
- `ScannerConfig.cs` — 회전각·비등방 배율 필드 자체가 없음. `ScaleXYFactor:41` 는 전역 bits/mm 단일값
|
||
- 유일한 per-pose 변환 = `SeqUploadWeldingList` 의 offset 덧셈
|
||
|
||
→ **드로잉-출사 불일치의 원인은 "ct5 미적용"이 아니라, Down 자세 ct5 를 Front 자세에 그대로 쓰는 데 따른
|
||
배율/회전/키스톤 잔차로 추정.** 상수 offset 은 필드 전체를 동일하게 평행이동시키므로
|
||
원점 근처는 맞고 외곽으로 갈수록 벌어지는 현상을 보정할 수 없음.
|
||
|
||
#### 4. "사분면별로 offset 부호를 다르게" 검토 → 채택 불가
|
||
|
||
- 사분면마다 상수 offset 부호를 바꾸면 **축 경계에서 불연속** 발생. 원점을 가로지르는 장변/원호가 축에서 끊김.
|
||
스캐너 왜곡은 연속 함수라 계단형 보정 대상이 아님.
|
||
- 다만 "사분면마다 부호가 다르게 보인다"는 관찰은 **배율(스케일) 오차의 지문**이 맞음 —
|
||
`err = (k−1)·(x, y)` 이면 원점 0, Q1(+,+) Q2(−,+) Q3(−,−) Q4(+,−) 로 자동으로 부호가 갈림.
|
||
자유도는 4개가 아니라 **1개(배율)**.
|
||
- 유사 후보: 비등방 배율(kx≠ky), 회전(오차가 접선 방향), **키스톤** — Front 는 헤드가 기울어 있어 키스톤이 유력.
|
||
- 업로드단(`SeqUploadWeldingList`)에 배율을 넣는 방식도 불가:
|
||
`ArcAbs(cx, cy, sweep)` 은 중심점+쓸림각만 주는 명령이라 중심만 스케일하면 반지름이 어긋나고,
|
||
비등방이면 원이 타원이 되어 **`ArcAbs` 로 표현 자체가 불가** → 원호 전부를 직선 분할해야 하고
|
||
Spline·ZigZag·Wobbel 까지 연쇄 영향. **배율/회전/키스톤은 ct5 가 담당할 영역.**
|
||
|
||
---
|
||
|
||
### 다음 확인 (현장) — 지금 하는 front 값 튜닝이 곧 판별 시험
|
||
|
||
UF 장변이 판별에 적합. 19:36 로그 기준 라인 스팬 Y ≈ **+70.7 → −59.9 (약 130mm)** 로 오차가 증폭되어 보임.
|
||
|
||
1. FrontOffset 조정해서 **장변 한쪽 끝**을 드로잉과 일치시킴
|
||
2. 그 상태로 **반대쪽 끝** 확인
|
||
|
||
| 결과 | 판정 | 조치 |
|
||
|---|---|---|
|
||
| 반대쪽도 같이 맞음 | 순수 평행이동 | **파라미터 튜닝으로 종결** (코드/빌드 불필요) |
|
||
| 한쪽 맞추면 반대쪽이 그만큼 벌어짐 | 배율/키스톤 | **Front 전용 ct5 필요** (`k−1 = δ / 130mm` 로 배율 오차 산출) |
|
||
|
||
(정밀 판별이 필요하면 원점 + 축상 ±X/±Y + 4모서리 = 9점 마킹으로 평행이동/배율/회전/키스톤 성분 분해)
|
||
|
||
### 후속 작업
|
||
|
||
- [ ] 위 1·2 시험으로 오차 성분 확정 (평행이동 vs 배율/키스톤)
|
||
- [ ] (배율/키스톤일 경우) **Front 자세 전용 ct5 취득 후 테이블 3에 로드**, 각도 판정으로 2/3 분기
|
||
- `ScannerConfig` 에 `LaserCorrectionFileFront` 추가
|
||
- `ScannerRTC5.cs:76` / `ScannerRTC6.cs:76` 에 `LoadCorrectionFile(..., 3, ...)` 추가
|
||
- `SeqAutoRunPTOP.cs:796`, `SeqComponentTeachingRun.cs:301` 의 `SelectCorrectionTable(2)` 를
|
||
`LaserAngleOffsetSelector` 와 **동일한 각도 판정**으로 2/3 분기
|
||
- [ ] `SeqUploadWeldingList` 의 Jump/Arc 로그에 **offset 적용 後 좌표 병기** (현재 로그로는 반영 여부 판별 불가)
|
||
- [ ] (선택) Auto 의 `SelectCorrectionTable(2)` 를 Manual 과 동일하게 업로드 前으로 이동 — 순서 통일
|
||
- [ ] (선택) 티칭런 `OnStopped():757` / `OnForceError():733` 에 테이블 1 원복 없음 —
|
||
정지/에러 시 테이블 2가 남음. 스카우트(`SeqScoutNormal:204`)에서 1을 선택하므로 실사용 복구는 되나 명시 권장
|