M指令在西门子系统中的编制和使用【资讯】
我们在数控系统(西门子)中大量使用M指令,比如M3是主轴正转、M5主轴停转等常规通用指令,也有制造商自己开发的某些特定功能或动作的M指令。特别是加工中心换刀程序中写有多个M指令,每一步的动作都有特定的M代码完成,并且有先后顺序,出故障时还能停止,往往还伴有报警。那么这些M指令是怎么编写的,在使用时又是如何做到条件检测的,本文将就这一问题进行讨论。
一、M0-M99动态M功能
在NC程序中M功能执行时(以840D系统为例),会触发一个信号,该信号会传送到PLC接口,通过840D的调试手册可以查出该信号(X206.3),而这些信号,在PLC中只存在一个扫描周期,所以一般会使用S指令,置位某个地址然后去驱动某个动作。
程序段如下(以通道1为例):
N010 G0 X0 M10 ? ? ? ? ? ? ? ?//启动冷却指令M10
...
N080 M11 ? ? ? ? ? ? ? ? ? ? ?//当NC程序运行到此步时,M11关闭冷却
在PLC程序中我们编写如下程序:
A X195.2 ? ? ? ? ? ? ? //M10执行时在nck程序的通道1中,激活一个PLC扫描周期;
S Q0.0 ? ? ? ? ? ? ? ? ? ? ? ? //冷却泵启动(Q0.0为控制泵接触器的输出信号)
A X195.3 ? ? ? ? ? //M11执行时在nck程序的通道1中,激活一个PLC扫描周期
R Q0.0 ? ? ? ? ? ? ? ? ? ? //冷却泵停止
实际上我们很多M指令是“闭环”的,就是指令执行后还要检测执行有没到位信号或者压力信号等,若不到位就无法执行下一步,一直停在该M指令处。这就需要PLC或者NC对指令进行处理了。
PLC的处理方法是在执行动作的同时将“读入使能禁止”(X6.1)激活,同时检测反馈信号,当反馈信号正常时再复位该“读入使能禁止”,此时该M指令就完成“闭环”反馈,执行下一步了。如在某程序中有个松刀动作M20,要求松刀不到位时不能执行下一步,程序如下:
A X196.4 ? ? ? ? ? //M20执行时在nck程序的通道1中,激活一个PLC扫描周期
S Q0.1 ? ? ? ? ? ? ? ? ? ?//驱动松刀电磁阀
S X6.1 ? ? ? ? ? ?//同时激活“读入使能禁止”
A Q0.1 ? ? ? ? ? ? ?
A I0.1 ? ? ? ? ? ? ? ? ? ? //检测松刀到位信号
R X6.1 ? ? ? ? ? ?//到位后,复位该信号,NC程序继续执行
除了用这种PLC程序做检测外还可以结合NC的IF语句做判断,这在加工中心的换刀程序中大量使用。如某龙门加工中心换刀程序中有段程序:
M93 ? ? ? ? ? ? ? ? ? ? ?//刀库门开
_TT:_MM[0]=$A_DBB[80] ? //Y、Z轴运动条件:开门到位
? ? IF _MM[0]==0 ?GOTOB _TT ?
?G153 G01 G90 ?Y=$MA_FIX_POINT_POS[1,AX2] ?F=HIGHSPEED
?G153 G01 G90 ?Z=$MA_FIX_POINT_POS[1,AX3] ?F=HIGHSPEED
程序中IF语句就是用来检测开门信号的,如果不到位,Y、Z轴是不能运动的,否则有撞门风险,$A_DBB[80]主要是通过如图1所示的PLC实现的。我们能够清晰的看到以下的逻辑,执行M93后激活X205.5,从而通过M110.7激活开门的气阀Q41.0(Network66),同时Network67在检测信号,当开门信号到位,关门信号脱开时,把1传送给B80。
再通过如图2所示的PLC,用OB1调用FC21把B0开始的200个字节,都写入$A_DBB[0]开始的200个字节里。这样就实现了$A_DBB[80]能够检测开门信号有没到位的功能了。
二、静态M功能
该M指令的接口信号地址类型和块编号功能由OEM厂家自行定义,它和PLC地址没有标准对应关系,如M99=125实现开门动作,PLC编写如下:
A(
L 99 ? ? ? ? ? ? ? ? ? ? ? ?
L W68 ? ? ? ? ?
==D) ? ? ? ? ? ? ? ? ? ? ?//比较读入的M静态指令是不是M99
A(
L 125
L D70
==D) ? ? ? ? ? ? ? ? ? ? ?//比较读入的是不是125
A X58.0 ? ? ? ? ?
S Xxx.x ? ? ? ? ? ? //确定了执行的M99=125后驱动某个地址
在NC通道执行时99被存入W68的地址中,该变量定义为整形变量。在执行时将125存入D70的地址中,该变量定义为实数变量。还有关键信号X58.0,该变量在M功能代码改变时跳变,信号保持一个PLC周期,可以用它锁存M功能代码读取瞬间的代码数值,以保证存入数据不出错。当NC读入的程序段执行M99=125时激活最后的Xxx.x地址,然后通过这个地址可以做后续的逻辑编写,比如驱动开门,再做开门信号的检测等等。
以上为方便理解,只是简单写出了主要的原理和思路,真正运用时还需要考虑转换数据类型等,部分比较值肯定用索引地址和间接指针寻址代入减少代码使用,逻辑保护也要加强很多。