用户宏程序解析课件.ppt

上传人:小飞机 文档编号:2161516 上传时间:2023-01-22 格式:PPT 页数:112 大小:1.06MB
返回 下载 相关 举报
用户宏程序解析课件.ppt_第1页
第1页 / 共112页
用户宏程序解析课件.ppt_第2页
第2页 / 共112页
用户宏程序解析课件.ppt_第3页
第3页 / 共112页
用户宏程序解析课件.ppt_第4页
第4页 / 共112页
用户宏程序解析课件.ppt_第5页
第5页 / 共112页
点击查看更多>>
资源描述

《用户宏程序解析课件.ppt》由会员分享,可在线阅读,更多相关《用户宏程序解析课件.ppt(112页珍藏版)》请在三一办公上搜索。

1、高级数控加工程序编制:FANUC用户宏程序SIEMENS参数编程机电学院数控技术研究室2011年11月,用户宏程序编程一、宏程序应用概述(一)宏程序与普通程序的对比 一般意义上的数控编程(普通程序),是使用数控系统给定的指令代码进行编程。每个代码的功能固定,只要按规定使用即可。为了扩展编程功能,FANUC数控系统厂家在一般指令代码功能基础上,又提供了用户宏程序功能,简称宏程序。区别如下:普通程序使用常量,常量之间不能运算,程序只能顺序执行 不能跳转,程序没有通用性;宏程序可以使用变量(可以赋值),变量之间可以运算,程 序运行可以跳转,程序具有通用性。,(二)宏程序与CAD/CAM软件生成的程序

2、对比 宏程序短小精悍,任何数控加工只要能够用宏程序完整表达,即使再复杂,其程序也比较精炼篇幅小,优化后的宏程序段数很少超过60行,这对于一般数控装置的程序存储空间为128KB、256KB标准配置来说,都能容纳下任何复杂的宏程序。不需要考虑因程序较长进行在线加工时,数控系统与外部电脑的传输率不够问题。CAD/CAM软件生成的程序通常都比较大,因为其生成刀具轨迹的原理采用直线(微线段)逼近曲线曲面,所以不但程序长,而且存在逼近误差。(三)用户宏程序与一般子程序对比 子程序可用于同一操作的重复执行,用户宏程序具有此功能,还允许使用变量、算术和逻辑操作、条件转移等,也可以扩展 一般程序,如凹槽循环和用

3、户定义的循环。加工程序可以调用 带有简单命令的用户宏程序。,FANUC 数控系统具有用户宏程序功能。定义:用户宏程序是具有某种功能的一组命令,象子程序一样存储在内存中。存储的这组命令也称为用户宏程序主体(简称宏程序),用户宏程序可以被“调用宏程序的指令”调用。也可以作主程序适用 用户宏程序见图11。,图11 用户宏程序,宏程序的最大特点:在宏程序中,除了使用通常的CNC指令外,还可以使用带变量 的CNC指令,进行变量运算,使用跳转、循环指令等。根据宏程序功能范围的不同分为:用户宏程序A 用户宏程序B 现代FANUC系统已不分“用户宏程序A”和“用户宏程序B”,取消了宏程序A,统称为用户宏程序。

4、二、基础理论2.1 变量概念 普通加工程序用数值指定G代码和位移距离 例如:G01和X100.0。使用宏程序时,数值可以直接指定,而且可用变量指定代 码和位移等,变量值可以用程序或用MDI方式设定或修改。例如:#1=#2+100;G01 X#1 F500;,2.2 变量的表示 一般计算机程序语言允许使用变量名,用户宏程序则不行。用户宏程序的变量需用变量符号“#”和其后的变量号指定,变量号可以直接用数值或表达式表示,其格式为:i(i=1、2、3、)。例如,#12,102,1006等。用表达式指定变量号时,表达式必须放在括号内。例如,#1+#2-12。变量可以代替宏程序中地址后面的数值,变量的值可

5、由调用用户宏程序的指令给宏程序主体赋值,或者在执行宏程序主体时由得出的计算值决定。使用复数个变量时,可由变量号决定。2.2.1 变量的引用 1.变量可被引用为代替宏程序中地址后面的数值 如 F103,表示进给速度由变量103的值指定,当103=1.5时,与F1.5指令的相同。又如,G130,当130=3时,与G03指令相同;,2.变量可被引用为指定位移 如G00Z-100,表示刀具在-Z方向快速定位到变量100指定的位置,当100=250时,与G00Z-250.0指令的相同;此外,用变量j代替变量号码i时,不能用j表示,而用9j。当110=120(110为j,120为变量号码),120=500

