short RobPtpMove ( short idx, double Goal[MaxRobAxes], long MoveType );
0が返却されます。
idx:ロボットを指定するインデックス。
Goal:ロボットの各軸の動作目標位置を直交座標系で指定します。配列要素数はMaxRobAxesにしてください。
MoveType:動作の種別。以下の値が有効です。詳細は解説を参照してください。
1…絶対位置指定、同期命令
2…相対位置指定、同期命令
3…絶対位置指定、非同期命令
4…相対位置指定、非同期命令
指定ロボットをPTP動作にて指定位置へ移動します。
ロボットが複数軸で構成されている場合、移動開始タイミング、および停止タイミングは軸間で同期動作となります。
加減速時間の設定はRobSetPtpAccelerations関数で行います。移動速度の設定はRobSetPtpSpeed関数で行います。
目標位置の単位は[ユーザ単位]です。
※動作種別の解説
同期命令…移動が完了するまで次の行のプログラムを実行しません。
非同期命令…移動を開始すると、移動の完了を待たずに次の行のプログラムを直ちに実行します。
絶対位置指定…指定された絶対位置への移動を行います。動作目標位置には目標位置を指定します。
相対位置指定…現在位置から指定された移動量にて移動を行います。動作目標位置には移動量を指定します。
目標位置を設定する配列は配列要素[0]から順番に使用されます。例えば、2軸ロボットであれば1軸目の目標位置は配列要素[0]に、2軸目の目標位置は配列要素[1]に設定しておきます。詳細はロボットと軸(モータ軸)リソースを参照してください。
各座標系で使用するMOS関数一覧はこちらを参照してください。
〇PCベースコントローラ
〇InterMotion
使用例1
次のプログラムは、2軸で構成されたRobot1を2次元平面上の座標(0,0)と(-100,-55)との間で無限回数移動する例です
void main() {
・・・・
// 目標位置を格納する配列の要素数は必ずMaxRobAxesとしてください
// MaxRobAxesの値はシステム内部で定義されており、ユーザが変更することはできません
double pos[MaxRobAxes]; // 目標位置を格納する配列を宣言
・・・・
RobSetPtpAccelerations(1, 50, 50, 0, 0); // Robot1の加減速時間設定
RobSetPtpSpeed(1, 100); // Robot1の移動速度設定
RobSetManipServoPower(1, 1); // Robot1を全軸サーボオン
RobReturnHome(1); // Robot1を原点復帰
while(1) {
pos[0] = -100; // 1軸目標位置を設定
pos[1] = -55; // 2軸目標位置を設定
RobPtpMove(1, pos, 1); // 絶対位置(-100,-55)へptp移動
Sleep(500); // 500ms処理遅延
pos[0] = 0;
pos[1] = 0;
RobPtpMove(1, pos, 1); // 絶対位置(0,0)へptp移動
Sleep(500); // 500ms処理遅延
・・・・
}
・・・・
}
使用例2
次のプログラムは、上記の使用例1と同じRobot1を2次元平面上の座標(0,その時の現在位置)と(-100,その時の現在位置)との間、すなわちY軸を現在位置のまま動かさず、X軸のみ無限回数移動する例です。
CurrentPositionという予約語を使用して配列に代入すると、RobGetCartePosition関数などを使用しなくても現在位置を取得できます。上記の使用例1のwhileループを次のように変更します。
・・・・
while(1) {
pos[0] = -100; // 1軸目標位置を設定
pos[1] = CurrentPosition; // 2軸目標位置を現在位置に設定
RobPtpMove(1, pos, 1); // 絶対位置(-100,*)へ移動
Sleep(500); // 500ms処理遅延
pos[0] = 0;
pos[1] = CurrentPosition; // 2軸目標位置を現在位置に設定
RobPtpMove(1, pos, 1); // 絶対位置(0,*)へ移動
Sleep(500); // 500ms処理遅延
・・・・
}
・・・・
ただし、次のようにCurrentPositionを直接的に演算することはできません。配列に代入後、演算してください。
pos[1] = CurrentPosition + 0.1;