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 / 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 三种事件函数 与 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.RpmPerAccelRateMS.RpmPerDecelRate 等主参数计算的方式更为灵活。