6、时,则为9110=500。地址O,N不能引用变量,即不能使用O100,N120。变量值可以显示,可以用MDI键设定。3.自变量赋值(指定)在宏程序中给使用的变量所赋予的实际值叫做自变量赋值。自变量由地址和后面的数字指定。除O之外的地址均可指定自变量,自变量的地址和变量号必须一一对应。例如自变量的地址I、J、K与宏程序内的变量一一对应 赋值:直接指定、调用宏程序指令传送、表达式指定 此外自变量还有标志号,如指定自变量标志为1,否则为0。自变量被指定,变为指定值,否则变为下述情况:参照CNC指令,指定的自变量地址无效。参照运算指令和转移指令。,2.2.2 变量的类型 按变量号、使用范围和功能,变量

7、分为四种类型,见表1。表1 变量类型,注:公共变量#150 到#199 及#532 到#999 是随意的(可选择)2.2.3 变量值的范围 局部变量和公共变量的值可以是0或以下范围中的值:-1047-1029 0+10-29+1047 如果计算结果超出有效范围,则触发程序错误P/S,报警NO.111。2.2.4 小数点的省略 当在程序中定义变量值时,整数值的小数点可以省略。例如:#1=123,变量#1的实际值是123.000。,2.2.5 变量使用时注意的问题 在程序中使用变量时,应指定变量号地址。当用表达式指定变量时,必须把表达式放在括号中,例如:G01 X#11+#22 F#3。被引用变量

8、的值根据地址的最小设定单位自动的四舍五入。例如:当G00 X#11,以1/1000mm的单位执行赋值12.3456时,CNC把12.3456赋值给变量#11,实际指令值为G00X12.346。改变引用变量的值的符号,要把“-”号放在#的前面,例如:G00X-#11。当引用未定义的变量时,变量及地址都被忽略。例如:当变量#11的值是0,并且变量#22的值是空时,G00X#11Y#22的执行结果是G00X0。所谓“变量的值是0”与“变量的值是空”是二个完全不同的概念,可以这样理解:“变量的值是0”相当于“变量的数值等于0”,“变量的值是空”意味着“变量所对应的地址不存在,不生效”,未定义。,不能用

9、的变量地址符号有:程序号O,顺序号N,任选程序段挑转号/。例如以下情况不能使用变量:O#11;/O#22G00X100.0;N#33Y200.0;使用ISO代码编程时,用“#”代码表示变量,若用EIA代码,则应用“”代码代替“#”代码,因为EIA代码中没有“#”代码2.3 系统变量 空变量、局部变量和公共变量的意义见表1功能说明部分,不再赘述。下面介绍系统变量。系统变量用于读和写CNC内部数据,例如,刀具偏置值和当前位置数据。无论用户宏程序A或用户宏程序B,系统变量的用法都是固定的,而且某些系统变量为只读,用户必须严格按照规定使用。系统变量是自动控制和调用加工程序开发的基础。系统变量的内容见表

10、2。,表2 FANUC 0i系统变量一览表 变量号 含义#1000#1015,#1032 接口输入变量#1100#1115,#1132,#1133 接口输出变量#10001#10400,#11001#11400 刀具长度补偿值#12001#12400,#13001#13400 刀具半径补偿值#2001#2400 刀具长度与半径补偿值(位置组数 200时)#3000 报警#3001,#3002 时钟#3003,#3004 循环运行控制#3005 设定数据(SETTING值)#3006 停止和显示信息#3007 镜像#3011,#3012 日期和时间#3901,#3902 零件数#4001#412

11、0,#4130 模态信息#5001#5104 位置信息#5201#5324 工件坐标系补偿值(工件零点偏移值)#7001#7944 扩展工件坐标系补偿值(工件零点偏 移值),下面对系统变量进行说明2.3.1 接口(输入输出)信号接口信号是可编程机床控制器(PMC)和用户宏程序之间交换的信号,具体内容见表3。表3 FANUC 0i 接口信号的系统变量 变量号 功能#1000#1015 把16位信号从PMC送到用户宏程序。变量#1000#1032#1015用于按位读取信号;变量#1032用于一 次读取一个16位信号#1100#1115 输出:把16位信号从用户宏程序送到PMC。变量#1100#11

12、32#1115用于按位写信号;变量#1132用于一次 写一个16位信号#1133 变量#1133用于从用户宏程序一次写一个32位 信号送到PMC。#1133的值为从-99999999到+99999999注:只有使用FANUC PMC时,才能使用上表中的变量。在运算中,系统变量#1000#1015和#1032不能用作左边的项。,下面对系统变量进行说明2.3.1 接口(输入输出)信号接口信号是可编程机床控制器(PMC)和用户宏程序之间交换的信号,具体内容见表3。表3 FANUC 0i 接口信号的系统变量 变量号 功能#1000#1015 把16位信号从PMC送到用户宏程序。变量#1000#1032

