数控车削中经常会遇到一些形状复杂但却有一定规律的零件,如:椭圆、抛物线、双曲线等异形曲面的加工,尽管使用各种c a d/c a m软件来自动编制数控加工程序已经成为现实,但自动生成的程序不能直接应用于生产,所以各种“疑难杂症”的解决往往还要依靠手动编程。手动编程可以使用变量编程即用户宏程序,它是fanu c数控系统中的特殊编程功能,其实质就是带有变量的子程序,用户宏程序本体中既可以使用变量进行编程,还可以用宏指令对这些变量进行赋值、运算等处理,从而将有规律的形状或尺寸用短的程序段表示出来,编写的程序清晰简洁、逻辑严密、通用性强,在机械加工中得到了广泛应用。
一、宏指令的基本理论
fanuc系统提供两类用户宏指令,即a类宏指令和b类宏指令。早期的fanu c系统中曾广泛使用a类宏指令,主要特征为使用g65代码作为宏指令代码,包括宏变量的赋值、运算、条件调用等。fanuc 0i系统使用b类宏指令,其可以兼容a类宏指令,且功能更强大,编程更直观。因此本文重点介绍b类宏指令的基本概念及其用法。
1.变量
普通加工程序直接用数值g代码和移动距离,例如:g01 x150.0;当使用用户宏程序时,数值可以直接或用变量。当用变量时,变量值可用程序或由m d i方式设定、修改。例如:#1=#22=100;g0l x#l f0.1;其与g01 x100 f0.1效果一样。
(1)变量的表示
一般的编程中允许对变量命名,用户宏程序不可以,一个变量需用“#”号和后面的变量号。变量号可以是数值或表达式,但必须注意此时表达式必须封闭在“[]”中。例如:#1(主要用于a类宏指令);#[#1+#3+5]若#1=100,#3=2,则该变量表示#107。
(2)变量的类型
变量根据变量号可以分成4种类型(见表1)。
(3)变量值范围
局部变量和公共变量可以是0值或以下范围中的值:-1047~-10-29或10-29~1047,若计算结果超出该范围,则发出报警11。
(4)变量的引用
在程序中的地址后变量号即可引用其变量值。例如:g00 x#1 z#2;当用表达式变量时,必须将表达式放在括号中,例如:g01x[#2+#5] f#1。被引用变量的值根据地址的小设定单位自动地舍入。
例如:当c n c把10.1428赋值给变量#102,且以1u m为单位执行g00 x#102语句时,实际指令值为10.143。改变引用变量的值的符号,要把“—”号放在“#”的前面。即:g00 x —#120。
(5)关于变量的其他说明
①表达式可以表示变量号和变量,且两者并不相同。例如:x#[#1+#2]和x [#1+#2]不相等。
②在程序中定义变量时,小数点可以省略。例如:当定义#1=108;变量#1的实际值是108.000。
③若变量值未定义即为“空”变量。当引用未定义的变量并执行时,变量及地址字都被忽略。例如:当变量#130的值是0,变量#150的值为空时,执行g00 x#130 z#150;程序的结果为g00 x0。
④变量#0总是空变量。其不能写,只能读。
⑤程序号、顺序号和任选程序跳转号不能使用变量。例如:o#2,/#5g00x80;n#6z100;等语句不能在程序中出现。
2.变量的算术和逻辑运算
宏程序可以利用变量进行算术和逻辑运算,例如减法:#i=#j-#k;运算符右边的表达式可包含常量和“/”或由函数、运算符组的变量。表达式中的变量#j和#k可以用常数赋值,左边的变量也可以用表达式赋值。
(1)运算符的优先级
按照优先的先后顺序依次是:函数→乘和除运算(*,/,and,mod)→加和减运算(+,﹣,or,x or)。用“[]”可以改变运算的优先级,里层的“[]”优先运算,“[]”多可以嵌套使用5级(包括函数内部使用的括号)当超出5级时,会出现18报警。
(2)变量的赋值
①直接赋值
变量可以在操作面版上用m d i方式直接赋值,也可以在程序中以等式方式赋值,但等号左边不能用表达式。
如:#110=60;
#110=40+30;
②引用赋值
宏程序以子程序方式出现,所用的变量可在宏调用时赋值。如:g65 p0060 x120 z30 f100;此程序段中,x,z不代表进给字,而是对应于宏程序中的变量号,变量的具体数值由引数后的数值决定。
二、宏程序的功能语句
在程序中,使用g o t o和i f语句可以起到改变和控制程序流向的作用。有4种转移和循环操作可供使用:
1.无条件转移语句(goto)
转移到有顺序号m的程序段,如:g o t o1;(转移到第一行)。
2.条件转移if[表达式]goto m如果条件表达式满足,转移到标有顺序号m的程序段;如果条件不满足,则执行下一个程序段(如图1所示)。
3.条件转移if[表达式]then
如果表达式满足,执行预先决定的宏程序语句,且只执行一个宏程序语句。例如:i f[#1e q#3] t h e n #4=8;表示如果#1和#3的值相同,将8赋给#4。
4.循环功能(while)语句
如果whil e后的表达式条件满足,执行d o到e n d之间的程序;否则,转到e n d后的程序(如图2所示)。
三、宏程序的调用
宏程序的调用可以通过指令m98或g65来实现,使用m98方式调用和子程序调用格式一样,但使用前必须了解宏程序使用了哪些变量,并对变量赋值。g65指令称为宏程序非模态调用指令,其使用格式如:g65 p0040 l6自变量地址;p为宏程序号。l为调用次数,缺省时为1次。自变量地址为用户使用系统提供的自定义地址号表达的变量值。
四、宏程序在椭圆加工中的应用实例
一带有椭球面的工件(如图3所示)。长轴a=40㎜,短轴b=20㎜。
椭圆标准方程为:(x-m)2
/b2
+(z-n)2
/a2
=1,m,n
分别为x方向和z方向中心坐标。
参数方程:z=20cosφ x=2×10sinφ
椭球的中心为图3中的(0,0)点,但一般工件坐标系建立在工件的右端面,为了让椭球的中心与工件坐标系重合,通过程序将椭球的中心向右移动一个长半轴即#103=20,这样才能顺利地完成工件的加工。手工编制加工程序:
o0005
n10 g98;
n20 t0202;
n30 m03 s800;
n40 g00 x100 z100;
n50 g00 x30 z10;
n60 g73 u2 w2 r5;
n70 g73 p80 q140 u0.5 w0.1 f100;
n80 g01 x0 z0 f50;
n90 m98 p0002;
n100 g01 x20 z-50;
n110 z-60;
n120 g01 x28;
n130 g00 x100;
n140 z10;
n150 m00;
n160 g42 x25 z2;
n170 m03 s1000;
n180 g70 p80 q140 f60;
n190 g40 g00 x100;
n200 z100
n210 m30;
子程序
n10 t0202;
n20 m03 s500;
n30 g01 x30 z10 f50;
n40 #101=20;
n50 #102=10;
n60 #103=20;
n70 #104=sqrt[#101*#101-#103*#103];
n80 g01 x#104 z[#103-20];
n90 #103=#103-0.5;
n100 if [#103gt-15] go to 70;
n110 m99;(返回主程序)
工件三维图如图4所示。
本文由 伯特利数控文章 整理发表,文章来自网络仅参考学习,本站不承担任何法律责任。/bethel/news/