int RobSetDiSpeedOverride ( short idx, short SlotNumber, short PortNumber, long Value, double Speed );
0が返却されます。
idx:ロボットを指定するインデックス。
SlotNumber:設定番号(スロット)を指定します。値の有効範囲は1~16です。
PortNumber:入力ポート番号を指定します。ロボットI/Oのバンク1で、値の有効範囲は2049~2112です。
Value:速度オーバライドを実行するポートのレベルを指定します。
0…ポートの値が0のとき(OFFのとき)に速度オーバライドを実行。
1…ポートの値が1のとき(ONのとき)に速度オーバライドを実行。
Speed:速度オーバーライド値を指定します。PTP動作、補間動作について有効です。RobSetPtpSpeed関数、RobSetCpSpeed関数にて設定された速度に対する%で指定します。値の有効範囲は0.0~100.0です。
指定ポートの値の変化に連動し、本関数以降に記述された指定ロボットの速度変更を行う機能(ポート連動速度オーバライド機能)を有効にします
本機能は、指定のポートの値が指定レベルとなった場合に、指定ロボットに対して速度オーバライド(速度変更)を行う機能です。
指定ロボットにて、本関数以降に記述されたPTP動作移動関数、補間動作移動関数に対して、PortNumberで指定した入力ポートにValueで指定したレベルを検出すると、そのロボットに対して速度オーバライドを実行します。本関数のidxで指定したロボットインデックスと同じロボットインデックスを指定した移動関数が対象になります。
RobSetSpeedOverride関数による設定値と乗算されて機能します。
本関数でポート連動速度オーバライド機能を有効に設定すると、RobResetDiSpeedOverride関数で機能を無効にするまで、指定のポートのレベルと連動して何度でも速度オーバライドが実行されます。速度オーバライド実行中にポートのレベルがValueと反転した場合は、オーバライド実行前の速度に戻ります。
移動開始時において、指定のポートに指定のレベルが入力されている場合は、速度オーバライドを実行した状態から移動動作を開始します。
idxで指定したロボットについて、異なるSlotNumberで複数のValueの速度オーバライド値を設定することができます。この場合、複数の速度オーバライド条件が成立したときは、スロット番号の小さいほうの速度オーバライド値が優先されます。
対象のポートはロボットI/Oのバンク1の入力ポートです。
本関数は、ポート連動速度オーバライド有効の対象となる移動関数を発行する前に設定されていなければなりません。移動の途中に発行しても所望の速度オーバライドを行うことができません。
本関数を用いると入力ポートのレベルに応じてリアルタイムに速度オーバライドを実行することが可能です。例えばステージ取り付けたフォトセンサをポートに接続し、センサがオンの場合は移動速度を制限することが可能です。
ポートに関してはデジタル入出力ポートリソースを参照してください。
〇PCベースコントローラ
〇InterMotion
1)次のように同じSlotNumberに複数のPortNumberやValueを設定すると、後から設定した方が有効になります。
void main() {
int rc;
・・・・
rc = RobSetDiSpeedOverride(1, 1, 2055, 1, 70.0); // これは無視される
rc = RobSetDiSpeedOverride(1, 1, 2049, 0, 10.0); // これも無視される
rc = RobSetDiSpeedOverride(1, 1, 2049, 1, 10.0); // これが有効な設定になる
・・・・
}
2)次のように異なるSlotNumberであれば同じPortNumberに異なるValueを設定することは可能です。この場合、複数の条件が成立した時はスロット番号の小さいほうの速度オーバライド値が優先されます。
void main() {
int rc;
・・・・
rc = RobSetDiSpeedOverride(1, 1, 2049, 0, 45.6); // これは有効な設定
rc = RobSetDiSpeedOverride(1, 2, 2050, 0, 23.4); // これも有効な設定
rc = RobSetDiSpeedOverride(1, 3, 2049, 1, 78.9); // これも有効な設定
・・・・
}
3)次のようにプログラムすると、Robot1の移動中にポート2049のポートが0のとき(OFFのとき)に速度オーバライドを実行します。
void main() {
double pos[MaxRobAxes];
・・・・
RobSetDiSpeedOverride(1, 1, 2049, 0, 10.0);
Printf0("\n < Override by port_2049 Enable >");
RobSetDiSpeedOverride(1, 2, 2050, 1, 50.0);
Printf0("\n < Override by port_2050 Enable >");
・・・・
pos[0] = 100.0;
RobPtpMove(1, pos, 3/*絶対非同期*/);
RobWaitForMoveDone(1, 0);
Sleep(1000);
RobResetDiSpeedOverride(1, 1);
Printf0("\n < Override by port_2049 Disable >");
・・・・
}