• 沒有找到結果。

错误恢复

在文檔中 技术参考手册 (頁 70-74)

请参阅 第39页的运用表达式中的函数调用。

1.12 错误恢复

在错误处理器中,可用一般指令处理错误。可用系统数据ERRNO确定出现的错误的类 型。随后可通过各种方式(RETURN、RETRY、TRYNEXT和RAISE)从错误处理器返 回。 RAISE

预定一个错误编号指令

用途 指令

预定一个新的RAPID语言系统错误编号。

BookErrNo

重启错误处理器或从错误处理器返回

用途 指令

出现严重错误时停止执行程序 EXIT

调用程序(已调用当前程序)的错误处理器 RAISE

重新执行导致错误的指令 RETRY

继导致错误的指令后执行指令 TRYNEXT

返回已调用当前程序的程序 RETURN

出现错误,从NOSTEPIN语句程序传至用户级的错误处理器。

RaiseToUser

取代StartMove和RETRY这两种指令的某一指令。该指令既可使 运动重新开始,也可重新执行导致错误的指令。

StartMoveRetry

下一页继续

70 技术参考手册 - RAPID语言概览

1.12 错误恢复

用途 指令

跳过最近要求的警告消息。

SkipWarn

重设有意义的重试次数。

ResetRetryCount

用途 功能

继续重试。

RemainingRetries

生成过程错误

用途 指令

FlexPendant上显示错误消息,将其写入机械臂消息日志。

ErrLog

程序中产生错误,随后调用程序的错误处理器。

ErrRaise

用途 功能

机械臂运动期间产生过程错误。

ProcerrRecovery

错误处理数据

用途 数据类型

错误的原因 errnum

错误消息的正文 errstr

错误处理配置

用于定义 系统参数

若错误处理器用的是RETRY,则将重算指令失败的次数。No Of Retry属于主题Controller中的类型System Misc。

No Of Retry

错误处理器

任意程序都可能有一个错误处理器。错误处理器实际上是程序的组成部分,同时任意 程序数据的范围也可由程序的错误处理器构成。若程序执行期间出现错误,则将控制 符传送至程序的错误处理器。

例子:

FUNC num safediv( num x, num y) RETURN x / y;

ERROR

IF ERRNO = ERR_DIVZERO THEN

TPWrite "The number cannot be equal to 0";

RETURN x;

ENDIF ENDFUNC

系统变量ERRNO包含错误编号(最新),可供错误处理器用于识别相应错误。在采取 必要行动后,错误处理器可:

• 以出现错误的指令后的指令作为起点,重新开始执行。这一切都用TRYNEXT指 令完成;

• 用RETURN指令返回控制符至程序调用程序。若该程序为有返回值程序,则 RETURN指令必须指定适当的返回值;

• 用RAISE指令将错误传送至程序的调用程序。

系统错误处理器

若不含错误处理器的程序中出现错误或到达错误处理器末尾(ENDFUNC、ENDPROC或 ENDTRAP),则调用系统错误处理器。系统错误处理器才会报告错误,并停止执行。

在程序调用链中,可能每个程序都有自己的错误处理器。若带错误处理器的程序中出 现错误,并用RAISE指令直接传送出错误,则在程序调用处会再次出现同样的错误,

即,传送错误。在没有错误处理器的情况下到达调用链顶端(任务的入口程序)时,

或到达调用链中任一错误处理器的末尾时,调用系统错误处理器。随后系统错误处理 器才会报告错误并停止执行。由于系统只能调用软中断程序(以应对中断),因此软 中断程序中的错误可传送至系统错误处理器。

错误恢复不适用于反向处理器中的指令。此时一般会将此类错误传送至系统错误处理 器。

错误处理器中出现的错误既不能恢复也不能应对。此时一般也会将此类错误传送至系 统错误处理器。

程序导致的错误

除了机械臂检测到的及导致的错误外,程序也可通过RAISE指令直接导致错误。可用 该功能恢复复杂情况。如,可用于脱离深层次嵌套代码位置。在出现指令中,可用1到 90的错误编号。对于直接出现的错误,可像处理系统导致的错误那样加以处理。

事件日志

利用错误处理器处理的错误仍会导致事件日志中出现警告。通过查阅事件日志,可跟 踪出现过的所有错误。

