华中系统与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寄存器 | 有 |
转载:数控e家,欢迎关注交流