LGES-2170-ACW_CCW-Welder/Doc/ToNDH/MOTF_구현가이드_26.04.06.md
NohDoyeon241104 e309230949 feat: MOTF(Mark On The Fly) 구현 준비 - ACS Stage X 연동
- WeldingCommon/Devices/ACS/ ScannerACS 독립 구현 (Gun 참조 제거)
- Scanner EquipmentSetup.RegisterDevices()에 ScannerACS + 모터 등록
- EquipDef.cs MotorIds 추가
- UCScannerMotionViewModel Stage X 조그 필드/커맨드/모니터링 추가
- UCScannerMotion.xaml Stage X Motion 섹션 추가
- SeqComponentTeachingRun MOTF 자리 확보
  (_ACS 필드 선언, InitDev() 취득, MOTFStart/CheckMOTFComp 주석 준비)
- AuroraEx Device 네임스페이스 충돌 수정

TODO: 이정인 선임 ACS 변수 맵 수신 후
  - ScannerACS.Parameter.cs 변수명/버퍼 번호 교체
  - MOTFStart() / CheckMOTFComp() 주석 해제
  - 축 번호 검증
2026-04-06 14:51:27 +09:00

157 lines
4.9 KiB
Markdown

# ILSOS PrismaticScanner - MOTF 구현 가이드
> 작성일: 2026-04-06 | 작성자: NDY
---
## 목차
1. [MOTF 개념](#1-motf-개념)
2. [변경된 파일 목록](#2-변경된-파일-목록)
3. [흐름 정리](#3-흐름-정리)
4. [변수 맵 수신 후 작업](#4-변수-맵-수신-후-작업)
5. [TODO 체크리스트](#5-todo-체크리스트)
---
## 1. MOTF 개념
```
MOTF (Mark On The Fly)
= Stage X(ACS)가 이동하는 동안 갈바노 스캐너가 레이저 마킹
트리거: Stage X 엔코더 위치 기반
→ WaitForEncoderX 조건 도달 시 갈바노 마킹 시작
```
### 기존 방식 vs MOTF 방식
| 항목 | 기존 (갈바노 단독) | MOTF |
|---|---|---|
| Stage X | 정지 상태 | 이동 중 |
| 마킹 트리거 | 즉시 실행 | 엔코더 위치 트리거 |
| 처리량 | 낮음 | 높음 |
---
## 2. 변경된 파일 목록
### WeldingCommon/Devices/ACS/
- `ScannerACS.cs` - Scanner 전용 ACS 디바이스 (Gun과 독립)
- `ScannerACS.Parameter.cs` - ACS 변수명 상수 **(TODO: 변수 맵 교체 필요)**
- `MotionVariable.cs` - 모터 상태값
### WeldingCommon/Views/
- `UCScannerMotionViewModel.cs` - Stage X 조그 UI 연동
- `UCScannerMotion.xaml` - Stage X Motion 섹션 추가
### ILSOS_PrismaticScanner/
- `EquipmentSetup.cs` - ScannerACS + 모터 등록
- `EquipDef.cs` - MotorIds 추가
- `Sequences/SeqComponentTeachingRun.cs` - MOTF 자리 확보 (주석)
---
## 3. 흐름 정리
### SeqComponentTeachingRun 흐름
```
CheckEndList
↓
UpdateComponentWeldingParameters (레이저 파라미터 설정)
↓
SetUploadWeldingList_SeqParams
↓
SeqUploadWeldingList (Scanner List 채우기 + MOTF ON/OFF)
↓ Scanner.Config.UseMarkingOnTheFly = true 이면
↓ SetFlyX() + WaitForEncoderX() 자동 실행
GetUploadWeldingList_SeqResult
↓
DoComponentWelding
├── _Scanner.ExecuteList() (Scanner List 실행)
├── _ACS?.MOTFStart() ← TODO: 변수 맵 수신 후 주석 해제
├── _Scanner.WaitForListTaskCompleted()
└── CheckMOTFComp() ← TODO: 변수 맵 수신 후 주석 해제
↓
CheckEndList (반복)
```
---
## 4. 변수 맵 수신 후 작업
### 4-1. ScannerACS.Parameter.cs - 변수명 교체
```csharp
// 현재 placeholder → 실제 변수명으로 교체
const string iMOTFStart = "iPCset_SCANNER_MOTF_START"; // TODO
const string iMOTFComplete = "iPCget_SCANNER_MOTF_COMP"; // TODO
const string rMOTFVelocity = "rPCset_SCANNER_MOTF_VEL"; // TODO
const string rMOTFAcc = "rPCset_SCANNER_MOTF_ACC"; // TODO
const string iAllAxisHomeComplete = "iPCget_ALLAXIS_HOMECOMP"; // TODO
const string AlarmReset = "iAlarmreset"; // TODO
const string HeavyAlarm = "iAlarm"; // TODO
const string LightAlarm = "iLightAlarm"; // TODO
private enum eBuffer
{
All_Axis_Home = 0, // TODO: 실제 버퍼 번호로 교체
MOTF_Start = 11, // TODO: 실제 버퍼 번호로 교체
}
```
### 4-2. EquipDef.cs - MotorIds 축 번호 검증
```csharp
public enum eMotorIdx
{
AxisX2 = 1, // TODO: 실제 ACS 채널 번호 확인
AxisY1 = 3, // TODO: 실제 ACS 채널 번호 확인
AxisY2 = 4, // TODO: 실제 ACS 채널 번호 확인
AxisZ = 5, // TODO: 실제 ACS 채널 번호 확인
}
```
### 4-3. SeqComponentTeachingRun.cs - 주석 해제 3곳
```csharp
// [1] CheckDeviceReady() - ACS 활성화 확인 추가
// DeviceIds.ACS ← 주석 해제
// [2] DoComponentWelding() - Stage X 이동 시작
// _ACS?.MOTFStart(); ← 주석 해제
// [3] DoComponentWelding() - MOTF 완료 대기
// while (!_ACS.CheckMOTFComp()) { Thread.Sleep(10); } ← 주석 해제
```
### 4-4. Scanner Config 설정 확인
```
Scanner.Config.UseMarkingOnTheFly = true ← 반드시 확인
Scanner.Config.OnTheFlyCoordinate = eOntheFlyCoordinate.XY ← Linear Track 방식
Scanner.Config.MarkingOnTheFlyEncoderResolutionX ← 엔코더 분해능
Scanner.Config.MarkingStartEncoderPositionX ← 마킹 시작 엔코더 위치
```
---
## 5. TODO 체크리스트
### 이정인 선임 변수 맵 수신 전 (완료)
- [x] WeldingCommon에 ScannerACS 독립 구현
- [x] Scanner RegisterDevices()에 ACS + 모터 등록
- [x] UCScannerMotion Stage X 조그 UI 추가
- [x] SeqComponentTeachingRun MOTF 자리 확보 (주석)
- [x] _ACS 필드 선언 및 InitDev()에서 null-safe 취득
- [x] CheckDeviceReady()에 ACS 주석으로 준비
### 이정인 선임 변수 맵 수신 후
- [ ] ScannerACS.Parameter.cs 변수명 교체
- [ ] eBuffer 번호 교체
- [ ] MotorIds.eMotorIdx 축 번호 검증
- [ ] CheckDeviceReady() DeviceIds.ACS 주석 해제
- [ ] DoComponentWelding() MOTFStart() 주석 해제
- [ ] DoComponentWelding() CheckMOTFComp() 주석 해제
- [ ] Scanner Config UseMarkingOnTheFly 설정 확인
- [ ] 실제 장비에서 동작 확인