!...! 並列処理
動作中にI/Oなどの入出力処理を並列して行います。
書式
動作命令 !並列処理ステートメント!
パラメーター
- 動作命令
- 次のいずれかの並列処理可能な命令を記述します。
Arc, Arc3, Go, Jump, Jump3, Jump3CP, Move, BGo, BMove, TGo, TMove - 並列処理ステートメント
- 動作中に並列処理可能なI/O ステートメントを記述します。 (下表参照)
解説
動作開始と同時に、" ! "マークではさまれたステートメントの実行を開始します。例えば、これによりI/Oは、ロボットの動きが止まるまで実行を待つのではなく、まだアームが動作中に、実行できることになります。アームが動作中にI/Oに対して実行を促すステートメントが用意されています。 (下表"Dn"参照)
使用できるすべての並列処理ステートメントは、下表にまとめてあります。表中のステートメントは、いずれも単独で使うこともできます。また、いくつかを組み合わせて、1つの動作命令中に複数のI/Oステートメントを実行することもできます。
| Dn | 次の並列処理ステートメントが実行される前に移動量の%を指定し、動作命令と同期をとるために使用します。"n"は、0から100までの整数で指定される%値で、その動作のどこから並列処理ステートメントが開始するか、開始位置を指定します。つまり、動作が全移動量のn%に達したときDn以降のステートメントが実行されます。 Jumpコマンドと組み合わせて使う場合、移動量の%値には、第3関節 (上下軸)の垂直移動動作が含まれていません。Jump動作のときは第3関節 (上下軸)を除いた平行移動動作に対してのみ同期がとられます。第3関節の垂直移動動作が完了したところでステートメントを実行するためには、ステートメントの最初にD0 (ゼロ) を入れてください。 Jump3コマンドと組み合わせて使う場合、移動量の%値には、退避, 接近動作が含まれていません。Jump3動作のときは、スパン動作に対してのみ同期がとられます。退避動作が完了したところでステートメントを実行するためには、ステートメントの最初にD0 (ゼロ) を入れてください。 "Dn"は、1回の並列処理ステートメント中、最高16回まで使うことができます。 |
| On / Off n | 出力ビット番号"n"をオン、またはオフします。 |
| MemOn / MemOff n | メモリーI/Oビット番号"n"をオン、またはオフします。 |
Out p,d OpBCD p,q OutW p,d | 出力ポート"p"にデータ"d"を出力します。 |
MemOut p, d MemOutW p,d | メモリーI/Oポート"p"にデータ"d"を出力します。 |
| Signal s | シンクロ信号を発します。 |
| WaitSig s | 信号"s"を待ってから、次のステートメントを処理します。 |
| Wait t | "t"秒間待ち、次の並列処理ステートメントを実行します。 |
| Wait Sw(n) = j | 入力ビット"n"が"j"で定義される条件 (OnまたはOff)に一致するまで、次の並列処理ステートメントの実行を待ちます。 |
| Wait MemSw(n) = j | メモリーI/Oビット"n"が"j"で定義される条件 (OnまたはOff)に一致するまで、次の並列処理ステートメントの実行を待ちます。 |
| Wait その他の条件 | 上記2パターン以外のWaitも可能です。詳細はWaitを参照してください。 |
| ディスプレイデバイスにデータを出力します。 | |
| Print # | 指定されたコミュニケーションポートにデータを出力します。 |
| 外部ファンクション | Declareステートメントで宣言した外部ファンクションを実行します。 |
Hand_On n Hand_Off n | ハンド番号"n"のHand_On/Hand_Off動作を実行します。 |
注意
I/Oコマンドがすべて終了する前に動作が終わった場合
特定の動作命令に対する動作が終了しても、すべての並列処理ステートメントの実行が終わっていない場合、次のプログラムは、それらがすべて終了してから実行されます。このような状況は、多くのI/Oコマンドを並列処理しなくてはならない短距離移動の動作時に、特に想定されるものです。
アームを停止するTillステートメントで、途中で動作が終了した場合
もし、移動の途中でアームを停止するTillステートメントが使われた場合、動作は100%完了したとみなされD100までが実行されます。すべての並列処理ステートメントの実行が終わるまで、動作命令の次のステートメントには移りません。
AbortMotionステートメントやTrapにより、途中で動作が終了した場合
動作が終了した以降のDステートメントは実行されません。
100% に近い"n"値を設定した場合のパスモーションの減速
パスモーション中に高い"n"値を設定した場合、ロボットは実行中の動きを終わらせるために減速することがあります。通常CP Onは、減速開始と同時に次の動作命令の加速を始めます。しかし、減速中にDnの指定があると、その命令を終了するまでは、次の加速を始めることができません。減速を避けるためには、処理ステートメントを動作コマンドのあとにもってきます。例えば、下記の例では、On 1ステートメントの位置を、Jump P1動作中の並列処理から、Jump P1の後に移しています。
CP On Jump P1 !D96; On 1! Go P2 CP On Jump P1 On 1 Go P2Jumpステートメントと並列処理
Jumpステートメントとともに使われる並列処理ステートメントの実行は、上昇移動の終了後に始まり、下降移動の開始前に終わります。
Jump3ステートメントとともに使われる並列処理ステートメントの実行は、退避移動の終了後に始まり、接近移動の開始前に終わります。
Hereステートメントと並列処理
Hereステートメントと並列処理を1つの動作命令内で混在させることはできません。
Go Here :Z(0) ! D10; MemOn 1 !上記のような使い方はできません。
P999 = Here Go P999 Here :Z(0) ! D10; MemOn 1 !上記のようなプログラムに変更してください。
参照
Arc, Arc3, Go, Jump, Jump3, Jump3CP, Move, BGo, BMove, TGo, TMove
!...! 並列処理使用例
下記は、並列処理機能を動作命令とともに使う例です。
並列処理をJumpコマンドとともに使います。第3関節が上昇移動を終わり、第1, 2, 4関節が動きだした段階で、出力ビット1がオンします。出力ビット1は、Jump動作の50%が完了した段階で、再びオフします。
Function test
Jump P1 !D0; On 1; D50; Off 1!
Fend
並列処理をMoveコマンドとともに使います。P1までの移動の10%を完了した段階で、出力ビット5をオンし、0.5秒後に出力ビット5をオフします。
Function test2
Move P1 !D10; On 5; Wait 0.5; Off 5!
Fend