本节学习要点
1.了解IF...THEN语句的执行方式
2.牢记IF...THEN语句的用法及注意事项
上一节讲解了嵌套的使用,同时也举了例子加以强化。现在再写一个类似的程序,看看有什么问题!例3-12
上述例子讲的是车削一个φ26mm×20mm的小外圆,乍看之下没什么问题。但是如果你够细心,会发现本例中有一行语句是发生变化的——“#1=#1−1.3”。变化就在于每次递减的这个值是1.3了。在前面的例子中,总是以1或2来做递增或递减的值。那么改为1.3的话到底有什么影响呢?让我们一步步分析就知道了!
第一次循环时,#1是30。然后运行到递减的时候,#1的值是30−1.3=28.7。
然后把新#1的值送到WHILE这一行做判断,发现其结果比26大。于是满足条件继续执行循环。
第二次循环时,#1的结果就变成了28.7−1.3=27.4其结果仍然大于26,于是又进行了第三次循环。第三次的时候#1的结果就变成了27.4−1.3=26.1。这时候判断下发现还是大于26,于是在G0 X#1这里执行了一下。此时此刻,外圆是φ26.1mm。到了下面又进行了递减,此时#1的结果是26.1−1.3=24.8。随后把新#1放到WHILE语句判断下,发现此时的#1已经不满足循环条件了,于是就不执行循环,往END1下一行的语句执行。但是我们发现外圆还没到26,是26.1!
说到这不难发现,如果递增或递减量不能整除差值(初始值与目标值的差,本例中初始值是30,目标值是26,差是4)的话,车出来的零件是达不到要求的。而且实际加工中类似这样的情况非常常见,那到底该怎么办呢?
有人会想到一个折中的办法:让它能够整除。于是在“差值”或者递增量上做出妥协。其实还有一个更好的办法并且不用考虑过多的问题,用“IF...THEN”语句!
“IF...THEN”语句的白话翻译是:如果...那么。如前面的一样,语句中的省略号就是条件判断。条件成立与否直接决定了该语句的执行结果。把例3-12加上“IF...THEN”语句看看有什么效果(注意该语句所在的位置)。(www.xing528.com)
例3-13
假定程序已经运行了三次并且在“#1=#1−1.3”这一行。也就是说#1的值是26.1−1.3=24.8。这个时候程序执行到了“IF[#1 LT 26]THEN#1=26”语句这条语句说:如果#1的值小于26,那么就把#1重新赋值为26。也就是说,只要#1的值小于了26,那么#1就会变成26!而程序中#1的结果由于运算后变成了24.8小于26,条件满足!所以此时的#1其结果已经是26了!于是把#1带回到WHILE语句这行,发现#1的值虽然不大于26,但等于26。于是条件成立,继续执行循环体。
当程序执行到“Z2”的时候,说明此时外圆车好了,下面应该退刀了。但实际上程序执行是不是如此呢?
程序继续往下面走,执行到“#1=#1−1.3”语句。这时候#1的结果又变成24.8然后继续执行到IF...THEN这一步,发现#1的结果比26小,于是又把#1重新赋值成26。这时候把#1的值带到WHILE语句判断,条件成立,于是加工外圆。但外圆早在上一次就车好了!讲到了这里,我们会发现一个严重的问题程序是无限循环!
那该怎么处理呢?既要解决不能整除的问题,又要避免无限循环。
如果在程序里加条语句“当#1的结果等于26的时候,就不执行循环直接退刀”。就可以解决无限循环的问题。那该怎么加?且看例3-14。
例3-14
如例3-14所示,如果在“Z2”下一行加上“IF[#1 EQ 26]GOTO1”就可以解决无限循环的问题。
当外圆车到φ26mm的时候,执行到“IF[#1 EQ 26]GOTO1”时,系统判断了#1的结果是否满足条件,发现#1的值是与26相等的,于是就执行“GOTO1命令,跳到了N1段。而N1段又在循环之外,所以就不会再执行“#1=#1−1.3 IF[#1 LT 26]THEN#1=26”等循环语句,而是执行N1段下面的程序了。
在本书后面的程序实例中,会有大量类似此程序的应用。因此务必要掌握本节的内容,否则后面的内容将寸步难行!
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。