13、#1015用于按位读取信号;变量#1032用于一 次读取一个16位信号#1100#1115 输出:把16位信号从用户宏程序送到PMC。变量#1100#1132#1115用于按位写信号;变量#1132用于一次 写一个16位信号#1133 变量#1133用于从用户宏程序一次写一个32位 信号送到PMC。#1133的值为从-99999999到+99999999注:只有使用FANUC PMC时,才能使用上表中的变量。在运算中,系统变量#1000#1015和#1032不能用作左边的项。,下面对系统变量进行说明2.3.1 接口(输入输出)信号接口信号是可编程机床控制器(PMC)和用户宏程序之间交换的信号,

14、具体内容见表3。表3 FANUC 0i 接口信号的系统变量 变量号 功能#1000#1015 把16位信号从PMC送到用户宏程序。变量#1000#1032#1015用于按位读取信号;变量#1032用于一 次读取一个16位信号#1100#1115 输出:把16位信号从用户宏程序送到PMC。变量#1100#1132#1115用于按位写信号;变量#1132用于一次 写一个16位信号#1133 变量#1133用于从用户宏程序一次写一个32位 信号送到PMC。#1133的值为从-99999999到+99999999注:只有使用FANUC PMC时,才能使用上表中的变量。在运算中,系统变量#1000#10

15、15和#1032不能用作左边的项。,2.3.2 刀具补偿值用系统变量可以读和写刀具补偿值。通过系统变量赋值,可以修改刀具补偿值,见表4。,表4 FANUC 0i刀具补偿存储器C的系统变量,刀具长度补偿:几何补偿(长度值)和磨损补偿 几何半径补偿:几何补偿(半径值)和磨损补偿 刀具补偿号:400个,即系统支持控制容量达400把刀的刀库。当刀具补偿号小于等于200个时,刀具长度补偿也可使用#2001#2400。例如:假设一把10mm的立铣刀,将其视为10号刀(若在加工中心上,是有非常明确和实在的含义,即应将此铣刀放置在刀库的10号刀位上);对于随机换刀的机床,刀号和刀库位置不一定对应;数控铣床上,

16、尽管只能人工换刀,但为了使刀具管理和工艺管理更合理、更有序,同样也可以效仿加工中心那样操作,即在系统中记录下相关的补偿号和刀具补偿值,唯一的差别不过是没有刀库和自动换刀功能,而需要人工换刀。刀具长度补偿包括二项补偿值(几何值-长度、磨损量)在 Z方向对刀完成后一般不再需要特别处理。刀具半径补偿包括二项补偿值(几何值-半径值、磨损量)几何补偿值=刀具半径 即#13010=5.0,可视为对刀具的识别;磨损补偿值(#12010)则视为对尺寸的控制。,在应用宏程序编写加工程序时,将会有以下的描述:#20=#13010:意义是:把刀具补偿号10(即10号刀,在此既是10mm的立铣刀)的半径5mm,作为几

17、何补偿值赋值给变量#20,#20=5.0。#22=#12010:意义是:把刀具补偿号10(即10号刀,在此既是10mm的立铣刀)的半径方向磨损值1.2mm,作为磨损补偿值赋值给变量#22,在这里,#20=1.2。2.3.3 模态信息 正在处理的当前程序段之前的模态信息可从系统变量中读出。FANUC 0i 系统的模态信息见表5。,表5 FANUC 0i 模态信息的系统变量变量号 功能#4001 G00,G01,G02,G03,G33(组01)#4002 G17,G18,G19(组02)#4003 G90,G91(组03)#4004(组04)#4005 G94,G95(组05)#4006 G20,

18、G21(组06)#4007 G40,G41,G42(组07)#4008 G43,G44,G49(组08)#4009 G73,G774,G76,G80G89(组09)#4010 G98,G99(组10)#4011 G50,G51(组11)#4012 G65,G66,G67(组12)#4013 G96,G9(组13)#4014 G54G59(组14)#4015 G61G64(组15)#4016 G68,G69(组16)#4022 待定(组22)#4102 B代码,#4107 D代码#4109 F代码#4111 H代码#4113 M代码#4114 顺序号#4115 程序号#4119 S代码#4120

19、 T代码#4130 P代码(现在选择的附加工件坐标系)注:1.P代码为当前选择的是附加工件坐标系。2.当执行#1=4002时,在#1中得到的值是17,18或19。3.系统变量#4001#4120不能用于运算指令左边的项。4.模态信息不能写,只能读。另外如果阅读模态信息指定的系统变量为 不能用得G代码时,系统则发出程序错误P/S报警2.3.4 当前位置信息当前位置信息不能写,只能读。当前位置信息的系统变量见表6。,表6 FANUC 0i当前位置信息的系统变量,注:1.ABSIO 工件坐标系中,前一程序段终点座标志。ABSMT 机床坐标系中,当前机床坐标位置。ABSOT 工件坐标系中,当前坐标位置

