目录 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个运动指令触发了中断程序
代码2:$OUT_C 在预进中的相应
如果将第12行更改为
$out_c[10] = true
那么自然就有个问题,$OUT_C后面的语句被预进了么?
代码3:$OUT_C 是否影响预进
请看下面代码,$out[11] 的值为 true 时,将触发中断程序 check()。运行结果表明 i 值(初始值为0)被提前赋值了,结果不言而喻。
四、归纳
KUKA的机器人解释器需要预先读取运动指令以便进行轨迹规划,这个工作是在运动指令被执行之前。如果要实现点位之间的轨迹平滑过渡至少需要预读一个运动语句。在预读的过程中,被预进到指令都会被执行。但是比如$OUT_C[]这样的的指令则是根据当前正在执行的指针位置而执行。
五、扩展阅读
- Getting Approximation not possible error
http://www.robot-forum.com/robotforum/kuka-robot-forum/getting-approximation-is-not-possible-error/msg60442/#msg60442