XScript 매뉴얼 · Chapter 10

title: "Motor — 모션 제어 객체" chapter: 10 images:

  • xscript-motor-example.png

Motor — 모션 제어 객체

MOTOR["이름"] 으로 접근하는 모션 축 제어 객체 입니다. Motor Editor 에서 축 이름·보드· 초기 파라미터를 등록한 뒤, 스크립트에서 동일 이름으로 호출합니다.

Motor 객체 사용 예

기본 예제

MOTOR["M_HeadX"].Home();
if (MOTOR["M_HeadX"].WaitHome(1000) == false)
{
    // 홈 동작 실패
    Log("{0} - Home Failed", MOTOR["M_HeadX"].Description);
    return;
}
 
// 상대 위치 이동 — 완료까지 대기
if (MOTOR["M_HeadX"].MoveRel(10.0, true) == false)
{
    // 이동 실패
}
 
// 절대 위치 100.0 — 완료 대기 하지 않음
MOTOR["M_HeadX"].MoveAbs(100.0, false);

실전 예제 — Spindle 회전 제어

Gaon Stage.xms 에서 추출한 실제 코드. 가/감속을 동적으로 계산해서 RPM 오버라이드 하는 패턴입니다.

FUNCTION RunSpindle(double rpm, double accel, double decel)
{
    double speed = rpm * ANGLE_SPD_PER_RPM;
 
    if (MOTOR["M_SpindleT"].InMotion)
    {
        // 이미 회전 중이면 속도 오버라이드
        if (MOTOR["M_SpindleT"].OverrideAccelVelDecel(speed, accel, decel) == false)
        {
            MOTOR["M_SpindleT"].ShowMotorError(ModuleName);
            return false;
        }
        return true;
    }
 
    // 정지 상태라면 Vel 모드 시작
    MOTOR["M_SpindleT"].SetSpeed(speed, accel, 20.0);
    MOTOR["M_SpindleT"].OverrideSetMaxVel(10000);
 
    if (MOTOR["M_SpindleT"].MoveVel(true) == false)
    {
        MOTOR["M_SpindleT"].ShowMotorError(ModuleName);
        return false;
    }
 
    return true;
}

이동 메서드

시그니처설명
bool MoveAbs(double position, bool wait)절대 위치로 이동
bool MoveRel(double position, bool wait)현재 위치 기준 상대 이동
bool MoveVel(bool plusDirection)속도 모드 연속 이동
bool MoveSearchStop(bool plusDirection, SearchSignal signal, bool isUpEdge, bool emgStop)센서 감지 시 정지
bool Stop(bool wait = true, bool setStopExitSignal = false)정상 정지
bool StopEmergency(bool wait = true, bool setStopExitSignal = true)비상 정지
bool OverridePos(double pos)현재 위치 강제 설정(이동 없이)
bool OverrideVel(double vel)주행 중 속도 오버라이드

토크 제어

시그니처설명
bool SetTorqueLimit(double plusDirLimit, double minusDirLimit)방향별 토크 상한
bool MoveTorque(bool plusDirection, double torquePercent, double velocity)토크 제어 이동
bool StopTorque(void)토크 제어 종료

대기 · 검사

시그니처설명
bool Wait(int timeout = 0)현재 이동 완료 대기 (0 = 무한)
bool WaitPosition(double position, int timeout = 0)지정 위치 도달 대기
bool WaitHome(int timeout = 0)홈 완료 대기
bool CheckInPosition(double pos)허용 범위 내 도달 여부
uint GetEndStatus(void)종료 상태 플래그
string GetEndStatusString(uint endStatus)종료 상태 문자열 해석

홈 · 초기화

시그니처설명
bool InitBoard(void)보드 초기화
bool Home(void)홈 명령 (동기)
bool ThreadHome(void)홈 명령 (비동기)
HomeSubFunctionResult ApiHomeFunction(void)저수준 홈 API
void ClearAlarm(void)알람 초기화

속도 설정