20、。ABSKP 工件坐标系中,G31程序段终中跳跃信号有效的位置。2.在G31(触发功能)程序段终中,当触发信号接通时的刀具位置存储在变量#5061#5064中,当G31程序段终中的触发信号不接通时,这些变量存储指定程 序段的终点值。3.变量#5081#5084所存储的刀具长度补偿值是当前的执行值(即当前正在执行 中的程序段的量),不是后面的程序段的处理量。4.移动期间不能读取是由于缓冲(豫读)功能的原因,不能读取目标指令值。2.3.5 工件坐标系补偿值(工件零点偏移值)用系统变量可以读和写工件零点偏移值,见表7。表7 FANUC 0i工件零点偏移值的系统变量,变量号,功能,#5201#5204

21、,第1轴外部零点偏移值 第4轴外部零点偏移值,2.4 算术和逻辑运算变量中可以进行运算等式右边的表达式:包含常量或由函数或由运算符组成的变量表达式中的变量#j 和#k 可以用常量赋值等式左边的变量也可以用表达式赋值。算术运算:加、减、乘、除函数,逻辑运算包括与、或、异或等表8 FANUC 0i 算术和逻辑运算一览表功能 功能 格式 备注 定 定义置换#i=#j 加法#i=#j+#k 减法#i=#j-#乘法#i=#j*#k 除法#i=#j/#k,以下是算术和逻辑运算的详细说明:1.反正弦运算#i=Asin#j 取值范围:当参数(No6004#0)NAT位设置为0时,在27090范围 取值。当参数

