简单的R参数2
昨天的小文排版看着有点儿乱,建议横屏看。
今天继续说说R参数。昨天提到R参数有两种写法,实际上对应了两类变量:
一类叫做预处理变量(Preprocessing variables);另一类叫做主运行变量(Main run variables)。
什么叫预处理变量呢?都知道NC程序执行时都有预处理,在预处理时就读写了的变量就是预处理变量。而主运行变量是些只有在程序运行时才读写的变量。不好理解?举例说明。
编写主程序mymain.mpf,内容如下:
g0 x0
R1=0
M0
R1=R1+1
M02
编写主程序mymain2.mpf,内容如下:
g0 x0
R1=0
M0
do $R1=$R1+1
M02
两个有差别吗?
先看第一个程序,运行到M0时,R1=1,即已经执行了R1=R1+1
再看运行第二个程序,运行到M0时,R1=0,即程序还没运行到计算读写R参数的语句,所以R1的数值不会变
预处理变量有:
$M:机床数据
$S:设定数据,保护区
$T :刀具管理数据
$P:编程值
$C:ISO封装循环的循环变量
$O:选项数据
R:R参数(计算参数)
主运行变量有:
$$M:机床数据
$$S:设定数据
$A:当前主运行数据
$V:位置控制器数据
$R:R参数(计算参数)
有人会问,R参数在预处理时就计算了,像第一个例子,还没执行到计算,系统就都算完了,那会不会导致错误?比如:
g0 x0
R1=0
mylabel:
R1=R1+1
g01 x=R1*10 F500
g4f1
if R1<10 gotob mylabel
M02
语句比较简单,就不解释了。这个程序会不会导致X轴直接走到X100呢?
看下用伺服跟踪功能记录的程序执行过程:
黄色曲线是R1的数值,绿色曲线是X轴的实际位置。
可以看到R1在程序执行时,就一下累加到了10,但X轴并不是直接走到X100,而是X10,X20, X30... X100,按照编程的原意一步一步执行的,这是因为预处理是计算语句和轴移动语句按照先后顺序都预处理了,所以执行结果是对的。
虽然都是R参数,但是R1是预处理变量,而$R1是主运行变量。
看下面的程序:
g0 x0
every r1>0 do $r2=123
m0
mylabel:
M02
执行结果是什么?看视频的执行结果,程序运行到M0后,修改R1,R2参数没有变化。
修改下程序:
g0 x0
every $r1>0 do $r2=123
m0
mylabel:
M02
同样运行到M0,这次修改R1,会引起R2的变化。
这就是预处理变量和主运行变量的差别。
程序中用到的“EVERY ... DO ...”,叫做同步动作(Synchronized actions)。以后专门实验讲解。