SINUMERIK的程序管理中分为三个目录:零件程序、子程序和工件,如下图:

零件程序目录下的文件后缀名都是“.MPF”,通常也叫做主程序;子程序目录下的文件后缀名都是“.SPF”;工件目录下就复杂了,工件目录下的子目录一般对应一个工件,原则上和这一工件相关的主程序、子程序、刀具数据、零偏数据以及工艺文件等都放在一起,目的是为了方便数据管理,以后再加工这个零件的话,非常方便。
在实际使用中,经常会用到主程序调用子程序的情况,这个简单吗?可简单可复杂,子程序种类也很多:有不带参数的子程序,带参数的子程序,可重复使用的子程序也可以叫循环(这里又有标准循环,机床厂循环和用户循环),还有特殊的叫异步子程序,事件触发的子程序。咱们这里先介绍机床用户可能用到的子程序,且听我慢慢道来:
不带参数的子程序调用
这个简单,举个例子,在主程序中编写mymain.mpf:
mysub
M30
再在子程序中编写mysub.spf:
msg("子程序显示")
M0
M17
然后,在自动方式下,选择mymain.mpf,执行。显示如下:

主程序和子程序间可以借助R参数或者全局用户数据(GUD)传递数据,当然这种方式程序的可读性不好,而且参数容易搞混,所以如果有参数要传递,建议使用带参数的子程序。
2. 带参数的子程序调用
主程序mymain.mpf:
EXTERN mysub2(real,real)
G0 X0 Y0
mysub2(100,200)
M30
子程序mysub2.spf:
PROC mysub2(real x_pos, real y_pos)
G01 X=x_pos Y0 F5000
X=x_pos Y=y_pos
X0 Y=y_pos
X0 Y0
M17
这里有几个地方要注意:
- 带参数的子程序必须用EXTERN在主程序中声明
- 子程序中以PROC开头定义子程序的形参数据类型,在PROC后还可以通过下面语句定义:
-SAVE:” 进入子程序时保存现场(如生效的G代码),子程序执行完后,再恢复现场
- SBLOF/SBLON:进入子程序后,禁止/允许单段
-DISPLOF/DISPLON:禁止/允许显示子程序程序段
-DISPLOF ACTBLOCNO:禁止显示子程序程序段时,若程序出错会显示出错程序段号
例:PROC mysub2(real x_pos, real y_pos) SAVE DISPLOF ACTBLOCNO
主程序在调用子程序时给实参的这种参数传递方式,使子程序更易读,也更通用。
机床厂会编写子程序实现机床的某一功能,机床用户可以编写子程序实现某一特定加工,我们把这种经常重复利用的、有特定目的的子程序,称之为“循环”,循环有专门的存放目录,如下图所示,其中:
“标准循环”目录存放的是西门子的标准车削、铣削等工艺循环
“制造商循环”目录存放的是机床厂为这台机床编写的循环,比如换刀循环
“用户循环”目录应该是机床用户自己编写的一些循环

如要找到循环的目录,查看循环,首先要有权限(系统有7级权限,目的是实现专人专事,避免发生安全事故)。如果有权限,进入“调试”区域,按“系统数据”软键,用光标键找到“NC数据”目录,回车,选择“循环”目录,回车。
警告:不能随意删除“制造商循环”和“用户循环”目录下的程序,否则可能导致机床故障!