FANUC系统用户宏程序
用户宏程序 1.概念 反复进行同一切削动作时,使用子程序效果较好,但若使用用户宏程序的话,可以使用运算指令、条件转移等,适于编制更简单、通用性更强的程序。并且与子程序一样,在加工程序中用简单地命令就可以调用用户宏程序。在 FANUC 系统中,包含变量、转向、比较判别等功能的指令称为宏指令。包含有宏指令的子程序称为宏程序。这里以 FANUC 系统中 B 类用户宏程序来作简单介绍,也就是 FANUC Power Mater O 系统所用的方法。
宏程序的最大特征有以下几个方面:
(1)可以在宏程序主体中使用变量。
(2)可以进行变量之间的演算。
(3)可以用宏程序命令对变量进行赋值。
使用宏程序时的主要方便之处在于由于可以用变量代替具体数值,因而在加工同一类的工件时,只需将实际的值赋与变量既可,而不需要对每一个零件都编一个程序。
例:a=10,b=20,c=5,d=8 时其精加工轨迹运行程序为:
N10 G00 X0 Z0; N20 G03 X10. W-5. R5. F100; N30 G01 X20. W-8.; N40 G00 X100. Z100.; a,b,c,d 值变化时则又需要编一个程序。
实际上我们可以将程序写为:
N10 G00 X0. Z0.; N20 G03 Xa W-c Rc F100; N30 G01 Xb W-d; N40 G00 X100. Z100.; 此时可以将其中变量,用宏程序中的变量# i 的对应为:a:#1;b:#2;c:#3;d:#7。则宏程序即可写成如表 6-14 所示形式:
表 6-14
例 6-10 宏程序编写 主程序 宏程序 O1234 N10 G50 X100. Z100.; N20 M03 S1000; N30 G65 P9810 A10. B20. C5. D8.; N40 M05; N50 M30; O9810; N10 G00X0.Z0.; N20 G03 X#1 W-#3 R#3 F100; N30 G01 X#2 W-#7; N40 G00X100.Z100.; N50 M99; 用 A,B,C,D 分别代表变量#1,#2,#3 和#7,用 a,b,c 和 d 赋值后,用宏命令 G65 P9810 Aa Bb Cc Dd 来调用。
如上述所示,当加工同一类,但只是尺寸不同的工件时,只需改变宏命令的数值即可,而没有必要针对每一个零件都编一个程序。
2.变量 在一般的加工程序中,G 代码移动距离可直接用数值指令,如 G00 X100.0。但在用宏程序中,数值可直接指定,也可用变量号指定。因此,变量是指可以在宏主体的地址上代替具体数值,在调用宏主体时再用引数进行赋值的符号:# i(i=1,2,3……)。使用变量可以
使宏程序具有通用性。宏主体中可以使用多个变量,以变量号码进行识别。
(1)变量形式。变量是用符号# 后面加上变量号码所构成的,即:# i (i=1,2,3,……)。
例如:# 5;#109; 也可以用公式的形式指令,但此时必须用括号把公式括起来。即:#[表达式]的形式来表示。例如:# [#1+#2-12 ] (2)变量的引用。在程序内引用变量时,是在地址符后指定变量号。例如 F#33,则当#33=1.5 时,与 F1.5 相同;Z-#18,当#18=20.0 时,与 Z-20.0 指令相同。
用公式指定时在公式的前后要加上括号。例如:G01X [ #1+#2 ] F#3; 注意:1)作为地址符的 O,N,/ 等,不能引用变量。如:O#27,N#1 等都是错误的。
2)用程序定义变量值时,可以省略小数点。没有小数点变量的数值单位为各地址字的最小设定单位。因此,传递没有小数点的变量,将会因机床的系统设置不同发生变化,在宏程序调用中使用小数点可以提高程序的兼容性。
3)被引用的变量值,按各地址的最小设定单位进行四舍五入。例如:对于最小设定单位为 1/1000 的 CNC,当#1 为 12.3456,若执行 G00X#1;相当于 G00X12.346;若要改变变量值的符号引用时,要在“#”符号前加上“-”号。例如:G00X-#1;
(3)未定义变量。没有定义变量值的状态称为空变量。#0 通常为空变量,可以读取但不能写入。空变量不等于变量值为 0 的状态。
1)引用未定义变量时,连同地址字无效。例如:#1 为 0,#2 为〈空〉时,若执行 G00 X #1 Z #2 时,为 G00X0; 2)在运算式中,除了被〈空〉置换的场合以外,与数值 0 相同。
3)在等于或不等于这些条件比较式中,〈空〉与零不同。例如:#1=〈空〉,#2=100,#3=50,执行#3=#1+#2 以后,#3=100。
(4)变量的种类。按变量号码可将变量分为局部(local)变量、公共(common)变量、系统(system)变量,其用途和性质都是不同的见表 6-15。
表 6-15
变量的种类 变量号 变量的种类 功能 # 0 通常为空 该变量总为“空”不能赋予值 #1~#33 局部变量 各宏程序可独自使用,保存计算结果。关电源时进行初始化,变量值为空。调用宏程序时,代入变量值 #100~#149 #500~#531 公共变量 在不同的宏程序之间,可以公共使用的变量。当关电源时,#100~#149 变量初始化为空变量,#500~#531 变量,仍保存原有数据 #1000~ 系统变量 进行读取、写入当前位置、刀具补偿量等 NC 各种数据的变量
说明:1)局部变量:#1~#33。所谓局部变量,就是在宏程序中局部使用的变量。换句话说,在某一时刻调出的宏程序中所使用的局部变量#1 和另一时刻调用的宏程序(无论与前一个宏程序相同还是不同)中所使用的#1 是不同的。因此,在多重调用时,当宏指令地址 A 调用宏指令地址 B 的情况下,也不会将 A 中的变量破坏。
2)公共变量:#100~#149,#500~#531。与局部变量相对,公共变量是在主程序,以及调用的子程序中通用的变量,因此,在某个宏程序中运算得到的公共变量的结果# i,可以用到别的用户宏中。
公共变量主要由#100~#149 及#500~#531 构成。其中前一组是非保持型,即断电后就被清零,后一组是保持型,即断电后仍被保存。
3)系统变量:#1000~。系统变量是根据用途而被固定的变量。主要有以下各种如表 6-16
所示。
表 6-16
系统变量
在宏程序中要改变某些模态信息,可以先保存进入时的模态信息,结束再恢复状态。
这样可以使数控系统保持该宏程序运行前后模态信息一致。这样的宏程序具有很好的安全性,即使不是该宏程序的编写者也可以放心地使用。
3.宏程序 通常把下述的程序段称为宏语句:
* 含代数运算和逻辑运算指令(=)的程序段; * 含控制指令(GOTO,DO,END)的程序段; * 含宏调用指令(用 G 代码调用如 G65,G66,G67 或用 M 代码调用)的程序段。
具有宏语句的程序称为宏程序。宏语句以外的程序段称为 NC 语句。
(1)运算指令。变量可以进行下述运算如表 6-17 所式。
表 6-17
运算指令 功能 格式 说明 定义 # i = # j
和 差 积 商 # i = # j + # k; # i = # j - # k; # i = # j*# k; # i = # j / # k;
正弦 余弦 正切 反正切 # i = SIN﹝# j﹞; # i = COS﹝# j﹞; # i = TAN﹝# j﹞; # i = ATAN﹝# j/# k﹞; 角度用角度单位指令,如:
90 度 30 分为 90.5 度 平方根 # i = SQRT﹝# j﹞; 取整后的数值的绝对值比变量号码 用途 #1000~#1015 接口信号(输入),按位读取的信号 #1100~#1115 接口信号(输出),按位写入的信号 #2001……#2316 刀具补偿量 #3000 宏报警信息 #3001,#3002,#3011,#3012 时间信息 #3003,#3004 控制自动运转 #3005 SETTING 数据 #3007 镜像 #4001~#4022 G 代码 #4109 F 代码 #4113 M 代码 #4114 顺序号 #4115 程序号 #4119 S 代码 #4120 T 代码 #5001……#5102 当前位置、刀具和伺服位置偏差量 #5201……#5322 工件原点偏置量
绝对值 四舍五入化整 下取整 上取整 # i = ABS﹝# j﹞; # i = ROUND﹝# j﹞; # i = FIX﹝# j﹞; # i = FUP﹝# j﹞; 原来的数值大时称为上取整,反之,称为下取整。
逻辑和 “异”门 逻辑乘 # i = #jOR # k; # i = #jXOR# k; # i = #jAND# k; 对二进制进行逻辑运算 从十进制变换为二进制 从二进制变换为十进制 # i = BIN﹝# j﹞; # i = BCD﹝# j﹞; 用于与 PMC 的信号交换 1)运算的优先级:① 函数;②乘、除类运算 (*,/,AND,MOD);③ 加、减类运算(+,-,OR,XOR); 例:#1= #2 + #3 * SIN [ #4 ]; 运算顺序为:① 函数 SIN [ #4 ]; ②乘 #3 * …… ; ③ 加#2 +……; 2)括号的嵌套:当要变更运算的优先顺序时,使用括号。包括函数的括号在内,括号最多可用到 5 重,超过 5 重时则出现报警。
例:#1=SIN[[[#2+#3] * #4+#5] * #6]; (2)控制语句。在程序中,使用 GOTO,IF 语句,可以改变程序的流程。转移与循环有以下 3 种:
GOTO 语句(无条件转移)
转移和循环
IF 语句(条件转移,如果……)
WHILE 语句(当……循环)
1)无条件转移(GOTO 语句)。无条件转移到顺序号为 n 的程序段。
格式:GOTO n ;n:顺序号(1~99999)另外,顺序号可用表达式表示。
例:GOTO 1; GOTO #10; 2)条件转移(IF 语句)。IF 后面是条件式。如果条件成立,则转移到顺序号为 n 的程序段,否则,执行下一个程序段。
例如:如果#1 值比 10 大,则转移到顺序号 N60 的程序段。
格式:IF[#1GT10]GOTO60; 条件不成立→ 按程序顺序执行;
条件成立→ 执行 N60 G00G91X10.0;
说明:①条件式是由比较的 2 个变量之间,或一个常量与一个变量之间,写上比较运算符,然后再用方括号[ ]全部括起来而构成的。不用变量,也可用运算式。
②运算符是由 2 个英文字母构成,用来判断大、小或相等的,如表 6-18 所示。
表 6-18
运算符 运算符 意义 EQ 等于(=)
NE 不等于(≠)
GT 大于(>)
GE 大于或等于(≥)
LT 小于(<)
LE 小于或等于(≤)
[例 6-11]:求 1 到 10 之和。
解:用 FANUC 系统编制宏程序,见表 6-19。
表 6-19
例 6-11 编程 程序 说明 O9500 N10 #1=0; N20 #2=1; N30 IF[#2GT10]GOTO70; N40 #1=#1+#2; N50 #2=#2+1; N60 GOTO30; N70 M30; 宏程序号 结果的初值 加数的初值 若加数大于 10,则转移到 N70 计算结果 下一个加数 转移到 N30 程序结束 3)循环(WHILE 语句)。在 WHILE 语句后必须指定一个条件表达式。
格式:WHILE[条件式]DO m;(m=1,2,3)
……
END m;
…… 说明:① 在条件成立期间,执行 WHILE 之后的 DO 到 END 间的程序。条件不成立时,执行 END 的下一个程序段。条件式和运算符与 IF 语句相同。DO 和 END 后的 m 数值是指定执行范围的识别号,可使用 1,2,3,非 1,2,3 时报警。
② 嵌套:在 DO~END 之间的循环识别号(1~3)可使用任意次,但是不能执行交叉循环,否则要报警,如表 6-20 所示。
表 6-20
WHILE 语句的嵌套 识别号(1~3)可多次使用 DO 的范围不能交叉 DO 的多重数最多可到 3 重 WHILE[……] DO 1; …… END 1; …… WHILE[……]DO 1; …… END 1;
WHILE[……]DO 1; …… WHILE[……]DO 2; END 1; …… END 2;
WHILE[……]DO 1; …… WHILE[……]DO 2; WHILE[……]DO3; …… END 3; …… END 2; …… END 1; 不能跳出循环体 程序不能转移到循环体中
WHILE[……]DO 1; IF[……]GOTO n; END 1; Nn;
IF[……]GOTO n; …… WHILE[……]DO 1; Nn……; END 1;
注意:*如果省略 WHILE 语句,只指令了 DO m,则从 DO 到 END 之间形成无限循环。
*在 GOTO 语句中,转移到顺序号时,要进行检索,因此反向进行的处理时间要比顺方向长,为了缩短处理时间,应使用循环 WHILE 语句。
*在条件式中,只有使用 EQ,NE 时,空和“0”是不同的,在其它条件中,把空和“0”都视为相同。
[例 6-12]:用 WHILE 语句求 1 到 10 之和。
解:N10 #1=0; N20 #2=1;
N30 WHILE[#2LE10]DO1; N40 #1=#1+#2; N50 #2=#2+1; N60 END 1; N70 M30; (3)宏程序的调用。宏程序调用和一般子程序调用之间的差别:主要在于宏程序调用可以在调用语句中传递数据到宏程序内部,而子程序调用(M98)则没有这功能。其次,M98 程序段可以与另一数据指令共处同一条指令,如 G01X100.M98P1000;在执行时,先执行 G01X100.;然后,再运行子程序 O1000。而宏程序调用语句是独立自成一行。宏程序的调用有以下方法:
单纯调用(G65)
宏程序调用
模态调用(G66,G67)
用 G 代码、M 代码等调用宏程序 1)单纯调用(G65)。用指令 G65 可调用地址 P 指令的宏程序,并将赋值的数据送到用户宏程序中。
格式:G65 P_ L_ 〈引数赋值〉; 说明:G65:是宏调用代码; P_:P 之后为宏程序主体的程序号码; L_:循环次数(省略时为 1); 〈引数赋值〉:是由地址符及数值(有小数点)构成,由它给宏主体中所对应的变量赋予实际数值; 例:O0001;
O9010 ……
N10 #3 = #1+#2; G65 P9010 L2 A1.0 B2.0;
N20 IF[#3GT360]GOTO40;
……
N30 G00 G91 X#3; M30;
N40 M99; 引数赋值有以下两种形式:
① 引数赋值Ⅰ。除去 G,L,N,O,P 地址符以外都可作为引数赋值的地址符,大部分无顺序要求,但对 I,J,K 则必须按字母顺序排列,对没使用的地址可省略。
例如:
B_ A_ D_…I_ K_… 正确;
B_ A_ D_… J_ I_… 不正确。
引数赋值Ⅰ所指定的地址和用户宏主体内所使用变量号码的对应关系见表 6-21 所示。
表 6-21
引数赋值Ⅰ的地址和变量号码的对应关系 引数赋值Ⅰ的地址 宏主体中的变量
引数赋值Ⅰ的地址
宏主体中的变量 A #1 Q #17 B #2 R #18 C #3 S #19
D #7 T #20 E #8 U #21 F #9 V #22 H #11 W #23 I #4 X #24 J #5 Y #25 K #6 Z #26 M #13
② 引数赋值Ⅱ。A,B,C 只能用一次,I,J,K 作为一组引数,最多可指定 10 组。当给三维坐标赋值时,使用此种参数。引数赋值Ⅱ的地址和宏主体中使用变量号码的对应关系见表 6-22 所示。
表 6-22
引数赋值Ⅱ的地址和变量号码的对应关系 引数赋值Ⅱ的地址 宏主体中的变量
引数赋值Ⅱ的地址
宏主体中的变量 A #1 K 5 #18 B #2 I 6 #19 C #3 J 6 #20 I 1 #4 K 6 #21 J 1 #5 I 7 #22 K 1 #6 J 7 #23 I 2 #7 K 7 #24 J 2 #8 I 8 #25 K 2 #9 J 8 #26 I 3 #10 K 8 #27 J 3 #11 I 9 #28 K 3 #12 J 9 #29 I 4 #...
相关热词搜索: 程序 用户 系统热门文章:
- 2024年度主题教育研讨发言材...2025-01-12
- 2024年度在加强基层党组织建...2025-01-12
- 主题教育研讨发言材料(3)(...2025-01-12
- 主题教育交流研讨发言材料(2...2025-01-12
- 在XX中学2024届高三鼓劲大会上发言2025-01-12
- 2024年度(4篇)公司主题教育...2025-01-11
- 2024年学习全面依法治国专题...2025-01-11
- 在家庭委员会座谈会上发言材料2025-01-11
- 2024年政府办公室岗位标兵交...2025-01-10
- 2024第二批主题教育读书班交...2025-01-10
相关文章:
- 中小企业WEB网站架构与程序设...2021-08-27
- 程序员工作自我评价范文2021-08-31
- 【小程序】迅响小程序销售FAQ2021-09-06
- 问卷小程序入口,腾讯微信小程序2021-09-06
- 汇编程序设计总结报告2021-09-18
- 怎样做一名合格的程序员2021-10-08
- 程序员实习总结报告2021-10-09
- 高校VB程序设计课程教学论文2021-12-17
- 动态程序设计2022-01-28
- 用户登录分析2021-09-05
- 用户注册与登录,(1)2021-09-06
- 论数字图书馆的用户服务2022-03-12
- 基于视线追踪技术的网络用户...2022-10-24
- 综合报表系统数据服务系统分...2021-09-05
- 五恒系统是什么意思2021-09-14
- 教育系统安全工作个人事迹材料2021-09-21
- 县教育局“发展学生党员系统...2021-09-28
- 教育局发展学生党员系统工程...2021-09-29
- 系统化整体护理业务质量管理...2021-11-13
- 电信数据系统管理员先进事迹材料2021-11-17
- 副县长在县教育系统安全工作...2021-12-05
- 在全市教育系统安全稳定和学...2022-01-10
- 对烟草系统安全管理工作中推...2022-02-18