XScript 매뉴얼 · Chapter 10
title: "Motor — 모션 제어 객체" chapter: 10 images:
- xscript-motor-example.png
Motor — 모션 제어 객체
MOTOR["이름"] 으로 접근하는 모션 축 제어 객체 입니다. Motor Editor 에서 축 이름·보드·
초기 파라미터를 등록한 뒤, 스크립트에서 동일 이름으로 호출합니다.
캡처 대기
public/manual/gui/xscript-motor-example.png기본 예제
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 / Description | string | 이름·설명 |
CommandPosition / ActualPosition / TargetPosition | double | 지령·실제·목표 위치 |
InMotion | bool | 이동 중 여부 |
HomeDone / HomeBusy | bool | 홈 상태 |
AlarmSignal / AlarmLevel / AlarmUse | bool | 알람 신호 |
ServoOnSignal / ServoOnLevel / ServoOnUse | bool | 서보 On 신호 |
PLimitSensorSignal / NLimitSensorSignal | bool | ±리미트 |
HomeSensorSignal / HomeSensorLevel / HomeSensorUse | bool | 홈 센서 |
ZPhaseSignal / ZPhaseLevel / ZPhaseUse | bool | Z상 신호 |
InpositionSignal / InpositionLevel / InpositionUse | bool | 인포지션 |
JogVel / JogAccel / JogDecel | double | JOG 파라미터 |
RunVel / RunAccel / RunDecel | double | 자동 주행 파라미터 |
StartSpeed / MaxSpeed / UnitPerPulse | double | 펄스·속도 스케일 |
EncoderUse / EncoderInverse / EncoderCalib | bool/double | 엔코더 |
HomeTimeOut / HomeSlowVel / HomeBackOffset / HomeAfterDelay | 홈 시퀀스 | |
HomeReverse / HomeInstantMode | bool | 홈 옵션 |
SwInpositionRange / SwInpositionUse / SwInpositionError / SwInpositionByEncoder | 소프트 인포지션 | |
MinPos / MaxPos / MinMaxAutoSet | 소프트 리미트 | |
GantryMode / IsGantrySlave / LinkMotorIndex | 갠트리 연동 | |
IsHorizontal / PlusDirection | bool | 축 방향 |
IsVelMoveMode / IsAbsMoveMode / IsRelMoveMode | bool | 현재 이동 모드 |
ForceMode / CurrentForce / CurrentVoltage / ForceModelIoIndex | 힘 제어 | |
LastErrorCode / DefaultErrorCode | int | 에러 코드 |
JogStepMode / JogStepRange | 스텝 JOG | |
DebugMode / DebugInfo / UseDebugLog | bool | 디버그 |
연동 이벤트 함수
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같은 마스터 파라미터로 산출하는 방식이 실전에서 유연합니다.