若想要在事件日志中不会写入警告的情况下处理好错误,则要用错误处理器中的指令 SkipWarn。这对于用错误处理器测试某些物项(如,有一份文件)存在与否很有用,

即使测试失败,也不会留下任何痕迹。

72 技术参考手册 - RAPID语言概览

1.12 错误恢复 续前页

1.13 UNDO

简介

RAPID语言程序可能包含一个UNDO处理器。若将程序指针移到程序范围外,则会自动 执行该处理器。据推测,这可用于清除执行部分程序后留下的侧放作用,如取消模态 指令(如打开一份文件)。大部分RAPID语言都可用于UNDO处理器中,但也有一些限 制,如运动指令等。

术语

以下术语与UNDO有关。

• UNDO:程序重设前清理代码的执行。

• UNDO处理器:含在UNDO上可执行的RAPID语言代码的RAPID语言过程或函 数的一个可选部分。

• UNDO程序:有UNDO处理器的一个过程或函数。

• 调用链:目前通过尚未完成的程序调用相互联系到一起的所有过程或函数。若 未另作说明,则假定从程序Main处开始。

• UNDO上下文:当前程序为以UNDO处理器作为起点的调用链的组成部分。

何时使用UNDO

通过将程序指针移到程序外,可以在任意点中止RAPID语言程序。有时,若程序正在 执行特定敏感程序时,则不适合中止程序。采用UNDO,可保护这些敏感程序,使其 不会出现意外的程序复位。在中止程序的情况下,运用UNDO可自动执行特定代码。

该代码应执行清理动作,比如,关闭文档。

详细的UNDO行为

若激活UNDO,则可执行当前调用链中的所有UNDO-处理器。这些处理器为含有RAPID 代码的RAPID过程或函数的可选部分。当前活跃的UNDO-处理器都是已调用但还未终 止的过程或函数的一部分,即为当前调用链中的程序。

意外将程序指针移出UNDO-程序范围时,如用户将程序指针移至Main,UNDO被激 活。另外,若执行EXIT指令导致程序复位或出于其他原因(如变更某些配置或删除程 序或模块时)程序复位,则UNDO将被启动。但如果程序到达程序或RETURN语句的结 尾处,并如常从程序处返回,则不会启动UNDO。

若调用链中有不止一个UNDO程序,则将按程序返回的顺序(由下至上)处理程序的 UNDO-处理器。离调用链末端最近的UNDO-处理器第一个执行,最接近Main的处理 器将最后一个执行。

限制

UNDO-处理器可访问从正常程序体处可到达的包括局部声明变量在内的所有变量或符 号。但UNDO上下文中将执行的RAPID代码有限制。

UNDO-处理器不得含有STOP、BREAK、RAISE或RETURN。若在UNDO上下文中试图 用上述任一指令,则将忽略该指令,同时产生ELOG警告。

在UNDO上下文中,也不允许存在诸如MoveL之类的运动指令。

在UNDO中,执行是一个连续过程,不可能跳过。UNDO启动时,自动将执行模式设为连 续。完成UNDO会话后,才会恢复原来的执行模式。

下一页继续

技术参考手册 - RAPID语言概览 73

1.13 UNDO

若执行UNDO-处理器期间终止程序,则不会再执行程序的其余部分。若调用链中还有 其他未执行的UNDO-处理器,则也会忽略掉。而这会导致出现ELOG警告。同时,还 会出现因运行出错造成的停止。

在UNDO-处理器中看不到程序指针。执行UNDO时,程序指针停留在其原来的位置,

但在完成UNDO-处理器时,会有所变化。

EXIT指令通过类似于运行出错或Stop这样的方式中止UNDO。UNDO-处理器的其余部 分都被忽略,将程序指针移至Main。

示例

程序:

PROC B

TPWrite "In Routine B";

Exit;

UNDO

TPWrite "In UNDO of routine B";

ENDPROC

PROC A

TPWrite "In Routine A";

B;

ENDPROC

PROC main

TPWrite "In main";

A;

UNDO

TPWrite "In UNDO of main";

ENDPROC 输出:

In main In Routine A In Routine B

In UNDO of routine B In UNDO of main

下一页继续

74 技术参考手册 - RAPID语言概览

1.13 UNDO

在文檔中 技术参考手册 (頁 70-74)