1、SAC缄默-(2024整合)数控宏程序什么是宏程序?什么是数控加工宏程序?简洁地说,宏程序是-种具有计算实力和决策实力的数控程序。宏程序具有如下些特点:1 .运用了变量或友达式(计打实力),例如:(1) GOIX35;有表达式3+5(2) GOOX4Fl;有变鬓声(3) GOlY50*SIN3;有函数运算2 .运用了程序流程限制(决策实力,例如:(DlF3GE9;有选择执行吩咐ENDlF(2) WHI1.E811.TS-H5;有条件衙环吩咐ENDI二.用宏程程有什么好处?1 .宏程序引入了变员和去达式,还有函数功能,具有实时动态计算实力,可以加工非国曲线,如微物城、椭圆、双曲城、三角函数曲戏等
2、2 .宏程序可以完成图形一样,尺寸不同的系列零件加工:3 .定程序可以完成工艺路径一样,位置不同的系列零件加工:1,安程序具有肯定袂策实力,能依据条件选择性地执行某些部分:5 .运用宏程序能极大地简化编程,精简程序。适合于困难零件加工的编程。1 .宏变量先看一段简洁的程序:GOOX25.0上面的程序在X轴作一个快速定位.其中数据25.0是固定的,引入变量后可以写成:1=25.0是一个变砥GOOX#l就是一个变量宏程序中.用“=”号后面紧wn4位数字表示一个变量.ta#i.#50.101.变另有什么用呢?变量可以用来代替程序中的数据,如尺寸、刀补号、G指令编号,变量的运用,给程序的设计带来了极
3、大的敏捷性。运用变量前,变量必需带有正确的假。如SI=25GOlXS1;友示C(HX25Sl=-IO;运行过程中可以随时变更#1的值GOlX#l;表示G(HX-IO用变Ift不仅可以表示坐标,还可以表示G、M.F.D.IkM,X、Y,等各种代码后的数字.如:#2=3G#2X30;表祀03X30例1运用了变出的宏子程序.%100O50=20M98PlOOl#50-350M98P100lM30%1001:先给变收赋假;然后调用子程序:重新赋值;可调用于程序G91GOlXS5O;同样一段程序,#50的值不同,X移动的距禹就不同M992 .局部如编号*0、49的变显是局部变量。局部变量的作用范用是当前
4、程序(在同个程序号内),假如在主程序或不同子程序里,出现了相同名称编号的变量,它们不会相互干扰.值也可以不同.例%100NlO#3=30M98PI01#4=#3M30:主程序中#3为30:进入子程序后#3不受影响;#3仍为30,所以#4=30%101#4二#3#3=18M99:这里的#3不是主程序中的#3,所以#3=0(没定义,则:#4=0;这里使#3的(ft为18,不会影响主程序中的#33 .全局交量编号*#199的变量是全局变IIU注:其中M00TM99也是刀补变HO全局变量的作用范用是整个零件程序,不管是主程序还是子程序,只要名称(漏号)相同就是同一个变量,带有相同的(ft在某个地方修改
5、它的值.全部其它地方都受影响.例%10()NIO#50=30M98PlOi#4=#5()M30:先使MO为30:进入子程序;#50变为18所以#4=18%101#4=#5()#50=18M99:#50的值在子程序里也有效.所以#4=30;这里使#50=18,然后返回为什么要把变t分为局部变出和全局变量?假如,Uj全局变fit由变址名不能重复.就可能造成变Jlt名不够用:全局变址在任何地方都可以变更它的值,这地它的优点,也是它的缺点。说是优点,是因为多教传递很便利;说是缺点,是因为当一个程序较困难的时候,-不当心就可能在某个地用了相同的变愤名或者变更了它的值,造成程序混乱。局部变量的运用.解决了
6、同名变成冲突的问题,源写于程序时,不须要考虑其它地方是否用过某个变fit%.什么时候用全局变显?什么时候用局部变出?在一般状况下,你应优先考虑选用局部变i1.同部变最在不同的子程序里,可以盍复运用,不会相互干扰,假如一个数据在主程序和子程序里都要用到,就要考虑用全局变崎。用全局变量来保存数据,可以在不同于程序间传递.共享、以及反复利用.刀补变疑(#1(X)T199).这些变家里存放的数据可以作为刀具半径或长度补偿值来运用。如#100=8G41DI(K):DloO就是指加皎#KK)的值8作为刀补半径.留意:上面的程序中,假如把DlOO写成了DMlo0,则相当于D8,即调用8号刀补,而不是补偿城为
7、8。4. K统交量#300以上的变瓶是系统变“葭系统变址是具有特殊意义的变以,它们是数控系统内部定义好了的,你不行以变更它们的用途。系统变量是全局变敬,运用时可以干腑调用.和#599是可读写的,#600以上的变量是只读的,不能干脆修改.其中,#3007599是子程序局部变显缓存区.这些变成在一般状况下,不用关切它的存在,也不举样你去运用它们,要用意同一个子程序,被调用的层级不同时,对应的系统变量也是不同的,#6004899是与刀具相关系统变求,*10Ooxlo39坐标相关系统变:也#1(140#1143参考点相关系统变量.#114441194系统状态相关系统变量.详见:脩慢!未找到引用源.)有
8、时候须要推断系统的某个状态,以使程序作相应的处理,就要用到系统变疑。5. MPl表示网周率.TRUE条件成立(真).FA1.SE条件不成立(假).二.透美将与表达式1 .算术运算符加+,减-,乘,除/2 .条件运算符宏程序运算符EQNEGTGE1.T1.E数学意义=2条件运算符用在程序流程限制IF和WHl1.E的条件&达式中,作为推断两个表达式大小关系的连接符。留意:宏程序条件运算符与计算机编程语言的条件运算符衣达习惯不同。3 .嵬运算符在IF或WHn.E语句中,假如有多个条件,用逻辑运算符来连接多个条件.AND(且)多个条件同时成立才成立OR(或)多个条件只要有一个成马上可NOT(非)取反(
9、假如不是例#11.T50ANDWIGT20表示:网20W3EQ8OR41.E10表示:伸3=8或用#4WIO有多个逻辑运算符时,可以用方括号来表示结合依次,如:NOT|#I1.T50AND#IGT20我示:假如不是“#l0GOlx20:成立则执行YI5ENDIF;条件不成立,跳到此句后面格式2:(二选一,选择执行)形式:IF条件成立执行的谙句IfiE1.SE条件不成立执行的语句taENDIF例IIF#511.T20G9IG0lX1OF25OE1.SEG91GO1X35F2ENDII-功倦I条件成立执行IF与E1.SE之间的程序,不成立就执行E1.SE与ENDIF之间的程序IF语句的执行流程如图
10、1所示。2 .*f*环WHI1.E格式:WHI1.E条件表达式条件成立循环执行的话句ENDVV功勤条件成立执行WHl1.E与ENDW之间的程序,然后返回到WHl1.E再次推断条件,直.到条件不成立才跳刎ENDW后面.WHl1.E语句的执行流程如图1所示.例:#2=30WHI1.E#2GT0:假如#20G91G01X102=82-3ENDIG90CXX)z5O:成立就执行;修变更讨,;返回:不成立跳到这里执行SInE中必需有“健改条件变ST的语句,使掰其循环若干次后,条件变为“不成立”而退出循环,不然就成为死循环.程JiUIF-ENDIF流程图F-E1.SE-ENDIF流程图WHIIEENDW流
11、程图%400#51=4()M98P40I51=25M98P401M30%401G91G01X*51FI50;子程序消Sl的值由主程序确定ffll流程限制四.子程序及,Ri三传1 .一般子程序一般子程序指没有宏的子程序,程序中各种加工的数据是固定的,子程序编好后,子程序的工作流程就固定了,程序内部的数据不能在调用时“动态地变更,只能通过“镜做”、“旋转”.“缩放”、“平移”来有限的变史子程序的用途.例%400lGOlX8OF1M99子程序中数据固定.一般子程序的效能有限.2 .宏子程序宏子程序Ur以包含变埴,不但可以反红调用简化代码,而且通过变更变星的值就能实现加工数据的收徒变更或变更程序的流程
12、实现困难的加工过程处理.例%4002GO1ZW!)FW5ON坐标是变法:进给速度也是变量,可证应粗、精加工。M99例对圆弧往及切削时,指令GO2、G03交售运用,参数#51变更程序流程,自动选择.%4003IF#51GE1G02X#50|R#50:条件满意执行G02E1.SEG03X-#50|R(#50|:条件不满.意执行G03ENDIF#51=#51*|-1J:变更条件,为下次做打算子程序中的变业,假如不是在子程序内部队伯的,则在调用时,就必须要给变量一个值,这就是参数传递问题,变增类型不同,传值的方法也不同.3 .全局变量传叁敷假如子程序中用的变Ift是全同变收,调用子程序而,先给变汆赋
13、伯,再调用子程序,;#51为全局变力3给它献伯;进入子程序后#51的值是40;其次次给它赋值:再次调用于程序,进入子程序后#51的值是25M994 .局部如传介数问题:%400Nl#1=40;为局部变圻#1赋位N2M98P40I;进入子程序后#1的值是40吗?M30%401N4G9IG0IXll;子程序中用的是局部变量#1M99结论:主程序中Nl行的#1与子程序中N4行的#1不是同一个变fit子程序不会接收到40这个值.怎么办呢?局部变;我的参数传递,是在宏调用指令后面添加参数的方法来传递的。上面的程序中,把Nl行去掉,把N2行改成如下形式即可:N2M9SP4()lB40比较一下,可知多了个B
14、40,其中B代衣#1,紧跟的数字40代表#1的ft是40.这样就把参数40传给了子程序%43中的斜。更傲地,我们用G65来调用宓子程序(称宏调用).G6S指令:G65是特地用来进行宏子程序网用的,但在华中数控系统里面,G65和M98功能相同.可以互换。宏子程序调用指令G65的格式:G65P_1._A_B_-Z_P子程序号1.调用次数AZ短个字母与一个局部变量号而应.A对应0,B对应#1.C时应#2,D对应#3.如A20,即#0=20:B6.5.WJ#1=6.5:其余类推.换句话说,正如要把数50传给变At#17,则写R50.G65代码在调用宏子程序时,系统会将当前程序段各字母(AZ共26个,假
15、如没有定义期为零)后跟的数值对应传到宏子程序中的局部变俄做)25.卜面列出了宏调用时,参数字母与变出号的对应关系:子程序中的变It#0#1#2#3#4#5#6#7#8#9#10#11#12传参数用的字母ABCDEFGIlIJK1.M子程序中的变量#13“141516017181902021*22#23#24#25传卷数用的字母N0PQRSTIVXXZ娈留竟,由于字母G、P、1.等己被宏调用吩附、子程序号和调用次数占用,所以不能再用来传递其它随意数据,传进去的是,G65即86=65,P401即幻5=401(子程序号).1.2即#11=2为广便于参数传递.编写于程序时要避开用的、#15、#11等变
16、量号来接收数据,但这些变量号可以用在子程序中作为内部计匏的中间变量笆存数据.另外,G65代码在调用安子程序时,还会把当前九个轴的肯定位司.(工件肯定坐标)传入同部变j*3OT38.#30#38与轴名的对应关系由机床制造厂家规定,通常#30为X轴.#31为Y轴#32为Z轴-固定循环指令初始平面Z模态粒也会传给变ht#26.通过#30-#38可以轻易得到进入子程序时的轴坐标位置,这在程序流程限制中是很有用的。5 .系列零件加工所谓系列零件加工,是指不同规格的零件,形态基本和同,加工过程也相同,只是尺寸数据不样,利用宏程序就可以编写出一个通用的加工程序来,例I切槽宏子程序。%8()O2G92XWZM
17、)M98P8001UlOV5020B40C3:UVABC对应尺寸变累见下图G(X)X90Z30M30%800lGoOZl-*20)Xl#l+5#10=#2WHI1.E101.T#21GOOZ-#20-#10)GOlX(HO)GX*I5)10=#10+#2-1ENDWG(X)Z-#21-#20GOIX(W)IGOoX悌1+5JM99;子程序:切刀Z向定位:接近工件.留5毫米距离;#10已切宽度+#2;够切一刀?:Z向定位:切到要求深度人退刀到工件外:修改#10:切最终一刀例2依据下面系列零件的图形,编辑精加工轮席及切断的程序.轮席加工用外掰车刀、切断用切断刀(刀位点在右刀尖,工件零点设在右端面,
18、工件1主程序:%I(KX)M03Sf100TOlOIM98P100l8BI0C24D20E5F40TO2O2M98P1002C24F40M30;工件2主程序:%20M03S600TOIOIM98B1()01Al0B15C28D24E7F5()TO2O2M98PI002C28F50M30:轮麻加工子程序%I(X)IGX0Z3G01Z011G03X(2*#02|#0JR|#0|G0IX#2|W|-#4|M10=l-(2-#3)72G02X*2)W-2*l11R(#IG()IZ(-#5|U2GOOX#2+50|ZlOoM99;切断子程序%I002G00X(#2+2JZ-#5GoIXo.3F30Go
19、OX*2+5OZ100M996 .育锻套考在子程序中,可能会变更系统模态值.例如.主程序中的是肯定编程G90),而子程序中用的是相对蝙程91,假如调用了这个子程序,主程序的模态就会受到彰响,当然,对于简洁的程序,你UJ以在子程序返回后再加条G90指令变回肯定编程.但是,假如编写的子程序不是你自己用,别人又不知道你变更了系统模态侑,干脆调用就有可能出问题。有没有方法,使子程序不影响主程序的模态值呢?简洁的方法就是.进入子程序后首先把尸程序会影响到的全部模态用局部变量保存起来,然后再往后执行,并且在子程序返回时发原保存的模态值。#卜面的例子例%102:不管潦来是什么状态,先记录下来tf45=HH6
20、2:记录第/2组模态码#62是G6/或GM?ff46=itH63;记录第/3祖模态码。63是G%或G91?:璘在可以变更已记录过的模态G9IG64.,用相劝编程GW及连续捕补方式GfM:这里是其它程序:于程序结束前受原记录值G/的5/G/树6/;任原第/2组/3组模态99因此可见,系统变愤虽然是不能干脆改写的,但并不是不能变更的.系统模态值是可以被指令变更的.因定循环也是对宏点序实现的,KJfl定福坏中它变更了系统模态伍.只是&用定彻坏子程序中采纳了爱护措施,在固定的坏宏子在年返回时,复原了它彰方过的乐统根态,所以外表看它对系统模态没有影响。这可以送过分析系统供应的固定锯坏宏桂弃看出来.对于每
21、个局部变,还可用系统宏AR口来判别该变量M否岫定义,是被定义为增量或,卅定方式.该系统宏的调用拈人如下AR#?t董号返时值:O表示该变量没有被定义90表示该变量被定义为肯定方KG9091表示该变量被定义为相对方式G91例下面的主程序*000在谓用于任用$9990时议I1.了IJK之值.子程序9990可分别通过当就局部变量蚪9#10枭访问主做序的IJK之值S1000G92XOYOZOM98P9990I20J30K40M30S9990IFAR8EO0ORAR(9EQ0ORAR910EO0M99;软如没有定义IJK值.别返回ENDIFN10G91;用以量方式崎骂宏假序IFAR#8EQ90;假如I值是
22、肯定方式G908=#8-#30;将I伍转换为增黄方式,#30为X的疥定坐好ENDIFM99WC-21M子崔丹次套调用的深度鼠多可以有七层,每一层子代序都有自己独立的局部变.变量个数为50。当前局部变也为常0-849.第一层局部变量为#200Y249.口次层局部变量为#2507299.第三层局部变量#300-#349.依此关找.在于程序中如何稿定上层的局部丈量安依上层的居数而定。由于通过系烷支量来干脆访问局部变重简洁引起及乱,因此不提信用这种方法。例S0099G92XOYOZON100#10=98M98P100M30S100N200#10=222”匕SfN100所在段的局部变量#10为第。层#2
23、10M98P110M99M10N300#10=333;此时股00所在我的局部变量(Mo为安1发#260,即向260=222;AItN100所在戊的局部变量#10为30乐#210.即#210=98M99五.宏修程实例1.数车程(O函敷曲线宏程序;随意曲级y=f(R的加工:单调区间X由xl变到x2方法%I(M)I#l=xl:初值#2=f(xl):或者W2=询)WHI1.E#11.Ex2:或者WHl1.E#1GEx2GOlX#1|Y#2:到下一位置#1=#1+0.01:X增收OQl:或者#I=#1-0.01:X增量001#2=f(#l);计算下个点坐标ENDW;.“退刀M30(实际应用,请用详细表达
24、式代替f(x)(2)抛物线车削I用宏程序编制如图所示抛物线在X区间0,%3401TOlOlG37M03SMX):G37半径编程ME);X坐标,初位为O1=0;Z坐标,初值为OWHI1.EW)1.E8G90GOIX|0)Zl-#lF200注#0+0.08ff=w+m,2ENDWG(X)X40ZSoM05M30(3)抛物及车削2%0342TOlOlMO3S600G00X20.5Z211=12;B初值# 1O=SQRT(2BM11);A初值WHI1.E#101.E8G90G0124W10Z(12-ffllF200M10=10*0.1Mll=#10MM10/2ENDW方法二%1(X)2# l=xl:初
25、值# 3=f(xl):或者有成#3=RIlDWHI1.E#11.Ex2:或者WHl1.E#1GEx2# 2=#3:保存前一个点坐标# !=#1+0.01:X增Vo.01:或者间=HQ)I;X增或AOl# 3=f(#l);计算下个点坐标G9lGOIXtO,OlY#3-#2|倒下一位置ENDW;退刀M30B区闿12.32GOIXI6Z卜32+12Z-28U4G20.5Z2MOSM30(4)抛物线车削30342TOlOlM03S600GOOX35Z3GOl18FlOOZ-8#11=12力初值#10=SQRnA初值WHI1.E#111.E32G9OGOl24n0*311Z4-WllFSO0#11FIl
26、0.06#10=SQRT2211ENDWGOl22Z-28Z-30X30Z-3SGOOX35Z3M30(5)抛物线车削4%0001TOlOlM03S800G92XlooZ50G64GOOX36Z4*11=32笛初值ttlO=SQRT2Mlll沸初值WHI1.E11GTOG01X(2210Z(ll-38)Wll=ttll-0.2W1O=SQRT2W11ENOWGO1X2OZ38GOOX18Z4X100Z50M30(6)抛物线车削5(G71与宏程序)这个例f中应用了G71亚合循环与宏程序协作完成粗楮加工,G71参数简介:G71U_RJa-Z-JSj1.U背吃刀量:R每次退刀量;P起始段号:Q结束
27、段号:XZ精加工余量;FS、T粗车时有效.精车时以精车程序为准.%3402TOlOlMo3S600GOOX21Z2G71U0.5RlPllQ22X0.6Z0.1FlOOS0NllGOlX0S1200;精加工.起始#10=0洪坐标,初值为0Wll=O沿坐标,初值为0WHI1.E#101.E8GOl2M0ZimFSOM10=W100.1洪坐标增小0.1W11=1OW1O2;更新B型标ENDWGOl16Z-32Z-40N22GX20.5;精加工,结束X21Z2M30(7)挺物线车削6%3404TOlOlMO3S600G92X80Z30GO0X20Z3N6G01X38#11=0;B初值10=0;A初值
28、WHI1.E#111.E18G01X38-2a#10Z|-#llJF100#11=#11+0.5#10=SQRT【#11*2ENDWG01X26Z-18N14G01Z-24X22GOOZSX80Z30M05M30N曲线放火(8)正弦线车副%3404M03S600TOlOlG9280Z30GOOX25Z3N6G0X17#11=0WHI1.E#11GE-25#9=#llMPI/10;#10=3.5SIN#9JGO1X1721OJZ(11F1OON13ENDWG01X24Z25Z-30X30GO0X8OZ30M30(9)抛物线与机车削%8002G92XS0Z100M98P8001A8B5C4U32V
29、40W55G36G90X50ZOM30%8001G64G37(连续切削,半径编程)#10=0#Il=O(抛物线起点)WHI1.EMil1.E#20GOlX(#10ZHllF150#10=#10+0.08(抛物线X增设)#ll=#10*#10/#2(H豫他物线Z)ENDW50=SQRT【020”2的物戏与椭圆交接处半径)GOlX伊50Z1120)(抛物找终点)GOlZ卜#21)(直线终点)#12=0#13=0(椭圆起点)WHI1.E#13IEffl#12=#O/#l-SQRTUQ*#im3*“3)(椭硼X增量)GOlX(#5O*#O-#12)Z(-#21-#13W13=W13O.O8(椭圆Z增显
30、ENDWGOlX(#50+#0)Z421M1(椭回终点)ZH22)U2Goxsoz100M99(10)粗、精车前%I(X)M03T()IOIS600GX32Z2;粗车1=15#2=()WHI1.EsiGEI;还可以车一刀(2mm)#2=25/1SHSQRTI15!5-#!#1)G(X)X|#P2-K.5J:依为直径编程并留精车余累0.5GOIZ(*2-25)F150G91XlG90Z2(三)用子程序完成粗、Hl加工子程序按精车路径用相对编程(X方向).ENDWG()0XOSI2(X);精军#1=0#2=25WHI1.E#11.E15GOIX#l*21Z|#2-25|RiO#1=#1+0.1#
31、2=25/15*SQRT(15!5-r#lENDWGOlX32GX50ZI00M30雌I%ooM03S600TOIOI50=35:初始化X尺寸(毛坯值)#51=3:切削量WHI1.E#50GT|#51+0.5;还泌乍刀?#50=#50-051GOOX(#50ZlM98PI()IIENDWGOOX0.5ZlM98P101I泮特车GOOXOZIM98PI0II:精车G(X)X50ZlOOM05M30%1011GOIZO;编程起点X071G03U20WJORIOGOlU12W-5W-IOUl;退刀GZIM99%1020MO3S600TOlOl#50=35;初始化X尺寸(毛坯假)51=3:切削吊WHI
32、1.EW5OGTW51+O.5:还好车一刀?#5O=#5O-#5JG90CHK)X(#50ZlM98PI02lENDWGooX0.5ZlM98PI02I泮精车GOOXOZIM98P102I:精车G(X)X5()ZI(X)M05M30%IO2I(少走空刀的子程序)GOlZO:编程起点X0.ZlG03U20W-IORlOIFI#5()+20GT35;过了毛坯就退刀GOIUI2W5IF*S0+20+GT35:过了毛坏就退刀W-IOENDlFENDIFUl:退刀G(X)ZlM993.数学学问(1)和角公式Sin(AB)=SinACoslSiBCosCos(B)-CosCosBSi11ASi11Tan(
33、A+B)=(Ta111+1anB)l5-5*S!N15(椭圆外形与水平的角度)N32#U=#4*SIN45-S5*COS45N34GlXSlOY#llN36S1=U11(角度增加,精度高可以减小一点的值)N38IFSI1.T370G0T026N40G40GlXOYON42GOZlOON44M30圆变方上W周H径D24方体40高度30G54G90G00XOYO230.SI500M3M1=-0.5Z方向每次的进刀后2=11.8R的每次变更用,第一刀的初值3=12.0357第次X.Y方向的初始色K1=W3-M2中间变量。GOOX-25.Y-2ZlNlOGOlZSlFl50N12011DlX-3GlYMG2X#3YSlR#2GlX制G2X3Y#4RS2GlX-MG2X#4Y-#3R#2GlXT4G2X-B3Y-MM2GlY33G40X-25.1=81-0.5#2X2-0.2S3-S3*0.03574=83-82IF1GE-30JGOTOlOGOZlOOM5M30