虽然子程序对编写相同加工操作的程序非常有用,但用户宏程序由于允许使用变量、算术和逻辑运算及条件转移,使得编写相同加工操作的程序更方便,更容易。可将相同加工操作编为通用程序,如:型腔加工宏程序和固定加工循环宏程序。使用时,加工程序可用一条简单指令调出用户宏程序,和调用子程序完全一样。
用户宏程序本体的格式,见图5-3,与子程序的格式相同。
图5-3 用户宏程序格式
在用户宏程序本体中,可以使用普通的NC指令,采用变量的NC指令、运算指令和控制指令。
变量可以用于宏程序本体,用宏指令调用宏程序本体时,赋予变量实际值。
用户宏程序本体的格式如下。
1.宏程序定义
从结构上讲,定义宏程序和定义子程序十分相似。两种情况下,程序都要指定一个程序号。在程序本体中,重复性数据都要在控制系统存储器中存储和访问。在这方面,子程序定义的所有规则都可用于宏程序的定义。
开发宏程序的不同之处在于它的变量定义、函数和逻辑条件。变量定义是用变量存储变化的数据。变量是控制系统存储器中的临时存储区域,在宏程序体中,用特殊的符号“#”定义变量。即使是最简单的宏程序,也使用变量,因此,也要使用“#”号。
2.宏程序调用
从直观上讲,调用子程序和调用宏程序的主要差别在于编程格式的定义。从逻辑上讲,这两种调用方法是相同的,目的也一样。可通过特定的程序代码从控制存储区域调出预先存储的程序(子程序或宏程序)。
M98 P—;调用子程序p—(通常不需要附加的数据)
G65 P—;调用宏程序p—(通常需要附加的数据)
FANUC控制系统用G代码(准备命令)来调用预先定义的宏程序,而不使用调用子程序的辅助功能M代码。G65命令通过存储的程序号和其他一些数据来调用宏程序。下面的实例阐述了宏程序与子程序在结构上的差异。
例如,主程序和子程序。
例如,主程序和宏程序。
上面的两个例子仅表明了宏程序和子程序在结构上的差异。注意:上述有关宏程序的例子包括两种新类型数据,一个称为变量,另一个称为自变量,子程序中没有与之相对应的数据。
3.宏程序号
O0001~O9999范围内任意的1~4位数都可用作宏程序号,为便于应用,还专门指定了某些范围。从定义上讲,FANUC程序可以分成如下的程序号组,见表5-1。
表5-1 程序号组
参数3202#0(NE8):用于设定是否允许编辑和显示O8000~O8999程序(置0:允许/置1:不允许)。(www.xing528.com)
参数3202#4(NE9):用于设定是否允许编辑和显示O9000~O9999程序(置0:允许/置1:不允许)。
1)程序号O1~O7999。标准程序(甚至子程序)的程序号的取值范围是O1~O7999,可通过合法的程序号存储到控制系统中。可以随时显示,供用户查看,并且不需要任何限制就可注册到系统存储器中,用户也可随意修改程序。
如果用户使用宏程序的话,标准程序号的严格取值范围是O1~O7999。
2)程序号O8000~O8999和O9000~O9999。这两组程序号都是通过参数设置来约束的,在没有参数设置的情况下,使用这两组程序号的程序,不能被编辑、存储或删除。
3)程序号O9000~O9049。这是第二组宏程序中的一个小组,用于特殊类型的宏程序,这些宏程序用来定义新的G代码、M代码、S代码或T代码。
4.自变量
用宏程序调用定义的数据,即用G65 P—命令定义的数据,称为自变量。自变量包含仅为某个特定程序应用时需要的真实程序数值,它们总是要传给宏程序。宏程序中的变量数据要由给定的自变量替代,基于当前定义(自变量)的刀具路径或其他活动也要传给宏程序。
宏程序中使用G65调用命令定义3个自变量的典型格式如下:
G65 P—L—<变量>
G65:宏程序调用命令。
P—:包含宏程序的程序号。
L—:程序循环次数(L1为默认值)。
自变量:传递给宏程序的局部变量的定义。
某个实际的宏程序调用格式如下。
G65 P8003 A30.0 B50.0 F150.0
G65:宏程序调用命令。
P1234:包含宏程序的程序号(存储为08003)。
A30.0:局部变量A赋值(#1),传递给宏程序08003的自变量。
B50.0:局部变量B赋值(#2),传递给宏程序08003的自变量。
F150.0:局部变量F赋值(#9),传递给宏程序08003的自变量。
从定义上讲,变量#1对应自变量A,变量#2对应自变量B,变量#9对应自变量F。当宏程序调用变量时,变量的值将为自变量指定的值所代替。如上所述,宏程序段G01 X#1 Y#2 F#9就会译为G01 X30.0 Y50.0 F150.0。此时,自变量表示刀具运动的位置、距离或进给速度,但也可表示其他的含义。宏程序的“秘诀”在于,它的自变量随着工件的不同而变化,而宏程序本身不变。例如,如果自变量变为G65 P8003 A200.0 B150.0 F100.0,宏程序中的宏程序段G01 X#1 Y#2 F#9就会译为G01 X200.0 Y150.0 F100.0。
变量的赋值仅意味着在调用时给需要赋值的变量一个数值。从上面的例子可以看出,用户宏程序调用命令G65和子程序调用命令M98是相似的,但并不相同。比较G65和M98这两种调用命令,有一些非常重要的不同点。
① 在G65命令中,自变量以变化数据的形式传递给宏程序,而M98命令只能调用子程序,没有数据传递。
② 用M98调用子程序时,程序段中如果包含其他数据(例如,刀具位置的变化),在这种情况下,处理过程就可能在单个程序段中停止。这在G65模式下是不可能的。
③ 用G65调用宏程序时,程序段中可能包含其他数据(例如,刀具位置的变化),在这种情况下,宏程序要在其他数据传输完毕后,才能开始执行。G65命令可无条件地调用宏程序。
④ 局部变量不因M98命令而改变,却因G65命令而改变。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。