시그니처설명
void SetSpeed(double vel)속도만 설정
void SetSpeed(double vel, double accel, double decel = 0)속도·가감속 설정
void SaveSpeed(void) / void RestoreSpeed(void)임시 저장·복원

힘(Force) · 캘리브레이션

시그니처설명
bool SetForceAnalogIo(string name)힘 측정용 아날로그 IO 지정
bool SetForce(double value) / bool SetVoltage(double value)힘/전압 강제 설정
bool ClearForceCalibData(void)캘리브레이션 초기화
bool AddForceCalibData(double force, double volt)캘리브레이션 포인트 추가

입출력

시그니처설명
bool ReadInBit(int bit) / bool ReadOutBit(int bit)모션 보드 DI/DO 읽기
bool WriteOutBit(int bit, bool on)모션 보드 DO 쓰기

주요 프로퍼티

프로퍼티타입설명
Name / Descriptionstring이름·설명
CommandPosition / ActualPosition / TargetPositiondouble지령·실제·목표 위치
InMotionbool이동 중 여부
HomeDone / HomeBusybool홈 상태
AlarmSignal / AlarmLevel / AlarmUsebool알람 신호
ServoOnSignal / ServoOnLevel / ServoOnUsebool서보 On 신호
PLimitSensorSignal / NLimitSensorSignalbool±리미트
HomeSensorSignal / HomeSensorLevel / HomeSensorUsebool홈 센서
ZPhaseSignal / ZPhaseLevel / ZPhaseUseboolZ상 신호
InpositionSignal / InpositionLevel / InpositionUsebool인포지션
JogVel / JogAccel / JogDeceldoubleJOG 파라미터
RunVel / RunAccel / RunDeceldouble자동 주행 파라미터
StartSpeed / MaxSpeed / UnitPerPulsedouble펄스·속도 스케일
EncoderUse / EncoderInverse / EncoderCalibbool/double엔코더
HomeTimeOut / HomeSlowVel / HomeBackOffset / HomeAfterDelay홈 시퀀스
HomeReverse / HomeInstantModebool홈 옵션
SwInpositionRange / SwInpositionUse / SwInpositionError / SwInpositionByEncoder소프트 인포지션
MinPos / MaxPos / MinMaxAutoSet소프트 리미트
GantryMode / IsGantrySlave / LinkMotorIndex갠트리 연동
IsHorizontal / PlusDirectionbool축 방향
IsVelMoveMode / IsAbsMoveMode / IsRelMoveModebool현재 이동 모드
ForceMode / CurrentForce / CurrentVoltage / ForceModelIoIndex힘 제어
LastErrorCode / DefaultErrorCodeint에러 코드
JogStepMode / JogStepRange스텝 JOG
DebugMode / DebugInfo / UseDebugLogbool디버그

연동 이벤트 함수

Motor Editor 에서 축마다 Check / PreHome / AfterHome 3종의 이벤트 함수를 XScript 함수와 연결할 수 있습니다. 해당 함수명은 다음 프로퍼티로 접근.

프로퍼티설명
CheckFunctionName이동 전 안전 점검
PreHomeFunctionName홈 직전 후크
AfterHomeFunctionName홈 완료 후 후크
UseCheckFunctionOnHome홈 동작 시에도 Check 사용 여부
FUNCTION M_U1CNV_Check(string name)
{
    // 이 함수는 이동 전에 호출된다.
    // false 반환 시 이동이 취소됨.
    if (IO["I_Emg"] == ON)
    {
        return false;
    }
    return true;
}

  • 완료까지 블록하려면 MoveAbs(pos, true). 비동기 처리는 MoveAbs(pos, false)Wait() 또는 WaitPosition().
  • 이동 실패 검증은 항상 GetEndStatus() 또는 CheckInPosition() 로 확인.
  • 서보 알람 발생 시 재가동 전 반드시 ClearAlarm() 호출.
  • 가감속은 목표 RPM 과 현재 RPM 차이에서 MS.RpmPerAccelRate, MS.RpmPerDecelRate 같은 마스터 파라미터로 산출하는 방식이 실전에서 유연합니다.