Wait
MemSwやSwを使用して、指定したイベント条件が成立するまで、または指定時間の間、プログラムを待機します。 (SwのかわりにOportを使って、I/O出力をチェックすることもできます。)
グローバル変数の値が変化するのを待機することもできます。
書式
(1) Wait 時間
(2) Wait イベント条件式
(3) Wait イベント条件式, 時間
パラメーター
- 時間
- 待機時間を0~2147483 の実数 (単位: 秒)で指定します。最小有効桁は0.01秒です。
- イベント条件式
- 以下の書式でイベント条件を指定します。
- [イベント] 比較演算子(=, <>, >=, >, <, <=) [整数式]
- 次の関数や変数をイベントに使うことができます。
関数: Sw, In, InW, Oport, Out, OutW, MemSw, MemIn, MemInW, Ctr, GetRobotInsideBox, GetRobotInsidePlane, MCalComplete, Motor, LOF, ErrorOn, SafetyOn, EstopOn, TeachOn, Cnv_QueLen, WindowsStatus, AtHome, LatchState, WorkQue_Len, PauseOn, AIO_In, AIO_InW, AIO_Out, AIO_OutW, Hand_On, Hand_Off, SF_GetStatus
変数: Byte, Int32, Integer, Long, Short, UByte, UInt32, UShort 型のバックアップ変数, グローバル変数, モジュール変数
- また、以下の演算子で複数のイベント条件式にマスクをかけることや、複合的に組み合わせることができます。
演算子: And, Or, Xor, Mask
解説
(1) 時間だけを指定した場合
タイマーとしてWait命令を使うときは、指定時間だけプログラムを一時停止させ、その後プログラムの実行を継続します。
(2) イベント条件式だけを指定した場合
条件的インターロック機能としてWait 命令を使うときは、指定されたイベント条件が成立するまで、プログラムを待機します。TMout命令でタイムアウト指定している場合は、その指定時間が経過してもイベント条件式が成立しないとエラーになります。And, Mask, Or, またはXor命令などを用いて、1つのWait命令に対し複数の条件をチェックできます。使用例を参照してください。
(3) 時間とイベント条件式を指定した場合
イベント条件式と時間を指定したときは、条件が成立するか、指定時間が経過するかの、どちらかが成立したときに次のコマンドを実行します。Tw関数を使って、イベント条件式が成立したか、指定時間が経過したかを確認することができます。
注意
Waitにタイムアウトを併用する場合
Wait命令に待機時間の指定がないとき、タイムアウトを指定すると指定された状態を待つ制限時間を設定することができます。タイムアウトは、TMOut命令を使って指定します。詳細は、このTMOut命令の項を参照してください。 (TMOut命令のデフォルト値は、"0"で、これは時間制限がないことを意味します。)
Waitで変数待ちを行う場合
- 変数待ちできる変数型は整数型 (Byte, Int32, Integer, Long, Short, UByte, UInt32, UShort)です。
- 配列変数は、使用できません。
- ローカル変数は、使用できません。
- 変数値が0.01秒以上の間、イベント条件を満足していない場合、変数の変化をシステムが検出できない場合があります。
- システム内で使用できる変数待ちの数に制限があります。1システム内で使用できる変数待ちの個数は最大64個です (Tillなどのイベント条件式で使用された変数待ちも含みます)。最大数を超えた場合には、プロジェクトビルド時にエラーになります。
- 変数待ちを行う変数をByrefで参照渡しするとエラーになります。
- イベント条件式の右辺の整数式に変数または関数が含まれたときは、その値はWait条件設定時に演算されます。意図しない条件になる場合があるので、整数式には変数または関数を使用しないことを推奨します。
PC COMポート (1001~1008)を使用している場合
Wait命令でLof関数を使用することはできません。
Wait実行中に、プログラムが一時停止した場合
Wait命令実行中に、プログラムが一時停止 (Pause状態)となった場合でも、Wait命令は停止しません。イベント条件式が成立するか、指定時間が経過すると、Wait命令は終了します。
Wait命令で時間が指定されている場合、指定時間が経過する前に、継続実行でプログラムを再開すると、それまでの経過時間はリセットされ、プログラムは、指定された待機時間の間、待機します。
参照
AtHome関数, Cnv_QueLen関数, Ctr関数, ErrorOn関数, EStopOn関数, GetRobotInsideBox関数, GetRobotInsidePlane関数, In関数, InW関数, LatchState関数, Lof関数, Mask 演算子, MCalComplete関数, MemIn関数, MemInW関数, MemSw関数
Motor, Oport, Out, OutW, PauseOn, SafetyOn, Sw, TeachOn, TMOut, WindowsStatus, Tw, WorkQue_Len, SF_GetStatus
Wait使用例
下記例では、それぞれ動作命令を起動できる2つのタスクに対し、他方がロボット制御をしていないときに限ってロボット制御できるインターロック機能が働いています。これにより、それぞれのタスクが指定された動作を順序よく行うことができます。MemSwを併用したWait命令が、メモリーI/Oビット1が適切な値になるまでプログラムを待機し、安全になってから動作を再開させます。
Function main
Integer I
MemOff 1
Xqt !2, task2
For I = 1 to 100
Wait MemSw(1) = Off
Go P(i)
MemOn 1
Next I
Fend
Function task2
Integer i
For i = 101 to 200
Wait MemSw(1) = On
Go P(i)
MemOff 1
Next i
Fend
'入力0オンまで待機
Wait Sw(0) = On
'60.5秒待機した後に継続実行
Wait 60.5
'入力0がオフになり入力1がオンになるまで待機
Wait Sw(0) = Off And Sw(1) = On
'メモリービット0がオンまたはメモリービット1がオンになるまで待機
Wait MemSw(0) = On Or MemSw(1) = On
'1秒待機して出力1をオン
Wait 1; On 1
'入力ポート0の下位3ビットが1になるまで待機
Wait In(0) Mask 7 = 1
'グローバルInteger型の変数giCounterの値が10を超えるまで待機
Wait giCounter > 10
'グローバルLong型の変数glCheckの値が30000になるまで10秒間待機
Wait glCheck = 30000, 10