FANUC宏程序编程教程中磊教育
运算符:
运算符由2个字母组成,用于两个值的比较,以决定它们是相等还是一个值小于或大于另一个值。注意,不能使用不等号
运算符 |
含义 |
EQ |
等于(=) |
NE |
不等于 |
GT |
大于 |
GE |
大于或等于 |
LT |
小于 |
LE |
小于或等于 |
示例程序 :
下面的程序计算数值1~10的总和
O9500;#1=0;………………………………….存储和的变量初值
#2=1;………………………………….被加数变量的初值
N1 IF[#2GT 10]GOTO 2;…………….当被加数大于10时转移到N2
#1=#1+#2;…………………………….计算和
#2=#2+#1;…………………………….下一个被加数
GOTO 1;………………………………转移到N1
N2 M30;................................................程序结束
算术和逻辑运算:
功能 |
格式 |
备注 |
定义 |
#i=#j: |
|
加法 |
#i=#j+#k |
|
减法 |
#i=#j-#k |
|
乘法 |
#i=#j*#k |
|
除法 |
#i=#j/#k |
|
正弦 |
#i=SIN[#j]: |
角度以度指定090度30分表示为90.5度 |
反正弦 |
#i=ASIN[#j]: |
|
余弦 |
#i=COS[#j]: |
|
反余弦 |
#i=ACOS[#j]: |
|
正切 |
#i=TAN[#j]: |
|
反正切 |
#i=ATAN[#j]: |
|
平方根 |
#i=SQRT[#j]: |
|
绝对值 |
#i=ABS[#j]: |
|
舍入 |
#i=ROUND[#j]: |
|
上取整 |
#i=FIX[#j]: |
|
下取整 |
#i=FUP[#j]: |
|
自然数对数 |
#i=LN[#j]: |
|
指数函数 |
#i=EXP[#j]: |
|
或 |
#i=#jOR#k: |
逻辑运算一位一位地按二进制数执行 |
异或 |
#i=#jXOR#k: |
|
与 |
#i=#jAND#k: |
|
从BCD转为BIN |
#i=BCD#j; |
用于与PMC的信号交换 |
从BIN转为BCD |
#i=BCD#j; |
角度单位:
SIN、ASIN、COS、ACOS、TAN和ATAN的角度单位是度
ARCSIN #i=ASIN[#j]:
●取值范围如下:当参数(N0.6004¥0)NAT位设为0时,270~90度;当参数(N0.6004¥0)NAT位设为1时,-90~90度。
● 当#j超过-1到1的范围时,发出P/S报警N0.111。
● 常数可替代变量#j。
ARCCOS #i=ACOS[#j];
● 取值范围从180~0度。
● 当#j超过-1到1的范围时,发出P/S报警N0.111。
● 常数可替代变量#j。
ARCTAN #i=ATAN[#j];
● 指定两边的长度,并用斜杠(/)分开
● 取值范围如下:当参数(N0.6004¥0)NAT位设为0时,0~360度[例如:当指定#i=ATAN[-1]/[-1];时,#1=225度]。当参数(N0.6004¥0)NAT位设为1时,-180~180度[例如:当指定#i=ATAN[-1]/[-1];时,#1=-135度]
● 常数可替代变量#j。
自然对数#i=LN[#j];
● 注意,相对误差可能大于10-8。
● 当反对数(#j)为0或小于0时,发出报警N0.111。
● 常数可替代变量#j。
指数函数#i=EXP[#j]:
● 注意,相对误差可能大于10-8
● 当运算结果超过3.65×1047 (j大约是110)时,出现溢出报警N0.111
● 常数可替代变量#j。
上取整下取整:
CNC处理数值运算时,若操作后产生整数绝对值大于原数的绝对值时为上取整;小于为下取整。例如:
假设#1=1.2,#2=-1.2。当执行#3=FUP[#1]时,2.0赋给#3;当执行#3=FIX[#1]时1.0赋给#3;当执行#3=FUP[#2]时,-2.0赋给#3;当执行#3=FIX[#2]时,-1.0赋给#3。
宏程序语句:包含算术或逻辑运算(=)的程序;包含控制语句(例如,用GOTO,DO,END)的程序;包含宏程序调用指令(例如,用G65,G66,G67或其它G代码,M代码调用宏程序)的程序段;除宏程序以外任何程序段都为NC语句。
与NC语句的不同:
即使置于单段程序运行方式,机床也不停止。但是,当参数N0.6000#5SBM设定位、为1时,在单段程序方式中,机床停止。在刀具半径补偿方式中宏程序语句段不做为移动程序段处理
与宏程序语句相同性质的NC语句:
含有子程序调用指令(例如,用M98或其它M代码或用T代码调用子程序)但没有除O,N,P或L地址之外的其它地址指令的NC语句,其性质与宏程序语句相同;不包含除O,N,P或L以外的指令地址的程序段其性质与宏程序语句相同。
无限循环:
当指定DO而没有指定WHILE语句时,产生从DO到END的无限循环。
宏程序调用(G65)不同于子程序调用(G98),如下所述:
● 用G65,可以指定自变量(数据传送到宏程序)。M98没有该功能。
● 当M98程序段包含另一个NC指令(例如。G01.X100.0M98PP)时,在指令执行之后调用子程序。相反,G65无条件的调用子程序。
● M98程序段包含另一个NC指令(例如,G01X100.0M98PP)时在单程序方式中,机床停止。相反,G65机床不停止。
● 用G65,改变局部变量的级别。用M98,不改变局部变量的级别。
G65P-L -(自变量指定);P:要调用的程序;L:重复次数;自变量:数据传递到宏程序
自变量指定Ⅰ
地址 |
变量号 |
|
地址 |
变量号 |
|
地址 |
变量号 |
A |
#1 |
I |
#4 |
T |
#20 |
||
B |
#2 |
J |
#5 |
U |
#21 |
||
C |
#3 |
K |
#6 |
V |
#22 |
||
D |
#7 |
M |
#13 |
W |
#23 |
||
E |
#8 |
Q |
#17 |
X |
#24 |
||
F |
#9 |
R |
#18 |
Y |
#25 |
||
H |
#11 |
S |
#19 |
Z |
#26 |
||
地址G,L,N,O和P不能在自变量中使用 不需要指定的地址可以省,对于省的地址的局部变量为空 地址不需要按字母顺序指定。但应符合字地址的格式。I,J和K需要按字母的顺序指定 |
自变量指定Ⅱ
A |
#1 |
|
K3 |
#12 |
|
J7 |
#23 |
B |
#2 |
I4 |
#13 |
K7 |
#24 |
||
C |
#3 |
J4 |
#14 |
I8 |
#25 |
||
I1 |
#4 |
K4 |
#15 |
J8 |
#26 |
||
J1 |
#5 |
I5 |
#16 |
K8 |
#27 |
||
K1 |
#6 |
J5 |
#17 |
I9 |
#28 |
||
I2 |
#7 |
K5 |
#18 |
J9 |
#29 |
||
J2 |
#8 |
I6 |
#19 |
K9 |
#30 |
||
K2 |
#9 |
J6 |
#20 |
I10 |
#31 |
||
I3 |
#10 |
K6 |
#21 |
J10 |
#32 |
||
J3 |
#11 |
I7 |
#22 |
K10 |
#33 |
I,J,K的下标用于确定自变量指定的顺序,在实际编程中不写。
G65P-X-Y-Z-R-F-I-A-B-H-:
X:圆心的X坐标(绝对值或增量值指定)(#24)
Y:圆心的Y坐标(绝对值或增量值指定)(#25)
Z:孔深(#26);R:趋近点坐标(#18)
F:切削进给速度(#9);I:圆半径(#4)
A:第一孔的角度(#1)
B:增量角(指定负值时为逆时针)(#2)
H:孔数(#11)
G90G92X0Y0Z100.0;
G65P9100X100Y50R30Z-50F500I100A0B45H5;
M30
被调用的宏程序:O9100;
#3=#4003;........................... 储存03组的G代码
G81Z#26R#18F#9K0;........(注)钻孔循环;注:也可以使用L0
IF[#3EQ90]GOTO 1;..........在G90方式转移到N1
#24=#5001+#24;.................计算圆心的X坐标
#25=#5002+#25;.................计算圆心的Y坐标
N1 WHILE[#11GT0]DO 1.....直到剩余孔数为0
#5=#24+#4*COS[#1];..........计算X轴上的孔位
#6=#25+#4*SIN[+1];...........计算Y轴上的孔位
G90X#5Y#6;........................移动到坐标位置之后执行钻孔
#1=#1+#2;.............................更新角度
#11=#11-1;...........................孔数-1
END 1;
G#3G80;...............................返回原始状态G代码
M99;
变量的含义:#3:储存03组的G代码;#5:下个孔的X坐标:#6:下个孔的Y坐标
摸态调用G66
G66P-L-:
P:要调用的程序;L:重复次数;自变量:数据传递到宏程序
自变量指定Ⅰ
变量类型:
变量号 |
变量类型 |
功能 |
#0 |
空变量 |
该变量总是空,没有值能赋给该变量 |
#1~#33 |
局部变量 |
局部变量只能用于宏程序中存在存储数据量。例如,运算结果。当断电时,局部变量被初始化为空。调用宏程序时,自变量对局不变量赋值 |
#100~#199;#500~#999 |
公共变量 |
公共变量在不同宏程序中的意义相同。当断电时,变量#100—#199初始化为空;当断电时,变量#500—#999的数据保存,即使断电也不丢失 |
#1000— |
系统变量 |
系统变量用于读和写CNC的各种数据,例如,刀具的当前位置和补偿值 |
局部变量和公共变量可以为0值或下面范围中的值:-1047到-10-29或10-29到1047
宏程序报警的系统变量:
变量号 |
功能 |
#3000 |
当变量#3000的值为0~200时,CNC停止运行且报警。 可在表达式后指定不超过26个字符的报警信息。 LCD屏幕上显示报警号和报警信息,其中报警号为变量#3000的值加上3000 |
接口信号的系统变量:(参数N0.6001#0(MIF)=0时)
变量号 |
功能 |
#1000—#1015#1032 |
把16位信号从PMC送到用户宏程序,变量#1000到#1035用于按位读取信号,变量#1032,用于一次读取16位信号 |
#1100—#1115#1132 |
把32位信号从用户宏程序送到PMC。变量#1100到#1135用于按位写信号。变量#1032用于一次读取16位信号 |
#1133 |
变量#1133用于从用户宏程序一次写一个32位信号到PMC。注意,#1133的值为-99999999到+99999999 |
(参数N0.6001#0(MIF)=1时)
变量号 |
功能 |
#1000~#1301 |
把32位信号从PMC送到用户宏程序,变量#1000到#1031用于按位读取信号 |
#1100—#1131 |
把32位信号从用户宏程序送到PMC。变量#1100到#1131用于按位写信号 |
#1032—#1035 |
把32位信号从PMC统一输出到用户宏程序的变量。只能在-99999999~+99999999的范围内输入 |
#1132—#1135 |
把32位信号统一写入到用户宏程序的变量。只能在-99999999~+99999999的范围内指定 |
自动运行控制(#3003)
#3003 |
单程序段 |
辅助功能的完成 |
0 |
有效 |
等待 |
1 |
无效 |
等待 |
2 |
有效 |
不等待 |
3 |
无效 |
不等待 |
当电源接通时,该变量的值为0。当单程序段停止无效时,即使单程序段开关设为ON,也不执行程序段停止。当指定不等待辅助功能(M,S和T功能)完成时,在辅助功能完成之前,程序即执行到下一程序段。而且分配完成信号DEN不输出。
位置信息系统变量
变量号 |
位置信息 |
坐标系 |
刀具补偿值 |
运行时的读操作 |
#5001—#5003 |
程序段终止 |
工件坐标系 |
不包含 |
可能 |
#5021—#5023 |
当前位置 |
机床坐标系 |
包含 |
不可能 |
#5041—#5043 |
当前位置 |
工件坐标系 |
||
#5061—#5063 |
跳转信息位置 |
可能 |
||
#5081—#5083 |
刀具长度补偿值 |
|
|
不可能 |
#5101—#5103 |
伺服位置误差 |
|
|
第1位代表轴号(1~3);
变量#5081~#5083存储的刀具长度补偿值是当前的执行值,不是后面程序的处理值;
在G31(跳转功能)程序段中跳转信号接通时的刀具位置储存在变量#5061到#5064中。当G31程序段中的跳转信号未接通时,这些变量中储存指定程序段的终点值。
移动期间不能读是指由于缓冲(预读)功能的原因,不能读取期望值。
G65P9110X-Y-Z-R-F-L-;
X:圆心的X坐标(绝对值指定)(#24)
Y:圆心的Y坐标(绝对值指定)(#25)
Z:孔深(#26)(绝对值指定);
R:趋近点坐标(绝对值指定)(#18)
F:切削进给速度(#9);
L:重复次数
使用系统变量时的注意事项
含义 |
读写 |
变量号 |
注(未指定禁止缓冲的M代码或G53程序段时) |
接口信号 |
读 |
#100—#1015#1032 |
宏语句读入缓冲后读入数据 |
写 |
#1100—#1115#1132 |
宏语句读入缓冲后写入数据 |
|
刀具补偿值 |
写 |
#10001- |
宏语句读入缓冲后写入数据 |
宏报警 |
写 |
#3000 |
在宏语句前最多两个程序段处产生报警 |
送出信息的同时程序停止 |
写 |
#3006 |
在宏语句前最多两个程序段处产生停止 |
时间信息 |
读写 |
#3001,#3002 |
宏语句读入缓冲后读写入数据 |
读 |
#3011,#3012 |
宏语句读入缓冲后读入数据 |
|
自动运行控制 |
写 |
#3003,#3004 |
在宏语句前最多两个程序段处设定数据 |
设定 |
写 |
#3005 |
宏语句读入缓冲后写入数据 |
镜像 |
读 |
#3007 |
宏语句读入缓冲后读入数据 |
当前选择追加工件坐标系 |
读 |
#4130(P)#4014(G54-G59) |
在宏语句前最多三个程序段处读入数据 |
当前位置(机床坐标系 |
读 |
#5021-#5023 |
读入移动中的不确定位置 |
当前位置(工件坐标系) |
读 |
#5021-#5023 |
读入移动中的不确定位置 |
刀长偏置 |
读 |
#5021-#5023 |
读入当前程序段的偏置量 |
位置偏差 |
读 |
#5021-#5023 |
读入移动中的不正确偏差 |
工件零点偏置值 |
写 |
#5021-#5023#5021-#5023 |
宏语句读入缓冲后写入数据 |
非常感谢您对我们的网站感兴趣并访问。在您使用本网站之前,请您仔细阅读本声明的所有条款。
1、本站部份资料来自于网络,资源仅供参考,如有侵犯了您的权益请立即与我们联系!我们将及时撤除。
2、本站不保证网站内容的准确性、安全性和完整性;请自行检查是否带有病毒,同时本站也不承担用户因使用这些资源对自己和他人造成任何形式的损失或伤害。
3、本声明未涉及的问题参见国家有关法律法规,当本声明与国家法律法规冲突时,以国家法律法规为准。
4、本站内容均来源自网络,素材、图片版权属于原作者,本站转载素材仅供大家欣赏和分享,切勿做为商业目的使用。
如果侵害了您的合法权益,请您及时与我们,我们会在第一时间删除相关内容!
5、我们尊重版权,也致力于保护版权,如果你是原作者请联系本站编辑(838676806&qq.com(&修改为@)),我们将为你的文章注名,感谢你的分享!
6、互联网精神:分享、交流、进步!