加工程序分为主程序和子程序,一般地,NC执行主程序的指令,但当执行到一条子程序调用指令时,NC转向执行子程序,在子程序中执行到返回指令时,再回到主程序。
当我们的加工程序需要多次运行一段同样的轨迹时,可以将这段轨迹编成子程序存储在机床的程序存储器中,每次在程序中需要执行这段轨迹时便可以调用该子程序。
当一个主程序调用一个子程序时,该子程序可以调用另一个子程序,这样的情况,我们称之为子程序的两重嵌套。一般机床可以允许最多达四重的子程序嵌套。在调用子程序指令中,可以指令重复执行所调用的子程序,可以指令重复最多达999次。
一个子程序应该具有如下格式:
O××××;
子程序号
…………;
…………;
…………;
子程序内容
…………;
M99;
返回主程序
在程序的开始,应该有一个由地址O指定的子程序号,在程序的结尾,返回主程序的指令M99是必不可少的。M99可以不必出现在一个单独的程序段中,作为子程序的结尾,这样的程序段也是可以的:
G90 G00 X0 Y100. M99;
在主程序中,调用子程序的程序段应包含如下内容:
M98 P×××××××;
在这里,地址P后面所跟的数字中,后面的四位用于指定被调用的子程序的程序号,前面的三位用于指定调用的重复次数。
M98 P51002;调用1002号子程序,重复5次。
M98 P1002;
调用1002号子程序,重复1次。
M98 P50004;调用4号子程序,重复5次。
子程序调用指令可以和运动指令出现在同一程序段中:
G90 G00 X-75.
Y50. Z53. M98 P40035;
该程序段指令X、Y、Z三轴以快速定位进给速度运动到指令位置,然后调用执行4次35号子程序。
包含子程序调用的主程序
,程序执行顺序如下例:
和其它M代码不同,M98和M99执行时,不向机床侧发送信号。
当NC找不到地址P指定的程序号时,发出PS078报警。
子程序调用指令M98不能在MDI方式下执行,如果需要单独执行一个子程序,可以在程序编辑方式下编辑如下程序,并在自动运行方式下执行。
×
×××;
M98 P××××;
M02(或M30);
在M99返回主程序指令中,我们可以用地址P来指定一个顺序号,当这样的一个M99指令在子程序中被执行时,返回主程序后并不是执行紧接着调用子程序的程序段后的那个程序段,而是转向执行具有地址P指定的顺序号的那个程序段。如下例:
主程序
子程序
这种主-子程序的执行方式只有在程序存储器中的程序能够使用。
如果M99指令出现在主程序中,执行到M99指令时,将返回程序头,重复执行该程序。这种情况下,如果M99指令中出现地址P,则执行该指令时,
跳转到顺序号为地址P指定的顺序号的程序段。大部分情况下,我们将该功能与可选跳段功能联合使用。如下例:
当可选跳段开关置于下位时,跳段标识符不起作用,M99P20被执行,跳转到N20程序段,重复执行N20及N30(如果M99指令中没有P20,则跳转到程序头,即N10程序段),当可选跳段开关置于上位时,跳段标识符起作用,该程序段被跳过,N30程序段执行完毕后执行N50程序段,直到N70M02;结束程序的执行。值得注意的一点是如果包含M02、M30或M99的程序段前面有跳段
标识符“/
”,则该程序段不被认为是程序的结束。