XScript 手册 · Chapter 10
Motor — 运动控制对象
通过 MOTOR["名称"] 访问的运动轴控制对象。在 Motor Editor 中注册轴名称、板卡、
初始参数后,在脚本中以相同名称调用。
基本示例
xscript
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 进行
覆盖的模式。
xscript
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 三种事件函数 与 XScript 函数关联。相应的函数名通过以下属性访问。
| 属性 | 说明 |
|---|---|
CheckFunctionName | 移动前的安全检查 |
PreHomeFunctionName | 回零之前的钩子 |
AfterHomeFunctionName | 回零完成后的钩子 |
UseCheckFunctionOnHome | 回零动作时是否也使用 Check |
xscript
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等主参数计算的方式更为灵活。