int RobSetDiStopMove ( short idx, short SlotNumber, long PortNumber, long Logic );
0が返却されます。
idx:ロボットを指定するインデックス。
SlotNumber:設定番号(スロット)を指定します。値の有効範囲は1~16です。
PortNumber:入力ポート番号を指定します。ロボットI/Oのバンク1の入力ポートで、値の有効範囲は2049~2112です。
Logic:減速停止を実行するポートのレベルを指定します。
0…ポートの値が0のとき(OFFのとき)に減速停止を実行。
1…ポートの値が1のとき(ONのとき)に減速停止を実行。
指定ポートの値の変化に連動し、本関数以降に記述された指定ロボットの移動中の動作を即座に減速停止する機能(ポート連動減速停止機能)を有効にします。
指定ロボットにて、本関数以降に記述されたPTP動作移動関数、補間動作移動関数が実行されている時、PortNumberで指定した入力ポートにLogicで指定したレベルを検出すると、そのロボットを即座に減速停止します。本関数のidxで指定したロボットインデックスと同じロボットインデックスを指定した移動関数による移動が対象です。
本関数でポート連動減速停止機能を有効に設定すると、RobResetDiStopMove関数で機能を無効にするまで、指定のポートのレベルと連動して何度でも減速停止が実行されます。
移動開始時において、指定のポートに指定のレベルが入力されている場合は移動を行いません。
idxで指定したロボットについて、異なるSlotNumberであれば複数のPortNumberやLogicを設定することができます。SlotNumberには1~16を指定できるので、ポート変化による減速停止条件を16パターン設定することができます。
対象のポートはロボットI/Oのバンク1の入力ポートです。
本関数は、ポート連動減速停止の対象となる移動関数を発行する前に設定されていなければなりません。移動途中に発行しても所望の減速停止を行うことができません。
ポートに関してはデジタル入出力ポートリソースを参照してください。
〇PCベースコントローラ
〇InterMotion
1)次のように同じSlotNumberに複数のPortNumberやLogicを設定すると、後から設定した方が有効になります.
void main() {
int rc;
・・・・
rc = RobSetDiStopMove(1, 1, 2055, 1); // これは無視される
rc = RobSetDiStopMove(1, 1, 2049, 0); // これも無視される
rc = RobSetDiStopMove(1, 1, 2049, 1); // これが有効な設定になる
・・・・
}
2)次のようにプログラムすると、rob1の移動中にポート2049=1を検出すると減速停止を実行します。rob2はポート2049のイベントの影響を受けません。
void main() {
double pos1[MaxRobAxes], pos11[MaxRobAxes], pos2[MaxRobAxes];
double Org[MaxRobAxes];
short rob1, rob2;
・・・・
rob1 = 1;
rob2 = 2;
MwResetSystemError();
RobResetError(rob1);
RobResetError(rob2);
RobSetManipServoPower(rob1, 1);
RobSetManipServoPower(rob2, 1);
RobReturnHome(rob1);
RobReturnHome(rob2);
RobSetPtpSpeed(rob1, 30);
RobSetPtpSpeed(rob2, 30);
RobSetPtpAccelerations(rob1, 0.1, 0.1, 100, 100);
RobSetPtpAccelerations(rob2, 0.1, 0.1, 100, 100);
Org[0] = 0.0;
pos1[0] = 800.0;
pos11[0] = 400.0;
pos2[0] = 1100.0;
while(1) {
RobResetDiStopMove(rob1, 0); // ポート制御を無効化
RobPtpMove(rob1, Org, 1); // rob1を開始位置へ移動(ポート制御無効なので必ず実行されます)
RobPtpMove(rob2, Org, 1); // rob2を開始位置へ移動
Sleep(500);
RobSetDiStopMove(rob1, 1, 2049, 1); // ポート2049=1によりrob1を減速停止するよう設定
RobPtpMove(rob1, pos1, 3); // この移動の途中でポート2049=1を検出するとrob1は減速停止します
RobPtpMove(rob2, pos2, 3); // rob2はポート2049のイベントの影響を受けません
RobWaitForMoveDone(rob1, 0); // rob1が動作終了するのを待つ
RobWaitForMoveDone(rob2, 0); // rob2が動作終了するのを待つ
RobPtpMove(rob1, pos11, 1); // ポート2049=1ならこのrob1の移動は実行されません
Sleep(500);
}
}