宏程序与子程序类似,对编制相同加工的操作可以使程序简化.同时宏程序中可以使用变量,算术和逻辑运算及转移指令,还可以方便地实现循环程序设计使相同加工操作的程序更方便,更灵活本章以 FANUC 系统为例介绍宏程序设计的内容12.1 变量的定义宏程序中使用的变量与日常生活中使用的变量不同,变量用符号“#”后跟变量的变量号指定变量可分为四种类型1. 空变量#0为空变量,该变量不能赋值2. 局部变量#1~#33为局部变量,局部变量只能在宏程序中存储数据当断电时局部变量被初始化为空,调用宏程序时,自变量对局部变量赋值局部变量的数值范围10-29~1047或-1047~-10-29,如果计算结果超过该范围则发出 P/S 报警 No.1113. 公共变量#100~#199、#500~#999为公共变量,公共变量在不同的宏程序中意义相同当断电时,变量#100~#199被初始化为空,变量#500~#999的数据不会丢失全局变量的数值范围10-29~1047或-1047~-10-29,如果计算结果超过该范围则发出 P/S 报警No.1114. 系统变量#1000~为系统变量,系统变量用于读和写 CNC 运行时的各种数据,如刀具的当前位置和补偿 值等。
5. 变量与地址(自变量)的对应关系系统可用两种形式的自变量指定,表12-1为自变量指定 I 的自变量与变量的对应关系表12-2为自变量指宾 II 的自变量与变量的对应关系表12-1 自变量指定 I 的变量对应关系地址(自变量) 变量号 地址(自变量) 变量号 地址(自变量) 变量号A #1 I #4 T #20B #2 J #5 U #21C #3 K #6 V #22D #7 M #13 W #23E #8 Q #17 X #24F #9 R #18 Y #25H #11 S #19 Z #26在自变量指定 I 中,G、L、O、N、P 不能用,地址 I、J、K 必须按顺序使用,其它地址顺序无要求举例:G65 P3000 L2 B4 A5 D6 J7 K8 正确(J、K 符合顺序要求)在宏程序中将会把4赋给#2,把5赋给#1,把6赋给#7,把7赋给#5,把8赋给#6举例:G65 P3000 L2 B3 A4 D5 K6 J5 不正确(J、K 不符合顺序要求)表12-2 自变量指定 II 的变量对应关系地址(自变量) 变量号 地址(自变量) 变量号 地址(自变量) 变量号A #1 K3 #12 J7 #23B #2 I4 #13 K7 #24C #3 J4 #14 I8 #25I1 #4 K4 #15 J8 #26J1 #5 I5 #16 K8 #27K1 #6 J5 #17 I9 #28I2 #7 K5 #18 J9 #29J2 #8 I6 #19 K9 #30K2 #9 J6 #20 I10 #31I3 #10 K6 #21 J10 #32J3 #11 I7 22 K10 #33自变量指定 II 使用 A、B、C 和1次,使用 I、J、K 各10次。
系统能够自动识别自变量指定 I 和自变量指定 II 并赋给宏程序中相应的变量号如果自变量指定 I 和自变量指定 II 混合使用,则后指定的自变量类型有效举例:G65 A1.0 B2.0 I-3.0 I4.0 D5.0 p1000宏程序中: #1:1.0#2:2.0,#3:#4:-3.0#5:#6:#7:5.0 说明:I4.0为自变量指定 II,D 为自变量指定 I,所以#7使用指定类型中的 D5.0,而不使用自变量指定 II 中的 I4.06. 本级变量#1~#33作用于宏程序某一级中的变量称为本级变量,即这一变量在同一程序级中调用时含义相同,若在另一级程序(如子程序)中使用,则意义不同本级变量主要用于变量间的相互传递,初始状态下未赋值的本级变量即为空白变量局部变量#1~#33(一个宏程序中的同名变量)从0到4级,主程序是0级每调用一个含有同名变量的宏程序,级别加1,前一级的变量被保存当一个宏程序结束(执行M99)时,级别减1例如:主程序 宏程序 宏程序 宏程序 宏程序(0级) (1级) (2级) (3级) (4级)O0001 O0002 O0003 O0004 O0005#1=1; #1=2 #1=3 #1=4 #1=5G65P2A2; G65P3A3 G65P4A4 G65P5P5 ………… …… …… …… M99M30 M99 M99 M9912.2 变量的运算对宏程序中的变量可以可以进行算术运算和逻辑运算。
1. 算术运算可以进行加、减、乘、除运算运算功能和格式如表12-3所示举例:G00X[#1+#2]X 坐标的值是变量1与变量2之和2. 三角函数计算对宏程序中的变量可进行正弦(SIN) 、反正弦(ASIN) 、余弦(COS) 、反余弦(ACOS) 、正切(TAN) 、反正切(ATAN)函数运算三角函数中的角度以度为单位运算功能和格式如表12-3所示表12-3 变量运算功能表类型 功能 格式 举例 备注算术运算 加法 #i=#j+#k #1=#2+#3 常数可以代替变量减法 #i=#j-#k #1=#2-#3 乘法 #i=#j*#k #1=#2*#3 除法 #I=#j*#k #1=#2/#3 三角函数运算 正弦 #i=SIN[#j] #1=SIN[#2] 角度以度指定35°30’表示为35.5常数可以代替变量反正弦 #i=ASI[#j] #1=ASIN[#2] 余弦 #i=COS[#j] #1=COS[#2] 反余弦 #i=ACOS[#j] #1=ACOS[#2] 正切 #i=TAN[#j] #1=TAN[#2] 反正切 #i=ATAN[#j] #1=ATAN[#2] 其它函数运算 平方根 #i=SQRT[#j] #1=SQRT[#2] 常数可以代替变量绝对值 #i=ABS[#j] #1=ABS[#2] 舍入 #i=ROUN[#j] #1=ROUN[#2] 上取整 #i=FIX[#j] #1=FIX[#2] 下取整 #i=FUP[#j] #1=FUP[#2] 自然对数 #i=LN[#j] #1=LN[#2] 指数对数 #i=EXP[#j] #1=EXP[#2] 逻辑运算 与 #i=#jAND#k #1=#2AND#2 按位运算或 #i=#j OR #k #1=#2OR#2 异或 #i=#j XOR #k #1=#2XOR#2 转换运算 BCD 转 BIN #i=BIN[#j] #1=BIN[#2] BIN 转 BCD #i=BCD[#j] #1=BCD[#2] 对于反反正弦(ASIN)取值范围如下:当参数(No.6004#0)NAT 位设为0时:270°~90°当参数(No.6004#0)NAT 位设为1时:-90°~90°当#j 超出-1~1时发出 P/S 报警 No.111。
对于反余弦(ACOS)的取值范围如下:取值范围180°~0°当#j 超出-1~1时发出 P/S 报警 No.111对于反正切(ATAN)的取值范围如下:当参数(No.6004#0)NAT 位设为0时:0°~360°当参数(No.6004#0)NAT 位设为1时:-180°~180°3. 其它函数计算对宏程序中的变量还可以进行平方根(SQRT) 、绝对值(ABS) 、舍入(ROUN) 、上取整(FIX) 、下取整(FUP) 、自然对数(LN) 、指数(EXP)运算运算功能和格式如表12-3所示对于自然对数 LN[#j],相对误差可能大于10-8当#j≤0时,发出 P/S 报警 No.111对于批数函数 EXP[#j],相对误差可能大于10-8当运算结果大于365×1047(j 大约110)时,出现溢出并发出 P/S 报警 No.111对于取整函数 ROUN[#j],根据最小设定单位四舍五入例如,假设最小设定单位为1/1000mm,#1=1.2345,则#2=ROUN[#1]的值是1.0对于上取整 FIF[#j],绝对值值大于原数的绝对值对于下取整 FUP 绝对值小于原数的绝对值例如,假设#1=1.2,则#2=FIX[#1]的值是2.0。
假设#1=1.2,则#2=FUP[#1]的值是1.0假设#1=-1.2,则#2=FIX[#1]的值是-2.0假设#1=-1.2,则#2=FUP[#1]的值是-1.04. 逻辑运算对宏程序中的变量可进行与、或、异或逻辑运算逻辑运算是按位进行运算功能和格式如表12-3所示5. 数制转换变量可以在 BCD 码与二进制之间转换6. 关系运算由关系运算符和变量(或表达式)组成表达式系统中使用的关系运算符如下1)等于(EQ)用 EQ 与两个变量(或表达式)组成表达式,当运算符 EQ 两边的变量(或表达式)相等时,表达式的值为真,否则为假例如,#1EQ#2,当#1与#2相等时,表达式的值为真 (2)不等于(NE)用 NE 与两个变量或表达式组成表达式,当运算符 NE 两边的变量(或表达式)不相等时,表达式的值为真,否则为假例如,#1NE#2,当#1与#2不相等时,表达式的值为真 (3)大于等于(GE)用 GE 与两个变量或表达式组成表达式,当左边的变量(或表达式)大于或等于右边的变量(或表达式)时,表达式的值为真,否则为假例如,#1GE#2,当#1大于或等于#2时,表达式的值为真否则为假 (4)大于(GT)用 GT 与两个变量或表达式组成表达式,当左边的变量(或表达式)大于右边的变量(或表达式)时,表达式的值为真,否则为假。
例如,#1GT#2,当#1大于#2时,表达式的值为真否则为假 (5)小于等于(LE)用 LE 与两个变量或表达式组成表达式,当左边的变量(或表达式)小于或等于右边的变量(或表达式)时,表达式的值为真,否则为假例如,#1LE#2,当#1小于或等于#2时,表达式的值为真否则为假 (6)小于(LT)用 LT 与两个变量或表达式组成表达式,当左边的变量(或表达式)小于右边的变量(或表达式)时,表达式的值为真,否则为假例如,#1GE#2,当#1大于#2时,表达式的值为真否则为假 7. 运算优先级运算符的优先顺序是(1)函数函数的优先级最高2)乘、除、与运算乘、除、与运算的优先级次于函数的优先级3)加、减、或、异或运算加、减、或、异或运算的优先级次于乘、除、与运算乘、除、与运算的优先级4)关系运算关系运算的优先级最低用方括号可以改变优先级,括号不能超过5层超过5层时,发出 P/S 报警 No.1118. 变量值的精度变量值的精度为8位十进制数例如,用赋值语句#1=9876543210123.456时,实际上#1=9876543200000.000用赋值语句#2=9876543277777.456时,实际上#1=9876543300000.000。
12.3 宏程序结构宏程序从结构上可以有顺序结构、分支结构和循环结构本节介绍分支和循环结构的实现方法1. 无条件转移(GOTO)格式:GOTOn;n 为顺序号(1~9999)例如,GOTO6;语句组N6 G00X100;执行 GOTO6语句时,。