奇妙的循环
循环可以说是宏编程中最重要的概念,利用循环配合变量,可以用短短几行程序,来代替之前几十乃至数百行的程序。这还没完,因为程序的高度抽象,我们往往只需要修改少量的程序,就能将其用于其他结构类似但尺寸不同的产品。套用一句电脑编程的术语,这可以理解成为——具备一定的可重用性。
循环的语法
各厂宏程序的原理和逻辑基本相同,但语法以及性能上会有一定的差异,比如我们接下来要说的循环,在法拉克系统中,循环是这样的:
WHILE[#1LE20] DO 1
.
.
END 1
而在国产华中系统中,循环是这样的(华中的更简洁一些):
WHILE[#1LE20]
.
.
ENDW
相差虽然只是只言片语,造成的结果可能就是程序无法运行,所以实际生产中,遇到问题还是需要勤于查询编程手册。
循环的使用
仍旧从实例来切入,我们这次需要打3个孔,孔距为40mm,深度20mm,孔直径请自便。以下是法拉克上的程序:
G54
M3
G0X0Y0Z0
#1=0
WHILE[#1LE80] DO 1
G81X#1Y0Z-10R0
#1=#1+40
END 1
G0Z50
M5
M30
如果使用的是华中系统,那么循环则应该是这样的:
G54
M3
#1=0
WHILE[#1LE80]
G81X#1Y0Z-10R0
#1=#1+40
ENDW
G0Z50
M5
M30
很明显,两台设备的程序差异不大,接下来以法拉克为例,解释下程序原理。之所以以法拉克为例,是因为法拉克的循环实现相对更为复杂。在实现循环嵌套的时候,需要额外的标注层数,也就是上图中方框中的DO 1,以及END后面的1,这是后话,暂且不表。WHILE后面的中括号不再是优先运算了,需要注意,这里被括起来的是一个判断的条件,“LE”是小于等于的意思,“#1”不用解释了,这是一个几面之缘的变量,如果“#1”的位置换成一个固定的数字比如说20,那么20小于等于这个80这个式子是正确的,括号中的条件成立,那么包含在循环中的语句会被依次执行一次,然后重新回到WHILE,重新再判断一次,括号中的条件是否成立,因为我们把变量换成20了嘛,所以这条件也不可能变成不成立,所以这个程序就走不完了,你可以过几年再来看看,没准机器跑坏了就该停下来了。那如果把#1换成90,让这个判断条件不成立呢,这个时候的运行顺序是这样的,程序直接从G0Z50开始,跳过整段循环程序,然后就结束了。
条件成立的时候根本停不下来,条件不成立干脆跳过,我要你这循环有何用啊。不要着急,关键在于,#1它是一个变量,它会变,所以程序中我们插入了一条#1=#1+40,前面说过,这个不是等号,这个式子也不是等式,这是一条赋值语句,意思是把#1的当前值增加40,这么说吧,你包里有100,又给你40,要求你还放包里。#1的初始值是0,这条语句每运行一次,#1包里的钱会多40,依次是,0,40,80,120。所以WHILE循环每次拿到的判断条件也是不同的。
所以WHILE部分,注意只是WHILE部分,#1=0没机会重走啊,重走了那这戏法就没法变了。又因为#1是个多面手,我顺便让它负责了一下坐标定位工作,所以3遍循环,每遍的孔位也是不一样的。事实上,条件里的80就是根据孔距来规划的,之所以说是规划而不是计算,因为你设置成81~119程序也这么跑。81~119都小于120,第三遍的时候#1=80都会给过,第四遍#1成了120,都会被刷下来。所以考89的同学,也别嘲笑人家81的,都没过90好吗。