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 の 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.RpmPerAccelRate、MS.RpmPerDecelRateのようなマスターパラメータで算出する方式が実践で柔軟です。