记学习RAPID中断特性的一则笔记 – 初识 RAPID 中的 Interrupts

题记:国庆长假,整理了以前几篇老文章放上来。也算是对自己足迹的一个记录。这篇文章大概是 2008年10月记录的。Interrupts 中断是 ABB Robot 编程语言 RAPID 中很实用的一个功能,后面的文章 LT 会陆续介绍到。这里发的是当时学习最普通的中断功能(对某一信号响应)时做的一个学习笔记,内容上有摘录和翻译了官方文档(RAPID 4.0.40 )里的一些片断。注释是以”!”标识的,内容原来是英文的,这里改为了中文以便区别代码。实际上用中文作注释是不明智的。

初识 RAPID 中的 Interrupts

原发布于2008年10月@CSDN Blog

 

准备仔细研究RAPID的语法结构,由于中断功能比较常用,故先拿它开刀。正文之前,先说个形象的说法来解释程序里处理外部I/O的方法:查询和中断。那两者有什么区别呢?话说某人得了孩子,照看婴儿,于是就用撒尿论来解释中断和查询的区别:

查询:每隔一段时间就去看看婴儿尿了没有
中断:听到婴儿大哭,应该是尿了,赶快去处理

步入正文,举个例子:

!例子: VAR intnum empty;
VAR intnum full;
PROC main()
!连接中断程序
CONNECT empty WITH etrap;
CONNECT full WITH ftrap;
!定义 feeder中断信号
ISignalDI di1, high, empty;
ISignalDI di3, high, full;


IDelete empty;
IDelete full;
ENDPROC
!响应“feeder empty” 中断
TRAP etrap
open_valve;
RETURN;
ENDTRAP

!响应 “feeder full” 中断
TRAP ftrap
close_valve;
RETURN;
ENDTRAP

 

 

 

中断介绍(interrupts):

中断(interrupts)是编程定义的事件,用中断号来识别。当一个中断条件满足真(TRUE)时中断就会发生。中断发生时正常运行的程序暂停,并把控制权交给中断子程序。
即使机器人立即识别到一个中断发生(硬件速度会延迟),它的响应(调用trap子程序)只会发生在程序特定位置,即:

  • 当指令被执行时
  • 等待型指令执行中的任何时间,如 WaitUntil
  • 运动型指令执行中的任何时间,如 MoveL

通常中断检测和响应之间有几十ms的延迟,取决于中断时何种运动被正在执行。中断可以被禁用和启用。如果中断被禁用,发生的任何中断将会被排队不被调用直到中断被再次启用。注意中断队列可以包含一个以上的等待中断。列队的中断遵循FIFO即先进先出的顺序。当一个陷阱子程序执行时中断通常是被禁用的。当步进运行时或者当程序被停止时,中断将不会被处理。这种环境下产生的中断是不被处理的。一次可被定义的中断的最大数目被限制在每个任务(task)100个。

中断处理(interrupt manipulation):

中断要定义以便机器人识别。定义指明了中断的条件并激活和启用中断。

!例子:
VAR intnum sig1int;

ISignalDI di1, high, sig1int;

一个激活的中断(activated interrupt)可以撤销其活动(deactivated)。在没有激活的时间里,产生的任何中断被扔掉(thrown away)不执行任何trap中断子程序。

!例子: !不激活
ISleep sig1int;

!激活
IWatch sig1int;
 

一个启用的中断(enabled interrupt)也可以使其禁止。在禁止的时段里,产生的任何中断将列队并在终端启用时再次调用。

!例子:
!禁用
IDisable sig1int;

!启用
IEnable sig1int;

删除一个中断就是移除它的定义。明确的说没有必要去移除一个中断定义,但是前一个定义如果不删除的话就不可以定义一个新的中断。

!例子:
IDelete sig1int;

中断子程序(trap routines):

代码如本篇开头所写。中断子程序提供处理中断的方法。一个中断子程序和一个特定的中断可以使用CONNECT指令连接起来。当一个中断发生时,控制权立即转移到相关联的中断子程序。如果一个中断发生后,没有连接任何中断子程序,将作为一个严重错误,如:导致程序立即终止执行。
几个中断可以连接到相同的中断子程序。系统变量INTNO包含了中断号并可以被一个中断子程序用来识别某个中断。当必要的动作执行后,一个中断子程序可以使用RETURN指令来终止,或者直接执行到ENDTRAP。然后程序继续从中断发生的地方继续执行。

注:摘译自 RAPID Overview 4.0.40

扩展阅读:
中断和异常 http://blog.csdn.net/liangzhibiao/article/details/4049304
中断与异常有什么区别?http://topic.csdn.net/t/20040916/13/3378467.html

One thought on “记学习RAPID中断特性的一则笔记 – 初识 RAPID 中的 Interrupts

  1. Pingback: 边沿检测原理 | LT

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.