22、(No6004#0)NAT位设置为1时,在-9090范围取值。当#j超出-1到1的范围时,触发程序错误P/S报警No.111。常数可替代变量#j。2.反余弦运算#i=ACOS#j 取值范围:1800。当#j超出-1到1的范围时,触发程序错误P/S报警No.111。常数可替代变量#j。3.反正切运算#i=ATAN#j/#K 采用比值的书写方式(可理解为对边/邻边)。取值范围:当参数(No6004#0)NAT位设置为0时,取值范围为0 360。例如,当指定#1=ATAN-1/-1时,#1=225。当参数(No6004#0)NAT位设置为1时,取值范围为-180180。例如,当指定#1=ATAN-1

23、/-1时,#1=-135 常数可替代变量#j。4.自然对数运算#i=LN#j 相对误差可能大于10-8。当反对数(#j)为0或小于0时,触发程序错误P/S报警No.111。常数可替代变量#j。,5.指数函数#i=EXP#j 相对误差可能大于10-8。当运算结果超过3.651047(#j大约是110)时,出现溢出并触发程序错误P/S报警No.111。常数可替代变量#j。6.上取整#i=FIX#j和下取整#i=FUP#jCNC处理数值运算时,无条件的舍去小数部分,称为上取整,小数进位到整数称为下取整(注意与数学上的四舍五入对照)。对于负数的处理要特别小心。例如:假设#1=1.2,#2=-1.2 当

24、执行#3=FUP#1时,#3=2.0;当执行#3=FIX#1时,#3=1.0;当执行#3=FUP#2时,#3=-2.0;当执行#3=FIX#2时,#3=-1.0。7.算术与逻辑指令的缩写 程序中指令函数时,函数名的前二个字符可以用于指定该函数。例如:ROUNDRO;FIXFI.8.混合运算时的运算顺序 上述运算和函数可以混合运算,既涉及到运算的优先级,其运算顺序与一般数学 上的定义基本一致,优先级顺序从高到低依次为:函数运算、乘法除法和AND运算、加法减法及0R和XOR运算。例如:#1=#2+#3*COS#4,运算顺序为COS#4、乘法、加法。9.括号嵌套、运算顺序 括号优先,括号按先内括号、

25、中间括号、外括号次序进行,用“”可以改变运算顺序,最里层的优先运算,括号最多可以嵌套5级(包括函数内部使用的括号)。当超过5级时,触发程序错误P/S报警No.118。例如:#6=COS#5+#4*#3+#2*1为3重嵌套。10.逻辑运算说明 逻辑运算:表9 FANUC 0i系统运算 AND 与 逻辑乘 11=1 10=0 00=0;OR 或 逻辑加 1+1=1 1+0=1 0+0=0;XOR 异或 逻辑减 1-1=0 1-0=1 0-0=0 0-1=1;11.运算精度 用户宏程序运算时,必须考虑运算结果的精度。用户宏程序处理数据的浮点格式为:M=2E。每执行一次运算,产生一次误差,在重复计算的

26、过程中,这些误差将累加 FANUC 0i系统运算中的误差精度见表9。,相对误差取决运算结果。使用二类误差的较小者。绝对误差是常数,而不管决运算结果。函数TAN执行SIN/COS。注:如果SIN、COS或TAN函数的运算结果小于10-8,或由于运算精度的限制不为0的话,设定参数No6004#1为1。则运算结果可视为0。影响运算精度的说明:加减运算 由于用户宏程序的变量值的精度仅有8位十进制数,当在加减运算中处理非常大的数时,得不到期望的结果 例如;当试图把下面的值赋予变量#1和#2时:#1=9876543277777.777#2=9876543210123.456 变量值实际上已经变成:#1=9

27、876543300000.000#2=9876543200000.000 此时,当变成计算#3=#1-#2时,其结果#3并不是期望值 67654.321,而是#3=100000.000,显然误差较大,实际计算的实际结果与此还稍有误差,因为系统是以二进制执行的。,逻辑运算 在使用条件表达式EQ、NE、GE、LT、LE时,也可能造成误差,其情形与加减运算基本相同。例如:IF#1EQ#2的运算会受到#1和#2的误差的影响,并不是总是能估计正确。要求二个值完全相同,有时不可能,由此会造成错误的判断 因此应该改用误差来限制比较稳妥,即用IFABS#1-#2LT0.001代替上述语句,以避免二个变量的误差

28、。此时,当二个变量的差值的绝对值未超过允许极限(此处为0.001),就认为二个变量的值是相等的。三角函数运算 在三角函数运算中会发生绝对误差,它不在10-8之内,所以注意使用三角函数后的积累误差,由于三角函数在宏程序中的应用非常广泛,特别在极具数学代表性的参数方程表达上,因此必须对此保持应有的重视。2.5 赋值与变量使用中注意的问题 赋值是指将一个数据赋予一个变量。例如:#1=0,则表示#1的值是0。其中#1代表变量,#是变量的符号(注意:数控系统不同,表示方法有不同),0就是给变量#1赋的值。,这里的“=”是赋值符号,起语句定义的作用。赋值的规律与规定:赋值号“=”两边的内容不能互换,左边只

29、能是变量,右边可 以是表达式、数值或变量。一个赋值语句只能给一个变量赋值。可以多次给一个变量赋值,新变量值取代原变量值(即最 后赋的值)生效。赋值语句具有运算功能,它的一般形式为:变量=表达式。在变量运算中,表达式可以是变量自身,或与其它数据的 运算结果,如:#1=#1+1,这表示#1的值为#1+1。赋值表达式的运算顺序与数学运算顺序相同。辅助功能(M代码)的变量有最大值的限制,例如,M30赋 值为300时,是不合理的。2.6 转移与循环(以下属于宏程序B中用法)在程序中,使用GOTO语句和IF语句可以改变程序执行的流向。有三种转移和循环操作可供使用。,2.6.1 无条件转移(GOTO语句)转

30、移(跳转)到标有顺序号N(行号)的程序段。当指定 199999以外的顺序号时,触发R/S报警No.128.转移语句的格式:GOTO N;N为顺序号(199999)例如:GOTO 99,即转移到第99行。2.6.2 条件转移(IF语句)1IF条件表达式 GOTO N 表示如果指定的条件表达式满足时,则转移(跳转)到标 有顺序号N(即行号)的程序段。如果不满足指定的条件表 达式,则顺序执行下一个程序段。例如:IF#1GT100 GOTO 99;N99 G00 G90 Z100;表明当#1大于100时,程序转移到N99程序段执行,当#1小 于或等于100时,则顺序执行下一个程序段。,2IF条件表达式

31、 GOTO THEN 如果指定条件表达式满足时,则执行预先指定的宏程序语 句,而且只执行一个宏程序语句。如:IF#1 EQ#2 THEN#3=10;表示如果#1和#2的值相同,10赋给#3。说明:条件表达式:条件表达式必须包括运算符。运算符插在二 个变量之间或变量和常量之间,并且用括号封闭。表达式 可以替代变量。运算符:运算符由2个字母组成(见表10),用于两个值的 比较,以决定它们是相等还是一个值小于或大于另一个值 注意,不能使用不等号。,表10 运算符,O8000;#1=0;存储“和数”变量的初值#2=1;被加数变量的初值 N5 IF#2 GT 100 GOTO 99;当被加数大于100时

32、转移 到N99#1=#1+#2;计算和数#2=#2+1;下一个被加数 GOTO 5;转移到N5N99 M 30;程序结束,典型程序示例:下面程序为计算1-100的累加和。,2.6.3 循环(WHILE语句)循环语句的格式:WHILE条件表达式DO m;(m=1,2,3)END m 在WHILE后指定一个条件表达式。当指定条件满足时,执 行DO到END之间的程序;当指定条件不满足时,转到END 后面的程序段。1嵌套 在DOEND循环中的标号m(13)可根据需要多次使用 需要注意的是,无论怎样多次使用,标号永远限制在1,2,3次;此外,当程序有交叉重复循环(DO范围内的重叠)时 会触发P/S报警N

33、o124。关于嵌套的详细说明:,标号m(13)可以根据需要多次使用。WHILE 条件表达式 DO 1;程序 END 1;WHILE 条件表达式 DO 1;程序 END 1;DO范围不能交叉。右面是错误的:,DO循环可以3重嵌套。,用条件转移可以跳出,到 循环的外边,条件转移不能进入循环区内,注意与对照。,2关于(WHILE语句)的其他说明 DO m 和END m 必须成对使用,而且DO m 一定要在END m 之 前用识别号 m 来识别。当指定DO 而没有指定WHILE语句时,将产生DO 到END之间 的无限循环。在使用EQ或NE的条件表达式中,值为空和值为零有不同的效 果。而在其他形式的条件

34、表达式中,空即被当作零 条件转移(IF)和循环(WHILE)的关系:从正反两个方面 描述同一个问题;从实现的功能上说,二者具有相当程度 的相互替代性;从具体用法和使用限制上说,条件转移(IF)受到系统的限制相对更少,使用更灵活。,处理时间:当在GOTO语句(无论是无条件转移的GOTO语句,还是IFGOTO形式的条件转移语句)中有标号转移的语句时 系统将对顺序号检索。数控系统执行反向检索的时间比正向 检索的时间长。因为系统通常正向检索到程序结束后,再返 回程序开头进行检索,所以化费的时间要多。故用WHILE语句实现循环可省时间。例:计算1-10的累加和 O0001;#1=0;存储和变量赋初值#2

35、=1;被加数变量的初值 WHILE#2 LE 10DO 1;被加数个数小于10时,执行DO 到END间程序,继续累加,大于 10时,执行END后面的程序,即 程序结束。#1=#1+#2;作加法(累加)#2=#2+1 新的被加数 END 1;循环1次结束 M30;程序结束,三、用户宏程序A、B调用指令 3.1 用户宏程序调用指令(用户宏指令):宏程序非模态调用指令(G65)宏程序模态调用指令(G66,G67)子程序调用指令(M98)用M代码、T代码调用宏程序主体(子程序)(M m)、(T t)用G代码调用宏程序主体(子程序)(M m)1.G65 在宏程序A、B中都用。A中用G65为专用格式(分

36、为绝对、条件转移指令),还可用M98;B中的G65为非 模态调用 2.模态调出指令(G66、G67)该指令使程序处于模态调出方式,即指令的各程序段每执 行一次,都能调出用P指定的宏程序主体。指令格式为:G66 P;被调出宏程序主体的宏程序号 G67为取消宏程序模态调出方式。G66、G67成对使用。,3.子程序调用指令(M98)指令格式为:M98 P;被调出宏程序主体的宏程序号 上述指令能够调出用P指定的宏程序主体。4.由参数指定的M代码调出 指令格式为:N_G_X_ Mm;其中m为被调出的子程序号。M代码在参数No.6071 No.6079中设定,表11还给出了参数、M代码和子程序号之 间的关

