




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华中数控宏全套教程 目录 序 1 一什么是宏程序? 1 二用宏程编程有什么好处? 1 一宏变量及宏常量 1 1宏变量 1 2局部变量 2 3全局变量 2 4系统变量 3 5常量 3 二运算符与表达式 3 1算术运算符 3 2条件运算符 3 3逻辑运算符 3 4函数 4 5表达式与括号 4 6运算符的优先级 4 7赋值号 = 4 8注释 4 三程序流程控制 5 1条件分支 IF 5 2条件循环 WHILE 6 四子程序及参数递传 7 1普通子程序 7 2宏子程序 7 3全局变量传参数 7 4局部变量传参数 8 5系列零件加工 9 6高级参考 10 五宏编程实例 12 1数车编程 12 (1)函数曲线加工通用宏程序 12 (2)抛物线车削1 12 (3)抛物线车削2 12 (4)抛物线车削3 13 (5)抛物线车削4 13 (6)抛物线车削5(G71与宏程序) 14 (7)抛物线车削6 14 (8)正弦线车削 15 (9)抛物线与椭圆车削 15 (10)椭圆粗、精车削 16 (11)用子程序完成粗、精加工 16 (12)变螺距螺纹 18 2数铣编程 18 (1)直线段逼近整园的宏程序 18 (2)螺旋线走刀 19 (3)来回铣削的方法 19 (4)铣平面 20 (5)铣斜面 20 (6)铣半圆柱 21 (7)铣半球 22 (8)多次旋转的宏编程 23 (9)切圆台与斜方台 24 (10)铣椭圆 24 (11)铣孔 25 (12)倒圆角加工 25 (14)抛物斜边岛屿加工 27 (15)凹球曲面加工 28 (16)螺纹镗刀铣螺纹 29 (17)圆柱 30 (18)直斜边岛屿加工 30 (19)圆弧斜边岛屿加工 31 (20)椭球面加工的宏程序实例 31 (21)自定义G指令 32 附件 32 1 华中数控指令一览 32 2 固定循环指令的宏程序实现 32 G73 32 G74 33 G76 34 G81 35 G82 36 G83 37 G84 38 G85 39 G86 40 G87 41 G88 42 G89 44 2华中数控系统系统变量一览 45 (1)子程序嵌套局部变量 45 (2)刀具相关系统变量 45 (3)坐标相关系统变量: 45 (4)参考点相关系统变量 45 (5)系统状态变量 46 3数学知识 46 69 序 一什么是宏程序? 什么是数控加工宏程序?简单地说,宏程序是一种具有计算能力和决策能力的数控程序。宏程序具有如下些特点: 1使用了变量或表达式(计算能力),例如: (1)G01 X3+5 ;有表达式3+5 (2)G00 X4 F#1 ;有变量#1 (3)G01 Y50*SIN3 ;有函数运算 2使用了程序流程控制(决策能力),例如: (1)IF #3 GE 9 ;有选择执行命令 ENDIF (2)WHILE #1 LT #4*5 ;有条件循环命令 ENDW 二用宏程编程有什么好处? 1宏程序引入了变量和表达式,还有函数功能,具有实时动态计算能力,可以加工非圆曲线,如抛物线、椭圆、双曲线、三角函数曲线等; 2宏程序可以完成图形一样,尺寸不同的系列零件加工; 3宏程序可以完成工艺路径一样,位置不同的系列零件加工; 4宏程序具有一定决策能力,能根据条件选择性地执行某些部分; 5使用宏程序能极大地简化编程,精简程序。适合于复杂零件加工的编程。 一宏变量及宏常量 1宏变量 先看一段简单的程序: G00 X25.0 上面的程序在X轴作一个快速定位。其中数据25.0是固定的,引入变量后可以写成: #1=25.0 ;#1是一个变量 G00 X#1 ;#1就是一个变量 宏程序中,用“#”号后面紧跟14位数字表示一个变量,如#1,#50,#101,。变量有什么用呢?变量可以用来代替程序中的数据,如尺寸、刀补号、G指令编号,变量的使用,给程序的设计带来了极大的灵活性。 使用变量前,变量必需带有正确的值。如 #1=25 G01 X#1 ;表示G01 X25 #1=-10 ;运行过程中可以随时改变#1的值 G01 X#1 ;表示G01 X-10 用变量不仅可以表示坐标,还可以表示G、M、F、D、H、M、X、Y、等各种代码后的数字。如: #2=3 G#2 X30 ;表示G03 X30 例1 使用了变量的宏子程序。 %1000 #50=20 ;先给变量赋值 M98 P1001 ;然后调用子程序 #50=350 ;重新赋值 M98 P1001 ;再调用子程序 M30 %1001 G91 G01 X#50 ;同样一段程序,#50的值不同,X移动的距离就不同 M99 2局部变量 编号#0 #49的变量是局部变量。局部变量的作用范围是当前程序(在同一个程序号内)。如果在主程序或不同子程序里,出现了相同名称(编号)的变量,它们不会相互干扰,值也可以不同。 例 %100 N10 #3=30 ;主程序中#3为30 M98 P101 ;进入子程序后#3不受影响 #4=#3 ;#3仍为30,所以#4=30 M30 %101 #4=#3 ;这里的#3不是主程序中的#3,所以#3=0(没定义),则:#4=0 #3=18 ;这里使#3的值为18,不会影响主程序中的#3 M99 3全局变量 编号#50 #199的变量是全局变量(注:其中#100#199也是刀补变量)。全局变量的作用范围是整个零件程序。不管是主程序还是子程序,只要名称(编号)相同就是同一个变量,带有相同的值,在某个地方修改它的值,所有其它地方都受影响。 例 %100 N10 #50=30 ;先使#50为30 M98 P101 ;进入子程序 #4=#50 ;#50变为18,所以#4=18 M30 %101 #4=#50 ; #50的值在子程序里也有效,所以#4=30 #50=18 ;这里使#50=18,然后返回 M99 为什么要把变量分为局部变量和全局变量?如果只有全局变量,由变量名不能重复,就可能造成变量名不够用;全局变量在任何地方都可以改变它的值,这是它的优点,也是它的缺点。说是优点,是因为参数传递很方便;说是缺点,是因为当一个程序较复杂的时候,一不小心就可能在某个地用了相同的变量名或者改变了它的值,造成程序混乱。局部变量的使用,解决了同名变量冲突的问题,编写子程序时,不需要考虑其它地方是否用过某个变量名。 什么时候用全局变量?什么时候用局部变量?在一般情况下,你应优先考虑选用局部变量。局部变量在不同的子程序里,可以重复使用,不会互相干扰。如果一个数据在主程序和子程序里都要用到,就要考虑用全局变量。用全局变量来保存数据,可以在不同子程序间传递、共享、以及反复利用。 刀补变量(#100#199)。这些变量里存放的数据可以作为刀具半径或长度补偿值来使用。如 #100=8 G41 D100 ;D100就是指加载#100的值8作为刀补半径。 注意: 上面的程序中,如果把D100写成了D#100,则相当于D8,即调用8号刀补,而不是补偿量为8。 4系统变量 #300以上的变量是系统变量。系统变量是具有特殊意义的变量,它们是数控系统内部定义好了的,你不可以改变它们的用途。系统变量是全局变量,使用时可以直接调用。 #0#599是可读写的,#600以上的变量是只读的,不能直接修改。 其中,#300 #599是子程序局部变量缓存区。这些变量在一般情况下,不用关心它的存在,也不推荐你去使用它们。要注意同一个子程序,被调用的层级不同时,对应的系统变量也是不同的。#600#899是与刀具相关系统变量。#1000#1039坐标相关系统变量。#1040#1143参考点相关系统变量。#1144#1194系统状态相关系统变量。(详见:Error! Reference source not found.) 有时候需要判断系统的某个状态,以便程序作相应的处理,就要用到系统变量。 5常量 PI 表示圆周率, TRUE 条件成立(真), FALSE 条件不成立(假) 。 二运算符与表达式 1算术运算符 加 + , 减 - , 乘 * , 除 / 2条件运算符 宏程序运算符 EQ(equal) NE(not equal) GT(greater than) GE LT(less than) LE 数学意义 条件运算符用在程序流程控制IF和WHILE的条件表达式中,作为判断两个表达式大小关系的连接符。 注意:宏程序条件运算符与计算机编程语言的条件运算符表达习惯不同。 3逻辑运算符 在IF或WHILE语句中,如果有多个条件,用逻辑运算符来连接多个条件。 AND (且) 多个条件同时成立才成立 OR (或) 多个条件只要有一个成立即可 NOT (非) 取反(如果不是) 例 #1 LT 50 AND #1GT 20 表示:#120 #3 EQ 8 OR #4 LE 10 表示:#3=8或者#410 有多个逻辑运算符时,可以用方括号来表示结合顺序,如: NOT#1 LT 50 AND #1GT 20表示:如果不是“#120” 更复杂的例子,如: #1 LT 50 AND #2GT 20 OR #3 EQ 8 AND #4 LE 10 4函数 正 弦:SINa 余弦:COSa 正切:TANa 注:a为角度,单位是弧度值。 反正切:ATANa (返回:度,范围:-9090) 反正切:ATAN2a/b (返回:度,范围:-180180) (注:华中数控暂不支持) 绝对值:ABSa,表示|a| 取 整:INTa,采用去尾取整,非“四舍五入” 取符号:SIGNa,a为正数返回1,0返回0,负数返回-1 开平方:SQRTa ,表示a 指 数:EXPa,表示ea 5表达式与括号 包含运算符或函数的算式就是表达式。表达式里用方括号来表示运算顺序。宏程序中不用圆括号,因圆括号是注释符。 例如 175/SQRT2 * COS55 * PI/180 #3*6 GT 14 6运算符的优先级 方括号 函数 乘除 加减 条件 逻辑 技巧:常用方括号来控制运算顺序,更容易阅读和理解。 7赋值号 = 把常数或表达式的值送给一个宏变量称为赋值,格式如下: 宏变量 = 常数或表达式 例如 #2 = 175/SQRT2 * COS55 * PI/180 #3 = 124.0 #50 = #3+12 特别注意,赋值号后面的表达式里可以包含变量自身,如: #1 = #1+4 ;此式表示把#1的值与4相加,结果赋给#1。这不是数学中的方程或等式,如果#1的值是2,执行#1 = #1+4后,#1的值变为6。 8注释 写在半角分号“;”后面的内容都是注释。注释也可以写在一对圆括号里面。注释是用来对程序进行说明的,帮助程序阅读理解。 如 ;主程序 T0101 ;换刀 (精加工,留精车余量0.5) 三程序流程控制 程序流程控制形式有许多种,都是通过判断某个“条件”是否成立来决定程序走向的。所谓“条件”,通常是对变量或变量表达式的值进行大小判断的式子,称为“条件表达式”。华中数控系统有两种流程控制命令:IFENDIF,WHILEENDW。 1条件分支 IF 需要选择性地执行程序,就要用IF命令。 格式1:(条件成立则执行) IF 条件表达式 条件成立执行的语句组 ENDIF 功能: 条件成立执行IF与ENDIF之间的程序,不成立就跳过。其中IF、ENDIF称为关键词,不区分大小写。IF为开始标识,ENDIF为结束标识。IF语句的执行流程如图1所示。 例: IF #1 EQ 10 ;如果#1=10 M99 ;成立则,执行此句(子程返回) ENDIF ;条件不成立,跳到此句后面 例: IF #1 LT 10 AND #1 GT 0;如果#10 G01 x20 ;成立则执行 Y15 ENDIF ;条件不成立,跳到此句后面 格式2:(二选一, 选择执行) 形式: IF 条件表达式 条件成立执行的语句组 ELSE 条件不成立执行的语句组 ENDIF 例: IF #51 LT 20 G91G01 X10F250 ELSE G91G01X35F200 ENDIF 功能: 条件成立执行IF与ELSE之间的程序,不成立就执行ELSE与ENDIF之间的程序。IF语句的执行流程如图1所示。 2条件循环 WHILE 格式: WHILE 条件表达式 条件成立循环执行的语句 ENDW 功能: 条件成立执行WHILE与ENDW之间的程序,然后返回到WHILE再次判断条件,直到条件不成立才跳到ENDW后面。WHILE语句的执行流程如图 1 所示。 例: #2=30 WHILE #2 GT 0 ;如果#20 G91G01X10 ;成立就执行 #2=#2-3 ;修改变量, ENDW ;返回 G90 G00 z50 ;不成立跳到这里执行 WHILE中必须有“修改条件变量”的语句,使得其循环若干次后,条件变为“不成立”而退出循环,不然就成为死循环。 假 真 IF条件成立? 程序A ENDIF ELSE 程序B IFELSEENDIF流程图 假 真 IF条件成立? 程序1 程序N ENDIF IFENDIF流程图 WHILEENDW流程图 假 真 WHILE条件 程序1 程序N ENDW 图1 流程控制 四子程序及参数递传 1普通子程序 普通子程序指没有宏的子程序,程序中各种加工的数据是固定的,子程序编好后,子程序的工作流程就固定了,程序内部的数据不能在调用时“动态”地改变,只能通过“镜像”、“旋转”、“缩放”、“平移”来有限的改变子程序的用途。 例 %4001 G01 X80 F100 M99 子程序中数据固定,普通子程序的效能有限。 2宏子程序 宏子程序可以包含变量,不但可以反复调用简化代码,而且通过改变变量的值就能实现加工数据的灵活变化或改变程序的流程,实现复杂的加工过程处理。 例 %4002 G01 Z#1 F#50 ;Z坐标是变量;进给速度也是变量,可适应粗、精加工。 M99 例 对圆弧往复切削时,指令G02、G03交替使用。参数#51改变程序流程,自动选择。 %4003 IF #51 GE 1 G02 X#50 R#50 ;条件满足执行G02 ELSE G03 X-#50 R#50 ;条件不满足执行G03 ENDIF #51=#51*-1 ;改变条件,为下次做准备 M99 子程序中的变量,如果不是在子程序内部赋值的,则在调用时,就必需要给变量一个值。这就是参数传递问题,变量类型不同,传值的方法也不同。 3全局变量传参数 如果子程序中用的变量是全局变量,调用子程序前,先给变量赋值,再调用子程序。 例: %400 #51=40 ;#51为全局变量,给它赋值 M98 P401 ;进入子程序后#51的值是40 #51=25 ;第二次给它赋值 M98 P401 ;再次调用子程序,进入子程序后#51的值是25 M30 %401 ;子程序 G91G01X#51F150 ;#51的值由主程序决定 M99 4局部变量传参数 问题: %400 N1 #1=40 ;为局部变量#1赋值 N2 M98 P401 ;进入子程序后#1的值是40吗? M30 %401 N4 G91G01X#1 ;子程序中用的是局部变量#1 M99 结论: 主程序中N1行的#1与子程序中N4行的#1不是同一个变量,子程序不会接收到40这个值。怎么办呢? 局部变量的参数传递,是在宏调用指令后面添加参数的方法来传递的。上面的程序中,把N1行去掉,把N2行改成如下形式即可: N2 M98 P401 B40 比较一下,可知多了个B40,其中B代表#1,紧跟的数字40代表#1的值是40。这样就把参数40传给了子程序%401中的#1。更一般地,我们用G65来调用宏子程序(称宏调用)。 G65指令: G65是专门用来进行宏子程序调用的,但在华中数控系统里面,G65和M98功能相同,可以互换。 宏子程序调用指令G65的格式: G65 P_ L_ A_ B_ Z_ P 子程序号 L 调用次数 AZ 参数,每个字母与一个局部变量号对应。A对应#0,B对应#1,C对应#2,D对应#3,如A20,即#0=20;B6.5,即#1=6.5;其余类推。换句话说,如果要把数50传给变量#17,则写R50。 G65代码在调用宏子程序时,系统会将当前程序段各字母(AZ共26个,如果没有定义则为零)后跟的数值对应传到宏子程序中的局部变量#0-#25 。下面列出了宏调用时,参数字母与变量号的对应关系: 子程序中的变量 #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 传参数用的字母 A B C D E F G H I J K L M 子程序中的变量 #13 #14 #15 #16 #17 #18 #19 #20 #21 #22 #23 #24 #25 传参数用的字母 N O P Q R S T U V W X Y Z 要注意,由于字母G、P、L等已被宏调用命令、子程序号和调用次数占用,所以不能再用来传递其它任意数据。传进去的是,G65即#6=65,P401即#15=401(子程序号),L2即#11=2。为了便于参数传递,编写子程序时要避免用#6、#15、#11等变量号来接收数据,但这些变量号可以用在子程序中作为内部计算的中间变量暂存数据。 另外,G65代码在调用宏子程序时,还会把当前九个轴的绝对位置(工件绝对坐标)传入局部变量#30#38。#30#38与轴名的对应关系由机床制造厂家规定,通常#30为X轴,#31为Y轴,#32为Z轴。固定循环指令初始平面Z 模态值也会传给变量#26。通过#30#38可以轻易得到进入子程序时的轴坐标位置,这在程序流程控制中是很有用的。 5系列零件加工 所谓系列零件加工,是指不同规格的零件,形状基本相同,加工过程也相同,只是尺寸数据不一样,利用宏程序就可以编写出一个通用的加工程序来。 例1 切槽宏子程序。 %8002 G92X90 Z30 M98 P8001 U10 V50 A20 B40 C3 ;UVABC对应尺寸变量见下图 G00 X90 Z30 M30 %8001 ;子程序 G00 Z-#20 ;切刀Z向定位 X#1+5 ;接近工件,留5毫米距离 #10=#2 ;#10已切宽度+#2 WHILE #10 LT #21 ;够切一刀? G00 Z-#20-#10 ;Z向定位 G01 X#0 ;切到要求深度 G00X#1+5 ;X退刀到工件外 #10=#10+#2-1 ;修改#10 ENDW G00 Z-#21-#20 ;切最后一刀 G01X#0 G00X#1+5 M99 例2 根据下面系列零件的图形,编辑精加工轮廓及切断的程序。轮廓加工用外圆车刀、切断用切断刀(刀位点在右刀尖)。工件零点设在右端面。 ;工件1主程序: %1000 M03 S600 T0101 M98 P1001 A8B10C24D20E5F40 T0202 M98 P1002 C24F40 M30 ;工件2主程序: %2000 M03 S600 T0101 M98 P1001 A10B15C28D24E7F50 T0202 M98 P1002 C28F50 M30 ;轮廓加工子程序 %1001 G00X0Z3 G01Z0F100 G03X2*#0Z#0R#0 G01X#2 W-#4 #10= #1- #2-#3/2 #11=SQRT#1*#1-#10*#10 G02X#2W-2*#11R#1 G01Z-#5 U2 G00X#2+50Z100 M99 ;切断子程序 %1002 G00X#2+2Z-#5 G01X0.3F30 G00X#2+50 Z100 M99 6高级参考 在子程序中,可能会改变系统模态值。例如,主程序中的是绝对编程(G90),而子程序中用的是相对编程(G91),如果调用了这个子程序,主程序的模态就会受到影响。当然,对于简单的程序,你可以在子程序返回后再加一条G90指令变回绝对编程。但是,如果编写的子程序不是你自己用,别人又不知道你改变了系统模态值,直接调用就有可能出问题。有没有办法,使子程序不影响主程序的模态值呢?简单的办法就是,进入子程序后首先把子程序会影响到的所有模态用局部变量保存起来,然后再往后执行,并且在子程序返回时恢复保存的模态值。看下面的例子 例 %102 ;不管原来是什么状态,先记录下来 #45=#1162 ; 记录第12 组模态码#1162 是G61 或 G64? #46=#1163 ; 记录第13 组模态码#1163 是G90 或 G91? ;现在可以改变已记录过的模态 G91 G64 ;用相对编程G91 及连续插补方式G64 ;这里是其它程序 ;子程序结束前恢复记录值 G#45 G#46 ;恢复第12 组13 组模态 M99 由此可见,系统变量虽然是不能直接改写的,但并不是不能改变的。系统模态值是可以被指令改变的。 固定循环也是用宏程序实现的,而且固定循环中它改变了系统模态值,只是在固定循环子程序中采用了保护措施,在固定循环宏子程序返回时,恢复了它影响过的系统模态,所以外表看它对系统模态没有影响。这可以通过分析系统提供的固定循环宏程序看出来。 对于每个局部变量,还可用系统宏AR来判别该变量是否被定义,是被定义为增量或绝对方式。该系统宏的调用格式如下 AR#变量号 返回值: 0 表示该变量没有被定义 90 表示该变量被定义为绝对方式G90 91 表示该变量被定义为相对方式G91 例 下面的主程序%1000 在调用子程序%9990 时设置了I JK 之值,子程序%9990 可分别通过当前局部变量#8 #9 #10 来访问主程序的I J K 之值 %1000 G92 X0Y0Z0 M98 P9990 I20 J30 K40 M30 %9990 IF AR#8 EQ 0 OR AR#9 EQ 0 OR AR#10 EQ 0 M99 ; 如果没有定义I J K 值,则返回 ENDIF N10 G91 ; 用增量方式编写宏程序 IF AR#8 EQ 90 ; 如果I 值是绝对方式G90 #8=#8-#30 ;将I 值转换为增量方式, #30 为X 的绝对坐标 ENDIF M99 HNC-21M 子程序嵌套调用的深度最多可以有七层,每一层子程序都有自己独立的局部变量,变量个数为50 。当前局部变量为#0-#49, 第一层局部变量为#200-#249 ,第二层局部变量为#250-#299,第三层局部变量#300-#349 ,依此类推。在子程序中如何确定上层的局部变量要依上层的层数而定。由于通过系统变量来直接访问局部变量容易引起混乱,因此不提倡用这种方法。 例 %0099 G92 X0 Y0 Z0 N100 #10=98 M98 P100 M30 %100 N200 #10=222 ;此时N100 所在段的局部变量#10 为第0层#210 M98 P110 M99 %110 N300 #10=333 ;此时N200 所在段的局部变量#10为第1层#260,即#260=222 ;此时N100 所在段的局部变量#10为第0层#210,即#210=98 M99 五宏编程实例 1数车编程 (1)函数曲线加工通用宏程序 ;任意曲线y=f(x)的加工 ;单调区间x由x1变到x2 方法一- %1001 #1=x1 ;初值 #2=f(x1) ;或者写成#2=f(#1) WHILE #1 LE x2;或者WHILE #1 GE x2 G01 X#1 Y#2 ;到下一位置 #1=#1+0.01 ;X增量0.01 ;或者#1=#1-0.01 ;X增量-0.01 #2=f(#1) ;计算下个点坐标 ENDW ;.退刀 M30 (实际应用,请用具体表达式代替f(x)) 方法二 %1002 #1=x1 ;初值 #3=f(x1) ;或者写成#3=f(#1) WHILE #1 LE x2;或者WHILE #1 GE x2 #2=#3 ;保存前一个点坐标 #1=#1+0.01 ;X增量0.01 ;或者#1=#1-0.01 ;X增量-0.01 #3=f(#1) ;计算下个点坐标 G91 G01 X0.01 Y#3-#2 ;到下一位置 ENDW ;.退刀 M30 (2)抛物线车削1 用宏程序编制如图所示抛物线在X区间0,8内的程序。 %3401 T0101 G37 M03 S600 ;G37半径编程 #0=0 ;X坐标,初值为0 #1=0 ; Z坐标,初值为0 WHILE #0 LE 8 G90G01X#0Z-#1F200 #0=#0+0.08 #1=#0*#0/2 ENDW G00 X40 Z80 M05 M30 (3)抛物线车削2 %0342 T0101 M03 S600 G00 X20.5 Z2 #11=12 ;B初值 #10=SQRT2*#11 ;A初值 WHILE #10 LE 8 G90G01 X2*#10 Z12- #11 F200 #10=#10+0.1 #11=#10*#10/2 ENDW G01 X16 Z-32+12 Z-28 U4 G00 X20.5 Z2 M05 M30 (4)抛物线车削3 %0342 T0101 M03 S600 G00 X35 Z3 G01 X18 F100 Z-8 #11=12 ;B初值 #10=SQRT2*#11 ;A初值 WHILE #11 LE 32 G90G01X2*#10+3Z4-#11F500 #11=#11+0.06 #10=SQRT2*#11 ENDW G01 X22 Z-28 Z-30 X30 Z-35 G00X35Z3 M30 (5)抛物线车削4 %0001 T0101 M03 S800 G92 X100 Z50 G64 G00X36Z4 #11=32 ;B初值 #10=SQRT2*#11 ;A初值 WHILE #11 GT 0 G01X20+2*#10Z#11-38 #11=#11-0.2 #10=SQRT2*#11 ENDW G01X20Z-38 G00X18 Z4 X100Z50 M30 (6)抛物线车削5(G71与宏程序) 这个例子中应用了G71复合循环与宏程序配合完成粗精加工。G71参数简介: G71 U_R_P_Q_X_Z_F_S_T_ U背吃刀量;R每次退刀量;P起始段号;Q结束段号;X、Z精加工余量;F、S、T粗车时有效,精车时以精车程序为准。 %3402 T0101 M03 S600 G00 X21 Z2 G71 U0.5 R1 P11 Q22 X0.6 Z0.1 F100 S600 N11 G01 X0 S1200 ;精加工,起始 #10=0 ;A坐标,初值为0 #11=0 ;B坐标,初值为0 WHILE #10 LE 8 G01 X2*#10 Z-#11 F50 #10=#10+0.1 ;A坐标增量0.1 #11=#10*#10/2 ;更新B坐标 ENDW G01 X16 Z-32 Z-40 N22 G00X20.5 ;精加工,结束 X21 Z2 M30 (7)抛物线车削6 %3404 T0101 M03 S600 G92X80Z30 G00X20Z3 G71U0.6R0.6P6Q14X-0.6Z0.1F100 N6G01X38 #11=0 ;B初值 #10=0 ;A初值 WHILE #11 LE 18 G01X38-2*#10Z-#11F100 #11=#11+0.5 #10=SQRT#11*2 ENDW G01X26 Z-18 N14 G01Z-24 X22 G00Z5 X80Z30M05 M30 (8)正弦线车削 %3404 M03 S600 T0101 G92 X80 Z30 G00 X25 Z3 G71 U0.6R0.6P6Q13X0.8F100 N6G0X17 #11=0 WHILE #11 GE -25 #9=#11*PI/10 ; #10=3.5*SIN#9 G01X17-2*#10Z#11F100 #11=#11-0.5 N13ENDW G01X24Z-25 Z-30 X30 G00X80Z30 M30 (9)抛物线与椭圆车削 %8002 G92X50Z100 M98 P8001 A8B5C4U32V40W55 G36G90X50Z0 M30 %8001 G64 G37 (连续切削,半径编程) #10=0 #11=0 (抛物线起点) WHILE #11 LE #20 G01 X#10 Z-#11 F150 #10=#10+0.08 (抛物线X增量) #11=#10*#10/#2(计算抛物线z) ENDW #50= SQRT#20*#2 (抛物线与椭圆交接处半径) G01 X#50 Z-#20(抛物线终点) G01Z-#21 (直线终点) #12=0 #13=0 (椭圆起点) WHILE #13 LE #1 #12=#0/#1*SQRT#1*#1-#13*#13 (椭圆X增量) G01 X#50+#0-#12 Z-#21-#13 #13=#13+0.08 (椭圆z增量) ENDW G01 X#50+#0 Z-#21-#1 (椭圆终点) Z-#22 U2 G0X50Z100 M99 (10)椭圆粗、精车削 - %100 M03 T0101 S600 G00 X32 Z2 ;粗车 #1=15 #2=0 WHILE #1 GE 1 ;还可以车一刀(2mm) #1=#1-1 #2=25/15*SQRT15*15-#1*#1 G00 X#1*2+0.5 ;转为直径编程并留精车余量0.5 G01 Z#2-25 F150 G91 X1 G90 Z2 ENDW G00 X0 S1200 ;精车 #1=0 #2=25 WHILE #1 LE 15 G01 X#1*2 Z#2-25 F80 #1=#1+0.1 #2=25/15*SQRT15*15-#1*#1 ENDW G01 X32 G00 X50 Z100 M30 (11)用子程序完成粗、精加工 子程序按精车路径用相对编程(X方向)。 方法1- %1010 M03 S600 T0101 #50=35 ;初始化X尺寸(毛坯值) #51=3 ;切削量 WHILE #50 GT #51+0.5 ;还够车一刀? #50=#50-#51 G00 X#50 Z1 M98 P1011 ENDW G00 X0.5 Z1 M98 P1011 ;半精车 G00 X0 Z1 M98 P1011 ;精车 G00 X50 Z100 M05 M30 %1011 G01 Z0 ;编程起点X0,Z1 G03 U20 W-10 R10 G01 U12 W-5 W-10 U1 ;退刀 G00 Z1 M99 方法2- %1020 M03 S600 T0101 #50=35 ;初始化X尺寸(毛坯值) #51=3 ;切削量 WHILE #50 GT #51+0.5 ;还够车一刀? #50=#50-#51 G90 G00 X#50 Z1 M98 P1021 ENDW G00 X0.5 Z1 M98 P1021 ;半精车 G00 X0 Z1 M98 P1021 ;精车 G00 X50 Z100 M05 M30 %1021(少走空刀的子程序) G01 Z0 ;编程起点X0,Z1 G03 U20 W-10 R10 IF #50+20 GT 35 ;过了毛坯就退刀 G01 U12 W-5 IF #50+20+12 GT 35 ;过了毛坯就退刀 W-10 ENDIF ENDIF U1 ;退刀 G00 Z1 M99 方法3- 方法4- (12)变螺距螺纹 %001 T0101 M03 S600 G92 X80 Z30 G00 X30 Z4 G64 #50=27.4 M98 P002 #50=27 M98 P002 #50=26.8 M98 P002 #50=26.6 M98 P002 G00X80Z30 M30 %002 X#50 G32 Z0 F1 #1=0(螺纹长度,初值为0) #2=1(螺纹螺距,初值为1) WHILE #1 GT -15 G32 W-#2U-0.13F#2 #2=#2+0.1 #1=#1-#2 ENDW G00U3 Z4 M99 2数铣编程 (1)直线段逼近整园的宏程序 利用小直线段逼近整园的数控加工程序 %1000 G92 X0 Y0 Z0 M98 P200 X-50 Y0 R50 ;宏程序调用加工整圆 M30 %200 ; 加工整圆子程序,圆心为(#23, #24),半径为#17 #45=#1162 ; 记录第12 组模态码#1162 是G61 或 G64 #46=#1163 ; 记录第13 组模态码#1163 是G90 或 G91 G90 G64 ;用绝对编程G90及连续插补方式G64 G01 X#23+#17 Y#24F250; #1=0 ;角度参数 WHILE #1 LE 360 G01 X#23+#17*COS#10*PI/180 Y#24+#17*SIN#10*PI/180 #1=#1+1 ENDW G#45 G#46 ;恢复第12 组13 组模态 M99 (2)螺旋线走刀 ;-1- ;螺旋线,由内向外 %100 G92 X0 Y0 Z50 M03 G64 #0=0 ;X初始偏移 #1=20 ;每周偏移 #2=#0 ;动态半径 #3=0 ;角度 #4=1 ;角度增量 G01 X#0 Y0 Z0 F250 WHILE #3 LT 720 #5=#2*COS#3*PI/180 #6=#2*SIN#3*PI/180 G01 X#5 Y#6 ;还可用圆弧指令 #3=#3+#4 #2=#2+#1*#4/360 ENDW G00 X0 Y0 Z50 M30 ;-2- ;螺旋线,极坐标 %100 G92 X0 Y0 Z50 #0=0 ;X初始偏移 #1=20 ;每周偏移 #2=#0 ;动态半径 #3=0 ;角度 #4=1 ;角度增量 G01 X#0 Y0 Z0 F250 G38 X0 Y0 WHILE #3 LT 720 G03 RP=#2 AP=#3 #3=#3+#4 #2=#2+#1*#4/360 ENDW G00 X0 Y0 Z50 M30 (3)来回铣削的方法 在循环或子程序中,有时候需要判断这次调用是向左/向右、向上/向下、向前/向后?这种情况的关键是要建立方位“标志”,以“记住”当前方位,以便判断下一步的方向。方位标志可以有很多种形式,如:用1表示正向,-1表示负向;也可用两个方位坐标直接标记现在位置。 ;方案一- #50=100 ;相对距离 WHILE 条件 G91 G01 X#50 ;相对编程 #50 = #50 * -1 ;每次循环改变符号 条件变量增量 ENDW ;方案二- #50=100 ;距离绝对值 #51=1 ;方向标志 WHILE 条件 G91 G01 X#50*#51 #51 = -1 * #51 ;改变方向 条件变量增量 ENDW ;方案三- - ;来回的指令不同 #51= 20 ;方向标志 WHILE 条件 . ;公共指令 IF #51 EQ 20 指令一 ;方向1要执行的语句 #51 = 0 ;修改方向标志 ELSE 指令二 ;方向2要执行的语句 #51 = 20 ;修改方向标志 ENDIF . ;公共指令 条件变量增量 ENDW (4)铣平面 ;铣平面260*180,刀20 %1000 G92 X0 Y0 Z50 M03 S800 #1 = 5 ;刀Y轴坐标 #2 = 270 ;左右切削长度(5+260+5) G00 X-15 Y#1 Z-1 ;下刀 G01 X-5 F200 WHILE #1 LE 180-8 G90 G01 Y#1 G91 G01 X#2 #1 = #1 + 8 ;进刀增量8 #2 = #2 * -1 ;改变符号(方向) ENDW G90 Z50 X0 Y0 M30 (5)铣斜面 方法一(A): %100 G92X0Y0Z50 M03S800 #1=0 ;Y位置 #2=0 ;X方向 #3=8 ;平底刀,R8 G01X0+#3Y0Z40F250 WHILE #1 LE 80 ;铣完了吗? G01 Y#1 IF #2 EQ 0 ;方向判断 #2=50 G01 X50+#3 Z0 ;走斜面到底 ELSE #2=0 G01 X0+#3 Z40 ;走斜面到顶 ENDIF #1=#1+0.1 ;Y增量0.1 ENDW G00 Z50 X0 Y0 M30 方法一(B): %100 G92X0Y0Z50 M03S800 #1=0 ;Y位置 #3=8 ;平底刀,R8 WHILE #1 LE 80 ;铣完了吗? G00Z42 X0+#3 G01 Y#1Z40F250 G01 X50+#3 Z0 ;走斜面到底 #1=#1+0.1 ;Y增量0.1 ENDW G00 Z50 X0 Y0 M30 方法二: %100 G92X0Y0Z50 M03S800 #0=0 ;X位置 #1=40 ;Z位置 #2=0 ;X方向 #3=8 ;平底刀,R8 G01X0+#3Y0Z40F250 WHILE #0 LE 50 G01 X#0+#3 Z#1 IF #2 EQ 0 ;方向判断 #2=80 G01 Y80 ELSE #2=0 G01 Y0 ;走斜面到顶 ENDIF #0=#0+0.1 #1=40/50*50-#0 ENDW G00 Z50 X0 Y0 M30 (6)铣半圆柱 ;-1- ;半圆柱,100*150,球刀 ;行切法1,原点在底面中心 %100 G92X0Y0Z50 M03S800 #1=0 ;角度 #2=50 ;X #3=0 ;Z #4=1 ;方向 G00 X50Y-75 WHILE #1 LE PI ;#1=180 G01 X#2 Z#3 ;圆弧方向步进 G01 Y75*#4 ;行切 #1=#1+0.1 ;角度增量 #2=50*COS#1 ;更新坐标 #3=50*SIN#1 #4=#4*-1 ;改变方向 ENDW G00Z50 X0Y0 M30 ;-2- ;半圆柱,100*150 ;行切法2,原点在底面前端 %200 G92X0Y0Z50 M03S800 #1=0 ;角度 #2=50 ;X #3=0 ;Z #4=150 ;方向 WHILE #1 LE PI ;#1=180 G01 X#2 Z#3 ;圆弧方向步进 G01 Y#4 ;行切 #1=#1+0.1 ;角度增量 #2=50*COS#1 ;更新坐标 #3=50*SIN#1 IF #4 EQ 150 ;改变方向 #4=0 ELSE #4=150 ENDIF ENDW G00Z50 X0Y0 M30 ;-3- ;半圆柱,100*150 ;原点在底面前端 %200 G92X0Y0Z50 M03S800 #1=0 ;Y位置 #2=50 ;X方向 G01 X50 Y0 Z0 F250 WHILE #1 LE 150 ;#1=150 G01 Y#1 ;Y方向步进 IF #2 GE 50 ;改变方向 G18 G02 X-50 Z0 R50 #2=-50 ELS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外科综合考试题及答案
- 市政公司面试题及答案
- 水质监测考试题及答案
- 汽车销售商年度工作总结
- 邮运驾驶员考试试题及答案
- 江西省赣州市会昌中学、宁师中学2026届化学高一上期末调研模拟试题含解析
- 暑假实习总结
- 2026届宁夏回族自治区银川市兴庆区银川一中化学高一第一学期期中教学质量检测模拟试题含解析
- 21.3实际问题与一元二次方程(第1课时)(教学课件)数学人教版九年级上册
- 保安行业相关知识培训课件
- 浙江省园林绿化工程施工质量验收规范
- 2023-2028全球及中国热保护器行业市场调研及投资前景分析报告3篇
- 钢楼梯计算手册
- 婚前医学检查证明(含存根)
- GB 24542-2009坠落防护带刚性导轨的自锁器
- 特种设备教育培训考试题
- 检验科医师(技师)晋升高级职称晋升专题报告病例分析汇编三篇
- 工程师站及电子间管理规定
- 最新山东地图含市县地图矢量分层可编辑地图PPT模板
- 浙江鹏友化工有限公司
- 江苏常熟新材料产业园环境风险评估报告
评论
0/150
提交评论