宏程序各个厂家的实现出入较大,不同厂家实现的方法和功能也有差异,一般来说,越新的系统对宏程序的支持越好。具体到在某一台设备上实现功能,还是需要不断的调试与查询手册。来看下面的流程图,左侧的实现很简洁,如果烧烤没开,一起吃烧烤这个诱人的邀请不会被执行,程序吃个面就结束了,那如果烧烤店出摊了,那就一起吃个烧烤,炒面就免了。流程很清楚,也是电脑编程中常用的做法,而宏程序的实现却是后面这种,通过2个跳转实现了左边程序相同的效果。所以说有点繁琐,这种goto结构早已淡出了电脑编程,但在宏程序中还是在广泛应用。
上图中右边部分如果不在吃炒面后跳转的话,烧烤开着你能正常吃到一顿烧烤,如果没开,那就吃完炒饭在去吃烧拷,违背了程序非好即坏二选一的初衷。来看下下面的例题,均匀分布5个孔,现在只打两侧4个,中间一个不打需要跳过,有规律的孔我们可以直接使用循环,先按5孔编程:
G54
M3
G0X0Y0Z0
#1=0
WHILE[#1LE60] DO 1
G81X#1Y0Z-10R0
#1=#1+15
END 1
G0Z50
M5
M30
又因为中间的孔需要被跳过,也就是说,当#1=30的时候,这个孔是需要跳过的,现在修改程序如下:
G54
M3
G0X0Y0Z0
#1=0
WHILE[#1LE60] DO 1
IF[#1EQ30]GOTO 100
G81X#1Y0Z-10R0
N100 #1=#1+15
END 1
G0Z50
M5
M30
解释一下程序,“EQ”表示等于,”GE”表示大于等于,“LE”表示小于等于,“IF”是一个选择语句,其后的中括号包括的也是条件语句,整句的意思是,如果#1=30,那么跳转到标记为100的程序段开始执行,中间的打孔语句就被跳过了。下面是一个稍微复杂点的例子:
编制程序如下:
G54
M3
G0X0Y0Z0
#1=0
WHILE[#1LE60] DO 1
IF[ [#1/30] NE INT[#1/30]]GOTO 100
G81X#1Y0Z-10R0
GOTO 200
N100 G81X#1Y20Z-10R0
N200 #1=#1+15
END 1
G0Z50
M5
M30
条件语句内,[#1/30] NE INT[#1/30]表示,当#1/30与#1/30并取整的结果不同时,跳转到标记为100的程序,否则按正常流程运行,问题是在正常流程中,如果不加“GOTO 200”无条件语句时,程序在不满足条件时会把两个孔都打掉。二选一的情况下,会需要用到无条件跳转语句。顺带一提,宏程序中可以对变量进行复杂的运算,基本包括了10块钱一个的地摊计算器的所有功能。
当然,上面这个题目可以有更为巧妙的方法,比如我们把原点放在20的中心,往上打孔需要走10mm,往下打孔也需要走10mm,所不同的是,往上是正方向,往下则是反方向:
G54
M3
G0X0Y0Z0
#1=0
#2=10
WHILE[#1LE60] DO 1
G81X#1Y#2Z-10R0
#1=#1+15
#2=-#2
END 1
G0Z50
M5
M30
每循环一次,#2会被赋值为它自身的相反数,当#2=10的时候,它被赋值为-10,当它的值为负时,因为负负得正,所以值又变回了10。