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