宏程序的基本概念知识讲解

数控铣削宏程序编程(一)一、宏程序的基本概念1、宏程序的定义以一组子程序的形式存储并带有变量的程序称为用户宏程序, 简 称宏程序; 调用宏程序的指令称为 “用户宏程序指令”,或宏程序调用 指令(简称宏指令)宏程序与普通程序相比较, 普通的程序字为常量, 一个程序只能 描述一个几何形状,所以缺乏灵活性和适用性而在用户宏程序的本 体中,可以使用变量进行编程, 还可以用宏指令对这些变量进行赋值、 运算等处理通过使用宏程序能执行一些有规律变化(如非圆二次曲 线轮廓)的动作宏程序分 A 类和 B 类两种, FANUCi 系统采用 B 类宏程序进行编程2、宏程序中的变量在常规的主程序和子程序内, 总是将一个具体的数值赋给一个地 址,为了使程序更加具有通用性、 灵活性, 故在宏程序中设置了变量1)、变量的表示: 一个变量由符号“ #”和变量序号组成,如: #1 (1=1 , 2,……)此外,变量还可以用表达式进行表示,但其表达 式必须全部写入方括号“ []”中例:#100, #500, #5, #[#1+#2+#10];2)、变量的引用: 将跟随在地址符后的数值用变量来代替的过程称为引用变量同样,引用变量也可以用表达式。
例 G01X#100 Y—#101F[ #101+#103];当#100=100.0、#101=50.0、#103=80.0 时,上例即表示为 G01 X100.0 Y50.0 F130;3)、变量的种类:变量分为局部变量、公共变量(全局变量)和 系统变量三种在 A 、B 类宏程序中,其分类均相同A、局部变量(#1〜#33)是在宏程序中局部使用的变量当宏 程序 C 调用宏程序 D 而且都有变量 #1 时,由于变量 #1 服务于不同的 局部,所以C中的#1与D中的#1不是同一个变量,因此可以赋予不 同得不偿失值, 且互不影响 关闭电源时, 局部变量被初始化成 “空” 宏调用时,自变量分配给局部变量B 、公共变量( #100〜 # 1 49/# 1 99;#500 〜 #549/#599)贯穿于整 个程序过程他可以在不同的宏程序间共享,当宏程序 C 调用宏程序 D 而且都有变量 #100时,由于#100是全局变量,所以 C 中的#100与 D 中的#100 是同一个变量关闭电源时变量 #100~#149 被初始化成 “空”,而变量 #500~#531 保持数据 公共变量 #150~#199 和#532~#999 也可以选用,但是当这些变量被使用时,纸带长度减少了 8.5米。
C、系统变量(#1000〜)是指有固定用途的变量,它的值决定 系统的状态系统变量用于读写各种 NC 数据项,如当前位置、刀具 补偿值系统变量包括刀具偏置值变量,接口输入与接口输出信号变 量及位置信号变量等二、宏程序编程1、变量的赋值变量的赋值方法有两种, 即直接赋值和引数赋值, 其中直接赋值的方法较为直观,方便,其书写格式如下:[例]:#100=100.0#10 仁30.0+20.0;2、宏程序运算指令宏程序的运算类似于数学运算与逻辑运算, 用各种数学符号来表示常用运算指令表如下:变量的各种运算功能格式备注与具体示例定义,转换/赋值#i=#j#100=#1,#100=30.0加法#i= #j+#k#100=#1+#2减法#i=#j-#k#100=#100.0-#2乘法#i=#j*# k#100=#1*#2除法#i=#j*#k#100=#1/30正弦#i=SIN[#j]反正弦#i=ASIN[#J]#100=SIN[#1]#100=C0S[36.3+#2] #100=ATAN[#1]/[#2]余弦#i=COS[#J]反余弦#i=ACOS[#j]正切#i=TAN[#j]反正切#i=ATAB[#j]/[#K]平方根#i=SQRT[#j]绝对值#i=ABS[#j]舍入#i=ROUND[#j]#100SQRT[#1*#1-100]#100=EXP[#1]上取整/上进位#i=FIX[#j]下取整/下进位#i=FUP[#j]自然对数#i=LN[#j]指数函数#i=EXP[#j]或#i=#j OR #k用二进制数按位进行逻 辑操作异或#i=#j XOR #K与#i=#j AND #K将BCD码转换成BIN码#i=BIN[#j]用于与PMC间信号的交换将BIN码转换成BCD码#i=BCD[#j]宏程序计算说明如下① 、角单位:在SIN,COS, TAN,ATAN中所用的角度单位是度,分和秒要换算成带小数点的度。
如90° 30’表示905,而3018 '表示 30.3°② 、 ATAN 功能:在 ATANT 之后的两个变量用“ /”分开,结果在 0°和 360°之间如当 #1=ATANT[1]/[ —1]时,#1=135.0③ 、 ROUND 功能:当 ROUND 功能包含在算术或逻辑操作、 IF 语 句、WHILE语句中时,将保留小数点后一位,其余位进行四舍五 入例: # 1 =ROUND[#2] ;其中 #2=1.2345,则#1=1.0当 ROUND 出现在 NC 语句地址中时, 进位功能根据地址的最小输入 增量四舍五入指定的值例:编一个程序,根据变量 #1、 #2 的值进行切削,然后返回到 初始点假定增量系统是 1/1000mm, #1=1.2345, #2=2.3456则G00 G91 X—#1;移动 1.235mm G01 X—#2 F300;移动 2.346mmG00 X[#1+#2]; 因 为 1.2345+2.3456=3.5801 移 动3.580mm 刀 具 此 时 不 能 返 回 到 加 工 的 初 始 位 置 而 换 成 G00X[ROUND[#1]+ROUND[#2]] 时能返回到初始点。
④ 、上进位和下进位成整数:例:#1=1.2、 #2=—1.2贝卩:#3二FUP[#1],结果#3=2.0 #3二FIX[#1],结果#3=1.0#3二FUP[#2],结果#3=—2.0 #3=FIX[#2],结果#3= —1.0⑤ 、算术和逻辑操作的缩写方式:取功能块名的前两个字符,例: ROUND RO⑥ 、宏程序数学计算的次序依次为:函数运算( SIN, COS, ATAN 等),乘和除运算( *,/,AND 等),加和减运算( +,—, OR, XOR 等)⑦ 、函数中的括号括号用于改变运算次序,函数中的括号允许嵌 套使用,但最多只允许嵌套 5 级[ 例] #1=SIN[[[#2+#3]*4+#5]/#6] ; 注意:在加工程序中,方括号用于封闭表达式,圆括号用于注释3、宏程序转移指令 控制指令起到控制程序流向的作用 在一个程序中, 控制程序流向可 以用 GOTO、IF 语句改变有三种分支循环语句如下:GOTO 语句(无条件分支);IF 语句(条件分支 :if... ,then...);WHILE 语句 (循环语句 while...)① 、分支语句格式一 :GOTO n;[例 ] GOTO 1000; 无条件转移语句,当执行该程序时,无条件转移到 N1000 程序 段执行,顺序号可以用表达式。
格式二 : IF [条件表达方式 ] GOTO n; [例] IF[#1GT#100]GOTO 100 ; 有条件转移语句,如果条件成立,则转到 N 程序段执行,如果 条件不成立, 则执行下一句程序 一个条件表达式一定要有一个操作符,这个操作符插在两个变量或一个变量和一个常数之间,并且要用方括号括起来,即:[表达式 操作符 表达式]条件式的种类如下表表达式种类条件式意义具体示例#i EQ #j等于(=)P IF[#5EQ#6]GOT100;#i NE #j不等于(工)IF[#5NE100]GOT100;#i GT #j大于(>)P IF[#5GT#6]GOT100;#i GE #j大于等于(>)IF[#5GE100]GOT100;#i LT #j小于(<)r IF[#5LT#6]G0T100;#i LE #j小于等于(<)IF[#5LE100]GOT100;② 、循环指令WHILE [条件式]DO m(m=1,2,3,…);END m;当条件式满足时,就循环执行 WHILE与END之间的程序段m次, 当条件不满足时,就执行ENDm ;的下一个程序段③ 、宏程序的嵌套A、 WHILE [条件式]DO m和END m必须成对使用,并且,DO m 一定要在END m之前指定,用 m来识别;B、 同一识别号 m可以在一个程序中多次使用,但 DO m与END m必须成对使用;C、 在一个程序中DO的范围不能够交叉,DO可以嵌套三重;D、 在DO m〜END m的内部可以用GOTO n转移到外部,但不可以从外部用 GOTO n转移到DO m〜END m的内部;E、从DO m〜END m内部可以调用用户宏程序或子程序。
DOm〜END m可以在用户宏程序或子程序中嵌套三重;F、用跳转语句和重复语句编程时,一般重复语句执行的时间比较短三、编程练习试用B类用户宏程序编制如下图工件的精加工程序■巧.| ■£3.注:切深1mm/次图(2) 注:Z向深5mm, 1mm/次。