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

4.9 KiB

ILSOS PrismaticScanner - MOTF 구현 가이드

작성일: 2026-04-06 | 작성자: NDY


목차

  1. MOTF 개념
  2. 변경된 파일 목록
  3. 흐름 정리
  4. 변수 맵 수신 후 작업
  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 - 변수명 교체

// 현재 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 설정 확인
  • 실제 장비에서 동작 확인