使用子程序编程可以重复同样的操作,简化程序的书写工作,但是B类宏程序提供了更丰富的编程功能。它允许使用变量、算术和逻辑操作及条件分支,使用户可以自行编辑软件包、固定循环程序。
1.变量
(1)变量概述 一个普通的零件加工程序指定G码是直接用数字值表示移动的距离,例如:G100 X100.0。而利用宏程序,就既可以直接使用数字值,也可以使用变量号来表示。当使用变量号时,变量值既可以由程序改变,也可以用MDI面板改变。例如:
#1=#2+100;
G01 X#1 F300;
变量书写规格:当指定一个变量时,在“#”后指定变量号。个人计算机允许赋名给变量,宏则没有此功能。例如:#1。
也可以用表达式指定变量号,这时表达式要用方括号括起来。例如:#[#1+#2-12]。
变量值的范围:地方变量和公共变量可以有值0和在下述范围内的值:-1047~-10-19;10-29~1047,如果计算结果无效,则发出111号报警。
忽略小数点:在程序中定义变量时,可以忽略小数点。例如:当“#1=123”被定义时,变量“#1”的实际值为123.000。
未定义的变量:当变量的值未定义时,这样的一个变量被看做是“空”变量,变量“#0”总是“空”变量,是一个只读变量。
变量的类型:根据变量号将变量分为四类,如表2-10所示。
表2-10 变量的类型
引用变量:为了在程序中引用变量,指定一个字地址其后跟一个变量号。当用表达式指定一个变量时,需用方括号括起来。例如:G01 X[#1+#2]F#3。
引用的变量值根据地址的最小输入增量自动进行四舍五入。例如:G00 X#1;其中#1值为12.3456,若CNC最小输入增量为1/1000mm,则实际命令为G00 X12.346。
为了将引用的变量值的符号取反,在#号前加“-”号;当引用一个未定义的变量时,则忽略变量及引用变量的地址,例如:#1=0,#2=“空”,则G00 X#1 Y#2;的执行结果是G00 X0。
注意:程序号、顺序号、任选段跳跃号不能使用变量。
(2)系统变量 系统变量能用来读写内部NC数据,如刀具补偿值和当前位置数据。然而要注意的是,有些系统变量是只读变量。对于扩展自动化操作和一般的程序,系统变量是必需的,本书不作详细介绍。
2.算术和逻辑操作
常用的运算指令如表2-11所示,其中操作符右边的表达式,可以含有常数和(或)由一个功能块或操作符组成的变量。表达式中的变量#j和#k可以用常数替换。左边的变量也可以用表达式替换。
表2-11 常用的运算指令
运算指令使用事项如下:
1)角单位:在SIN、COS、TAN、ATAN中所用的角度单位是(°)。
在ATAN之后的两个变量用“/”分开,结果在0°和360°之间。
2)ROUND功 能:当ROUND功能包含在算术或逻辑操作、IF语句、WHILE语句中时,将保留小数点后一位,其余位进行四舍五入。
当ROUND出现在NC语句地址中时,进位功能根据地址的最小输入增量四舍五入指定的值。
3)算术和逻辑操作的缩写方式:取功能块名的前两个字符,例如:ROUND RO。
4)方括号嵌套:方括号用于改变操作的顺序。最多可用5层,超出5层,则出现118号报警。
注意:方括号用于封闭表达式,圆括号用于注释。
5)除数:如果除数是零或TAN[90],则会产生112号报警。
3.分支和循环语句
在一个程序中,控制流程可以用GOTO、IF语句改变。有三种分支循环语句:
——GOTO语句(无条件分支);
——IF语句(条件分支:if...,then...);
——WHILE语句(循环语句while...)。
(1)无条件分支(GOTO语句)
功能:转向程序的第N句。当指定的顺序号大于1~9999时,则出现128号报警,顺序号可以用表达式。
格式:GOTO n;
n是顺序号(1~9999)。
(2)条件分支(IF语句)
功能:在IF后面指定一个条件表达式,如果条件满足,转向第N句;否则执行下一段。
格式:IF[条件表达式]GOTO n;
在条件表达式中,一个条件表达式一定要有一个操作符,这个操作符插在两个变量或一个变量和一个常数之间,并且要用方括号括起来,即[表达式 操作符表达式]。
操作符如表2-12所示。
表2-12 操作符
(3)循环(WHILE语句)
功能:在WHILE后指定一个条件表达式,条件满足时,执行DO到END之间的语句;否则执行END后的语句。
格式:WHILE[条件表达式]DO m;
END m;
m只能在1、2、3中取值,否则出现126号报警。(www.xing528.com)
这三类语句在编程时有以下注意事项:
1)无限循环:指定了DO m而没有WHILE语句,循环将在DO和END之间无限期执行下去。
2)执行时间:程序执行GOTO分支语句时,要进行顺序号的搜索,所以反向执行的时间比正向执行的时间长。可以用WHILE语句减少处理时间。
3)未定义的变量:在使用EQ或NE的条件表达式中,空值和零的使用结果不同。而含其他操作符的条件表达式将空值看做零。
4.宏调用
可以用下列方式调用宏程序:
——简单调用(G65);
——模调用(G66、G67);
——G码宏调用;
——M码宏调用;
——G码子程序调用;
——M码子程序调用。
(1)简单调用(G65)
功能:G65被指定时,地址P所指定的宏程序被调用,数据(自变量)能传递到宏程序中。
格式:G65 Pp Ll<自变量表>
其中:
——p为要调用的程序号。
——L为重复的次数(默认值为1,取值范围为1~9999)。
——自变量为传递给宏的数。通过使用自变量表,值被分配给相应的地方变量。
自变量分为两类:第一类可以使用除G、L、O、N、P之外的字母,但只能使用一次,如表2-13所示;第二类可以使用A、B、C(一次),也可以使用I、J、K(最多十次),如表2-14所示。自变量使用的类别根据使用的字母自动确定。
表2-13 变量(第一类)
地址G、L、N、O、P不能当作自变量使用。不需要的地址可以省略,与省略的地址相对应的地方变量被置成空。
表2-14 变量(第二类)
在实际的程序中,I、J、K的下标不用写出来。
使用该调用方式时的注意事项:
1)在自变量之前一定要指定G65。
2)如果将两类自变量混合使用,NC自动辨别类别,且最后指定的那一类优先。
3)传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
4)最多可以嵌套含有简单调用(G65)和模调用(G66)的程序4级,不包括子程序调用(M98)。地方变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,地方变量的级数增加一次。上一级地方变量的值保存在NC中。宏程序执行到M99时,控制返回到调用的程序。这时地方变量的级数减1,恢复宏调用时存储的地方变量值。
(2)模调用(G66、G67)
功能:一旦指定了G66,那么在以后的含有轴移动命令的段执行之后,地址P所指定的宏被调用,直到发出G67命令,该方式才被取消。
格式:G66 Pp Ll<自变量表>
其中:
——p为要调用的程序号。
——l为重复的次数(默认值为1,取值范围为1~9999)。
——自变量为传递给宏的数。与G65调用一样,通过使用自变量表,值被分配给相应的地方变量。
使用该调用方式时的注意事项:
1)最多可以嵌套含有简单调用(G65)和模调用(G66)的程序4级,不包括子程序调用(M98)。模调用期间可重复嵌套G66。
2)在G66段,不能调用宏。
3)在自变量前一定要指定G66。
4)在含有像M码这样与轴移动无关的段中不能调用宏。
5)地方变量(自变量)只能在G66段设定,每次模调用执行时不能设定。
(3)宏调用和子程序调用之间的区别
1)用G65可以指定一个自变量(传递给宏的数据),而M98没有这个功能。
2)当M98段含有另一个NC语句(如:G01 X100.0M98Pp)时,则执行命令之后调用子程序;而G65是无条件调用一个宏。
3)当M98段含有另一个NC语句(如:G01 X100.0M98Pp)时,在单段方式下机床停止,而使用G65时机床不停止。
4)用G65时地方变量的级要改变,用M98的则不改变。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。