飞扬范文网
当前位置 首页 >发言稿 >

FANUC系统用户宏程序

发布时间:2021-09-14 15:05:47 浏览数:

 用户宏程序 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 #...

相关热词搜索: 程序 用户 系统