数控机床中宏程序的模块化设计摘要针对职业教育类学生的实际情况,以实例探讨了数控车床中宏程序的设计和编程,并提出了宏程序模块化设计的思路和方法,让学生能轻松地学会宏程序的编制。关键词宏程序变量流程模块一前言在数控机床的加工程序编制过程中,用户宏程序的引入为我们提供了更丰富的编程功能,它允许程序员使用变量、算术运算、逻辑操作以及条件分支语句,使用户能够自行编写软件包,固定循环程序,完成各种复杂的机加工作。但是宏程序的学习相对复杂,会不会使用宏程序,在一定程度上成为区分数控编程水平高低的分水岭。怎样让职业学校学生也能学好宏程序,正是本文所讨论的。本文以华中数控车HNC-21/22T系统为例,其它系统也可参照执行。二宏的引入及基本知识以华中数控车HNC-21/22T系统来学习宏程序,宏程序是指可以使用变量进行算术运算、逻辑运算和函数混合运算的编写程序。在车削中常常遇到加工椭圆、抛物线、双曲线之类的曲线,难以用G01、G02、G03等指令来编写。这时往往用宏程序。要想学会宏程序,先得掌握些基本知识。以椭圆为例,椭圆的一个方程式是这样的:X2/A2+Y2/B2=1,它在数控加工中不能直接把该方程代入进去,需进行一些变换:1、运算符算术运算符:+,-,*,/。这类很好理解,和初中所学一样,数控中也没有变化。条件运算符:数学中像>,<,=,≠,≤,≥之类的条件运算符,在数控中就要变换一种形式,如“=”则用EQ表示,“≠”用NE表示,“>”用GT表示,“<”用LT表示,“≤”用LE表示,“≥”用GE表示。这样表示主要原因是由于数控机床的输入面板中没有这些符号,只好用字母来表达了。逻辑运算符:AND(与),OR(或),NOT(非),这类运算符用于逻辑运算,数控车削中用的不多,对于初学者可以先不用掌握,随着知识的积累,会逐步理解。函数:常见的有三角函数,平方根,绝对值等,分别用这类字符表示,SIN(正弦),COS(余弦),TAN(正切),ATAN(余切),SQRT(平方根),ABS(绝对值)等等。2、变量上面椭圆方程中的变量和自变量X,Y在宏程序中称之为宏变量,宏变量用“#”+数字来表示,比如可以用“#10”代表X,“#11”代表Y。#0~#49为当前局部变量,局部变量只在一个宏程序中有效。#50~#199为全局变量,全局变量可在若干个宏程序中共享。#1000以上为系统变量,系统变量则是用来读写NC的各种系统参数。这类变量不能由用户来自定义,比如“#1002”数控机床已定义为“机床当前位置Z”,用户可以通过读写该变量得出机床当前Z坐标。3、赋值语句椭圆的方程式X2/A2+Y2/B2=1必须先变换成X=?或Y=?的形式,假若A=100,B=50,则可以写成X=2222250*10050*100Y,用#10表示X,用#11表示Y,那么它就写成了这样的形式:#10=SQRT[[100*100*50*50-100*100*#11*#11]/[50*50]],可以简化算式变成#10=SQRT[1000-4*#11*#11],在数控中它是一个赋值语句,就是把后面的值送给宏变量#10。又如,#3=124.0,含义是把124.0送入宏变量#3。#3=#3+1,由于数控中它是赋值语句,是可以这样写的,不能把它看成数学等式,含义是把#3变量中的值+1后送入到#3中,如#3中原来是124.0,则经过#3=#3+1程序后,#3中的值就变成了125.0。这类语句在宏程序中很常见,要深刻体会。值得注意的是赋值号两边的内容不能随意互换,左边的只能是变量,右边的只能是常数或表达式,而且一个赋值语句只能给一个变量赋值。4、表达式用运算符连拉起来的常数,宏变量构成表达式,如上面的SQRT[1000-4*#11*#11],#3+1,表达式是没有“=”号的。三宏程序的语句宏程序中常用这三类语句格式1:无条件转移语句GOTOn(n为顺序号,范围1~9999)含义:执行无条件跳转至第n句,使用的较少。格式2:条件判别语句IF[条件表达式]。。。ENDIF含义:先判断,条件满足则往下执行,否则执行ENDIF后的语句。格式3:循环语句WHILE[条件表达式]。。。(循环体)ENDW含义:在WHILE后指定一个条件表达式,当条件满足时,执行WHILE后面到ENDW前面的程序,然后返回到WHILE重新判断条件,直到条件不满足后才执行ENDW后面的程序。注意:在不同的机床,上述语句的格式和含义稍有不同,在实际编程中要根据所使用的机床进行变化。上面的语句是华中数控HNC-21/22T所使用的语句。四宏程序的流程和模块化对于职业学校的学生来说,宏程序在各种说明书和参考书中所表述的显得很高深复杂,编写宏程序时要有很高的逻辑思维能力,而这正是多数职校学生所欠缺的,因此宏程序这部分很多人学不好。本文就是想换一种思路,把常见宏程序(如加工椭圆、抛物线等)给出一个较固定的流程,把它模块化,初学者只需要按照模块来编写,这样就容易得多了。循环语句是宏程序中最常见的语句,加工给出了方程式的零件几乎都用它。它的加工流程可以这样安排:满足条件准备:数学公式变换成赋值语句,确定好循环变量宏程序开始循环变量赋初值WHILE循环变量<(>≤≥)终值?公式变换成的赋值语句执行语句(G01指令)循环变量=循环变量+(或-)步长不满足条件数控机床加工曲线,是采用直线逼近的方法,即把曲线分成若干段小直线来加工,所以循环变量也会分成若干等分,每等分就是一个步长,步长越小,直线段数越多,越接近理想曲线。部分机床循环语句格式略有不同,流程框图也需要稍稍改变。五用该模块编写宏程序举例用宏程序编制如下图所示抛物线Z=X2/8在区间[0,16]内的程序。ZX图1宏程序编制例图16032根据流程框图,先要把数学公变换成赋值语句,X用#10宏变量表示,Z用#11表示,则赋值语句就是#11=#10*#10/8,确定#10为循环变量,它的初值是0,终值是16。取它的步长为0.05,步长越小,加工出来形状越接近抛物线。程序可以这样编写:%001G92X0.0Z0.0M03S600#10=0;循环变量赋初值WHILE#10LE16;循环变量≤终值16?#11=#10*#10/8;赋值语句G90G01X[#10]Z[#11]F500;执行G01指令,注意括号#10=#10+0.05;循环变量=循环变量+步长,终值大于初值用加,反之用减ENDW;循环语句结束符号G00Z0M05G00X0M30本例只是加工一段抛物线,如果还要加工其它部分,则在编写程序时,到了加工抛物线时就插入该模块。六结束语把较复杂、学生较难理解的程序模块化,学生只用按照流程编写程序,减少了难度,能让初学者很快上手。除了宏程序,粗加工复合循环等也能模块化。当学生练习到一定程度后,自然会摒弃它的局限性,更上层楼。本人用这种方法授课,取得了较好的教学效果。由于水平所限,不足之处在所难免,旨在抛砖引玉,供大家参考。参考文献:[1]周宏.数控编程与操作.西安电子科技大学,2007[2]华茂发.数控机床加工工艺[M].北京:机械工业出版社,2000.[3]毕承恩.现代数控机床[M].北京:机械工业出版社