实例七:加工中心产品加工探头宏应用 Marposs探头宏程序融合了所有宏程序命令的精髓所在,其严谨的逻辑关系都是我们学习宏程序人员所应该研究探讨的。(当然不仅仅只有Marposs一家而言,我们只是选择其一作为探讨)对于有基础知识的技术人员从看懂到理解,再到实际应用都需要大量的基础知识做铺垫,都需要在实践中多次模拟验证以达到自己脑海中所想象的运算模式从而运用在实际生产工作中,学习任何知识都需要从点滴做起,一步一步非跳跃式的学习最终“聚沙成塔”。 “工欲善其事必先利其器”学习之前我们必须先了解必要的代码含义,基本所有内容都围绕这一核心组成,其余都是作为辅助保护行作用。 一、跳跃功能:G31 在G31的直线插补期间,当有外部跳跃信号被输入时,进给将停止,所有剩余的指令都将被取消,并且程序跳至下一个程序段。 有了跳跃那么我们就要有读取当前跳跃位置的指令参数,具体如 注意:1、终点坐标和跳跃坐标是在工件坐标系的位置 2、终点坐标、跳跃坐标和伺服偏差量即使在轴移动期间也可以被读取,但机械坐标、工件坐标和刀具位置补偿坐标是在确认到轴移动停止后,才可以被读取。 3、跳跃坐标表示在G31程序段跳跃信号接通的位置。如若跳跃信号没有接通,跳跃坐标终点位置一致。 4、终点位置表示没有任何刀具补偿的刀尖位置,而机械坐标、工件坐标和跳跃坐标是带有刀具补偿的参考位置 必须仔细理解这些含义,我们就进入到分解探头内部的宏的部分如下: 上节的讲述内容我们讲到探测都要设置主程序,以下均为内部子程序,本节只针对重点宏程序内容进行解析 O8311(MARPOSS V3.0) G65P8360 G65P8300X#24Y#25Z#26F#9 M99 O8360(MARPOSS V3.0) #8=1 IF[#4006EQ20]GOTO100 (预读程序段确保采用公制单位) IF[#4006EQ70]GOTO100 #8=25.4 N100IF[#500NE#8]GOTO200(如果不是公制则报警) #100=200*#8 #101=100. #102=13000 #103=11000 #104=5200 M99 N200#3000=166(INCH/METRIC CONFLICT)(显示报警内容“公英制冲突”) O8300(MARPOSS V3.0) G04X0.02 G10L52 (参数输入模式打开) N6200R10000000 (确保6200参数第八位为“1”使用高速跳转) G11 (参数输入模式关) #11=#5041(读取当前探头在XYZ三个方向所处位置) #12=#5042 #13=#5043 #18=0.0 IF[#9NE#0]GOTO100(上节内容所讲的“#9”代表“F”进给) #9=#100(由上程序知#100=200*25.4) N100IF[#9LE0]GOTO210 (探头进给速度不能小于0,反之报警) IF[#2EQ#0]GOTO110 (主程序中B未赋值) #25=#5+#24*ROUND[SIN[#2]*10000]/10000 #24=#4+#24*ROUND[COS[#2]*10000]/10000 N110 #18=#18+1.0 F#9 #2=.0002*#500 IF[#26EQ#0]GOTO120 (此处往下全部在自动识别XYZ有无赋值,如若有坐标值在进入到探测阶段,并且判断有无达到探测的有效距离条件,未达到则报警) IF[#26LT[#5043-#5083]]GOTO120 G90G31Z#26 G10L52 N6200R00000000 G11 G04X0.01 IF[#18GT5.0]GOTO240 IF[ABS[#5063-#5083-#26]GT#2]GOTO250 #26=#0 N120IF[#24NE#0]GOTO125 IF[#25EQ#0]GOTO140 N125G90G31X#24Y#25 G10L52 N6200R00000000 G11 G04X0.01 IF[#24EQ#0]GOTO130 IF[#18GT5.0]GOTO220 IF[ABS[#5061-#24]GT#2]GOTO260 N130IF[#25EQ#0]GOTO140 IF[#18GT5.0]GOTO230 IF[ABS[#5062-#25]GT#2]GOTO270 N140IF[#26EQ#0]GOTO200 G90G31Z#26 G04X0.01 G10L52 N6200R00000000 G11 IF[#18GT5.0]GOTO240 IF[ABS[#5063-#5083-#26]GT#2]GOTO250 GOTO200 N250 #14=[#13-#26]/ABS[#13-#26] G91G01Z[#14/#18*0.6]F[#9*3] GOTO280 N260 #15=[#11-#24]/ABS[#11-#24] G91G01X[#15/#18*0.6]F[#9*3] GOTO280 N270 #16=[#12-#25]/ABS[#12-#25] G91G01Y[#16/#18*0.6]F[#9*3] N280 M19S180G04X0.1 M19G04X0.1 G04X1.0 GOTO110 N200M99 N210#3000=136(INVALID F) N220#3000=161(PREMATURE X TOUCH) N230#3000=162(PREMATURE Y TOUCH) N240#3000=163(PREMATURE Z TOUCH) O8314(MARPOSS V3.0) G65P8360 IF[#3NE#0]GOTO110 #3=1 N110IF[#3LT1]GOTO910 IF[#3GT3]GOTO910 IF[#13NE#0]GOTO120 #13=.1*#500 N120IF[#18NE#0]GOTO130 #18=#5043-#5083 N130#4=0 IF[#24EQ#0]GOTO200 #4=#4+1 #8=#5041 #1=1 #2=#24 N200IF[#25EQ#0]GOTO210 #4=#4+1 #8=#5042 #1=2 #2=#25 N210IF[#26EQ#0]GOTO220 #4=#4+1 #8=#5043-#5083 #1=3 #2=#26 N220IF[#4EQ0]GOTO920 IF[#4NE1]GOTO930 G65P8300Z#6 #5=501+[#1-1]*2+[#3-1]*6 (还记得当初探头标定#501~#506吗?此处就是将探头误差值计算到探测值中) IF[#8GT#2]GOTO230 #13=-#13 GOTO240 N230#5=#5+1 N240#7=#[#5] (#7代表#501~#506某一个值) GOTO[240+#1] N241G65P8300X[#24+#13-#7] G65P8361X[#24-#13+#7] (此处识别探测X向则调用O8361程序) GOTO250 N242G65P8300Y[#25+#13-#7] G65P8362Y[#25-#13+#7](此处识别探测Y向则调用O8362程序) GOTO250 N243G65P8300Z[#26+#13-#7] G65P8363Z[#26-#13+#7](此处识别探测Z向则调用O8363程序) N250#106=#106+#7 #107=#105+#7 #108=#107-#2 (以上N250处很重要,此处就是我们在探测结束时所看到的真实值,代入到公共变量中进行数值计算,在O8061~O8063中仔细分析观察) GOTO[260+#1] (识别探测完后往哪个方向定位) N261G0X#8 GOTO263 N262G0Y#8 N263G0Z#18 IF[#21EQ#0]GOTO790 IF[ABS[#108]GT#21]GOTO940 N790IF[#23EQ#0]GOTO830 IF[#104EQ5200]GOTO800 IF[#23LT54]GOTO950 IF[#23GT59]GOTO950 #3=#104+[#1-1]*100+#23-53 GOTO820 N800IF[#23LT54]GOTO810 (我们知道坐标系是G54~G59,超出范围则报警) IF[#23GT59]GOTO950 #3=#104+#1+[#23-53]*20 GOTO820 N810IF[#23LT1]GOTO950 IF[#23GT48]GOTO950 (扩展坐标系只有48个,大于则报警) #3=6980+#1+#23*20(还记得扩展坐标系的计算吗?) N820#[#3]=#106-#107+#108 GOTO860 N830IF[#20EQ#0]GOTO850 #3=#102+#20 IF[#1NE3]GOTO840 #3=#103+#20 N840#[#3]=#[#3]+#108 GOTO860 N850IF[#9EQ#0]GOTO860 IF[#9NE1]GOTO960 #[#5]=#2-#105 N860IF[#17EQ#0]GOTO900 G65P8364Q#17X#2Y#107Z#108(此处为输出文本内容) N900M99 N910#3000=133(INVALID C) N920#3000=128(NO AXIS) N930#3000=164(MULTI AXIS) N940#3000=170(OUT OF TOERANCE) N950#3000=153(INVALID W) N960#3000=136(INVALID F) O8361(MARPOSS V3.0) G04X0.05 #8=#5041 #3=.0002*#500 #3004=2 IF[#2EQ#0]GOTO100 #9=#5042 #25=#5+#24*ROUND[SIN[#2]*10000]/10000 #24=#4+#24*ROUND[COS[#2]*10000]/10000 N100G31X#24Y#25F#101 G04X0.05 #105=#5061 #106=#5021-#5041+#105(X向计算 机械坐标值-当前工件位置坐标+探头接触工件跳转时的坐标) #3004=0(进给暂停与进给倍率有效,如果处于攻丝阶段则内部宏#3004=3 两者均无效) IF[#2EQ#0]GOTO120 #107=#5062 #108=#5022-#5042+#107 IF[#9EQ#25]GOTO120 IF[ABS[#107-#9]LT#3]GOTO910 IF[ABS[#107-#25]LT#3]GOTO920 IF[#8EQ#24]GOTO130 N120IF[ABS[#105-#8]LT#3]GOTO910 IF[ABS[#105-#24]LT#3]GOTO920 N130G01X#8Y#9F#100 M99 N910#3000=167(NO PROBE MOVEMENT) N920#3000=168(NO WORKPIECE) O8362(MARPOSS V3.0) G04X0.05 #8=#5042 #3=.0002*#500 #3004=2 G31Y#25F#101 G04X0.05 #105=#5062 #106=#5022-#5042+#5062 (Y向计算) #3004=0 IF[ABS[#105-#8]LT#3]GOTO910 IF[ABS[#105-#25]LT#3]GOTO920 G01Y#8F#100 M99 N910#3000=167(NO PROBE MOVEMENT) N920#3000=168(NO WORKPIECE) O8363(MARPOSS V3.0) G04X0.05 #8=#5043-#5083 #3=.0002*#500 #3004=2 G31Z#26F#101 G04X0.05 #105=#5063-#5083 #106=#5023-#5043+#105(Z向计算) #3004=0 IF[ABS[#105-#8]LT#3]GOTO910 IF[ABS[#105-#26]LT#3]GOTO920 G01Z#8F#100 M99 N910#3000=167(NO PROBE MOVEMENT) N920#3000=168(NO WORKPIECE) O8364(MARPOSS V3.0) IF[#24EQ#0]GOTO220 (所调用的程序中涉及的XYZ不能为空值) IF[#25EQ#0]GOTO230 IF[#26EQ#0]GOTO240 IF[#17EQ2]GOTO100 IF[#17NE1]GOTO210 DPRNT[](数据输出指令) DPRNT[*NOMINAL***ACTUAL****ERROR] DPRNT[---------*---------*---------] N100 DPRNT[#24[44]**#25[44]**#26[44]] DPRNT[] M99 N210#3000=147(INVALID Q) N220#3000=124(NO X) N230#3000=125(NO Y) N240#3000=126(NO Z) 注意事项及说明: 1、本程序仅适用于Fanuc数控系统,供数控编程技术人员使用,使用前必须先行验证后方可使用。 2、严禁生搬硬套到加工中心使用,不同加工中心虽为FANUC系统但个别代码不一样,需要与加工中心代码识别保持一致,(例如兄弟机的主轴定位旋转则采用M19 R0~R270). 2、严禁将本程序适用于商业用途,带来的一切不良后果由使用者自行负担,编写过程中难免存在错误,还望指正。 相关资料 识宏程序加工应用实战案例讲解高级篇(二),初级应用宏程序加工应用实战案例讲解高级篇(三),中级应用宏程序加工应用实战案例讲解高级篇(三),中级应用续宏程序加工应用实战案例讲解高级篇(四),高级应用著者二维码 |
|