>华中系统与FANUC系统宏程序区别
一、宏编程 主要讲解华中系统与FANUC系统在宏编程的异同,主要包括变量的使用及编程语法规范方面内容,帮助使用者了解二者区别,并进行相关宏程序的改造来达到使用要求。
1、变量 局部变量:局部变量是指在宏程序内部使用的变量,即是在当前时刻下调用宏程序A中使用的局部变量#i与另一时刻下调用宏程序A中使用的#i不同。因此,在如多层调用一样从宏A 中调用宏B 时,有可能在宏B 中错误使用在宏A 中正在使用的局部变量,导致破坏该值。
华中系统:提供#0~#49为局部变量,它们的访问属性为可读可写。 FANUC系统:提供#1~#33为局部变量 其对比如下图表所示: 系统类型 | 变量范围 | 含义 | 读写权限 | 断电保存 | 华中8型 | #0-#49 | 当前子程序局部变量 | 读/写 | 无 | FANUC | #0 | 空变量 |
|
| #1-#23 | 局部子变量 | 读/写 | 无 |
局部变量用于传输自变量。其与自变量地址之间的对应关系, 当用户调用宏程序时,系统会将当前程序段中的自变量(A~Z)的内容拷贝到相应的用户宏程序当前层的局部变量中去。
华中系统: 宏变量 | 自变量名 | 宏变量 | 自变量名 | 宏变量 | 自变量名 | #0 | A | #1 | B | #2 | C | #3 | D | #4 | E | #5 | F | #6 | G | #7 | H | #8 | I | #9 | J | #10 | K | #11 | L | #12 | M | #13 | N | #14 | O | #15 | P | #16 | Q | #17 | R | #18 | S | #19 | T | #20 | U | #21 | V | #22 | W | #23 | X | #24 | Y | #25 | Z | #26 | 预留 | #27 | 预留 | #28 | 预留 | #29 | 预留 | #30 | X轴位置 | #31 | Y轴位置 | #32 | Z轴位置 | #33 | A轴位置 | #34 | B轴位置 | #35 | C轴位置 | #36 | U轴位置 | #37 | V轴位置 | #38 | W轴位置 |
全局变量(公共变量): 华中系统:提供#50~#199、#500~#999、#54000~#54999为全局变量,共计1650个,它们的访问属性为可读可写。#50~#199在退出主程序运行或电源切断时被清除,而#500~#999、#54000~#54999为断电可保存数据,并且#500~#999、#54000~#54999为用户自定义宏变量,用户可根据需要自主配置相关参数,包括参数中文名称、参数显示范围等。
FANUC系统:提供#100~#199、#500~#999为公共变量,共计600个。#100~#199 将会由于电源切断而被清除,但是,#500~#999 即使在电源切断之后仍会被保留起来。同时FANUC系统可对于公共变量写保护,通过在参数(No.6031~6032)中设定变量号,即可对多个公共变量(#500~#999)进行保护,也即将其属性设定为只读。
其华中系统与FANUC系统的对比如下表所示 系统类型 | 变量范围 | 含义 | 读写权限 | 断电保存 | 华中8型 | #50-#199 | 公共变量,初始化为空 | 读/写 | 否 | #500~#999 #54000~#54999 | 用户自定义宏变量,数据可保存 | 读/写 | 保存 | 读/写 | 保存 | FANUC | #100~#199 | 公共变量,初始化为空 | 读/写 | 否 | #500~#999 | 公共变量,数据可保存 | 读/写 | 保存 |
时间信息: 系统类型 | 变量范围 | 含义 | 读写权限 | 华中8型 | #3000 | 该变量用于读取当前的日期(年/月/日)。年/月/日信息转换成十进制数。例如,2024 年10 月17 日表示为20241017。 | 读 | #3001 | 该变量用于读取当前的时间(时/分/秒)。时/分/秒信息转换成十进制数。例如,下午3 点34 分56 秒表示为153456。 | 读 | 读 | FANUC | #3011 | 同华中#3000 | 读 | #3012 | 同华中#3001 | 读 |
FANUC系统相关系统变量:
二、宏编程语句: 赋值语句:把常数或表达式的值传送给一个宏变量称为赋值,这条语句称为赋值语句,如下: 普通赋值语句二者一致,如下, #2 = 175 / SQRT[2] * COS[55*PI/180] #2 = 175 / SQRT[2] * COS[55*PI/180] 但复杂赋值语句二者有区别:
FANUC系统: #1=[#[#1+5]+#[#1+7]]/2 华中系统:若宏变量表达式参加计算,必须用中括号单段 #1=[[#[#1+5]]+[#[#1+7]]]/2
1、宏语句 跳转语句: GOTO 后跟数字,例如 GOTO 4 将跳转到N4 程序段(该程序段头必须写N4)。 格式:GOTO n; GOTO 1; GOTO #10;(目前华中V1.24.00;DMTG1.14.10;以上包括版本可用,DMTG1.14.10) 条件判断转移语句: 类型 | 华中系统 | FANUC系统 | 类型1 | IF [条件表达式]; … ENDIF 例: IF[#1 EQ 10]GOTO 2 ENDIF N2 G90G01x10Y10F1000 | IF [条件表达式] GOTO n 例: IF[#1 EQ 10] GOTO 2 N2 G90G01x10Y10F1000 | 类型2 | IF [条件表达式]; …… ELSE …… ENDIF 例:IF[#1 EQ #2] ELSE #3=0; ENDIF | IF [条件表达式] THEN 如:IF[#1 EQ #2] THEN #3=0; |
2、循环(WHILE语句) 数控驿站
| 华中系统 | FANUC系统 | 含义 | 在WHILE后指定条件表达式,当指定的条件表达式满足时,执行从WHILE到ENDW之间的程序。当指定条件表达式不满足时,退出WHILE循环,执行ENDW之后的程序行。 | 在WHILE 后指定一个条件表达式。当指定条件满足时,执行从DO 到END 之间的程序。否则,转到END 后的程序段。 | 调用格式 | WHILE [条件表达式] …… ENDW | WHILE [条件表达式] DO m (m=1,2,3) …… END m | 例子 | #1=0 #2=1 WHILE [#2 LE 20] #1=#1+#2 #2=#2+1 ENDW | #1=0 #2=1 WHILE [#2 LE 20] DO 1 #1=#1+#2 #2=#2+1 END1 |
3、 嵌套调用 对于IF语句或者WHILE语句而言,系统允许嵌套语句,但有一定的限制规则,具体如下: IF语句最多支持8层嵌套调用,大于8层系统将报错; WHILE语句最多支持8层嵌套调用,大于8层将报错; 系统支持IF语句与WHILE语句混合使用,但是必须满足IF-ENDIF与WHILE-ENDW的匹配关系。如下面这种调用方式,系统将报错。 华中与FANUC嵌套调用对比如下 华中系统 | FANUC系统 | 状态 | WHILE [ …] … WHILE [ …] … WHILE [ …] …… ENDW …… ENDW …… ENDW | WHILE [ …] DO 1 … WHILE [ …] DO 2 … WHILE [ …] DO 3 …… END3 …… END2 …… END1 | 正确 二者可兼容 | IF [条件表达式1] WHILE [条件表达式2] ENDIF ENDW | IF [条件表达式1] GOTO n WHILE [条件表达式2] DO 2 N n … END2 | 错误 转移语句不能进入循环内部 |
三、宏程序运算指令表 运算种类运算指令 含义 算术运算 #i = #i + #j 加法运算,#i 加#j #i = #i - #j 减法运算,#i 减#j #i = #i * #j 乘法运算,#i 乘#j #i = #i / #j 除法运算,#i 除#j 条件运算 #i EQ #j 等于判断(=) #i NE #j 不等于判断(≠) #i GT #j 大于判断(>) #i GE #j 大于等于判断(≥) #i LT #j 小于判断(<) #i LE #j 小于等于判断(≤) 逻辑运算 #i = #i & #j 与逻辑运算 #i = #i | #j 或逻辑运算 #i = ~#i 非逻辑运算 函数 #i= SIN[#i] 正弦(单位:弧度) #i=COS[#i] 余弦(单位:弧度) #i=TAN[#i] 正切(单位:弧度) #i=ATAN[#i ] 反正切 #i=ABS[#i] 绝对值 #i=INT[#i] 取整(向下取整) #i=SIGN[#i] 取符号 #i=SQRT[#i] 开方 #i=EXP[#i] 指数,以e(2.718)为底数的指数
四、华中系统宏变量表 变量
| 含义
| 读权限 | 写权限 | 断电保存 | 0-49 | 当前子程序局部变量(G65带参数的调用时#0-#25 依次对应字母A-Z) | 有 | 有 | 无 | 50-199 | (不建议使用) |
|
| 无 | 200-499 | 50个一组,分别为0层、1层、2层、3层、4层、5层子程序局部变量 | 有 | 有 | 无 | 500-999 | 用户自定义 | 有 | 有 | 有 | 1000-1008 | 机床当前位置 | 有 |
|
| 1100-1109 | G92零点 | 有 |
|
| 1030-1039 | 工件零点 | 有 |
|
| 1040-1048 | G54 | 有 | 有 | 有 | 1050-1058 | G55 | 有 | 有 | 有 | 1060-1068 | G56 | 有 | 有 | 有 | 1070-1078 | G57 | 有 | 有 | 有 | 1080-1088 | G58 | 有 | 有 | 有 | 1090-1098 | G59 | 有 | 有 | 有 | 40100-41180 | G54.X | 有 | 有 | 有 | 1150-1189 | G代码0-39组的模态 | 有 | 无 |
| 1340-1349 | 测量机床指令 | 有 | 无 |
| 1360-1369 | 测量机床实际 | 有 | 无 |
| 1380-1380 | 机床外部零点偏移 | 有 | 有 | 有 | 1190 | 用户输入 |
|
|
| 1191 | 用户输出 |
|
|
| 1220 | M3/4/5 |
|
|
| 1227 | 生效的半径补偿D号 | 有 | 无 |
| 1228 | 生效的长度补偿H号 | 有 | 无 |
| 3000-3001 | 时间与日期 | 有 | 无 |
| 54000-54999 | 用户自定义 | 有 | 有 | 有 | 70006 | 1号刀长度补偿值(70000-70199对应1号刀,70200-70399对应2号刀,以此类推,每把刀的占用200个数据) | 有 | 有 | 有 | 70011 | 1号刀半径补偿值 | 有 | 有 | 有 | 70029 | 1号刀长度磨损值 | 有 | 有 | 有 | 70034 | 1号刀半径磨损值 | 有 | 有 | 有 | 70107 | 1号刀刀具使用最大次数 | 有 | 无 | 无 | 70108 | 1号刀刀具使用预警次数 | 有 | 无 | 无 | 70109 | 1号刀刀具已使用次数 | 有 | 无 | 无 | 100000 | R寄存器 | 有 |
|
| 110000 | X寄存器 | 有 |
|
| 120000 | Y寄存器 | 有 |
|
| 130000 | 轴F寄存器 | 有 |
|
| 140000 | 通道F寄存器 | 有 |
|
| 150000 | 系统F寄存器 | 有 |
|
| 160000 | 轴G寄存器 | 有 |
|
| 170000 | 通道G寄存器 | 有 |
|
| 180000 | 系统G寄存器 | 有 |
|
| 190000 | B寄存器 | 有 |
|
|
|