有个参数MD10713 $MN_M_NO_FCT_STOPRE [ n ],参数说明:机床数据MD10713 $MN_M_NO_FCT_STOPRE选择的M功能会在系统内部生成一个预处理暂停指令。也就是说:只有在完全执行好包含该M功能的程序段后才开始预处理下一个程序段(PLC应答、运动等)。含义说得比较清楚了。怎么验证这个参数设置的M代码会导致“预处理暂停”?在NC指令里,有专门的停止预处理指令:STOPRE。不知你用过没有,当时是因为什么用的?下面我们来做实验验证下这个参数的作用。使用的程序还是上文用到的程序:
N10 g0 x100 Y0
N20 $an_sltrace=1
N30 G64
N40 G1 X100 Y0 F10000
R1=1
N50 X99.9847695161587 Y1.74524061396078
N60 X99.9390827039876 Y3.48994961074216
N70 X99.8629534801318 Y5.23359553510047
N80 X99.7564050342896 Y6.97564725561419
N90 X99.6194698221486 Y8.71557412647174
……
N490 X70.7106790659974 Y70.7106771713121
N492 M88
N494 R1=R1+123
N500 X69.4658380310478 Y71.9339790825187
….
在程序中,我加了三段(用红色字标出)先保持机床参数的默认值:MD10713 $MN_M_NO_FCT_STOPRE [ 0 ]=-1运行程序,得到如下结果:

图中曲线含义:
亮绿色曲线--X轴位置实际值
黄色曲线--M功能1代码值(DB21.DBD70)
蓝色曲线--M功能1跳变信号(DB21.DBX58.0)
暗绿色曲线--X轴速度实际值
粉色曲线--R1的数值
之前的小文解释过M88对X轴运动连续性的影响,今天我们主要看R1数值的变化,R1在程序开始处赋值“1”,按很多人的想象,R1应该在系统执行N494程序段时才会变为“124”(在上图中黄色曲线和蓝色曲线突变的位置),但我们从上图看出,X轴开始运动没多久,R1就变成了“124”,为什么呢?因为程序的预读,数控系统在执行程序时,不是读一段程序,解释一段程序,执行一段程序,而是会一次读若干段程序,解释后保存在缓冲区等待执行,然后系统边执行程序边继续解释程序填充到缓冲区,这样处理是为了保证加工的连续性,因为现在很多铣削类加工都采用CAM出程序,程序中每段各轴运动距离都很短,如果没有缓冲区机制,那么机床运行就是一顿一顿地加工,这样的零件加工质量将是完全不可接受的,而且效率会极低。因此程序的预读很重要。
有人会有疑问,预读是很重要,但R1的数值在程序开始就变为了“124”,会不会导致程序错误?这个咱们稍后再说。我们先看会停止程序预处理的M代码
再次执行程序前,我们设置MD10713 $MN_M_NO_FCT_STOPRE [ 0 ]=88

然后,得到如下结果,这个结果是你期望的结果吧?M88不仅导致了X轴运动的不连续,而且暂停了程序预处理。好,我们回头看看刚才说的问题,预处理会不会导致R参数不对。我们修改下程序:
N10 g0 x100 Y0
N20 $an_sltrace=1
N30 G64
N40 G1 X100 Y0 F10000
R1=1
N50 X99.9847695161587 Y1.74524061396078
N60 X99.9390827039876 Y3.48994961074216
N70 X99.8629534801318 Y5.23359553510047
N80 X99.7564050342896 Y6.97564725561419
N90 X99.6194698221486 Y8.71557412647174
……
N480 X71.9339809438486 Y69.4658361035842
R2=R1
N490 X70.7106790659974 Y70.7106771713121
N492 M88
N494 R1=R1+123
N500 X69.4658380310478 Y71.9339790825187
……
然后,我们看看程序运行后的R2,运行结果:

当然,在实际使用中,为了监控R参数,或者前面介绍的GUD等这些程序中使用的变量,可以在计算前后加“STOPRE”。
未完待续