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+ 4.x为止的Trap Call功能在Epson RC+ 8.0中被替换为Trap Xqt。
Epson RC+ 4.x为止的Trap GoSub功能在Epson RC+ 8.0中被删除。请使用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(系统状态触发) →