《宏程序编程 .pdf》由会员分享,可在线阅读,更多相关《宏程序编程 .pdf(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第五章宏程序编程实训要点:熟悉 FANUC 系统宏程序编程的基本指令;掌握常用的几个宏程序应用范例第一节宏程序编程概述宏程序编程简单地解释就是利用变量编程的方法。在本书第二章中介绍的数控指令,其指令代码的功能是固定的,使用者只需(只能)按照指令规定的参数编程。但有时候这些指令满足不了用户的需求,数控系统因此提供了宏程序编程功能,利用数控系统提供的变量、数学运算功能、逻辑判断功能、程序循环功能等功能,来实现一些特殊的用法。宏程序编程实际上是数控系统对用户的开放,在数控系统的平台上进行二次开发,当然这里的开放和开发都是有条件和有限制的。宏程序与普通程序存在一定的区别,认识和了解这些区别,将有助于宏
2、程序的学习理解和掌握运用,表5-1 为宏程序和普通程序的简要对比。表 5-1 宏程序和普通程序的简要对比普通程序宏程序只能使用常量可以使用变量,并给变量赋值常量之间不可以运算变量之间可以运算程序只能顺序执行,不能跳转程序运行可以跳转宏程序编程的技术特点和应用领域手工编程是数控编程的基础,在手工编程中使用宏程序编程。其最大特点就是将有规律的形状或尺寸用最短的程序段表示出来,编写出的程序非常简洁,逻辑严密,通用性强。任何数控加工只要能够用宏程序完整地表达,即使再复杂,其程序篇幅都比较精炼,任何一个合理、优化的宏程序,极少会超过60 行,换算成字节数,至多不过2KB。即使是最廉价的机床数控系统,其内
3、部程序存储空间也完全容纳得下任何复杂的宏程序。为了对复杂的加工运动进行描述,宏程序必然会最大限度地使用数控系统内部的各种指令代码,例如直线插补G01指令和圆弧插补G02 G03指令等。因此机床在执行宏程序时,数控系统的计算机可以直接进行插补运算,且运算速度快,再加上伺服电动机和机床的迅速响应,使得加工效率极高。宏程序的技术特点,使其特别适宜机械零件的批量加工。机械零件的形状主要是由各种凸台、凹槽、圆孔、斜平面、回转面等组成,很少包含不规则的复杂曲面,构成其的几何因素无外乎点、直线、圆弧,最多加上各种二次圆锥曲线(椭圆、抛物线、双曲线),以及一些渐开线(常应用于齿轮及凸轮等),所有这些都是基于三
4、角函数、解析几何的应用,而数学上都可以用三角函数表达式及参数方程加以表述,因此宏程序在此有广泛的应用空间,可以发挥其强大的作用。机械零件绝大多数都是批量生产,在保证质量的前提下要求最大限度地提高加工效率以降低生产成本,一个零件哪怕仅仅节省1 秒,成百上千的同样零件合计起来节省的时间就非常可观了。另外批量零件在加工的几何尺寸精度和形状位置精度方面都要求保证高度的一致名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 36 页 -性,而加工工艺的优化主要就是程序的优化,这是一个反复调整、尝试的过程,要求操作者能够非常方便地调整程序中的各项加工参数(如刀具尺寸、刀具补偿值、每层切削量、步距
5、、计算精度、进给速度等)。宏程序在这方面有很大的优越性,只要能用宏程序来表述,操作者就根本无需触动程序本身,而只需针对各项加工参数所对应的自变量赋值做出个别调整,就能迅速的将程序调整到最优化的状态。如果使用 CAD CAM 软件编制机械零件的批量加工程序,前面提到的加工参数,只要其中一项或几项发生变化,再智能的CAD CAM 软件也要根据变化后的加工参数重新计算刀具轨迹,再经后处理生成程序,这个过程繁琐且耗时很多。当然,宏程序也不是无所不能。对于主要由大量不规则复杂曲面构成的模具成型零件,特别是各种注塑模、压铸模等型腔类模具的型芯、型腔和电极,以及汽车覆盖件模具的凸模、凹模等,由于从设计、分析
6、到制造的整个产业链在技术层面及生产管理上都是通过以各种CADCAM软件为核心(还包括 PDM、CAE等)的纽带紧密相联的,从而形成一种高度的一体化和关联性,无论从哪个角度来看,此类零件的数控加工程序几乎百分之百地依赖各种CAD CAM 软件来编制,宏程序在这里的发挥空间是非常有限的。第二节宏程序基础 (FANUC Oi 系统)FANUC 0i 系统提供两种用户宏程序,即用户宏程序功能A和用户宏程序功能B。由于用户宏程序功能A的宏程序需要使用“G65Hm”格式的宏指令来表达各种数学运算和逻辑关系,极不直观,且可读性非常差,因而导致在实际工作中很少人使用它。由于绝大部分的 FANUC 系统都支持用
7、户宏程序功能B,本书篇幅有限,只介绍用户宏程序功能B的相关知识。一变量普通加工程序直接用数值指定G 代码和移动距离;例如:G01 和 X100.0。使用用户宏程序时,数值可以直接指定或用变量指定,当用变量时,变量值可用程序或由 MDl 设定或修改。例如:#1=#2+100;G01X#1 F80;1变量的表示宏程序的变量是用变量符号“#”和后面的变量号指定。例如:#2 表达式可以用于指定变量号,这时表达式必须封闭在括号中。例如:#1#2+#41-15 2变量的类型变量根据变量号可以分成四种类型。表5-2 变量类型变量号变量类型功能#0 空变量该变量总是空,没有值能赋给该变量。#1#33 局部变量
8、局部变量只能用在宏程序中存储数据,例如,运算结果。当断电时,局部变量被初始化为空。调用宏程序时,自变量对局部变量赋值。#100#199#500#999 公共变量公共变量在不同的宏程序中的意义相同。当断电时,变量#10#199 初始化为空。变量#500#999 的数据保存,即使断电也不丢失。#1000以上系统变量系统变量用于读和写CNC 的各种数据,例如,刀具的当前位置和补偿值。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 36 页 -变量从功能上主要可归纳为两种,即:系统变量(系统占用部分),用于系统内部运算时各种数据的存储。用户变量,包括局部变量和公共变量,用户可以单独使用,
9、系统作为处理资料的一部分。3变量值的范围局部变量和公共变量可以为0 值或下面范围中的值:-1047到 10-29或10-29到1047如果计算结果超出有效范围,则触发程序错误P/S 报警 No.111。4.小数点的省略当在程序中定义变量值时,小数点可以省略。例:当定义#1=123;变量#1的实际值是123.000。5.变量的引用在地址后指定变量号即可引用其变量值。当用表达式指定变量时,要把表达式放在括号中。例如:G01 X#1+#2 F#3;被引用变量的值根据地址的最小设定单位自动地舍入。例如:当系统的最小输入增量为0.001mm 单位,指令 G00X#1,并将 12.3456 赋值给变量#1
10、,实际指令值为G00X12.346;。改变引用变量的值的符号,要把负号(-)放在#的前面。例如:G00X-#1;当引用未定义的变量时,变量及地址字都被忽略。例如:当变量#1的值是 0,并且变量#2的值是空时,G00 X#1 Y#2;的执行结果为G00X0;。注意:从这个例子可以看出,所谓“变量的值是0”与“变量的值是空”是两个完全不同的概念,可以这样理解:“变量的值是0”相当于“变量的数值等于0”,而“变量的值是空”则意味着“该变量所对应的地址根本就不存在,不生效”。不能用变量代表的地址符有:程序号O,顺序号N,任选程序段跳转号。例如以下情况不能使用变量:O#11;O#22 G0 X100.0
11、;N#33 Y200.0;另外,使用IS0 代码编程时,可用“#”代码表示变量,若用EIA 代码,则应用“&”代码代替“#”代码,因为EIA 代码中没有“#”代码。二.系统变量系统变量用于读和写NC 内部数据,例如,刀具偏置值和当前位置数据。但是,某些系统变量只能读。系统变量是自动控制和通用加工程序开发的基础,在这里仅介绍与编程及操作相关性较大的系统变量部分。表 5-3 FANUC 0i 系统变量一览表变量号含义#1000#l015,#1032 接口输入变量#1100#1115,#1132,#1133 接口输出变量#10001#10400,#l1001#11400 刀具长度补偿值#12001#
12、12400,#13001#13400 刀具半径补偿值#2001#2400 刀具长度与半径补偿值(偏置组数 200时)#3000 报警#3001,#3002 时钟#3003,#3004 循环运行控制#3005 设定数据(SETTING 值)#3006 停止和信息显示#3007 镜像#3011,#3012 日期和时间名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 36 页 -#3901,#3902 零件数#4001#4120,#4130 模态信息#5001#5104 位置信息#5201#5324 工件坐标系补偿值(工件零点偏移值)#7001#7944 扩展工件坐标系补偿值(工件零点偏
13、移值)1.刀具补偿值用系统变量可读和写刀具补偿值。通过对系统变量赋值,可以修改刀具补偿值。表 5-4 FANUC 0i 刀具补偿存储器C的系统变量补偿号刀具长度补偿(H)刀具半径补偿(D)几何补偿磨损补偿几何补偿磨损补偿1 2,24,400#11001(#2201)#11002(#2202),#11024(#2224),#11400#10001(#2001)#10002(#2002),#10024(#2024),#10400#13001#13002,#13024,#13400#12001#12002,#12024,#12400 在 FANUC 0i 系统中,刀具补偿分为几何补偿和磨损补偿,而且
14、长度补偿和半径补偿也是分开的。刀具补偿号可达400 个,理论上数控系统支持控制达400 把刀的刀库。当刀具补偿号200 时(一般情况也的确如此),刀具长度补偿(H)也可使用#2001#2400。刀具补偿值的系统变量,在宏程序编程中,可以这样使用:假设有一把 10mm的立铣刀,在机床上刀号为10 号刀,刀具半径补偿(D)为 5.0,即#130lO=5.0;刀具半径补偿中的磨损补偿为0.02,即#12010=0.02。那么在应用宏程序编写加工程序时,就可以有以下形式的描述:#2=#13010;把 lO 号刀的半径补偿值赋值给变量#2,即#2=5.0。#3=#12010;把 lO 号刀的半径补偿值中
15、的磨损补偿值赋值给变量#3,即#3=0.02。在程序中,调用#2 就可以理解为对刀具的识别,设置和调整磨损补偿值(#3)则可以控制10 号刀铣削零件的尺寸了。2.模态信息正在处理的当前程序段之前的模态信息可以从系统变量中读出。表 5-5 FANUC 0i 模态信息的系统变量变量号功能组号变量号功能组号#4001#4002#4003#4004#4005#4006#4007#4008#4009#4010#4011#4012#4013 G00,G01,G02,G03,G33 G17,Gl8,Gl9 G90,G91 G94,G95 G20,G21 G40,G41,G42 G43,G44,G49 G73
16、,G74,G76,G80G89 G98,G99 G50,G51 G65,G66,G67 G96,G97(组 Ol)(组 02)(组 03)(组 04)(组 05)(组 06)(组 07)(组 08)(组 09)(组 10)(组 11)(组 12)(组 13)#4022#4102#4107#4109#4111#4113#4114#4115#4119#4120#4130 待定B代码D代码F代码H代码M 代码顺序号程序号S代码T代码P代码(现在选择的附加工件坐标系)(组 22)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 36 页 -#4014#4015#4016,G54G59 G6
17、1G64 G68,G69,(组 14)(组 15)(组 16)注:l P 代码为当前选择的附加工件坐标系。2当执行#1=#4002 时,在#1 中得到的值是l7,18 或 19。3系统变量#4001#4l20 不能用于运算指令左边的项。4模态信息不能写,只能读。如果阅读模态信息指定的系统变量为不能用的G 代码时,系统则发出程序错误 P/S 报警。3.当前位置信息FANUC 0i 系统中当前位置信息的系统变量见表5-6。表 5-6 FANUC 0i 当前位置信息的系统变量变量号位置信息相关坐标系移动时的读操作刀具补偿值(长度、半径补偿)#5001#5002#5003#5004 X 轴程序段终点位
18、置(ABSIO)Y 轴程序段终点位置(ABSIO)Z轴程序段终点位置(ABSIO)第4轴程序段终点位置(ABSIO)工件坐标系可以不考虑刀尖位置(程序指令位置)#5021#5022#5023#5024 X 轴当前位置(ABSMT)Y 轴当前位置(ABSMT)Z轴当前位置(ABSMT)第4轴当前位置(ABSMT)机床坐标系不可以考虑刀具基准点位置(机床坐标)#5041#5042#5043#5044 X 轴当前位置(ABSOT)Y 轴当前位置(ABSOT)Z轴当前位置(ABSOT)第4轴当前位置(ABSOT)工件坐标系不可以考虑刀具基准点位置(与位置的绝对坐标显示相同)#5061#5062#506
19、3#5064 X 轴跳跃信号位置(ABSKP)Y 轴跳跃信号位置(ABSKP)Z轴跳跃信号位置(ABSKP)第4轴跳跃信号位置(ABSKP)工件坐标系可以已考虑刀具基准点位置#5081#5082#5083#5084 X 轴刀具长度补偿值Y 轴刀具长度补偿值Z轴刀具长度补偿值第4轴刀具长度补偿值不可以已考虑#5101#5102#5103#5104 X 轴伺服位置补偿Y 轴伺服位置补偿Z轴伺服位置补偿第4轴伺服位置补偿不可以已考虑注:l ABSIO:工件坐标系中,前一程序段终点坐标值。ABSMT:机床坐标系中,当前机床坐标位置。ABSOT:工件坐标系中,当前坐标位置。ABSKP:工件坐标系中,G3
20、1程序段中跳跃信号有效的位置。2在 G31(触发功能)程序段中,当触发信号接通时的刀具位置存储在变量#5061#5064 中。当 G31程序段中的触发信号不接通时,这些变量存储指定程序段的终点值。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 36 页 -3变量#5081#5084 所存储的刀具长度补偿值是当前的执行值(即当前正在执行中的程序段的量),不是后面的程序段的处理值。4移动期间不能读取是由于缓冲(预读)功能的原因,不能读取目标指令值。4.工件坐标系补偿值(工件零点偏移值)用系统变量可以读和写工件零点偏移值(表 5-7)。表 5-7 FANUC Oi 工件零点偏移值的系统
21、变量变量号功能变量号功能#5201,#5204 第1轴外部工件零点偏移值,第4轴外部工件零点偏移值#5301,#5304 第1轴G58工件零点偏移值,第4轴G58工件零点偏移值#5221,#5224 第1轴G54 工件零点偏移值,第4轴G54 工件零点偏移值#5321,#5324 第1轴G59工件零点偏移值,第4轴G59工件零点偏移值#5241,#5244 第1轴G55 工件零点偏移值,第4轴G55 工件零点偏移值#7001,#7004 第1轴工件零点偏移值(G54.1 P1),第4轴工件零点偏移值(G54.1 P1)#5261,#5264 第1轴G56 工件零点偏移值,第4轴G56 工件零点
22、偏移值#7021,#7024 第1轴工件零点偏移值(G54.1 P2),第4轴工件零点偏移值(G54.1 P2)#5281,#5284 第1轴G57 工件零点偏移值,第4轴G57 工件零点偏移值#7941,#7944 第1轴工件零点偏移值(G54.1 P48),第4轴工件零点偏移值(G54.1 P48)三算术和逻辑运算表 5-8中列出的运算可以在变量中运行。等式右边的表达式可包含常量或由函数或运算符组成的变量。表达式中的变量#j 和#k 可以用常量赋值。等式左边的变量也可以用表达式赋值。其中算术运算主要是指加、减、乘、除函数等,逻辑运算可以理解为比较运算。表 2-8 FANU0 0i算术和逻辑
23、运算一览表功能格式备注定义、置换#i=#j 算术运算加法减法乘法除法#i=#j+#k#i=#j-#k#i=#j*#k#i=#j/#k 正弦#i=SIN#j 三角函数及反三角函数的数值均以度为单位来指定。如9030应表示为 90.5 反正弦#i=ASIN#j 余弦#i=COS#j 反余弦#i=ACOS#j 正切#i=TAN#j 反正切#i=ATAN#j/#k 平方根#i=SQRT#j 绝对值#i=ABS#j 舍入#i=ROUND#j 指数函数#i=EXP#j 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 36 页 -(自然)对数#i=LN#j 上取整#i=FIX#j 下取整#i=
24、FUP#j 逻辑运算与#i AND#j 逻辑运算一位一位地按二进制数执行或#i OR#j 异或#i XOR#j 从BCD 转为 BIN#i=BIN#j 用于与 PMC 的信号交换从BIN转为 BCD#i=BCD#j 以下是算术和逻辑运算指令的详细说明。1反正弦运算#i=ASIN#j 1)取值范围如下:当参数(NO.6004#0)NAT位设置为 0 时,在 270 90范围内取值。当参数(NO.6004#0)NAT位设置为 l 时,在-90 90范围内取值。2)当#j 超出-1 到 1 的范围时,触发程序错误P/S 报警 NO.111。3)常数可替代变量#j。2反余弦运算#i=ACOS#j 1)
25、取值范围:180 0。2)当#j 超出-1 到 1 的范围时,触发程序错误P/S 报警 NO.111。3)常数可替代变量#j 3反正切运算#i=ATAN#j#K 1)采用比值的书写方式(可理解为对边/邻边)。2)取值范围如下:当参数(NO.6004#0)NAT位设置为 0 时,取值范围为0 360。例如,当指定#1=ATAN-1-1 时,#1=225。当参数(NO.6004#0)NAT 位设置为l时,取值范围为-l80 l80。例如,当指定#1=ATAN-1-1时,#1=-135。3)常数可替代变量#j。4自然对数运算#i=LN#j 1)相对误差可能大于l0-8。2)当反对数(#j)为 0 或
26、小于 0 时,触发程序错误P/S 报警 NO.111。3)常数可替代变量#j。5指数函数#i=EXP#j 1)相对误差可能大于l0-8。2)当运算结果超过3.651047(j大约是110)时,出现溢出并触发程序错误P/S 报警NO.111。3)常数可替代变量#j。6上取整#i=FIX#j和下取整#i=FUP#j CNC 处理数值运算时,无条件地舍去小数部分称为上取整;小数部分进位到整数称为下取整(注意与数学上的四舍五入对照)。对于负数的处理要特别小心。例如:假设#1=1.2,#2=-1.2 1)当执行#3=FUP#1 时,2.O 赋予#3;2)当执行#3=FIX#1 时,1.O 赋予#3;3)
27、当执行#3=FUP#2 时,-2.O 赋予#3;4)当执行#3=FIX#2 时,-1.O 赋予#3;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 36 页 -7算术与逻辑运算指令的缩写程序中指令函数时,函数名的前二个字符可以用于指定该函数。例如:ROUND RO FIX FI 8混合运算时的运算顺序上述运算和函数可以混合运算,即涉及到运算的优先级,其运算顺序与一般数学上的定义基本一致,优先级顺序从高到低依次为:函数运算乘法和除法运算(*、AND)加法和减法运算(+、-、OR、XOR)9括号嵌套用“”,可以改变运算顺序,最里层的 优先运算。括号 最多可以嵌套5 级(包括函数内部使
28、用的括号)。当超出 5 级时,触发程序错误P/S 报警 NO.118。10逻辑运算说明逻辑运算相对于算术运算来说,比较特殊和费解,详细说明见表5-9。表 5-9 FANUC0i 逻辑运算说明运算符功能逻辑名运算特点运算实例AND 与逻辑乘 (相当于串联)有 0 得 0 1 l=1,l 0=0,OO=O OR 或逻辑加 (相当于并联)有 1 得 1 1+1=1,1+0=1,0+0=0 XOR 异或逻辑减相同得 0,不同得 l 1-1=0,l-0=1,0-0=0,0-1=1 11运算精度同任何数学计算一样,运算的误差是不可避免的,用宏程序运算时必须考虑用户宏程序的精度。用户宏程序处理数据的浮点格式
29、为:M2E。每执行一次运算,便产生一次误差,在重复计算的过程中,这些误差将累加。FANUC 0i运算中的误差精度见表5-l0。表 5-10 FANU00i 运算中的误差运算平均误差最大误差误差类型 a=b*c 1.5510-10 4.6610-10相对误差 a=b/c 4.6610-10 1.8810-10(绝对值)a=b 1.2410-10 3.7310-10a=b+c a=b-c 2.33 10-95.32 10-9最小b,c(绝对值)a=SlNb a=COSb 5O10-91.0 10-8绝对误差(绝对值)度 a=ATANb/c 1.810-6 3.610-6注:如果 SIN、COS或
30、TAN函数的运算结果小于10-8或由于运算精度的限制不为0 的话,设定参数 NO.6004#1 为 1,则运算结果可视为0。相对误差取决于运算结果。使用两类误差的较小者。绝对误差是常数,而不管运算结果。函数 TAN执行 SIN/COS。说明:(1)加减运算由于用户宏程序的变量值的精度仅有8 位十进制数,当在加减运算中处理非常大的数时,将得不到期望的结果。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 36 页 -例如:当试图把下面的值赋给变量#1 和#2 时:#1=687644327777.777#2=687644321012.456 变量值实际上已经变成:#1=68764433
31、00000.000#2=6876443200000.000 此时,当编程计算#3=#1-#2 时,其结果#3 并不是期望值6765321,而是#3=100000000。(该计算的实际结果稍有误差,因为是以二进制执行的。)(2)逻辑运算逻辑运算,即使用条件表达式EQ,NE,GT,GE,LT,LE 时,也可能造成误差,其情形与加减运算基本相同。例如:IF#1EQ#2 的运算会受到#1 和#2 的误差的影响,并不总是能估算正确,要求两个值完全相同,有时不可能,由此会造成错误的判断,因此应该改用误差来限制比较稳妥,即用 IFABS#1-#2LT 0.001代替上述语句,以避免两个变量的误差。此时,当两
32、个变量的差值的绝对值未超过允许极限(此处为 0.001),就认为两个变量的值是相等的。(3)三角函数运算在三角函数运算中会发生绝对误差,它不在10-8之内,所以注意使用三角函数后的积累误差,由于三角函数在宏程序的应用非常广泛,特别在极具数学代表性的参数方程表达上,因此必须对此保持应有的重视。四赋值与变量赋值是指将一个数据赋予一个变量。例如:#1=0,则表示#1 的值是 0。其中#1 代表变量,“#”是变量符号(注意:根据数控系统的不同,它的表示方法可能有差别),0 就是给变量#1赋的值。这里的“=”是赋值符号,起语句定义作用。赋值的规律有:1)赋值号“=”两边内容不能随意互换,左边只能是变量,
33、右边可以是表达式、数值或变量。2)一个赋值语句只能给一个变量赋值。3)可以多次给一个变量赋值,新变量值将取代原变量值(即最后赋的值生效)。4)赋值语句具有运算功能,它的一般形式为:变量=表达式。在赋值运算中,表达式可以是变量自身与其他数据的运算结果,如:#1=#l+1,则表示#1的值为#1+1,这一点与数学运算是有所不同的。需要强调的是:“#1=#1+1”形式的表达式可以说是宏程序运行的“原动力”,任何宏程序几乎都离不开这种类型的赋值运算,而它偏偏与人们头脑中根深蒂固的数学上的等式概念严重偏离,因此对于初学者往往造成很大的困扰,但是,如果对计算机编程语言(例如C 语言)有一定了解的话,对此应该
34、更易理解。5)赋值表达式的运算顺序与数学运算顺序相同。6)辅助功能(M 代码)的变量有最大值限制,例如,将M30赋值为 300 显然是不合理的。五转移和循环在程序中,使用 GOTO 语句和 IF 语句可以改变程序的流向。有三种转移和循环操作可供使用。GOTO 语句无条件转移IF 语句条件转移,格式为:IF,THEN,WHILE语句当,时循环1无条件转移(GOTO 语句)转移(跳转)到标有顺序号n(即俗称的行号)的程序段。当指定19999 以外的顺序号时,名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 36 页 -会触发 P/S 报警 NO.128。其格式为:GOTO n;n 为顺
35、序号(19999)例如:GOTO 99,即转移至第99 行。2条件转移(IF 语句)IF 之后指定条件表达式。(1)IF GOTO n 表示如果指定的条件表达式满足时,则转移(跳转)到标有顺序号n(即俗称的行号)的程序段。如果不满足指定的条件表达式,则顺序执行下个程序段。例如:如果变量#1 的值大于 l00,则转移(跳转)到顺序号为N99的程序段。IF#1 GT l00 GOTO 99;N99 G00 G90 Z10.0;程序段如果条件满足如果条件不满足 2IF THEN 如果指定的条件表达式满足时,则执行预先指定的宏程序语句,而且只执行一个宏程序语句。IF#1 EQ#2 THEN#3=10;
36、如果#1 和#2 的值相同,10 赋值给#3。说明:条件表达式:条件表达式必须包括运算符。运算符插在两个变量中间或变量和常量中间,并且用“”封闭。表达式可以替代变量。运算符:运算符由2 个字母组成(见表 5-11),用于两个值的比较,以决定它们是相等还是一个值小于或大于另一个值。注意,不能使用不等号。表 5-11 运算符运算符含义英文注释EQ 等于(=)EQual NE 不等于()Not Equal GT 大于()Great Than GE 大于或等于()Great than or Equal LT 小于()Less Than LE 小于或等于()Less than or Equal 典型程序
37、示例:下面的程序为计算数值1 10 的累加总和。程序内容程序解释08000;#1=0;#2=1;N5 IF#2 GT 10 GOTO 99;#1=#1+#2;#2=#2+#1;GOTO 5;N99 M30;存储和数变量的初值被加数变量的初值当被加数大于10 时转移到 N99 计算和数下一个被加数转到 N5 程序结束3循环(WHILE语句)在 WHILE后指定一个条件表达式。当指定条件满足时,则执行从DO到 END之间的程序。名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 36 页 -否则,转到END后的程序段。DO后面的号是指定程序执行范围的标号,标号值为1,2,3。如果使用了
38、1,2,3 以外的值,会触发P/S 报警 No.126。程序段如果条件满足如果条件不满足WHILE 条件表达式 DO GOTO m;(m=1,2,3)END m,(1)嵌套在 DO END循环中的标号(1 3)可根据需要多次使用。但是需要注意的是,无论怎样多次使用,标号永远限制在1,2,3;此外,当程序有交叉重复循环(DO 范围的重叠)时,会触发 P/S 报警 No.124。以下为关于嵌套的详细说明。1)标号(1 3)可以根据需要多次使用。程序段WHILE 条件表达式 DO 1;END 1;,程序段WHILE 条件表达式 DO 1;END 1;,2)DO的范围不能交叉。程序段WHILE 条件表
39、达式 DO 1;,END 1;程序段WHILE 条件表达式 DO 2;END 2;3)DO循环可以 3 重嵌套。程序段WHILE 条件表达式 DO 1;,END 3;,END 1;WHILE 条件表达式 DO 2;,WHILE 条件表达式 DO 3;END 2;,名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 36 页 -4)(条件)转移可以跳出循环的外面。程序段WHILE 条件表达式 DO 1;END 1;IF 条件表达式 GOTO n;Nn,5)(条件)转移不能进入循环区内,注意与上述第4 点对照。程序段WHILE 条件表达式 DO 1;END 1;IF 条件表达式 GOT
40、O n;Nn,(2)关于循环(WHILE语句)的其他说明 1)DO m和 END m必须成对使用,而且DO m一定要在END m指令之前。用识别号m来识别。2)当指定 DO而没有指定WHILE语句时,将产生从DO到 END之间的无限循环。3)在使用EQ或 NE 的条件表达式中,值为空和值为零将会有不同的效果。而在其他形式的条件表达式中,空即被当作零。4)处理时间:当在GOTO 语句(无论是无条件转移的GOTO 语句,还是“IF,GOTO”形式的条件转移GOTO语句)中有标号转移的语句时,系统将进行顺序号检索。一般来说数控系统执行反向检索的时间要比正向检索长,因为系统通常先正向搜索到程序结束,再
41、返回程序开头进行搜索,所以花费的时间要多。因此,用WHILE语句实现循环可减少处理时间。第三节宏程序的调用用户可以用以下6 种方法来调用宏程序:宏程序调用非模态调用(G65)模态调用(G66,G67)用G 代码调用宏程序(G)用M 代码调用宏程序(M)用M 代码调用子程序(M或M98)用T代码调用子程序首先说明用户宏程序调用(G65)与子程序调用(M98)之间的差别:1)G65可以进行自变量赋值,即指定自变量(数据传送到宏程序),M98则不能。2)当 M98程序段包含另一个NC指令(例如,G01 X200.0 M98 P)时,在执行完这种含有非 N、P或 L 的指令后可调用(或转移到)子程序。
42、相反,G65则只能无条件地调用宏程序。3)当 M98程序段包含有O、N、P、L 以外的地址的NC指令时,(例如 G01 X200.0 M98P,在单程序段方式中,可以单程序段停止(即停机)。相反,G65则不会(即不停机)。4)G65 改变局部变量的级别。M98不改变局部变量的级别。名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 36 页 -一、宏程序非模态调用(G65)当指定 G65时,调用以地址P指定的用户宏程序,数据(自变量)能传递到用户宏程序中,指令格式如下所示。G65 PL;:要调用的程序号:重复次数(默认值为 1):传递到宏程序的数据09110;#3=#1+#2;IF
43、#3 GE 180 GOTO 99;G00 G91 X#3;N99 M99;00110;,G65 P9110 L2 A1.O B2.0;,M30;1调用说明 1)在 G65之后,用地址P指定用户宏程序的程序号。2)任何自变量前必须指定G65。3)当要求重复时,在地址 L 后指定从 19999 的重复次数,省略 L 值时,默认 L值等于 1。4)使用自变量指定(赋值),其值被赋值给宏程序中相应的局部变量。2自变量赋值若要向用户宏程序本体传递数据时,须由自变量赋值来指定,其值可以有符号和小数点,且与地址无关。宏程序本体使用的是局部变量(#1#33 共有 33 个),与其对应的自变量赋值共有两种类型
44、。自变量指定I 使用除了 G,L,O,N 和 P以外的字母,每个字母指定一次。自变量指定使用 A,B,C 和 Ii,Ji和 Ki(i 为 1 10)。根据使用的字母,自动决定自变量指定的类型。这两种自变量赋值与用户宏程序本体中局部变量的对应关系见表5-12。表 5-12 自变量赋值与局部变量的对应关系自变量赋值 I 地址用户宏程序本体中的变量自变量赋值 II 地址自变量赋值 I 地址用户宏程序本体中的变量自变量赋值 II 地址A B C#1#2#3 A B C S T U#19#20#21 I6J6K6I J K#4#5#6 I1J1K1 V W X#22#23#24 I7J7K7D E F#
45、7#8#9 I2J2K2 Y Z#25#26#27 I8J8K8H#10#ll#12 I3J3K3#28#29#30 I9J9K9M#13#14#15 I4J4K4#31#32#33 I10J10K10Q#16#17 I5J5名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 36 页 -R#18 K5注:对于自变量赋值II,上表中1、J、K 的下标用于确定自变量赋值的顺序,在实际编程中不写(也无法写,语法上无法表达)。3自变量赋值的其他说明(1)自变量赋值I、II 的混合使用CNC 内部自动识别自变量赋值I 和 II。如果自变量赋值I 和 II混合赋值,较后赋值的自变量类型有效(
46、以从左到右书写的顺序为准,左为先,右为后)。例:G65 A1.O B2.0 I-4.0 I5.0 D6.0 P1200;#11.0#22.0#3无赋值#4-4.0#5无赋值#6无赋值#75.0#76.0I5.0 和D6.0都给变量#7赋值,但后者D6.0 有效由此可以看出,自变量赋值II用 10 组 I、J、K来对自变量进行赋值,在表5-12 中似乎可以通过I、J、K 的下标很容易识别地址和变量的关系,但实际上在实际编程中无法输入下标,尽管自变量赋值II“充分利用资源”,可以对#1#33 全部 33 个局部变量进行赋值,但是在实际编程时要分清是哪一组I、J、K,又是第几个I 或 J 或 K,是
47、一件非常麻烦的事。如果再让自变量赋值I 和自变量赋值II混合使用,那就更容易引起混淆。如果只用自变量赋值I进行赋值,由于地址和变量是一一对应的关系,混淆和出错的机会相当小,尽管只有21 个英文字母可以给自变量赋值,但是毫不夸张地说,绝大多数编程工作再复杂也不会出现超过21 个变量的情况。因此,建议在实际编程时,使用自变量赋值I 进行赋值。(2)小数点的问题没有小数点的自变量数据的单位为各地址的最小设定单位。传递的没有小数点的自变量的值将根据机床实际的系统配置而定。因此建议在宏程序调用中一律使用小数点,既可避免无谓的差错,也可使程序对机床及系统的兼容性好。(3)调用嵌套调用可以四级嵌套,包括非模
48、态调用(G65)和模态调用(G66),但不包括子程序调用(M98)。(4)局部变量的级别局部变量嵌套从0 到 4 级,主程序是0 级。用 G65或 G66调用宏程序,每调用一次(2、3、4 级),局部变量级别加1,而前一级的局部变量值保存在CNC中,即每级局部变量(1、2、3 级)被保存,下一级的局部变量(2、3、4 级)被准备,可以进行自变量赋值。当宏程序中执行M99时,控制返回到调用的程序,此时,局部变量级别减1,并恢复宏程序调用时保存的局部变量值,即上一级被储存的局部变量被恢复,如同它被储存一样,而下一级的局部变量被清除。二、宏程序模态调用与取消(G66、G67)当指定G66 时,则指定
49、宏程序模态调用,即指定沿移动轴移动的程序段后调用宏程序,G67取消宏程序模态调用。指令格式与非模态调用(G65)相似。G66 PL:要调用的程序号名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 36 页 -:重复次数(默认值为 1):传递到宏程序的数据09110;,G1 Z-#2 F100;,N99 M99;00110;,G66 P9110 L2 A1.O B2.0;G0 G90 X20.0;Y20.0;X50.Y60.;G67;,M30;说明:1)在 G66之后,用地址P指定用户宏程序的程序号。2)任何自变量前必须指定G66。3)当要求重复时,在地址 L 后指定从 19999
50、 的重复次数,省略 L 值时,默认 L值等于 1。4)与非模态调用(G65)相同,使用自变量指定(赋值),其值被赋值给宏程序中相应的局部变量。5)指定 G67时,取消 G66,即其后面的程序段不再执行宏程序模态调用。G66和 G67应该成对使用。6)可以调用四级嵌套,包括非模态调用(G65)和模态调用(G66)。但不包括子程序调用(M98)。7)在模态调用期间,指定另一个G66代码,可以嵌套模态调用。8)限制:在 G66程序段中,不能调用多个宏程序。在只有诸如辅助功能(M 代码),但无移动指令的程序段中不能调用宏程序。局部变量(自变量)只能在G66 程序段中指定,注意,每次执行模态调用时,不再