数控教研室第七章宏程序在数控编程中的应用7.1概述用户宏程序是以变量的组合,通过各种算术和逻辑运算、转移和循环等命令,而编制的一种可以灵活运用的程序,只要改变变量的值,即可完成不同的加工或操作。用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。宏指令是代表一系列指令的总指令,相当于子程序调用指令。用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。用户宏功能有A、B两类。7.2A类宏程序7.2.1变量在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。(1)变量的表示变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)例:#5,#109,#501。(2)变量的引用将跟随在一个地址后的数值用一个变量来代替,即引入了变量。例:对于F#103,若#103=50时,则为F50;对于Z-#110,若#110=100时,则Z为-100;对于G#130,若#130=3时,则为G03。(3)变量的类型0MC系统的变量分为公共变量和系统变量两类。数控教研室1)公共变量公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。2)系统变量系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。7.2.2宏指令G65宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。一般形式:G65HmP#iQ#jR#k式中:m--宏程序功能,数值范围01~99;#i--运算结果存放处的变量名;#j--被操作的第一个变量,也可以是一个常数;#k--被操作的第二个变量,也可以是一个常数。例如,当程序功能为加法运算时:程序P#100Q#101R#102......含义为#100=#101+#102程序P#100Q-#101R#102......含义为#100=-#101+数控教研室#102程序P#100Q#101R15......含义为#100=#101+157.2.3宏功能指令1.算术运算指令(表7.1)表7.1算术运算指令G码H码功能定义G65H01定义,替换#i=#jG65H02加#i=#j+#kG65H03减#i=#j-#kG65H04乘#i=#j×#kG65H05除#i=#j/#kG65H21平方根#i=√#jG65H22绝对值#i=|#j|G65H23求余#i=#j-trunc﹙#j/#k﹚·#kTrunc;丢弃小于1的分数部分G65H24BCD码→二进制码#i=BIN﹙#j﹚G65H25二进制码→BCD码#i=BCD﹙#j﹚G65H26复合乘/除#i=﹙#i×#j﹚÷#kG65H27复合平方根1#i=√#j2+#k2G6H28复合平#i=√#j2-#k2数控教研室5方根21)变量的定义和替换#i=#j编程格式G65H01P#iQ#j例G65H01P#101Q1005;(#101=1005)G65H01P#101Q-#112;(#101=-#112)2)加法#i=#j+#k编程格式G65H02P#iQ#jR#k例G65H02P#101Q#102R#103;(#101=#102+#103)3)减法#i=#j-#k编程格式G65H03P#iQ#jR#k例G65H03P#101Q#102R#103;(#101=#102-#103)4)乘法#i=#j×#k编程格式G65H04P#iQ#jR#k例G65H04P#101Q#102R#103;(#101=#102×#103)5)除法#i=#j/#k编程格式G65H05P#iQ#jR#k例G65H05P#101Q#102R#103;(#101=#102/#103)6)平方根#i=j#编程格式G65H21P#iQ#j例G65H21P#101Q#102;(#101=102#)7)绝对值#i=│#j│编程格式G65H22P#iQ#j例G65H22P#101Q#102;(#101=│#102│)8)复合平方根1#i=22##kj编程格式G65H27P#iQ#jR#k例G65H27P#101Q#102R#103;(#101=22103#102#9)复合平方根2#i=22##kj编程格式G65H28P#iQ#jR#k例G65H28P#101Q#102R#103(#101=22103#102#2.逻辑运算指令(表7.2)表7.2逻辑运算指令G码H码功能定义G6H11逻辑#i=#数控教研室5“或”j·OR·#kG65H12逻辑“与”#i=#j·AND·#kG65H13异或#i=#j·XOR·#k1)逻辑或#i=#jOR#k编程格式G65H11P#iQ#jR#k例G65H11P#101Q#102R#103;(#101=#102OR#103)2)逻辑与#i=#jAND#k编程格式G65H12P#iQ#jR#k例G65H12P#101Q#102R#103;(#101=#102AND#103)3.三角函数指令(表7.3)表7.3三角函数指令G码H码功能定义G65H31正弦#i=#j·SIN﹙#k﹚G65H32余弦#i=#j·COS﹙#k﹚G65H33正切#i=#j·TAN﹙#k﹚G65H34反正切#i=ATAN﹙#j/#k﹚1)正弦函数#i=#j×SIN(#k)编程格式G65H31P#iQ#jR#k(单位:度)例G65H31P#101Q#102R#103;(#101=#102×SIN(#103))2)余弦函数#i=#j×COS(#k)编程格式G65H32P#iQ#jR#k(单位:度)例G65H32P#101Q#102R#103;(#101=#102×COS(#103))3)正切函数#i=#j×TAN#k编程格式G65H33P#iQ#jR#k(单位:度)数控教研室例G65H33P#101Q#102R#103;(#101=#102×TAN(#103))4)反正切#i=ATAN(#j/#k)编程格式G65H34P#iQ#jR#k(单位:度,0o≤#j≤360o)例G65H34P#101Q#102R#103;(#101=ATAN(#102/#103))4.控制类指令(表7.4)表7.4控制类指令G码H码功能定义G65H80无条件转移GOTOnG65H81条件转移1IF#j=#k,GOTOnG65H82条件转移2IF#j≠#k,GOTOnG65H83条件转移3IF#j>#k,GOTOnG65H84条件转移4IF#j<#k,GOTOnG65H85条件转移5IF#j≥#k,GOTOnG65H86条件转移6IF#j≤#k,GOTOnG65H99产生PS报警PS报警号500+n出现1)无条件转移编程格式G65H80Pn(n为程序段号)例G65H80P120;(转移到N120)2)条件转移1#jEQ#k(=)编程格式G65H81PnQ#jR#k(n为程序段号)例G65H81P1000Q#101R#102当#101=#102,转移到N1000程序段;若#101≠#102,执数控教研室行下一程序段。3)条件转移2#jNE#k(≠)编程格式G65H82PnQ#jR#k(n为程序段号)例G65H82P1000Q#101R#102当#101≠#102,转移到N1000程序段;若#101=#102,执行下一程序段。4)条件转移3#jGT#k()编程格式G65H83PnQ#jR#k(n为程序段号)例G65H83P1000Q#101R#102当#101#102,转移到N1000程序段;若#101≤#102,执行下一程序段。5)条件转移4#jLT#k()编程格式G65H84PnQ#jR#k(n为程序段号)例G65H84P1000Q#101R#102当#101#102,转移到N1000;若#101≥#102,执行下一程序段。6)条件转移5#jGE#k(≥)编程格式G65H85PnQ#jR#k(n为程序段号)例G65H85P1000Q#101R#102当#101≥#102,转移到N1000;若#101#102,执行下一程序段。7)条件转移6#jLE#k(≤)编程格式G65H86PnQ#jQ#k(n为程序段号)例G65H86P1000Q#101R#102当#101≤#102,转移到N1000;若#101#102,执行下一程序段。7.2.4使用注意为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;(1)由G65规定的H码不影响偏移量的任何选择;(2)如果用于各算术运算的Q或R未被指定,则作为0处理;(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先数控教研室向小程序号查找。(4)转移目标序号可以是变量。7.2.5用户宏程序应用举例例1:用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。见图7.1。使用以下保持型变量:#502:半径r;#503:起始角度α;#504:孔数n,当n0时,按逆时针方向加工,当n0时,按顺时针方向加工;#505:孔底Z坐标值;#506:R平面Z坐标值;#507:F进给量。使用以下变量进行操作运算:#100:表示第i步钻第i孔的记数器;#101:记数器的最终值(为n的绝对值);#102:第i个孔的角度位置θi的值;#103:第i个孔的X坐标值;#104:第i个孔的Y坐标值;用用户宏程序编制的钻孔子程序如下:O9010N110G65H01P#100Q0//#100=0N120G65H22P#101Q#504//#101=│#504│N130G65H04P#102Q#100R360//#102=#100×360oN140G65H05P#102Q#102R#504//#102=#102/#504N150G65H02P#102Q#503R#102//#102=#503+#102当前孔角度位置θi=α+(360o×i)/nN160G65H32P#103Q#502R#102//#103=#502×COS(#102)当前孔的X坐标N170G65H31P#104Q#502R#102//#104=#502×图7.1等分孔计算方法数控教研室SIN(#102)当前孔的Y坐标N180G90G00X#103Y#104//定位到当前孔(返回开始平面)N190G00Z#506//快速进到R平面N200G01Z#505F#507//加工当前孔N210G00Z#506//快速退到R平面N220G65H02P#100Q#100R1//#100=#100+1孔计数N230G65H84P-130Q#100R#101//当#100#101时,向上返回到130程序段N240M99//子程序结束调用上述子程序的主程序如下:O0010N10G54G90G0