您好,欢迎访问三七文档
-1-宏程序讲义-2-4.2用户宏程序及其基本编程方法在生产过程中存在大量的零件是系列化的。它们的形状相似,但是尺寸不同。为了满足对这类零件的编程需要,数控系统提供了一些固定循环。如FANUC中的钻孔循环,车加工中的粗加工循环等,SIEMENS系统中的孔加工循环和腔、槽加工循环等等。除此以外,还为用户提供了根据自己的需要编写固定循环的功能,以满足不同用户的特殊需要。这种功能在不同的系统中有不同的提法,例如,在FANUC系统中称作用户宏程序,在SIEMENS系统中称作用户循环。无论其名称如何不同,但其实质都是利用变量和程序控制功能,编制具有一定通用性的程序,如果这个程序作为子程序,可以通过变量和简单指令被其他程序调用。变量用一个名称表示一个数,通过程序或操作面板对其赋值,也可以参与运算。程序控制语句使得程序运行可以不再单一按自然排列顺序执行,而可以由控制语句控制其执行顺序。4.2.1FANUC系统4.2.1.1变量变量用变量符号“#”和后面跟随变量号表示。变量号可以是整数,例如:#10,#20等。变量号也可以是一个表达式,例如:#[#1+#2+#3],如果,#1=1,#2=4,#3=7,那么#[#1+#2+#3]等价于#12。变量的类型:FANUC系统规定变量的类型由变量号区分,共分为四类:表4-1:变量号变量类型功能#0空变量该变量总是空,不能给它赋值#1~#33局部变量仅在宏程序内有效。当断电后,所有的局部变量被初始化为空。#100~#199#500~#999公共变量在整个程序中有效。当断电后,#100~#199初始化为空。#500~#999的数据被保存。#1000~系统变量用于读、写数控系统运行中各种数据的变化,例如刀具的当前位置和补偿值。初始化为空的变量,被称为空变量,空变量不等于0。变量的范围:局部变量和公共变量的值可以是0或者4710~2910或者2910~4710在程序中定义变量时,小数点可以省略。例如定义#1=123;#1的实际值是123.000。空变量处理:1.空变量被引用:当引用一个空变量时,这个引用无效。例如#1=〈空〉,G90X100Y#1等同G90X100-3-2.赋值与运算:一个空变量被赋予另一个变量时,被赋值的变量也成为空变量。例如#1=〈空〉,#2=100,执行#2=#1以后,#2=〈空〉。在运算中空变量等于0.例如#1=〈空〉,#2=100,#3=50执行#3=#1+#2以后,#3=100;3.比较:在等于和不等于的比较中,空变量与0是不相同的。变量使用中的限制:程序号、顺序号和任选程序段跳转号不能使用变量。例如:O#1;/#1G00X100.0;N#3Y200;系统变量:#1000以上的变量是系统变量,可以读、写某些数控系统的内部数据。例如刀具偏置和当前位置数据;但是某些系统数据只能读而不能写。具体规定需查阅数控系统的操作手册。表4-2刀具补偿值的系统变量:补偿号刀具长度补偿(H)刀具长度补偿(H)几何补偿磨损补偿几何补偿磨损补偿1……200……400#11001……#11200……#11400#10001……#10200……#10400#13001……#13200……#13400#12001……#12200……#12400以下例子利用系统变量实现程序运行中自动改变刀具半径补偿:#1=1;刀补号赋初值#11001=14;设置刀补半径值#11002=12;设置刀补半径值#11003=10;设置刀补半径值N30G41D#1;建立刀具半径补偿,当#1=1时,补偿值=14;#1=2,补偿值等于12,#1=3,补偿值等于10。……G40…;撤销刀补#1=#1+1;改变刀补号。IF[#1LT4]GOTO30;#1小于4,循环次数未到,转到N30继续执行。…表4-3模态信息的系统变量:变量号功能组别#4001G00,G01,G02,G0301#4002G17,G18,G1902#4003G91,G9003#400404-4-#4005G94,G9505#4006G20,G2106#4007G41,G42,G4007#4008G43,G44,G4908#4009G73,G74,G76,G80-G8909#4010G98,G9910#4011G50,G5111#4012G65,G66,G6712#4013G96,G9713#4014G54-G5914#4015G61-G6415#4016G68,G6916……#402222#4102B代码#4107D代码#4109F代码#4111H代码#4113M代码#4114顺序号#4115程序号#4119S代码#4120T代码#4130P代码(当前选择的附加工件坐标系)在宏程序中要改变某些模态信息,可以先保存进入时的模态信息,在结束再恢复原状。这样可以使数控系统保持该宏程序运行前后模态信息一致。这样的宏程序具有很好的安全性,即使不是该宏程序的编写者也可以放心地使用。其它系统变量的介绍查阅数控系统的操作手册。-5-4.2.1.2变量的常用算术和逻辑运算功能格式备注赋值#i=#j加法减法乘法除法#i=#j+#k#i=#j-#k#i=#j*#k#i=#j/#k正弦反正弦余弦反余弦正切反正切#i=SIN[#j]#i=ASIN[#j]#i=COS[#j]#i=ACOS[#j]#i=TAN[#j]#i=ATAN[#j]/[#k]角度以度指定,9030'表示为90.5度。反正切中[#j]、[#k]表示两条边长。平方根绝对值舍入上取整下取整自然对数指数函数#i=SQRT[#j]#i=ABS[#j]#i=ROUND[#j]#i=FIX[#j]#i=FUP[#j]#i=LN[#j]#i=EXP[#j]函数名可以用该函数的前两位字母指定,例如:ROUND→ROFIX→FI算术和逻辑运算的其他使用规则和限制查阅数控系统的使用手册。运算次序:1.括号2.函数3.乘和除运算4.加和减运算括号可以使用5级,包括函数使用的括号。4.2.1.3程序流向控制语句无条件转移:GOTOn;n顺序号条件转移:IF[条件表达式]GOTOn如果指定的表达式满足,转移到有顺序号n的程序段。如果指定的条件表达式不满足,执行下一个程序段。条件执行:IF[条件表达式]THEN宏程序语句如果指定的条件表达式满足,执行后面跟随的宏程序语句,否则直接执行下一个程序段。条件表达式:条件表达式必须包括运算符,运算符插在两个变量或者一个变量和一个常数之间。整个条件表达用一对方括号“[]”封闭。变量也可以用一个表达式替代。-6-运算符含义EQ等于NE不等于GT大于GE大于等于LT小于LE小于等于循环语句:WHILE[条件表达式]DOm;(m=1,2,3)……ENDm;在WHILE后面指定一个条件表达式,当指定条件得到满足,执行从DO到END之间的程序。否则,转而执行END后面的程序。m是循环标号,只能使用1,2,3。循环标号可以反复使用:WHILE[…]DO1…END1…WHILE[…]DO1…END1循环可以嵌套3级:WHILE[…]DO1…WHILE[…]DO2…WHILE[…]DO3……END3…END2…END1但是,不可以存在交叉循环:-7-转向语句可以从循环体内(DO-END)转到循环体外:不允许从从循环体外转到循环体内。如果仅写了DO–END,而没有WHILE,将造成无限循环。运算误差:运算误差来自变量值的有效精度。变量的有效精度约为8位十进制数。数值太大形成的误差:当#1=9876543210123.456#2=9876543277777.777实际#1=9876543200000.000#2=9876543300000.000当计算#3=#2-#1时,结果#3=100000.000计算误差的影响:使用条件表达式时,误差可能会影响判断结果;例如:IF[#1EQ#2],可能会受到精度的影响,造成错误的判断,而用IF[ABS[#1-#2]LT0.0001]替代EQ,可以避免精度造成错误的判断。4.2.1.4宏程序调用在FANUC系统中,包含变量、转向、比较判别等功能的指令称为宏指令,包含有宏指令的子程序称为宏程序。宏程序调用和子程序调用之间的差别:主要差别在于宏程序调用可以在调用语句中传递数据到宏程序内部,而子程序调用(M98)则没有这个功能。其次,M98程序段可以与另一个数控指令共处同一条指令。例如,G01X100M98P1000;在执行时,先执行G01X100;然后,在运行子程序O100。而宏程序调用语句是独立自成一行。宏程序调用的有以下方法:-8-非模态调用G65;G65PpLl〈自变量〉模态调用G66,G67;G66PpLl〈自变量〉G67取消模态调用用自定义G代码调用;Gnn〈自变量〉Ll该语句等同于G65PpLl〈自变量〉;nn为数字(1~9999),存放在参数No.6050到No.6059中。宏程序号p与参数的对应关系见表:表4-4:程序号参数号O90106050O90116051O90126052O90136053O90146054O90156055O90166056O90176057O90186058O90196059例如:No.6050=801;执行程序段:G801〈自变量〉;将调用宏程序O9010,并把自变量传入O9010。用自定义M代码调用,M代码(1~99999999)。使用方法与使用自定义G代码调用相同。宏程序号p与参数的对应关系见表:表4-5程序号参数号O90206080O90216081O90226082O90236083O90246084O90256085O90266086O90276087O90286088O90296089用自定义T代码调用。T代码调用宏程序O9000,需要设置参数No.6001的第5位=1,并在公共变量#149输入代码。例如,用T256调用宏程序O9000,需要输入256到#149。4.2.1.5主程序向宏程序传递数据主程序通过自变量向宏程序传递数据。自变量说明形式:地址字数值。例如A23.1。每个地址字对应一个固定的局部变量。自变量的地址字有两套:-9-第一套自变量地址字:自变量地址字对应的局部变量自变量地址字对应的局部变量自变量地址字对应的局部变量A#1I#4T#20B#2J#5U#21C#3K#6V#22D#7M#13W#23E#8Q#17X#24F#9R#18Y#25H#11S#19Z#26地址字G,L,N,Q和不能作为自变量地址。地址字不需要按字母顺序排列,但是I,J,需要按字母顺序排列。不需要的地址字可以省略。在调用时,每个地址字使用一次。例:B_A_D_I_K_;排列正确B_A_D_K_J_;排列错误G65P8001L2A12.32D-100.K0.;非模态调用宏程序O8001两次,通过调用语句,数值12.32,-100.0和0分别被传递给宏程序内部的局部变量#1,#7,#6。第二套自变量地址字:自变量地址字对应的局部变量自变量地址字对应的局部变量自变量地址字对应的局变量A#1K(3)#12J(7)#23B#2I(4)#13K(7)#24C#3J(4)#14I(8)#25I(1)#4K(4)#15J(8)#26J(1)#5I(5)#16K(8)#27K(1)#6J(5)#17I(9)#28I(2)#7K(5)#18J(9)#29J(2)#8I(6)#19K(9)#30K(2)#9J(6)#20I(10)#31I(3)#10K(6)#21J(10)#32J(3)#11I(7)#22K(10)#33第二套自变量地址字使用A,B,C各1次,I,J,K各10次。I,J,K的下标不必输入,用于表示使用次序。第二套自变量地址字适合于传递三维坐标值。两套自变量地址字可以混合使用,当出现两个自变量指向同一个局部变量时,后指定的自变量有效。例如:O1000N10……M99-10-G65A1.0B2.0I-3.0I4.0I5.0D6.0P1000;执行以上宏程序调用,程序准备执行O1000中的N10这一条指令时,局部变量中的值如下:#1=1.0;#2=
本文标题:宏程序
链接地址:https://www.777doc.com/doc-3455543 .html