KRL 中的 advance run 和 main run 概念

目录 Content
[hide]

在 KRL 语言中,有 advance run 和 main run 的概念,对应的是什么样的机制呢?本文欲对其做一个解释和验证。

一、引子

以两个系统变量来说明:

1.$OUT 变量

$OUT[Output number]=State
  • The variable can be used to set a digital output in the robot program and then
    reset it again.

2.$OUT_C 变量

$OUT_C[Output number]=State
  • The variable can be used to set or reset a digital output relative to the main
    run.

注意到对 OUT_C 的解释是 main run,那么是怎么一回事呢?

二、背景

1.$ADVANCE 变量

在 KRL 中有一个系统变量 $advance

$ADVANCE=Number
  • Maximum number of motion instructions in the advance run

指的是在KRL的机器人解释器中,有一种预进机制,程序执行时,解释器会根据 $advance 的数值,将对应的运动指令语句预读,在运动语句之间的其他指令就会被执行,这个机制就叫做 advance run。同时,解释器会有一个指针指示当前正在执行的语句,这个叫作 main run。下面将进行验证。

三、验证

请看下面代码

代码1:$OUT 在预进中的响应

解释器提前3个运动指令触发了中断程序

KRL_out

代码2:$OUT_C 在预进中的相应

如果将第12行更改为

$out_c[10] = true

则是这样的结果,说明直到运动指令语句执行完毕,才触发中断。KRL_out_c

那么自然就有个问题,$OUT_C后面的语句被预进了么?

代码3:$OUT_C 是否影响预进

请看下面代码,$out[11] 的值为 true 时,将触发中断程序 check()。运行结果表明 i 值(初始值为0)被提前赋值了,结果不言而喻。

KRL_out_c_四、归纳

KUKA的机器人解释器需要预先读取运动指令以便进行轨迹规划,这个工作是在运动指令被执行之前。如果要实现点位之间的轨迹平滑过渡至少需要预读一个运动语句。在预读的过程中,被预进到指令都会被执行。但是比如$OUT_C[]这样的的指令则是根据当前正在执行的指针位置而执行。

五、扩展阅读

 

Leave a Reply

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