Wait

使用MemSw或Sw,在指定條件成立之前或在指定時間等待程式。(也可用Oport替代Sw,以檢查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