- 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() 주석 해제 - 축 번호 검증
157 lines
4.9 KiB
Markdown
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 설정 확인
|
|
- [ ] 실제 장비에서 동작 확인
|