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 の 3 種類のイベント関数を 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 のようなマスターパラメータで算出する方式が実践で柔軟です。