精品课程宏程序编写.docx
- 文档编号:24357298
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:25
- 大小:29.13KB
精品课程宏程序编写.docx
《精品课程宏程序编写.docx》由会员分享,可在线阅读,更多相关《精品课程宏程序编写.docx(25页珍藏版)》请在冰豆网上搜索。
精品课程宏程序编写
FANUC0i-MC数控系统用户宏程序
第一节宏程序基本理论
虽然子程序对编制相同的加工程序非常重要,但用户宏程序由于允许使用变量、算术和逻辑运算及条件转移,使得编制同样的加工程序更简便。
例如型腔加工宏程序和用户开发固定循环。
使用时,加工程序可用一条简单指令调出用户宏程序,和调用子程序完全一样。
1.1变量
普通加工程序直接用数值指定G代码和移动距离,例如G01X100.0。
使用用户宏程序时,数值可以直接指定或用变量指定。
当用变量指定时,变量值可用程序或用MDI面板操作改变。
#1=#2+100;
G01X#1F300;
1.变量的表示
一般编程方法允许对变量命名,但用户宏程序不行。
变量用变量符号#和后面的变量号指定,例如#1。
表达式可以用于指定变量号,此时,表达式必须封闭在括号中。
例如:
#【#1+#2-12】
2.变量的类型
变量根据变量号可以分为四种类型,如下:
变量号变量类型功能
#0空变量该变量总是空,没有值能赋给该变量
#1~#33局部变量局部变量只能用于在宏程序中存储数据,例如运算结果。
当断电时,局部变量被初始化为空。
调用宏程序时,自变量对局部变量赋值
#100~#199
#500~#999公共变量公共变量在不同的宏程序中的意义相同。
当断电时,变量#100~#199初始化为空,变量#500~#999的数据保存
#1000~系统变量系统变量用于读和写CNC的各种数据,例如刀具的当前位置和补偿值
3.变量值的范围
局部变量和公共变量可以为0值或下面范围中的值:
-1047~-1029或10-29~1047
如果计算结果超出有限范围,则发出P/S报警NO.111。
4.小数点的省略
当在程序中定义变量值时,小数点可以省略。
例如:
当定义#1=123时,变量#1的实际值是123.000。
5.变量的引用
在地址后指定变量号即可引用其变量值。
当用表达式指定变量时,要把表达式放在括号中。
例如:
G01X【#1+#2】F#3;
被引用变量的值根据地址的最小设定单位自动地舍入。
例如:
当系统的最小输入增量为1/1000mm单位,指令G00X#1,并将12.3456赋值给变量#1,实际指令值为G00X12.346。
改变引用变量的值的符号,要把负号(-)放在#号的前面。
例如:
G00X-#1;
引用未定义的变量时,变量及地址字都被忽略。
例如:
当变量#1的值是0,并且变量#2的值是空时,G00X#1Y#2的执行结果为G00X0。
注意,从这个例子可以看出,所谓“变量值是0”与“变量值是空”是两个完全不同的概念,可以这样理解,“变量值是0”相当于“变量的数值等于0”,而“变量值是空”则意味着“该变量所对应的地址根本就不存在,不生效”。
除了用“空”赋值以外,其余情况下“空”与0相同。
不能用变量代表的地址符有:
程序号O,顺序号N,任选程序段跳转号/。
例如以下情况不能使用变量:
O#11;/O#22G00X100.0;N#33Y200.0;
1.2系统变量
系统变量用于读和写CNC内部数据,例如,刀具偏置值和当前位置数据。
无论用户宏程序功能A或用户宏程序功能B,系统变量的用法都是固定的,而且某些系统变量为只读,用户必须严格按照规定使用。
系统变量时自动控制和通用加工程序开发的基础,在这里仅就系统变量的部分(与编程及操作相关性较大)内容加以介绍。
FANUC0i系统变量一览表
变量号含义
#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~#4120,#4130模态信息
#5001#5104位置信息
#5201#5324工件坐标系补偿值(工件零点偏置值)
#7001~#7944扩展工件坐标系补偿值(工件零点偏置值)
下面对各系统变量作详细说明。
1.接口(输入/输出)信号
接口信号时可编程机床控制器(PMC)和用户宏程序之间交换的信号。
FANUC0i接口信号的系统变量
变量号功能
#1000~#1015,#1032把16位信号从PMC送到用户宏程序。
变量#1000~#1015用于按位数读取信号,变量#1032用于一次读取一个16位信号
#1100~#1115,#1132把16位信号从用户宏程序送到PMC。
变量#1100~#1115用于按位数写信号,变量#1132用于一次写一个16位信号
#1133变量#1133用于从用户宏程序一次写一个32位的信号送到PMC,注意,#1133的值为从-99999999~+99999999
只有使用FANUCPMC时,才能使用上表中的变量。
在运算中,系统变量#1000~#1015,#1032不能用作左边的项。
2.刀具补偿值
用系统变量可以读和写刀具补偿值。
通过对系统变量赋值,可以修改刀具补偿值。
FANUC0i刀具补偿存储器C的系统变量
补偿号刀具长度补偿(H)刀具半径补偿(D)
几何补偿磨损补偿几何补偿磨损补偿
1#11001(#2201)#10001(#2001)#13001#12001
2#11002(#2202)#10002(#2002)#13002#12002
199#11199(#2399)#10199(#2199)#13199#12199
200#11200(#2400)#10200(#2200)#13200#12200
201#11201#10201#13201#12201
399#11399#10399#13399#12399
400#11400#10400#13400#12400
在FANUC0i系统中,刀具补偿分为几何补偿和磨损补偿,而且长度补偿和半径补偿也是分开的。
刀具补偿号可达400个,换句话说,理论上系统支持控制容量高达400的刀库。
当刀具补偿号≤200时(一般情况也的确如此),刀具长度补偿(H)也可使用#2001~#2400。
例如,假设一把¢10mm的立铣刀,将其视为10号刀(若在加工中心上,是有非常明确和实在的含义,即应将此铣刀放置在刀库的10号位上;对于随机换刀的机床,刀号和刀库位置不一定对应;若在数控铣床上,尽管只能人工换刀,但为了使刀具管理和工艺管理更合理、更有序,同样也可效仿加工中心那样操作,即在系统中记录下相关的刀具补偿号和刀具补偿值,唯一的差别不过是没有刀库及自动换刀功能,而需要人工换刀。
其刀具长度补偿(H)的两项补偿值在Z方向对刀完成后一般不再需奥特别处理,而编程时主要涉及其刀具半径补偿(D)的两项补偿值,从思路的条理性出发,显然适宜使几何补偿值等于刀具半径,即#13010=5.0,可以视为对刀具的识别,而设置和调整磨损补偿值(#12010)则可视为对尺寸的控制。
在应用宏程序编写加工程序时,将会有以下描述:
#20=#13010→把刀具补偿号10(10号刀,¢10mm的立铣刀)的半径补偿值中的几何补偿值赋值给变量#20,在这里假设#20=5.0。
#22=#12010→把刀具补偿号10(10号刀,¢10mm的立铣刀)的半径补偿值中的磨损补偿值赋值给变量#22,在这里假设#20=1.2。
3.模态信息
正在处理的当前程序段之前的模态信息可以从系统变量中读出。
FANUC0i模态信息的系统变量
变量号功能
#4001G00,G01,G02,G03,G33(组01)
#4002G17,G18,G19(组02)
#4003G90,G91(组03)
#4004(组04)
#4005G94,G95(组05)
#4006G20,G21(组06)
#4007G40,G41,G42(组07)
#4008G43,G44,G49(组08)
#4009G73,G74,G76,G80~G89(组09)
#4010G98,G99(组10)
#4011G50,G51(组11)
#4012G65,G66,G67(组12)
#4013G96,G97(组13)
#4014G54~G59(组14)
#4015G61~G64(组15)
#4016G68,G69(组16)
#4022待定(组22)
#4102B代码
#4107D代码
#4109F代码
#4111H代码
#4113M代码
#4114顺序号
#4115程序号
#4119S代码
#4120T代码
#4130P代码(现在选择的附加工件坐标系)
注:
(1).P代码为当前选择的附加工件坐标系。
(2).当执行#1=#4002时,在#1中得到的值是17,18或19。
(3).系统变量#4001~#4120不能用于运算指令左边的项。
(4).模态信息不能写,只能读。
另外如果阅读模态信息指定的系统变量为不能用的G代码时,系统则发出程序错误P/S报警。
4.当前位置信息
当前位置信息不能写,只能读。
FANUC0i当前位置信息的系统变量
变量号
位置信息
相关坐标系
移动时的读操作
刀具补偿值(长度、半径补偿)
#5001
#5002
#5003
#5004
X轴程序段终点位置(ABSIO)
Y轴程序段终点位置(ABSIO)
Z轴程序段终点位置(ABSIO)
4th轴程序段终点位置(ABSIO)
工件坐标系
可以
不考虑刀尖位置(程序指令位置)
#5021
#5022
#5023
#5024
X轴当前位置(ABSMT)
Y轴当前位置(ABSMT)
Z轴当前位置(ABSMT)
4th轴当前位置(ABSMT)
机床坐标系
不可以
考虑刀具基准点位置(机床坐标)
#5041
#5042
#5043
#5044
X轴当前位置(ABSOT)
Y轴当前位置(ABSOT)
Z轴当前位置(ABSOT)
4th轴当前位置(ABSOT)
工件坐标系
不可以
考虑刀具基准点位置(与位置的绝对坐标显示相同)
#5061
#5062
#5063
#5064
X轴跳跃信号位置(ABSKP)
Y轴跳跃信号位置(ABSKP)
Z轴跳跃信号位置(ABSKP)
4th轴跳跃信号位置(ABSKP)
工件坐标系
可以
已考虑刀具基准点位置
#5081
X轴刀具长度补偿值
不可以
已考虑
#5082
Y轴刀具长度补偿值
#5083
Z轴刀具长度补偿值
#5084
4th轴刀具长度补偿值
#5101
X轴伺服位置补偿
#5102
Y轴伺服位置补偿
#5103
Z轴伺服位置补偿
#5104
4th轴伺服位置补偿
注:
(1)、ABSIO:
工件坐标系中,前一程序段终点坐标值。
ABSMT:
机床坐标系中,当前机床坐标位置。
ABSOT:
工件坐标系中,当前坐标位置。
ABSKP:
工件坐标系中,G31程序段中跳跃信号有效的位置。
(2)、在G31(触发功能)程序段中,当触发信号接通时的刀具位置存储在变量#5061~#5064中。
当G31程序段中的触发信号不接通时,这些变量存储指定程序段的终点值。
(3)、变量#5081~#5084所存储的刀具长度补偿值是当前的执行值(即当前正在执行中的程序段的量),不是后面的程序段的处理值。
(4)、移动期间不能读取是由于缓冲(预读)功能的原因,不能读取目标指令值。
5.工件坐标系补偿值(工件零点偏移值)
用系统变量可以读和写工件零点偏移值。
FANUC0i工件零点偏移值的系统变量
变量号
功能
#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)
1.3算术和逻辑运算
下表列出的运算可以在变量中运行。
等式右边的表达式可包含常量或由函数或运算符组成的变量。
表达式中的变量#j和#k可以用常量赋值。
等式左边的变量也可以用表达式赋值。
其中算术运算主要是指加、减、乘、除函数等,逻辑运算可以理解为比较运算。
FANUC0i算术和逻辑运算一览表
功能
格式
备注
定义、置换
#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]
平方根
#i=SQRT[#j]
绝对值
#i=ABS[#j]
舍入
#i=ROUND[#j]
指数函数
#i=EXP[#j]
(自然)对数
#i=LN[#j]
上取整
#i=FIX[#j]
下取整
#i=FUP[#j]
逻辑运算
与
#iAND#j
或
#iOR#j
异或
#iXOR#j
从BCD转为BIN
#i=BIN[#j]
用于与PMC的信号交换
从BIN转为BCD
#i=BCD[#j]
有关算术和逻辑运算指令的详细说明请参阅陈海舟著《数控铣削加工宏程序及应用实例》P15~P18。
1.4赋值与变量
赋值是指将一个数据赋予一个变量。
例如:
#1=0,则表示#1的值是0。
其中#1代表变量,“#”是变量符号(注意:
根据数控系统的不同,它的表示方法可能有差别),0就是给变量#1赋的值。
这里的“=”是赋值符号,起语句定义作用。
赋值的规律有:
1)赋值号“=”两边内容不能随意互换,左边只能是变量,右边可以使表达式,数值或变量。
2)一个赋值语句只能给一个变量赋值。
3)可以多次给一个变量赋值,新变量值将取代原变量值(即最后赋的值生效)。
4)赋值语句具有运算功能,它的一般形式为:
变量=表达式。
在赋值运算中,表达式可以是变量自身与其他数据的运算结果,如:
#1=#1+1,则表示#1的值为#1+1,这一点与数学运算是有点不同的。
需要强调的是:
“#1=#1+1”形式的表达式可以说是宏程序运行的“原动力”,任何宏程序几乎都离不开这种类型的赋值运算,而它偏偏与人们头脑中根深蒂固的数学上的等式概念严重偏离,因此对初学者往往造成很大的困扰,但是,如果对计算机高级语言有一定了解的话,对此应更易理解。
5)赋值表达式的运算顺序与数学运算顺序相同。
6)辅助功能(M代码)的变量有最大值限制,例如,将M30赋值为300显然是不合理的。
1.5转移和循环
在程序中,使用GOTO语句和IF语句可以改变程序的流向。
有三种转移和循环操作可供使用。
GOTO语句→无条件转移
转移和循环{IF语句→条件转移,格式为:
IF…THEN…
WHILE语句→当…时循环
1.5.1无条件转移(GOTO语句)
转移(跳转)到标有顺序号n(即俗称的行号)的程序段。
当指定1~99999以外的顺序号时,会触发P/S报警NO.128。
其格式为:
GOTOn;n为顺序号(1~99999)
例如:
GOTO99,即转移至第99行。
1.5.2条件转移(IF语句)
IF之后指定条件表达式。
1.IF【<条件表达式>】GOTOn
表示如果指定的条件表达式满足时,则转移(跳转)到标有顺序号n的程序段。
如果不满足指定的表达式,则顺序执行下个程序段。
2.IF【<条件表达式>】THEN
如果指定的条件表达式满足时,则执行预先指定的宏程序语句,而且只执行一个宏程序语句。
例如:
IF[#1EQ#2]THEN#3=10;如果#1和#2的值相同,10赋值给#3。
说明:
条件表达式,条件表达式必须包括运算符。
运算符插在两个变量中间或变量和常量中间,并且用“【】”封闭。
表达式可以替代变量。
运算符,运算符由两个字母组成,见下表,用于两个值的比较,以决定它们是相等还是一个值小于或大于另一个值。
注意,不能使用不等号。
运算符
含义
英文注释
EQ
等于(=)
EQual
NE
不等于(≠)
NotEqual
GT
大于(>)
GreatThan
GE
大于或等于(≥)
GreatThanorEqual
LT
小于(<)
LessThan
LE
小于或等于(≤)
LessThanorEqual
典型程序示例:
下面的程序为计算数值1~100的累加总和。
O8000;
#1=0;存储和数变量的初值
#2=1;被加数变量的初值
N5IF【#2GT100】GOTO99;当被加数大于100时转移到N99
#1=#1+#2;计算和数
#2=#2+#1;下一个被加数
GOTO5;转到N5
N99M30;程序结束
1.5.3循环(WHILE语句)
在WHILE后指定一个条件表达式。
当指定条件满足时,则执行从DO到END之间的程序。
否则,转到END后的程序段。
DO后面的号是指定程序执行范围的标号,标号值为1,2,3。
如果使用了1,2,3以外的值,会触发P/S报警NO.126。
第二节用户宏程序功能B
2.1用户宏指令(用户宏程序调用指令)
用户宏指令是调用用户宏程序的指令,用户宏程序功能B用以下方法调用宏程序:
宏程序调用:
非模态调用:
G65
模态调用:
G66,G67
用G代码调用宏程序:
G
用M代码调用宏程序:
M
用M代码调用子程序:
M
用T代码调用子程序
首先说明用户宏程序调用(G65)与子程序调用(M98)之间的差别:
1)G65可以进行自变量赋值,即指定自变量(数据传送到宏程序),M98则不能。
2)当M98程序段包含另一个NC指令(例如,G01X200.0M98P
)时,在执行完这种含有非N、P或L的指令后可调用(或转移到)子程序。
相反,G65则只能无条件地调用宏程序。
3)当M98程序段包含有O、N、P、L以外的地址的NC指令时,(例如,G01X200.0M98P
),在单程序段方式中,可以单程序段停止(即停机)。
相反,G65则不行(即不停机)。
4)G65该变局部变量的级别。
M98不改变局部变量的级别。
2.1.1宏程序非模态调用(G65)
当指定G65时,调用以地址P指定的用户宏程序,数据(自变量)能传递到用户宏程序中,指令格式如下所示。
G65P
L
:
要调用的程序号
重复次数(默认值为1)
<自变量赋值>:
传递到宏程序的数据
O0110;O9110;
…#3=#1+#2;
IF[#3GE180]GOTO99;
G65P9110L2A1.0B2.0;G00G91X#3;
…N99M99;
M30;
1.调用说明
1)在G65之后,用地址P指定用户宏程序的程序号。
2)任何自变量前必须指定G65。
3)当要求重复时,在地址L后指定从1~9999的重复次数,省略L值时,默认L值等于1.
4)使用自变量指定(赋值),其值被赋值给宏程序中相应的局部变量。
2.自变量指定(赋值)
自变量指定又可称之为自变量赋值(以下统一采用该叫法),即若要向用户宏程序本体传递数据时,须由自变量赋值来指定,其值可以有符号和小数点,且与地址无关。
这里使用的是局部变量(#1~#33共33个),与其对应的自变量赋值共有两种类型:
自变量赋值Ⅰ:
用英文字母后加数值进行赋值,除了G、L、O、N和P之外,其余所有21个英文字母都可以给自变量赋值,每个字母赋值一次,从A-B-C-D-…到X-Y-Z,赋值不必按字母顺序进行,但使用I、J、K时,必须按字母顺序指定(赋值),不赋值的地址可以省略。
自变量赋值Ⅱ:
与自变量指定赋值Ⅰ类似,也是用英文字母后加数值进行赋值,但只使用了A、B、C和I、J、K这六个字母,具体用法是:
除了A、B、C之外,还用10组I、J、K来对自变量进行赋值,在这里I、J、K是分组定义的,同组的I、J、K必须按字母顺序指定,不赋值的地址可以省略。
自变量赋值Ⅰ和自变量赋值Ⅱ与用户宏程序本体中局部变量的对应关系见下表:
FANUC0i地址与局部变量的对应关系
自变量赋值Ⅰ地址
用户宏程序本体中的变量
自变量赋值Ⅱ地址
自变量赋值Ⅰ地址
用户宏程序本体中的变量
自变量赋值Ⅱ地址
A
B
C
#1
#2
#3
A
B
C
S
T
U
#19
#20
#21
I6
J6
K6
I
J
K
#4
#5
#6
I1
J1
K1
V
W
X
#22
#23
#24
I7
J7
K7
D
E
F
#7
#8
#9
I2
J2
K2
Y
Z
#25
#26
#27
I8
J8
K8
-
H
-
#10
#11
#12
I3
J3
K3
#28
#29
#30
I9
J9
K9
M
-
-
#13
#14
#15
I4
J4
K4
#31
#32
#33
I10
J10
K10
-
Q
R
#16
#17
#18
I5
J5
K5
注意:
对于自变量赋值Ⅱ,上表中I、J、K的下标用于确定自变量赋值的顺序,在实际编程中不写(也无法写,语法上无法表达)。
3.自变量赋值的其他说明
(1)自变量赋值Ⅰ、Ⅱ的混合使用,CNC内部自动识别自变量赋值Ⅰ和Ⅱ。
赋值Ⅰ和Ⅱ混合赋值,较后赋值的自变量类型有效(以从左到右书写的顺序为准,左为先,右为后)。
建议只使用自变量赋值Ⅰ进行赋
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品课程 程序 编写