- 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() 주석 해제 - 축 번호 검증
4.9 KiB
4.9 KiB
ILSOS PrismaticScanner - MOTF 구현 가이드
작성일: 2026-04-06 | 작성자: NDY
목차
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 - 변수명 교체
// 현재 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 축 번호 검증
public enum eMotorIdx
{
AxisX2 = 1, // TODO: 실제 ACS 채널 번호 확인
AxisY1 = 3, // TODO: 실제 ACS 채널 번호 확인
AxisY2 = 4, // TODO: 실제 ACS 채널 번호 확인
AxisZ = 5, // TODO: 실제 ACS 채널 번호 확인
}
4-3. SeqComponentTeachingRun.cs - 주석 해제 3곳
// [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 체크리스트
이정인 선임 변수 맵 수신 전 (완료)
- WeldingCommon에 ScannerACS 독립 구현
- Scanner RegisterDevices()에 ACS + 모터 등록
- UCScannerMotion Stage X 조그 UI 추가
- SeqComponentTeachingRun MOTF 자리 확보 (주석)
- _ACS 필드 선언 및 InitDev()에서 null-safe 취득
- CheckDeviceReady()에 ACS 주석으로 준비
이정인 선임 변수 맵 수신 후
- ScannerACS.Parameter.cs 변수명 교체
- eBuffer 번호 교체
- MotorIds.eMotorIdx 축 번호 검증
- CheckDeviceReady() DeviceIds.ACS 주석 해제
- DoComponentWelding() MOTFStart() 주석 해제
- DoComponentWelding() CheckMOTFComp() 주석 해제
- Scanner Config UseMarkingOnTheFly 설정 확인
- 실제 장비에서 동작 확인