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
← Tool函數 Trap(系統狀態觸發) →