<< 前へ        次へ >>

ID : 5104

WaitMotion

機能

現在動作中の動作命令が指定した状態に達するまでタスクを待機します。

構文

WaitMotion( モード[,])

指定項目

モード
条件のコードを整数型データで指定します。
モードで設定した条件の値を整数型データで指定します。モードの値が5または6のとき不要です。
モード
コード 意味
0 動作割合[%]を、現在位置(エンコーダ値)で判定。 0~100%
1 動作開始からの距離指定[mm]を、現在位置(エンコーダ値)で判定。  
2 動作終了までの距離指定[mm]を、現在位置(エンコーダ値)で判定。  
3 動作開始からの移動時間指定[ms]を、指令値で判定。  
4 動作終了までの移動時間指定[ms]を、指令値で判定。  
5 加速終了を、指令値で判定。 不要
6 減速開始を、指令値で判定。 不要

戻り値

状態を整数型データで返します。

0 異常
-1 正常
-2
  1. 直前に動作命令がない場合
  2. 動作命令にNextオプションをつけていない場合
  3. モード1, 2で位置成分の移動がない場合(手先先端は同じ位置で姿勢だけを動かす場合など)
  4. WaitMotionを実行した時点ですでに条件を満たしている場合
-3
  1. モード1で総移動距離よりも大きい距離が指定された場合
  2. モード3で総移動時間よりも大きい時間が指定された場合

解説

  • 自タスクの動作命令実行中にWaitMotionコマンドが実行されると、動作命令が指定した状態に達するまで、非動作命令の実行開始を待ちします。例えば、動作完了後の作業準備を行うために、動作完了前にIO出力をするといった使い方ができます。
  • 各モードごとのタスク待機を解除するタイミングは以下のようになります。(A)のタイミングでタスク待機を解除し、非動作命令が実行されます。
    モード 瞬時停止なし 瞬時停止あり
    0

    動作開始点からの動作量が指定した割合になったら、タスク待機を解除します。

    1 動作開始点からの動作距離が指定した距離(㎜)になったら、タスク待機を解除します。

    2 動作終了点からの動作距離が指定した距離(㎜)になったら、タスク待機を解除します。
    3 動作開始点からの動作時間が指定した時間(ms)になったら、タスク待機を解除します。 動作開始点からの動作時間(停止している時間は除く)が指定した時間(ms)になったら、タスク待機を解除します。
    4 動作終了点からの動作時間が指定した時間(ms)になったら、タスク待機を解除します。
    5 加速が終了したタイミングでタスク待機を解除します。 瞬時停止コマンドが入り、減速が開始した時点でタスク待機を解除します。
    WaitMotionは一旦動作コマンドが終了すると終わります。そして、再び動作コマンドが再開されるとき、または非動作コマンドを実行するときには、WaitMotionは実行されません。
    6

    減速が開始したタイミングでタスク待機を解除します。

    瞬時停止コマンドが入り、減速が開始した時点でタスク待機を解除します。
    WaitMotionは一旦動作コマンドが終了すると終わります。そして、再び動作コマンドが再開されるとき、または非動作コマンドを実行するときには、WaitMotionは実行されません。

関連項目

Arrive

注意事項

  • モード1、2の場合はCP動作のみ使用できます。
  • 最適速度制御機能モードが2または3(SpeedMode 2 or 3)の場合、WaitMotionのモードを3,4(時間指定)、5,6(加速終了、減速開始)に指定すると、タスク待機を解除するタイミングがずれる可能性があります。
  • タスク待機中に、別タスクでMotionSkipやInterruptによるスキップを実行するとスキップが優先されます。
  • WaitMotionは最後に発行した動作命令の状態を監視します。2行同じ動作命令を記述すると、1行だけの場合と異なる動作になります。
    ' Case 1
     Move P, @0 J(0, 45, 90, 0, 45, 0)
     Move P, @P J(0, 45, 90, 0, 45, 90), Next        ' (1)
     WaitMotion 0, 90
    Case 1では、WaitMotionは、(1)の動作命令の状態を監視します。(1)の動作が90%完了したタイミングでWaitMotionの次の行が処理されます。
    ' Case 2
     Move P, @0 J(0, 45, 90, 0, 45, 0)
     Move P, @P J(0, 45, 90, 0, 45, 90), Next        ' (2)
     Move P, @P J(0, 45, 90, 0, 45, 90), Next        ' (3)
     WaitMotion 0, 90
    Case 2では、WaitMotionは、(3)の動作命令の状態を監視します。本来なら、(3)の動作が90%完了したタイミングでWaitMotionの次の行が処理されます。しかし、(3)の動作は実行時にすでに完了している(動かない)ため、WaitMotionは実行時にすでに条件を満たしており、すぐにWaitMotionの次の行が処理されます。
    一方、(2)の動作命令はパス動作のため、(2)から(3)へのパス動作が開始したタイミングで、(3)の動作が開始します。
    つまり、WaitMotionの次の行が処理されるのは、(2)の動作が90%完了したタイミング(Case 1と同じ位置)ではなく、(2)から(3)へのパス動作が開始したタイミングとなります。
  • 「Arrive 動作割合」と「WaitMotion 0, 動作割合」は同じ処理を行います。

用例

'!TITLE "プログラムの待機"
 ' 指定した動作割合になるまでプログラムを待機
 Sub Sample_WaitMotion

     TakeArm Keep = 1

     Dim aaa As Position
     Dim bbb As Integer

     ' 現在位置を取得
     aaa = CurPos

     ' 内部速度を10に設定
     Speed 10

     ' 現在位置からP( 400, 300, 300, 180, 0, 180, -1 )へ移動開始後、次の処理へ移動
     Move L, P( 400, 300, 300, 180, 0, 180, -1 ), Next

      bbb = WaitMotion(0,50)
     if bbb == -1 then ' 動作割合が50%になったら

         ' I/Oポート番号240をON
         Set IO[240]
      ' メッセージ出力ウィンドウにONを示す"1"を表示
         PrintDbg IO[240]
     else ' 正常でなければ
         ' メッセージ出力ウィンドウにS変数を表示
         PrintDbg S[1]
     end if

 End Sub
 '!TITLE "プログラムの待機"
 ' 加速が終了するまでプログラムを待機
 Sub Sample_WaitMotion

   TakeArm Keep = 1

   Dim aaa As Position

   ' 現在位置を取得
   aaa = CurPos

   ' 内部速度を10に設定
   Speed 10

   ' 現在位置からP( 400, 300, 300, 180, 0, 180, -1 )へ移動開始後、次の処理へ移動
   Move L, P( 400, 300, 300, 180, 0, 180, -1 ), Next

   WaitMotion 5

   ' 加速が終了したらI/Oポート番号240をON
   Set IO[240]

   ' メッセージ出力ウィンドウにONを示す"1"を表示
   PrintDbg IO[240]

 End Sub

ID : 5104

<< 前へ        次へ >>