首页 理论教育 宏指令与宏程序的优化方案

宏指令与宏程序的优化方案

时间:2023-07-19 理论教育 版权反馈
【摘要】:主程序的级数是0。宏程序执行到M99时,控制返回到调用的程序。

宏指令与宏程序的优化方案

1.变量与宏指令调用

一个普通的零件加工程序,指定G代码并直接用数字值表示移动的距离,例:G00 X100.0。而利用用户宏,既可以直接使用数字值,也可以使用变量号。当使用变量号时,变量值既可以由程序改变,也可以用MDI面板改变。如:

#1=#2+100;

G01 X#1 F300;

(1)变量

当指定一个变量时,用#与数字表示,如#50,就指定了一个变量#50;也可以用表达式指定变量号,这时表达式要用方括号括起来,如#[#1+#2-12]。变量的值可以在0和在下述范围内变动:-1047~-10-19;10-29~1047,如果计算结果无效,发出111号报警。

(2)变量分类

根据变量号将变量分为四类,见表3-9:

表3-9 宏变量类型

(3)引用变量

为了在程序中引用变量,指定一个字地址其后跟一个变量号。当用表达式指定一个变量时,须用方括号括起来。例:G01 X[#1+#2]F#3。引用的变量值根据地址的最小输入增量自动进行四舍五入。如G00 X#1;其中#1值为12.3456,CNC最小输入增量1/1 000 mm,则实际命令为G00 X12.346。为了将引用的变量值的符号取反,在#号前加“-”号。例:G00 X-#1;当引用一个未定义的变量时,忽略变量及引用变量的地址。如#1=0,#2=“空”,则G00 X#1 Y#2;的执行结果是G00 X0;

注意:程序号、顺序号、任选段跳跃号不能使用变量。

(4)系统变量

系统变量能用来读写内部NC数据,如刀具补偿值和当前位置数据。然而,有些系统变量是只读变量。对于扩展自动化操作和一般的程序,系统变量是必须的。

(5)刀具补偿值

使用这类系统变量可以读写刀具补偿值。可用的变量数取决于能使用的补偿对数,当补偿对数不大于200时,可以用变量#2001~#2400。

(6)算术和逻辑操作

表3-10中列出的操作可以用变量进行。操作符右边的表达式,可以含有常数和由一个功能块或操作符组成的变量。表达式中的变量#J和#K可以用常数替换。左边的变量也可以用表达式替换。

表3-10 变量的算术和逻辑操作

2.分支和循环语句

在一个程序中,控制流程可以用GOTO、IF语句改变。有如下三种分支循环语句。

(1)无条件分支(GOTO语句)

功能:转向程序的第n句。当指定的顺序号大于9999时,出现128号报警,顺序号可以用表达式。

格式:GOTO n;n是顺序号(1~9999)

(2)条件分支(IF语句)

功能:在IF后面指定一个条件表达式,如果条件满足,转向第n句,否则执行下一段。

格式:IF[条件表达式]GOTO n;

其中:条件表达式,一个条件表达式一定要有一个操作符,这个操作符插在两个变量或一个变量和一个常数之间,并且要用方括号括起来,即[表达式操作符表达式]。操作符见表3-11。

表3-11 操作符

(3)循环(WHILE语句)

功能:在WHILE后指定一个条件表达式,条件满足时,执行DO到END之间的语句,否则执行END后的语句。

格式:WHILE[条件表达式]DO m;(m=1,2,3)

END m;

m只能在1、2、3中取值,否则出现126号报警。

注意:

无限循环:指定了DOm而没有WHILE语句,循环将在DO和END之间无限期执行下去。

执行时间:程序执行GOTO分支语句时,要进行顺序号的搜索,所以反向执行的时间比正向执行的时间长。可以用WHILE语句减少处理时间。(www.xing528.com)

未定义的变量:在使用EQ或NE的条件表达式中,空值和零的使用结果不同。而含其他操作符的条件表达式将空值看做零。

3.宏程序调用

可以用表3-12中的方式调用宏程序:

表3-12 宏调用和子程序调用

宏调用和子程序调用之间的区别:

①用G65,可以指定一个自变量(传递给宏的数据),而M98没有这个功能。

②当M98段含有另一个NC语句时(如:G01 X100.0 M98Pp),则执行命令之后调用子程序,而G65无条件调用一个宏。

③当M98段含有另一个NC语句时(如:G01 X100.0M98Pp),在单段方式下机床停止,而使用G65时机床不停止。

④用G65地方变量的级要改变,而M98不改变。

(1)简单调用(G65)

简单调用(G65)执行过程如下:

功能:G65被指定时,地址P所指定的用户宏被调用,数据(自变量)能传递到用户宏程序中。

格式:G65 Pp L〈自变量表〉;

其中:p为要调用的程序号;L为重复的次数(缺省值为1,取值范围为1~9999);自变量:传递给宏的数。通过使用自变量表,值被分配给相应的地方变量。

如下列中#1=1.0,#2=2.0,调用过程见表3-13。

表3-13 自变量使用的类别一

自变量分为两类。第一类可以使用除G、L、O、N、P之外的字母并且只能使用一次,见表3-13。第二类可以使用A、B、C(一次),也可以使用I、J、K(最多10次),见表3-14。自变量使用的类别根据使用的字母自动确定。见表3-13。

表3-14 自变量使用的类别二

①地址G、L、N、O、P不能当做自变量使用。

②不需要的地址可以省略,与省略的地址相应的地方变量被置成空。

在实际的程序中,I、J、K的下标不用写出来。

注意:

①在自变量之前一定要指定G65。

②如果将两类自变量混合使用,NC自己会辨别属于哪类,最后指定的那一类优先。

③传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。

④最多可以嵌套含有简单调用(G65)和模调用(G66)的程序4级。不包括子程序调用(M98)。地方变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,地方变量的级数增加一次。上一级地方变量的值保存在NC中。宏程序执行到M99时,控制返回到调用的程序。这时地方变量的级数减1,恢复宏调用时存储的地方变量值。

(2)模调用(G66、G67)

功能:一旦指定了G66,那么在以后的含有轴移动命令的段执行之后,地址P所指定的宏被调用,直到发出G67命令,该方式被取消。

格式:G66 Pp L〈自变量表〉;

其中:p为要调用的程序号;L为重复的次数(缺省值为1,取值范围1~9999);自变量:传递给宏的数。与G65调用一样,通过使用自变量表,值被分配给相应的地方变量。模调用(G66、G67)过程如下:

注意:

①最多可以嵌套含有简单调用(G65)和模调用(G66)的程序4级。不包括子程序调用(M98)。模调用期间可重复嵌套G66。

②在G66段,不能调用宏。

③在自变量前一定要指定G66。

④在含有像M码这样与轴移动无关的段中不能调用宏。

⑤地方变量(自变量)只能在G66段设定,每次模调用执行时不能设定。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