宏程序简介及应用毕业论文.doc
毕 业 设 计(论文)(说 明 书)题 目:宏程序简介及应用姓 名: 编 号: 2011年 5 月 日摘要随着现代制造技术的发展和数控机床的日益普及,数控加工在我国得到广泛的应用,数控加工中很重要的一部分就是编程,从CAD/CAM软件出现以后,人们过分依赖CAD/CAM软件,使得无论程序大小,加工难易编程人员习惯使用各种CAD/CAM软件,而把手工编程遗忘了,尤其是博大精深的宏程序。宏程序在数控编程中不应该被遗忘,而是应该很好的使用,它有着自动编程软件不可取代的优势。使用宏程序可以提高编程效率,并能扩展数控机床的使用范围,分析几个典型零件的宏程序实例,归纳出在数控加工中,用户根据加工零件结构特点,开发设计自己的宏程序,是充分发挥数控机床性能的有效途径。关 键 词:宏程序 变量 非圆曲线 椭圆 FANUC-0i系统AbstractWith the development of modern manufacturing technology and the increasing popularity of CNC machine tools, CNC machining is widely used in China, CNC machining is a very important part of programming, from CAD / CAM software occurred, people over-reliance on CAD / CAM software, making regardless of program size, ease of processing programmers used to use a variety of CAD / CAM software, and the manual programming forgotten, especially profound macro. Macro Program in NC programming should not be forgotten, but should be good to use, it has automatic programming software irreplaceable advantages. Use the macro program can improve programming efficiency, and to expand the scope of the use of CNC machine tools to analyze a few typical examples of parts of the macro program, summarized in the NC, the user processing components according to structural characteristics, development and design their own macro procedures, are fully the performance of NC, effective way.Keywords: macro, variable, CNC machining, non-circular curve, ellipse, FANUC-0i System目录摘要1第一章 引言5第二章 了解宏程序6第三章 用户宏程序73.1 变量的类型73.2 宏程序的运算73.3 条件表达式8第四章 系统变量94.1接口信号94.2刀具补偿值104.3 宏程序报警114.4 停止和信息显示114.5 时间信息114.6 自动运行控制124.7 已加工的零件数134.8 模态信息134.9 当前位置154.10 工件坐标系补偿值(工件零点偏移值)16第五章 算术和逻辑运算20第六章 宏程序语句和NC语句226.1 下面的程序段为宏程序语句:226.2 宏程序语句与NC语句的不同点226.3 与宏程序语句有相同性质的NC语句22第七章 转移和循环237.1 无条件转移(GOTO语句)237.2 条件转移(IF语句)条件表达式237.3 条件表达式237.4 循环(WHILE语句)23第八章 宏程序调用258.1 宏程序调用和子程序调用之间的差别258.2 非模态调用(G65)258.3 模态调用(G66)268.4 用G代码调用宏程序278.5 用M代码调用宏程序278.6 用M代码调用子程序288.7 用T代码调用子程序29第九章 非圆曲线的编程方法309.1 宏程序编程中直线逼近法的缺点及解决方法309.2 抛物线插补329.3 双曲线插补34第十章 系统变量的应用方法3610.1.宏变量中的系统变量#13001的介绍3610.2 编程实例3610.3机械手刀库换刀用宏程序4310.4斗笠式刀库换刀用宏程序4410.5 结束语45致谢46参考文献47第一章 引言随着现代制造技术的发展和数控机床的日益普及,数控加工在我国得到广泛的应用,数控加工中很重要的一部分就是编程,从CAD/CAM软件出现以后,人们过分依赖CAD/CAM软件,使得无论程序大小,加工难易编程人员习惯使用各种CAD/CAM软件,而把手工编程遗忘了,尤其是博大精深的宏程序。宏程序在数控编程中不应该被遗忘,而是应该很好的使用,它有着自动编程软件不可取代的优势。在CAD/CAM软件广泛应用的今天,手工编程的应用空间日趋减小,但数控宏程序仍在广泛地被使用,特别是在一些具有明确的数学模型的复杂外形的零件和生产不同尺寸的同一型号的产品方面。在实际工作中,宏程序手工编程即可实现,简捷高效,并且不受条件的限制。数控加工对于简单零件一般采用手工编程加工,随着CAD、CAM软件的不断普及,数控编程的模式逐渐由自动编程取代了手工编程。但软件编程因为运行环境等因素制约,其编程效率在一些场合不能满足所有数控系统的特殊功能。如何充分结合两种编程模式,合理有效利用数控机床的各种功能,编制精简合理的小容量数控程序,特别在一些数控技能大赛上,有着非常的现实意义。用宏指令手工编程在加工中心上实现二次曲线加工便是一个典型实例。用户可以使用变量进行数学运算、逻辑运算和函数的混合运算,此外,宏程序还提供了循环语句、分支语句和子程序调用语句,以利于编制各种复杂的零件加工程序。第二章 认识宏程序在编程工作中,我们经常把能完成某一功能的一系列指令像子程序那样存入存储器,用一个总指令来代表它们,使用时只需给出这个总指令就能执行其功能所存入的这一系列指令称作用户宏功能主体,简称宏程序。这个总指令称作用户宏程序调用指令。在编程时,编程员只要记住宏指令而不必记住宏程序。 用户宏程序与普通程序的区别在于:在用户宏程序本体中,能使用变量,可以给变量赋值,变量间可以运算,程序可以跳转;而普通程序中,只能指定常量,常量之间不能运算,程序只能顺序执行,不能跳转,因此功能是固定的,不能变化。 在一般的程序编制中程序字为一常量,一个程序只能描述一个几何形状,所以缺乏灵活性和适用性。而宏程序可以使用变量进行算术运算、逻辑运算和函数的混合运算,此外,宏程序还提供了循环语句、分支语句和子程序调用语句,以利于编制各种复杂的零件加工程序。 从模块化加工的角度看,宏程序最具有模块化的思想和资质条件,编程人员只需要根据零件几何信息和不同的数学模型即可完成相应的模块化加工程序设计,应用时只需要把零件信息、加工参数等输入到相应模块的调用语句中,就能使编程人员从繁琐的、大量重复性的编程工作中解脱出来。第三章 用户宏程序3.1 变量的概述及类型1.变量的表示。一个变量由符号#和变量号组成,如#i(i=1,2,3n),也可用表达式表示变量,表达式需加方括号,即#表达式,如:#50.表3-1 变量的类型变量号变量类型功能#0空变量该变量总是空,任何值都不能赋给该变量。#1#33 局部变量局部变量只能在宏程序中存储数据,例如,运算结果。当断电时,局部变量被初始化为空。调用宏程序时,自变量对局部变量赋值。#100#199#500#999 公共变量公共变量在不同的宏程序中的意义相同。当断电时,变量#100#199初始化为空。变量#500#999的数据保存,即使断电也不丢失。#1000系统变量系统变量用于读和写CNC的各种数据,例如,刀具的当前位置和补偿值。3.2 宏程序的运算除了用空赋值以外,其余情况下空与0相同。表3-2 宏程序运算参数表当#1空时当#10时#2=#1#2=空#2=#1#2=0#2=#1*5#2=0#2=#1*5#2=0#2=#2+#1#2=0#2=#1+#1#2=03.3 条件表达式格式:IF条件表达式GOTOn;一个条件表达式一定要有一个操作符,这个操作符插在两个变量或一个变量和一个常数之间,并且要用方括弧括起来,如#24GT#36。EQ和NE中的空不同于0。当#1空时当#10时#1EQ#0成立#1EQ#0不成立#1NE#0成立#1NE#0不成立#1GE#0成立#1GE#0不成立 #1GT#0不成立#1GT#0不成立程序号,顺序号和任选程序段跳转号不能使用变量。第四章 系统变量系统变量用于读和写NC内部数据,例如,刀具偏置值和当前位置数。4.1接口信号这是可编程机床控制器(PMC)和用户宏程序之间交换的信号。接口信号的系统变量(参数No.6001#00时)变量号功能#1000#1015#1032把16位信号从PMC送到用户宏程序,变量#1000到#1015用于按位读取信号,变量#1023,用于一次读取一个16位信号。#1100#1115#1132把16位信号从用户宏程序送到PMC。变量#1100到#1115用于按位写信号。变量#1132用于一次写一个16位信号。#1133变量#1133用于从宏程序一次写一个32位的信号到PMC。注意,#1133的值为99999999到99999999。(参数No.6001#0(MIF)=1时)变量号功能#1000#1031把32位信号从PMC送到用户宏程序,变量#1000到#1031用于按位读取信号。#1100#1131把32位信号从用户宏程序送到PMC。变量#1100到#1131用于按位写信号。#1032#1035此系把32位信号从PMC一次输出到用户宏程序的变量。只能在99999999到99999999的范围内输入。#1132#1135此系把32位信号一次写入到用户宏程序的变量。只能在99999999到99999999的范围内指定。4.2刀具补偿值用系统变量可以读和写刀具补偿值。可使用的变量数取决于刀补数量,即是否区分几何形状补偿和磨损补偿以及是否区分刀长补偿和刀径补偿。当偏置组数小于等于200时,也可使用#2001#2400。刀具补偿值的系统变量补偿号刀具长度补偿(H)刀具半径补偿(D)外形补偿磨损补偿外形补偿磨损补偿1:200:400#11001(#2201):#11201(#2400):#11400#10001(#2001):#10201(#2200):#10400#13001:#13400#12001:#12400使用方法:读取刀具补偿值编程格式:#100#11001或#100#2201;程序执行此句后,系统中便将H1中的长度补偿值读取并储存在公共变量#100中。书写刀具补偿值编程格式:#11001100.;或#2201100.;用程序输入刀具补偿值刀具补偿存储器和刀具补偿值的设置范围刀具补偿存储器的种类CH代码的几何补偿值G10L10P_R_;D代码的几何补偿值G10L12P_R_;H代码的磨损补偿值G10L11P_R_;D代码的磨损补偿值G10L13P_R_;P:刀具补偿号R:绝对值指令(G90)方式时的刀具补偿值。增量值指令(G91)方式时的刀具补偿值为该值与指定的刀具补偿号内的值相加之和(刀具补偿值)。4.3 宏程序报警宏程序报警的系统变量变量号功能#3000当变量号#3000的值为0200时,CNC停止运行且报警。可在表达式后指定不超过26个字符的报警信息。LCD屏幕上显示报警号和报警信息,其中报警号为变量#3000的值加上3000。使用方法:编程格式:#30001;程序执行此句后出现3001号报警。4.4 停止和信息显示程序停止并显示信息报警号功能#3006在宏程序中指令“#30061(MESSAGE);”时,程序在执行完前一程序段后停止。可在同一程序中指定最多26个字符的信息,由控制入“(”和控制出“)”括住,相应信息显示在外部操作信息画面。4.5 时间信息时间信息可以读和写。时间信息的系统变量变量号功能#3001该变量为一个计时器,以1毫秒为计时单位。当电源接通时,该变量值复位为0。当达到2147483648毫秒时,该计时器的值返回到0。#3002该变量为一个计时器,以一小时为单位计时。该计时器即使在电源断电时也保存数值。当达到9544.371767小时,该计时器的值返回到0。#3011该变量用于读取当前的日期(年/月/日)。年/月/日信息转换成十进制数。例如,2001年9月28日表示为20010928。#3012该变量用于读取当前的时刻(时/分/秒)。时/分/秒信息转换成十进制数。例如,下午3点34分56秒表示为153456。4.6 自动运行控制自动运行的系统变量(#3003)#3003单程序段辅助功能的完成0有效等待1无效等待2有效不等待3无效不等待当电源接通时,该变量的值为0。当单程序段停止无效时,即使单程序段开关设为ON,也不执行单程序段停止。当指定不等待辅助功能(M,S和T功能)完成时,在辅助功能完成之前,程序即执行下一程序段,而且分配完成信号DEN不输出。自动运行控制的系统变量(#3004)#3004进给暂停进给速度倍率准确停止0有效有效有效1无效有效有效2有效无效有效3无效无效有效4有效有效无效5无效有效无效6有效无效无效7无效无效无效当电源接通时,该变量的值为0。当进给暂停无效时: 当进给暂停按钮被按下时,机床以单段停止方式停止。但是,当用变量#3003使单程序段方式无效时,单程序段方式无效时,单程序段停止不执行。 当进给暂停按钮压下又松开时,进给暂停灯亮,但是,机床不停止;程序继续执行,并且机床停在进给暂停有效的第一个程序段。当进给速度倍率无效时,倍率值总是为100%,而与机床操作面板上的进给倍率开关的设置无关。当准确停止检测无效时,即使那些不执行切削的程序段也不进行准确停止检测(位置检测)。4.7 已加工的零件数要求的零件数(目标数)和已加工的零件数(完成数)可以读和写。要求的零件数和已加工的零件数的系统变量变量号功能#3901已加工的零件数(完成数)#3902要求的零件数(目标数)注:数量值不能为负值。4.8 模态信息正在处理的程序段之前的模态信息可以读出。模态信息的系统变量变量号 功能#4001#4002#4003#4004#4005#4006#4007#4008#4009#4010#4011#4012#4013#4014#4015#4016:#4022#4102#4107#4109#4111#4113#4114#4115#4119#4120#4130G00,G01,G02,G03,G33,G75,G77,G78,G79 第1组G17,G18,G19 第2组G90,G91 第3组G22,G23 第4组G94,G95 第5组G20,G21 第6组G40,G41,G42 第7组G43,G44,G49 第8组G73,G74,G76,G80G89 第9组G98,G99 第10组G50,G51 第11组G66,G67 第12组G96,G97 第13组G54G59 第14组G61G64 第15组G68,G69 第16组: :G50.1,G51.1 第22组B代码D代码F代码H代码M代码顺序号程序号S代码T代码P代码(当前所选的追加工件坐标系号)使用方法:编程格式:#100#4010;程序执行此句后,系统便将第9组模态信息读取并储存在公共变量#100中,此时#100的数值为98或99,而不是G98或G99,即如原状态为G99,则#100的数值为99。4.9 当前位置位置信息不能写,只能读。位置信息的系统变量变量号位置信息坐标系刀具补偿值运动时的读操作#5001#5004程序段终点工件坐标系不包含可能#5021#5024当前位置机床坐标系包含不可能#5041#5044当前位置工件坐标系#5061#5064跳转信号位置可能#5081#5084刀具长度补偿值不可能#5101#5104伺服位置偏差第1个数字代表轴号(从1到4)。变量#5801#5804存储的刀具长度补偿值是当前的执行值,不是后面程序段的处理值。在G31(跳转功能)程序段中跳转信号接通时的刀具位置储存在变量#5061到#5064中。当G31程序段中的跳转信号未接通时,这些变量中储存的是指令的程序段终点值。移动期间不能读是指由于缓冲(预读)功能的原因,不能读期望值。使用方法:编程格式:#100#5003;程序执行此句后,系统便将当前Z向坐标读取并储存在公共变量#100中。4.10 工件坐标系补偿值(工件零点偏移值)工件零点偏移值的系统变量变量号功能#5201:#5204第1轴外部工件零点偏移值:第4轴外部工件零点偏移值#5221:#5224第1轴G54工件零点偏移值:第4轴G54工件零点偏移值#5241:#5244第1轴G55工件零点偏移值:第4轴G55工件零点偏移值#5261:#5264第1轴G56工件零点偏移值:第4轴G56工件零点偏移值#5281:#5284第1轴G57工件零点偏移值:第4轴G57工件零点偏移值#5301:#5304第1轴G58工件零点偏移值:第4轴G58工件零点偏移值#5321:#5324第1轴G59工件零点偏移值:第4轴G59工件零点偏移值#7001:#7004第1轴工件零点偏移值(G54.1P1):第4轴工件零点偏移值(G54.1P1)#7021:#7024第1轴工件零点偏移值(G54.1P2):第4轴工件零点偏移值(G54.1P2):#7941:#7944第1轴工件零点偏移值(G54.1P48):第4轴工件零点偏移值(G54.1P48)可以使用如下变量轴功能变量号第一轴外部工件零点偏移G54工件零点偏移G55工件零点偏移G56工件零点偏移G57工件零点偏移G58工件零点偏移G59工件零点偏移#2500#2501#2502#2503#2504#2505#2506#5201#5221#5241#5261#5281#5301#5321第二轴外部工件零点偏移G54工件零点偏移G55工件零点偏移G56工件零点偏移G57工件零点偏移G58工件零点偏移G59工件零点偏移#2600#2601#2602#2603#2604#2605#2606#5202#5222#5242#5262#5282#5302#5322第三轴外部工件零点偏移G54工件零点偏移G55工件零点偏移G56工件零点偏移G57工件零点偏移G58工件零点偏移G59工件零点偏移#2700#2701#2702#2703#2704#2705#2706#5303#5223#5243#5263#5283#5303#5323第四轴外部工件零点偏移G54工件零点偏移G55工件零点偏移G56工件零点偏移G57工件零点偏移G58工件零点偏移G59工件零点偏移#2800#2801#2802#2803#2804#2805#2806#5204#5224#5244#5264#5284#5304#5324使用方法:读取刀具补偿值编程格式:#100#5221或#100#2501;程序执行此句后,系统中便将G54中的X坐标偏移值读取并储存在公共变量#100中。书写刀具补偿值编程格式:#5221100.;或#2501100.;可以用外部工件零点偏移或工件零点偏移来改变用G54到G59指定的6个工件坐标系的位置。指令格式:用G10改变G10 L2 Pp IP_; P0:外部工件零点偏移值 P1到6:工件坐标系1到6 的工件零点偏移 IP:对于绝对值指令(G90),为每个轴的工件零点偏移值。 对于增量值指令(G90),为每个轴加到设定的工件零点的偏移量,(相加的结果为新的工件零点的偏移值),追加的工件坐标系(G54.1或G54)指令格式: 选择追加工件坐标系 G54.1 Pn;或G54Pn; Pn:指定追加工件坐标系的代码 n :148 在追加工件坐标系中设置工件零点偏移值 G10 L20 Pn IP_; Pn:指定工件坐标系工件零点偏移值的代码 n:148 IP_;设定工件零点偏移的轴地址和偏移值第五章 算术和逻辑运算算术和逻辑运算功能格式备注定义#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;角度以度指定。90°30表示为90.5°。平方根绝对值舍入上取整下取整自然对数指数函数#i=SQRT#j;#i=ABS#j;#i=ROUND#j;#i=FIX#j;#i=FUP#j;#i=LN#j;#i=EXP#j;或异或与#i=#jOR#k;#i=#jXOR#k;#i=#jAND#k;逻辑运算一位一位地按二进制数执行。从BCD(十进制)转换为BIN(二进制)从BIN(二进制)转换为BCD(十进制)#i=BIN#j;#i=BCD#j;用于与PMC的信号交换当算术运算或逻辑运算指令IF或WHILE中包含ROUND函数时,则ROUND函数在第1个小数位置四舍五入。CNC处理数值运算时,若操作后产生的整数绝对值大于原数的绝对值时为上取整;若小于原数的绝对值为下取整。对于负数的处理应小心。第六章 宏程序语句和NC语句6.1 下面的程序段为宏程序语句:包含算术或逻辑运算()的程序段。包含控制语句(例如,GOTO,DO,END)的程序段。包含宏程序调用指令(例如,用G65,G66,G67或其它G代码,M代码调用宏程序)的程序段。除了宏程序语句以外的任何程序段都为NC语句。6.2 宏程序语句与NC语句的不同点即使置于单程序段运行方式,机床也不停止。但是,当参数No.6000#5(SBM)设定为1时,在单程序段方式中,机床停止。在刀具半径补偿方式中宏程序语句段不做为不移动程序段处理。6.3 与宏程序语句有相同性质的NC语句 含有子程序调用指令(例如,用M98或其它M代码或用T代码调用子程序)但没有除O,N可L地址之外的其它地址指令的NC语句,基性质与宏程序语句相同。 不包含除O,N,P或L以外的指令地址的程序段其性质与宏程序语句相同。第七章 转移和循环7.1 无条件转移(GOTO语句)指令格式GOTO n; n:顺序号(1到99999)7.2 条件转移(IF语句)条件表达式指令格式 IF条件表达式GOTO n; IF条件表达式THEN;7.3 条件表达式运算符运算符含义EQ等于()NE不等于()GT大于()GB大于或等于()LT小于()LE小于或等于()7.4 循环(WHILE语句)指令格式 WHILE条件表达式 Dom;(m=1,2,3) : END m; :无限循环当指定DO而没有指定WHILE语句时,产生从DO到END的无限循环。处理时间,在处理有标号转移的的GOTO语句时,进行顺序号检索。反向检索的时间要比正向检索长。用WHILE语句实现循环可减少处理时间。未定义的变量,在使用EQ或NE的条件表达式中,空和零有不同的效果。在其它形式的条件表达式中,空被当作零,当替换或者插入用户宏指令时,开始的两个或多个字符可以替换整个字。第八章 宏程序调用8.1 宏程序调用和子程序调用之间的差别宏程序调用(G65)不同于子程序调用(M98),如下所述。 用G65,可以指定自变量(数据传送到宏程序)。M98没有该功能。 当M98程序段包含另一个NC指令(例如,G01 X100.0 M98Pp)时,在指定执行之后调用子程序。相反,G65无条件地调用宏程序。 M98程序段包含另一个NC指令(例如,G01 X100.0 Pp)时,在单程序段方式中,机床停止。相反,G65机床不停止。 用G65,改变局部变量的级别。用M98,不改变局部变量的级别。8.2 非模态调用(G65)指令格式 G65 Pp_L_自变量指定; P_ :要调用的程序 _ :重复次数(默认值为1) 自变量 :数据传递到宏程序自变量指定自变量指定待添加的隐藏文字内容3地址变量号地址变量号地址变量号ABCDEFH#1#2#3#7#8#9#11IJKMQRS#4#5#6#13#17#18#19TUVWXYZ#20#21#22#23#24#25#26地址G,L,N,O和P不能在自变量中使用。自变量指定地址变量号地址变量号地址变量号ABCI1J1K1I2J2K2I3J3#1#2#3#4#5#6#7#8#9#10#11K3I4J4K4I5J5K5I6J6K6I7#12#13#14#15#16#17#18#19#20#21#22J7K7I8J8K8I9J9K9I10J10K10#23#24#25#26#27#28#29#30#31#32#33I,J,K的下标用于确定自变量指定的顺序,在实际编程中不写1小数点的位置不带小数点的自变量,其数据单位为各地址的最小设定单位。传递不带小数点的自变量,其值会根据机床实际的系统配置变化。在宏程序调用中使用小数点可使程序兼容性好。2调用嵌套 调用可以嵌套4级,包括非模态调用(G65)和模态调用(G66)。但不包括子程序调用(M98)。3局部变量的级别 局部变量嵌套从0到4级。主程序是0级。宏程序每调用1次(用G65或G66),局部变量级别加1。前1级的局部变量值保存在CNC中。当宏程序执行M99时,控制返回到调用程序。此时,局部变量级别减1,恢复宏程序调用时保存局部变量值。8.3 模态调用(G66)G66 Pp_L_自变量指定;Pp_:要调用的程序号 _:重复次数(默认值为1) 自变量:传递到宏程序的数据 取消用G67。1模态调用嵌套在模态调用期间,指定另一个G66代码,可以嵌套模态调用。2限制在G66程序段中,不能调用宏程序。G66必须在自变量之前指定。在只有诸如辅助功能但无移动指令的程序段中不能调用宏程序。局部变量(自变量)只能在G66程序段中指定。注意,每次执行模态调用时,不再设定局部变量。8.4 用G代码调用宏程序在参数中设置调用宏程序的G代码,按非模态调用(G65)的方法调用宏程序。在参数(No.6050到No.6059)中设置调用用户宏程序(O9010到O9019)和G代码号(从1到9999),调用用户宏程序的方法与G65相同。参数号和程序号之间对应的关系程序号参数号O9010O9011O9012O9013O9014O9015O9016O9017O9018O90196050605160526053605460556056605760586059与非模态调用一样,地址L中指定从1到9999的重复次数。在G代码调用的过程中,不能三G代码调用宏程序。这种程序中的G代码被处理为普通G代码。在用M代码或T代码调用的子程序中,不能用G代码调用宏程序。这种程序中的G代码也处理为普通G代码。8.5 用M代码调用宏程序在参数中设置调用宏程序的M代码,按非模态调用(G65)一样的方法调用宏程序。在参数(No.6080到No.6089)中设置调用用户宏程序(O9020到O9029)的M代码(从1到99999999),调用宏程序的方法同G65相同。参数号和程序号之间的对应关系程序号参数号O9020O9021O9022O9023O9024O9025O9026O9027O9028O90296080608160826083608460856086608760886089与非模态调用一样,地址L指定从1到9999的重复次数。调用宏程序的M代码必须在程序段的开头指定。用G代码调用的宏程序或用M代码或T代码调用的子程序中,不能用M代码调用宏程序。这种宏程序或子程序中的M代码被处理为普通M代码。8.6 用M代码调用子程序在参数中设置调用子程序(宏程序)的M代码号,按与子程序调用(M98)相同的方法调用宏程序。在参数(No.6071到No.6079)中设置调用子程序的M代码(从1到99999999),相应的用户宏程序(O9001到O9009)可按与M98同样的方法调用。参数号和程序号之间的对应关系程序号参数号O9001O9002O9003O9004O9005O9006O9007O900