short RobSetMoveProgressDo ( short idx, short SlotNumber, double Progress, long PortNumber, long Logic );
0が返却されます。
idx:ロボットを指定するインデックス。
SlotNumber:設定番号(スロット)を指定します。値の有効範囲は1~16です。
Progress:動作進捗度(指令最終目標値に対する指令現在値の割合)を%で指定します。値の有効範囲は0~100です。
PortNumber:出力ポート番号を指定します。ロボットI/Oのバンク1の出力ポートで、値の有効範囲は2113~2176です。
Logic:ポートへの出力論理値を指定します。
0…動作進捗度が指定の値に達したときに0を出力。
1…動作進捗度が指定の値に達したときに1を出力。
本関数以降に記述された指定ロボットの移動進捗度にしたがって、指定出力ポートの出力値を即時に変更する機能(移動連動ポート出力変更機能)を有効にします。
指定ロボットにて、本関数以降に記述されたPTP動作移動関数(RobConstVelMove関数を除く)、補間動作移動関数による移動動作に対して、Progressで指定した移動進捗度(移動量に対する進捗)に達したとき、PortNumberで指定した出力ポートの値をLogicで指定したレベルに変更します。本関数のidxで指定したロボットインデックスと同じロボットインデックスを指定した移動関数が対象になります。
1つのSlotNumberにつき1つのidx、1つのProgress、1つのPortNumberを設定でき、指定のロボットが指定の動作進捗度に達したときに1回だけ、PortNumberで指定した出力ポートがLogicで指定したレベルに変化します。1つのSlotNumberには複数のProgressを設定することはできませんが、異なるSlotNumberには同じProgress、同じPortNumberを設定することは可能です。SlotNumberには1~16を指定できますので、移動動作中の出力ポート値の変更を16パターン設定することができます。
対象移動関数がRobStopMoveまたはRobStopMove2関数で途中停止した場合は、停止以降の進捗度による出力ポート値変更は行われません。
対象のポートはロボットI/Oの出力ポート(2113~2176の範囲)です。
本関数は、移動連動ポート出力変更機能の対象となる移動関数を発行する前に設定されていなければなりません。移動途中に発行しても所望のポート出力変更を行うことができません。
本関数を用いると、例えば指定の出力ポートにソレノイド等を接続することにより、Move関数で辿る軌跡の正確な位置での接着剤の塗布やチャッキング動作が可能になります。
ポートに関してはデジタル入出力ポートリソースを参照してください。
〇PCベースコントローラ
〇InterMotion
使用例1
次のように同じSlotNumberに複数のProgressやPortNumberを設定すると、後から設定した方が有効になります
void main() {
short rc;
・・・・
rc = RobSetMoveProgressDo(Rob1, 1, 30, 2113, 1); // これは無視される
rc = RobSetMoveProgressDo(Rob1, 1, 30, 2114, 1); // これも無視される
rc = RobSetMoveProgressDo(Rob1, 1, 45, 2113, 1); // これが有効な設定になる
・・・・
}
使用例2
次のように異なるSlotNumberに同じProgressやPortNumberを設定することは可能です.
void main() {
short rc;
・・・・
rc = RobSetMoveProgressDo(Rob1, 1, 30, 2113, 1); // これは有効な設定
rc = RobSetMoveProgressDo(Rob1, 2, 45, 2113, 0); // これも有効な設定
rc = RobSetMoveProgressDo(Rob1, 3, 45, 2114, 0); // これも有効な設定
・・・・
}
使用例3
次のようにプログラムすると、対象のRobPtpMove関数の動作進捗度30%にてポート2113ポートの出力値を1に、動作進捗度80%にて同ポートの出力値を0に変更します
void main() {
double org[MaxRobAxes], pos[MaxRobAxes];
short rob;
・・・・
rob = 1;
MwResetSystemError();
RobResetError(rob);
RobSetManipServoPower(rob, 1);
RobReturnHome(rob);
RobSetPtpSpeed(rob, 40);
RobSetPtpAccelerations(rob, 0.1, 0.1, 100, 100);
org[0] = 0.0;
pos[0] = 300.0;
while(1) {
WritePort(2113, 0); // ポート2113の出力値を0に初期化
RobResetMoveProgressDo(rob, 0); // ポート制御を無効化
RobPtpMove(rob, org, 1); // robを開始位置へ移動(ポート2113の値は変化しません)
RobSetMoveProgressDo(rob, 1, 30, 2113, 1); // robの動作進捗度30%にてポート2113の出力値を1にするよう設定
RobSetMoveProgressDo(rob, 2, 80, 2113, 0); // robの動作進捗度80%にてポート2113の出力値を0にするよう設定
RobPtpMove(rob, pos, 1); // robを移動 この移動中にポート2113の値が設定に従って変更されます
if(ReadPort(2049) == 1) { // ポート2049=1なら終了
break;
}
Sleep(500);
}
・・・・
}