short RobArcMove ( short idx, double PassPos[MaxRobAxes], double GoalPos[MaxRobAxes], long MoveType );
0が返却されます。
idx:ロボットを指定するインデックス。
PassPos:ロボットの各軸の動作中継位置を直交座標系で指定します。配列要素数はMaxRobAxesにしてください。
GoalPos:ロボットの各軸の目標位置を直交座標系で指定します。配列要素数はMaxRobAxesにしてください。
MoveType:動作の種別。以下の値が有効です。
1…絶対位置指定、同期命令
2…相対位置指定、同期命令
3…絶対位置指定、非同期命令
4…相対位置指定、非同期命令
指定ロボットを、指定された中継位置を経由し、指定された目標位置まで円弧補間動作にて移動します。
本関数での補間の対象は論理軸の1~2軸で、直交座標系のXY軸の2次元と同意です。
補間対象外の軸は、対象軸の移動開始と移動終了に同期し、移動量はGoalPosに対して比例配分されます。PassPosは通過しません。
加減速時間の設定はRobSetCpAccelerations関数で行います。移動速度の設定はRobSetCpSpeed関数で行います。
目標位置の単位は[ユーザ単位]です。
目標位置、中継位置を設定する配列は配列要素[0]から順番に使用されます。例えば、3軸ロボットであれば1軸目の目標位置は配列要素[0]に、2軸目の目標位置は配列要素[1]、3軸目の目標位置は配列要素[2]に設定しておきます。また、1軸目の中継位置は配列要素[0]に、2軸目の中継位置は配列要素[1]に設定しておきます。3軸目の中継位置を配列要素[2]に設定しても無視(補間対象外の軸の中継位置は無効)されます。
詳細はロボットと軸(モータ軸)リソースを参照してください。
各座標系で使用するMOS関数一覧はこちらを参照してください。
〇PCベースコントローラ
〇InterMotion
次のプログラムは、4軸で構成されたRobot5を円弧補間で無限回数移動する例です
void main() {
double ppos[MaxRobAxes], gpos[MaxRobAxes];
short rob;
・・・・
rob = 5;
//エラーリセット、サーボON、原点復帰
MwResetSystemError();
RobResetError(rob);
RobSetManipServoPower(rob, 1);
RobReturnHome(rob);
//初期設定
RobSetCpSpeed(rob, 200); // 移動速度設定
RobSetPtpAccelerations(rob, 0.5, 0.5, 0, 0); // 加減速時間設定
ppos[0] = 150.0;
ppos[1] = 0.0;
ppos[2] = 0.0;
ppos[3] = 0.0;
RobLinearMove(rob, ppos, 1); // 移動の初期位置への移動
//往復移動 1軸目(X)と2軸目(Y)で円弧補間を行う
//1軸目と2軸目(X,Y)は(150, 0)の位置から(0, 150)を経由して(129.9, -75)の位置へ円弧補間動作で移動する
//3軸目と4軸目(T1,T2)は補間対象軸の移動開始と終了に同期して(0, 0)の位置から(200, 600)の位置へPTP動作で移動する
while(1) {
ppos[0] = 0.0; //Xの中継位置
ppos[1] = 150.0; //Yの中継位置
ppos[2] = 300.0; //補間対象軸以外の中継位置は通過しません(無視されます)
ppos[3] = 500.0; //補間対象軸以外の中継位置は通過しません(無視されます)
gpos[0] = 129.9; //Xの目標位置
gpos[1] = -75.0; //Yの目標位置
gpos[2] = 200.0; //T1の目標位置
gpos[3] = 600.0; //T2の目標位置
RobArcMove(rob, ppos, gpos, 1);
Pause(1);
ppos[0] = 150.0;
ppos[1] = 0.0;
ppos[2] = 0.0;
ppos[3] = 0.0;
RobLinearMove(rob, ppos, 1);
Pause(1);
}
・・・・
}