Trap(使用者定義觸發)

用於定義插斷以及發生插斷時的處理。

若使用Trap命令,則可因發生事件而跳到標籤或叫用函式。Trap命令有2種類型。

  • 將使用者所定義的輸入狀態作為觸發的4個Trap
  • 將系統狀態作為觸發的7個Trap。

在本項目中,對使用者定義觸發的Trap進行說明。

格式
Trap Trap編號, 條件運算式 GoTo 標籤

Trap Trap編號, 條件運算式 Call 函式名稱

Trap Trap編號, 條件運算式 Xqt 函式名稱

Trap Trap編號

參數

Trap編號
以運算式或數值指定Trap編號(1~4的整數)。(SPEL+最多支援4個同時啟用的Trap。)
事件條件運算式
用於指定作為觸發器的輸入狀態。
[事件] 比較運算符(=, <>, >=, >, <, <=) [整數運算式]
可將以下函數或變數用於事件。

  • 函數:Sw、In、InW、Oport、Out、OutW、MemSw、MemIn、MemInW、Ctr、GetRobotInsideBox、GetRobotInsidePlane、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

  • [例]

    Trap 1, Sw(5) = On Call, TrapFunc
    Trap 1, Sw(5) = On And Till(6) = Off, Call TrapFunc
    
    標籤
    在Trap條件成立時,讓程式執行轉移的目的地標籤。
    函數名稱
    Trap條件成立時執行Call或Xqt的函數。不可指定有引數的函式。

    說明
    Trap用於在條件成立時執行以GoTo、Call、Xqt等指定的插斷處理。必須在Trap條件運算式中包含1個以上的上述函數。

    Trap條件運算式中含有變數時,則在設定Trap條件時運算該值。可能會變成非預期條件,因此建議在條件運算式中不使用變數。

    一旦執行插斷處理,則清除該Trap設定。若要執行相同的插斷處理,必須再度執行Trap命令。

    若要取消Trap設定,則僅指定Trap編號參數執行Trap命令。

    [例] 「Trap 3」用於取消Trap #3。

    此外,若從宣告的函式退出,則自動取消Trap Goto。

    若完成宣告的工作,則取消Trap Call。

    在尚未完成所有工作之前,不會取消Trap Xqt。

    指定GoTo時

    在設定Trap的工作中,會對執行中的命令進行如下處理,並將控制轉移到指定目的地標籤。

    • 立即暫停手臂動作(快速暫停)。
    • 中斷因Wait或Input命令發生的等待狀態。
    • 其它命令的執行皆於轉移控制前完成。

    指定Call時

    執行與GoTo相同的處理後,將控制轉移至指定目的地的函式。

    函式執行完成後,程式會返回到發生插斷時的下一個陳述式。

    Call不可用於Trap處理的函式。

    此外,若在Trap處理的函式中發生錯誤,透過OnErr進行的錯誤處理會變為停用狀態,而且必定發生錯誤。

    指定Xqt時

    透過程式控制生成指定函式,將其做為插斷處理專用工作。此時,會繼續執行Trap命令的工作。

    無法在插斷處理的工作中以Xqt執行其它工作。

    注意


    • 面向Epson RC+4.x使用者

      在Epson RC+ 8.0中,已以Trap Xqt取代Epson RC+4.x之前版本的Trap Call功能。

      在Epson RC+ 8.0中,已刪除Epson RC+4.x之前版本的Trap GoSub功能。請以Trap Call代替。

    • 在條件運算式中使用變數時

      • 可使用的變數型態為整數型(Byte, Int32, Integer, Long, Short, UByte, UInt32, UShort)。
      • 不可使用陣列變數。
      • 不可使用本地變數。
      • 變數值未滿足條件的時間超過0.01秒時,系統可能無法檢測到變數變化。
      • 系統內可使用的變數等待數量有限。1個系統內可使用的變數等待數量最多64個(也包括Wait等條件運算式所用的變數等待數量)。若超過最大數量,則在建置專案時將發生錯誤。
      • 若以ByRef傳址要執行變數等待的變數,則發生錯誤。
      • 若條件運算式右邊的整數運算式中含有變數,則在設定Trap條件時運算該值。可能會變成非預期條件,因此建議在整數運算式中不使用變數。

    參照
    Call、GoTo、Xqt、SF_GetStatus

    Trap範例
    [例1] 使用者定義的錯誤處理

    Sw(0) Input用於輸入使用者定義的錯誤。

    Function Main
        Trap 1, Sw(0)= On GoTo EHandle  '定義Trap
        .
        .
        .
    EHandle:
        On 31                           '信號塔燈亮燈
        OpenCom #1
        Print #1, "Error is issued"
        CloseCom #1
    Fend
    

    [例2] 多工的使用

    Function Main
        Trap 2, MemSw(0) = On Or MemSw(1) = On Call Feeder
        .
        .
        .
    Fend
    .
    
    
    Function Feeder
      Select TRUE
        Case MemSw(0) = On
          MemOff 0
          On 2
        Case MemSw(1) = On
          MemOff 1
          On 3
      Send
    
      '重新設定下一個週期的Trap
      Trap 2, MemSw(0) = On Or MemSw(1) = On Call Feeder
    Fend
    

    [例3] 將全域變數用於條件

    Global Integer gi
    
    Function main
      Trap 1, gi = 5 GoTo THandle
      Xqt sub
      Wait 100
      Exit Function
    
    THandle:
      Print "IN Trap ", gi
    
    Fend
    
    Function sub
      For gi = 0 To 10
        Print gi
        Wait 0.5
      Next
    Fend