37、系。m值的范围可从0197中选取,其中30除外。,表11 FANUC 0i 参数、M代码和子程序号之间的对应关系,例如:假设在系统中将No.6072参数设置为72(建议这样设置,将m1m9改为m71m79,因为识别方便、条理性好)则M72 相当于 M98 P9002。,参数No.6072=72 说明:自变量赋值:不允许自变量赋值;M代码:在宏程序中调用的M代码被处理为普通的M代码。5.由参数指定的T代码调出 指令格式为:N_G_X_Tt;其中t为被调出的子程序号,与N_G_X_M98P进行同 样的操作。设置参数No.6001的#5位TCS=1时,可用Tt 代码调用用户宏子程序,代替M98P90

38、00。在加工程序中指定的T代码t赋值到(存储)公共变量#149中。,参数No.6001的#5位TCS=1 公共变量#149=22 说明 调用:设置参数No.6001的#5位TCS=1时,可用Tt代码代替M98P9000 在加工程序中指定的T代码t赋值到(存储)公共变量#149中 限制:在用T代码作为子程序调用的程序中,不能用一个T代码调用多个 子程序。这种 T代码被处理为普通的T代码。,3.2 用户宏程序主体(本体)用途:可作为:主程序(宏主程序)、子程序(宏子程序)特点:宏程序主体中可以使用普通的NC指令、变量、变量表 达式、采用量的NC指令、计算指令和转移指令(宏程 序A中为规定的格式)等

