上文说到,用户可以把经常用的子程序变为循环,有什么好处?不多:
- 安全,因为存储位置不同,不容易被操作者误删
- 使用方便
哪里方便?下面举例说明
3. 循环
编写个mysub4.spf,内容如下:
proc mysub4(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
把这个子程序拷贝到:

在零件程序中编写mymain.mpf:
mysub4(90,90)
M02
有人说,这个主程序和子程序和之前的例子一样!一样吗?真的一样吗?
不一样!主程序里没有了EXTERN那个语句了,这是循环和子程序的区别,放在循环目录下的子程序,不再需要在主程序中用EXTERN为子程序做声明,可以直接调用。
有人如果按这个例子做,可能会发现执行主程序时,系统有报警说找不到子程序,对的。这里有个需要注意的地方:把子程序拷贝到循环目录下,要重新启动系统,系统才认这个循环。
你是不是又会问,如果在子程序目录和循环目录有同名的子程序,而主程序中又有EXTERN的子程序声明,当主程序调用mysub4这个子程序时,系统会执行哪一个呢?有SINUTRAIN软件的,可以试试。
举例说明(很多情况下,资料中没有说的,要自己想办法去测试,学习操作编程使用SINUTRAIN就很好)
在子程序目录下编写个mysub5.spf,如下:proc mysub5
msg("this is sub.")
m0
m17
在循环目录下也编写个mysub5.spf
proc mysub5
msg("this is cycle.")
m0
m17
在主程序目录中编写mymain5.mpf,内容如下:
mysub5
m02
执行这个主程序,屏幕显示:

答案揭晓,执行程序后,在报警信息栏上显示的是“this is sub”,也就是说执行的是子程序目录下的mysub5.spf,而非循环目录下的mysub5.spf!
因此,请注意:
- 用户编写子程序时,不要和机床厂编写的循环重名!或者说提醒机床厂编写循环时,名字要“特殊”些。
补充说明:
msg(“字符串”)语句是显示圆括弧中的字符串
例:msg(“this is sub”)执行这个程序段时,会在报警信息行显示 this is sub,如上图。
例:msg(“R1=”<<R1)执行这个程序段时,会在报警信息行显示R1=123 (如果此时R1的数值就是123的话 )(符号“<<”是将R1数值转换为字符串)