XScript マニュアル · Chapter 10

title: "Motor — モーション制御オブジェクト" chapter: 10 images:

  • xscript-motor-example.png

Motor — モーション制御オブジェクト

Motor[name] は装置のモーション軸オブジェクトです。各軸は Motor Editor で登録 (名前・ボード・初期パラメータ)した後、同じ名前でスクリプトから参照します。

Motor オブジェクト使用例

Motor[X].SetSpeed(50.0, 200.0, 200.0);  // 速度・加速度・減速度
Motor[X].MoveAbs(100.0, true);          // 100mm へ移動、完了待ち
if (Motor[X].CheckInPosition(100.0) == false) {
    ShowError("E_POS_FAIL");
    return false;
}

移動メソッド

シグネチャ用途
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 SetTorqueLimit(double plusDirLimit, double minusDirLimit)トルク上限設定
bool MoveTorque(bool plusDirection, double torquePercent, double velocity)トルク制御移動
bool StopTorque(void)トルク制御終了

待機・検査

シグネチャ用途
bool Wait(int timeout = 0)現在の移動完了待ち(ms、0 は無限)
bool WaitPosition(double position, int timeout = 0)目標位置到達まで待ち
bool WaitHome(int timeout = 0)ホーム完了待ち
bool CheckInPosition(double pos)現在位置が許容範囲内か
uint GetEndStatus(void)終了ステータスフラグ(0 は正常)
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)速度の一時保存・復元
bool OverridePos(double pos)現在位置の強制変更(移動せず)
bool OverrideVel(double vel)移動中の速度オーバーライド

IO・アラーム

シグネチャ用途
bool ReadInBit(int bit) / bool ReadOutBit(int bit)モーションボードのデジタル IO 読み取り
bool WriteOutBit(int bit, bool on)モーションボードのデジタル出力書き込み

ヒント

  • MoveAbs(pos, true) は完了までブロック。非同期なら MoveAbs(pos, false) + Wait() または WaitPosition() を明示的に。
  • 成功検証は必ず GetEndStatus() または CheckInPosition() で。
  • サーボアラーム発生後、再稼働前に必ず ClearAlarm()