39、。宏程序的结构:以O带后面的程序号开始,中间为指令,最 后用M99结束。例如:,O;程序号 G65 H05;运算指令 G90 G00 X#110 Y#20;使用变量的NC指令 G65 H82;转移指令 M99;返回主程序;3.3 宏程序A的运算指令和控制指令 1指令格式:G65 Hm P#i Q#j R#k 式中m为0199,表示宏程序的功能,#i为存储运算结果的变量号;#j为进行运算的变量号1,也可以是常数;#k为进行运算的变量号2,也可以是常数。意义:#I=#j#k 运算符,由Hm决定注意:变量值不能带小数,与各地址不带小数时表示的意义相同(参数No.3401的#0位DPI=0,最小输入单

40、位0.001mm及0.001),例如:若#100=10,以0.001mm为单位输入时X#100为X0.01mm(100.001mm=0.010mm);若#100=100,以0.001为单位输入时#100为0.10(1000.001=0.10)。2运算和控制指令的指令表 G65 Hm指令 表12,G65 H m,功能,数学定义,G65 H01,定义、置换,#i=#j,G65 H02,加法,#i=#j+#k,G65 H03,减法,#i=#j-#k,G65 H04,乘法,#i=#j#k,G65 H05,除法,#i=#j#k,G65 H11,逻辑加,#i=#j AND#k,G65 H12,逻辑乘,#i

41、=#j OR#k,G65 H13,异或,#i=#J XOR#k#I=#j,G65 H21,开平方,G65 H22,绝对值,#i=#j,G65 H23,剩余数,#i=#j-trunc(#j/#k)#ktrunc:小数部分舍去,表12 FANUC 0i G65 Hm指令表(宏程序的运算与控制指令),#i=#j#j+#k#k,#i=#j#j-#k#k,四、用户宏程序B4.1 用户宏指令(用户宏程序调用指令)用户宏程序B的调用指令有:非模态调用(G65)可传送数据 模态调用(G66,G67)可传送数据 用G代码调用宏程序(Gg)可传送数据 用M代码调用宏程序(Mm)可传送数据 用M代码Mm、M 98调

42、用子程序 不能传送数据 用T代码调用子程序(Tt)不能传送数据用户宏程序调用(G65)与子程序调用(M98)之间的区别:G65可以给自变量赋值,即将G65程序段中的数据,传送到 宏程序中指定的自变量,而M98则不能给自变量赋值。当M98程序段包含另一个NC指令(例如,G01X200.0 M98P p)时,在执行完这种非N、P或L指令后,可调用或转 移到子程序。而G65只能无条件的调用宏程序。当M98程序段包含有O、N、P、L以外的地址的NC指令时,例如,G01X200.0 M98Pp,在单程序段方式中,,可以单程序段停止(即停机)。而G65则不行(即不停机)。G65改变局部变量级别,而M98不

43、改变局部变量的级别。4.1.1 宏程序非模态调用(G65)当指定G65时,调用以地址P指定的用户宏程序,而且数据能传递到用户宏程序中(自变量赋值)。指令的格式:G65 PpLl自变量赋值;p:要调用的程序号 l:重复次数,默认值为1 自变量赋值:传递到宏程序的数据,1.调用说明,在G65之后,用P指定用户宏程序的程序号。任何自变量前必须指定G65。当要求重复时,在地址L后指定从19999的重复次数,省略L 值时,默认L值为1。使用自变量指定(赋值),其值被赋给宏程序中相应的局部 变量。2.自变量指定(赋值)自变量值的指定又可称为自变量赋值 即向用户宏程序主体中变量传递数据时,需由自变量赋值地

44、址来指定,其值可以有符号和小数点,具体数值与地址无关 如上例“G65 P9110 L2 A1.0 B2.0”程序段中的 1.0 赋给A地址对应的宏程序中自变量#1;2.0 赋给地址B对应的宏程序中自变量#2。这里使用的是局部变量(#1#33,共有33个),与其对 的自变量赋值有两种类型。,自变量赋值:用英文字母后加数值进行赋值,除了G、L、O、N和P 之 外,其余所有21个英文字母都可给自变量赋值 每个字母赋值一次,赋值不必按字母顺序进行,但用I、J、K时,必须按字母顺序进行赋值,不赋值的地址可以省略。自变量赋值:该方法也是用英文字母后加数值进行赋值,但只使用了A、B、C和I、J、K这6个字母

45、。具体用法是:除了A、B、C之外,还用10组I、J、K来对自变量进行赋值,在这里I、J、K是分组定义的,同组的I、J、K必须按字母顺 序进行赋值,不赋值的地址可以省略。自变量赋值和自变量赋值与用户宏程序主体中局部变量 的 对应关系见表13。,表13 FANUC 0i 地址与局部变量的关系,自变量赋值地址,用户宏程序主体中的变量,自变量赋值地址,自变量赋值地址,用户宏程序主体中的变量,自变量赋值地址,ABC,#1#2#3,ABC,STU,#19#20#21,I6J6K6,IJK,#4#5#6,I1J1K1,VWX,#22#23#24,I7J7K7,DEF,#7#8#9,I2J2K2,YZ,#25

46、#26#27,I8J8K8,H,#10#11#12,I3J3K3,#28#29#30,I9J9K9,M,#13#14#15,I4J4K4,#31#32#33,I10J10K10,QR,#16#17#18,I5J5K5,注意:对于自变量赋值,I、J、K下标用于确定自变量赋值 的顺序,在实际编程中不写(也无法写,语法上无法表达)3.自变量赋值的其他说明 自变量赋值、自变量赋值的混合使用 CNC内部自动识别自变量赋值和,混合赋值时,较后赋值的 自变量类型有效(以从左到右书写的顺序为准,左为先,右为 后)。例如:G65 P1100 A1.0 B2.0 I-3.0 I4.0 D5.0;其中的变量值为:#

47、1=1.0(#1对应A1.0)#2=2.0(#2对应B2.0)#3无赋值(无对应)程序中没有C#4=-3.0(#4对应I-3.0)#5无赋值(无对应)程序中没有J,也没有J1#6无赋值(无对应)程序中没有K,也没有K1#7=4.0()(#7对应I4.0,第二次I(I2),即#7#7=5.0(#7也对应D5.0),改写了#7=4.0,变为#7=5.0,自变量赋值的地址和变量是一一对应的,不宜混淆,但数量只有21个。自变量赋值充分利用了资源,可以对#1#33全部33个局部变量赋值。实际上用自变量赋值的21个变量也已足够啦。小数点问题 没有小数点的自变量数据的单位为最小设定单位。传递没有小数点的自变

48、量的值将根据机床实际的系统配置而定。因此建议在宏程序调用中使用小数点,可避免无谓的差错,兼容性好调用嵌套 调用可以四级嵌套,包括非模态调用G65和模态调用G66,但不包括子程序调用M98。局部变量的级别 局部变量嵌套从0到4级,主程序是0级,用G65或G66调用宏程序,每调用一次(2、3、4级),局部变量级别加1,而前一级的局部变量值保存在CNC中,即局部变量(1、2、3级)被保存,下一级的局部变量(2、3、4级)被准备。当宏程序执行M99时,控制返回到调用程序,此时,局部变量级别减1,并恢复宏程序调用时保存的局部变量值,即上一级被,保存的局部变量被恢复,如同它被存储一样,而下一级局部变 量被

49、清除。,(#26)Z:孔深(绝对值 50mm),不变值,O0002;主程序 G50(相当G92)X100.0 Z200.0;设置工件坐标系 G00 X0 Z102.0 S1000 M03;G65 P9100 Z50.0 K20.0 F0.3;#26=50、#6=20、#9=0.3 G00 X100.0 Z200.0 M05;M30;O9100;用户宏程序#1=0;当前要加工孔深数据,初值为0#2=0;加工过的孔深存储 IF#23 NE#0 GOTO 1;W:#23;如果增量孔深不是空变 量,跳转到N1 IF#26 EQ#0 GOTO 10;如果Z和W都不指定,错误报警 N1#23=#5002-

50、#26;计算孔深W。#5002是刀尖Z坐标 绝对位置变量,#26是绝对孔深 N2#1=#1+#6;计算当前要加工的孔深,分段进给 IF#1 LT#23 GOTO 3;确定孔深加工是否达到深度?如 果当前孔深小于相对孔深W,转 到N3,#1=#23;#1中赋予孔深数据W,K20,最后一次加工N3 G00 W-#2;快速移动到每次开始加工位置 G01 W-#1-#2 F#9;钻削孔,进给的距离 G00 W#1;快速退回 IF#1 GE#23 GOTO 9;检查钻孔是否完成,没完成 继续,完成后跳转到N9#2=#1;#2存储当前已钻完孔深 GOTO 2;跳回到N2程序段N9 M99;返回主程序N10

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号