2024年5月8日发(作者:费莫浩思)
FANUC伺服电机刀库
FANUC技术部:黄辉
一、综述:
使用伺服电机作为刀库电机,具有可控性强,定位准的特点。可根据要求来实现动作,
主要的动作分为以下两种:
1、 PMC轴控制:
使用伺服电机的PMC轴功能,完全靠PMC来实现换刀动作。从动作上来看,伺服
轴为PMC轴,而不是NC控制轴。编程较为复杂,对技术人员的要求较高。
2、 宏程序实现
使用宏程序实现换刀动作,电机的主要动作和时序安排完全靠NC程序来实现,PMC
只做辅助作用。伺服电机为NC控制轴。使用宏程序实现刀库动作简单易懂,可读性强。
对于斗笠式圆盘固定换刀刀库,宏程序实现的方法更为简单,以下进行介绍。
二、宏程序实现:
圆盘刀库电机为旋转轴设置,且为360度循环显示,要求NC设定参数如下:
1006#0=1,1006#1=0(旋转轴设定)
1008#0=1,1008#2=1,1260=360000(坐标360度循环显示)
宏程序实现时,有多种方法,且对于增量式编码器电机和绝对编码器电机,对于找刀
方式,在实际编程要求上不同。
电机编码器不同:
1、绝对型编码器电机:
由于电机坐标由电池进行保持,对于固定换刀刀库,也就是说每把刀在刀库上的位
置是固定,是有固定的坐标值的。所以在找刀时,NC只需要走到相应的机械坐标位置
就可以找到相应的刀位,并进行抓松刀操作。
2、增量式编码器电机:
由于电机坐标掉电丢失,故要求每次开机之后刀库电机进行回零操作才可以固定每
个刀位的具体位置。同样,回零完成之后,找刀时,NC只需要走到相应的机械坐标位
置就可以找到相应的刀位,并进行抓松刀操作。
找刀方式不同:
1、就近找刀:
使由于刀库电机为旋转轴,可以通过设定旋转轴参数进行就近旋转找刀操作。
设定参数:1008#1=0(就近旋转)
2、固定方向找刀:
对于间隙较大的机械,如果进行就近找刀可能导致刀位位置发生变化,故可采用
固定方形找刀的方式,设定参数如下:
1008#1=1(按指令值符号方向找刀)
三、示例:
以下示例一个固定方向找刀,且为增量编码器的圆盘斗笠刀库宏程序,刀库共8把刀,
且为等距离分布,即每45度一个刀位。
使用M6调用O9001号宏程序,指令格式为M6T****,需要设定参数6071=6。
宏变量解释如下:
#100:目标刀号输出地址,为非保持型公共变量,掉电丢失,可自由定义。
#4120:T代码输出变量地址,为系统变量。
#3000:报警信息设置地址。括号内为报警内容。
#500:主轴上刀具号存储地址,为保持型公共变量,掉电不丢失,可自由定义。
#504:X轴换刀位坐标值存储地址,为保持型公共变量,掉电不丢失。
#505:Z轴换刀位坐标值存储地址,为保持型公共变量,掉电不丢失。
#105:同#100
注1:以上为车床系统范例,指令格式为M6T****,T代码由四位代码指令,前两位为刀号,
后两位为刀补号。
注2:上述的编程格式为在A代码体系下的编程,即3401#6,#7=0。即上述编程中均为绝
对坐标指令。如果更改代码体系,必须对程序进行修改。
注3:如果手动松刀,请手动将#500的内容清0。
四、宏程序内容注释
O9001;
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N11 IF[#100GT0]GOTO15; 如果T代码刀号大于0,跳至N15执行,否则继续
N12 #3000=1(TOOL NUMBER IS 0); 承接N11,如果T代码小于0,则触发3001号报警
N15 IF[#100LT9]GOTO25; 如果刀号小于9,则跳至N25执行
N20 #3000=2(TOOL NOT FOUND); 承接N15,如果刀号大于等于9,触发3002报警
N25 IF[#500EQ#100]GOTO105; 如果主轴上刀号等于目标刀号,跳至N105执行
N26 M19; 主轴定向
N27 G53G0Z0; Z轴到达一安全位等待,此例中为Z0,可修改
N30 IF[#500EQ0]GOTO57; 如果主轴上无刀,跳至N57执行
N35 G53G00A[#500*45.000-45.000]; 刀库旋转至主轴刀号对应刀位
N40 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N45 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N46 M36; 还刀(将主轴上的刀还回刀库)
N55 G4X4.; 暂停4秒(可根据需要调整)
N56 G53G0Z-220.805; Z轴回到一安全位等待,可修改位置值
N57 M36; 松刀
N60 #105=FIX[#4120/100] 对#4120进行取整操作,得出刀号,赋值给#105
N61 IF[#105LT#500]GOTO110 如果目标刀号小于主轴上刀号,跳至N110执行
N65 G53G00A[#105*45.000-45.000] 刀库旋转至目标刀号位置
N70 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N71 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N72 M35; 抓刀(抓目标刀上主轴)
N75 G4X4.; 暂停4秒(可根据需要调整)
N80G53G00Z-220.805.; Z轴回一安全位(根据实际情况调整)
N85G53X-450.; X轴回一安全位(根据实际情况调整)
N90#500=FIX[#4120/100]; 更新主轴上刀号
N100M99; 换刀结束,返回主程序
N105#3000=3(TOOL IS ON THE SPINDLE);触发3003号报警
GOTO100 返回N100程序段执行
N110 G53G00A[#105*45.000-45.000+360.]; 由于单方向旋转,当目标刀号小时,加360度
GOTO70 跳至N70程序段执行
五、思路分解
对上例程序进行分解,以方便了解思路。
主要情况如下:
1、 主轴上无刀,指令T****;
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N26 M19; 主轴定向
N27 G53G0Z0; Z轴到达一安全位等待
N57 M36 松刀
N60 #105=FIX[#4120/100] 对#4120进行取整操作,得出刀号,赋值给#105
N70 G53G00X#504; X轴运动至抓刀位(需要预先调整测定)
N71 G53G00Z#505; Z轴运动至抓刀位(需要预先调整测定)
N72 M35; 抓刀(抓目标刀上主轴)
N75 G4X4.; 暂停4秒(可根据需要调整)
N80G53G00Z-220.805.; Z轴回一安全位(根据实际情况调整)
N85G53X-450.; X轴回一安全位(根据实际情况调整)
N90#500=FIX[#4120/100]; 更新主轴上刀号
N100M99; 换刀结束,返回主程序
2、 主轴上有刀,指令T****,且指令(目标)刀号大于主轴上刀号:
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N26 M19; 主轴定向
N27 G53G0Z0; Z轴到达一安全位等待
N35 G53G00A[#500*45.000-45.000]; 刀库旋转至主轴刀号对应刀位
N40 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N45 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N46 M36; 还刀(将主轴上的刀还回刀库)
N55 G4X4.; 暂停4秒(可根据需要调整)
N56 G53G0Z-220.805; Z轴回到一安全位等待,此例中为Z0,可修改
N60 #105=FIX[#4120/100] 对#4120进行取整操作,得出刀号,赋值给#105
N70 G53G00X#504; X轴运动至抓刀位(需要预先调整测定)
N71 G53G00Z#505; Z轴运动至抓刀位(需要预先调整测定)
N72 M35; 抓刀(抓目标刀上主轴)
N75 G4X4.; 暂停4秒(可根据需要调整)
N80G53G00Z-220.805.; Z轴回一安全位(根据实际情况调整)
N85G53X-450.; X轴回一安全位(根据实际情况调整)
N90#500=FIX[#4120/100]; 更新主轴上刀号
N100M99; 换刀结束,返回主程序
3、 主轴上有刀,指令T****,且指令(目标)刀号小于主轴上刀号:
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N1 M19; 主轴定向
N5 G53G0Z0; Z轴到达一安全位等待
N35 G53G00A[#500*45.000-45.000]; 刀库旋转至主轴刀号对应刀位
N40 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N45 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N46 M36; 还刀(将主轴上的刀还回刀库)
N55 G4X4.; 暂停4秒(可根据需要调整)
N56 G53G0Z-220.805; Z轴回到一安全位等待,此例中为Z0,可修改
N60 #105=FIX[#4120/100] 对#4120进行取整操作,得出刀号,赋值给#105
N110 G53G00A[#105*45.000-45.000+360.];单方向旋转,当目标刀号小时,加360度
N70 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N71 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N72 M35; 抓刀(抓目标刀上主轴)
N75 G4X4.; 暂停4秒(可根据需要调整)
N80G53G00Z-220.805; Z轴回一安全位(根据实际情况调整)
N85G53X-450.; X轴回一安全位(根据实际情况调整)
N90#500=FIX[#4120/100]; 更新主轴上刀号
N100M99; 换刀结束,返回主程序
4、 主轴上有刀,指令T****,且指令(目标)刀号等于主轴上刀号:
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N105#3000=3(TOOL IS ON THE SPINDLE);触发3003号报警
N100M99; 换刀结束,返回主程序
六:结束语
对于上述范例,考虑了较为简单的情况,且要求每次开机后必须进行刀库回零,否则
容易出现刀位不对的现象,如果要求每次开机后不回零而直接换刀,则必须对程序进行修
改,或者更改为绝对值编码器电机。
2024年5月8日发(作者:费莫浩思)
FANUC伺服电机刀库
FANUC技术部:黄辉
一、综述:
使用伺服电机作为刀库电机,具有可控性强,定位准的特点。可根据要求来实现动作,
主要的动作分为以下两种:
1、 PMC轴控制:
使用伺服电机的PMC轴功能,完全靠PMC来实现换刀动作。从动作上来看,伺服
轴为PMC轴,而不是NC控制轴。编程较为复杂,对技术人员的要求较高。
2、 宏程序实现
使用宏程序实现换刀动作,电机的主要动作和时序安排完全靠NC程序来实现,PMC
只做辅助作用。伺服电机为NC控制轴。使用宏程序实现刀库动作简单易懂,可读性强。
对于斗笠式圆盘固定换刀刀库,宏程序实现的方法更为简单,以下进行介绍。
二、宏程序实现:
圆盘刀库电机为旋转轴设置,且为360度循环显示,要求NC设定参数如下:
1006#0=1,1006#1=0(旋转轴设定)
1008#0=1,1008#2=1,1260=360000(坐标360度循环显示)
宏程序实现时,有多种方法,且对于增量式编码器电机和绝对编码器电机,对于找刀
方式,在实际编程要求上不同。
电机编码器不同:
1、绝对型编码器电机:
由于电机坐标由电池进行保持,对于固定换刀刀库,也就是说每把刀在刀库上的位
置是固定,是有固定的坐标值的。所以在找刀时,NC只需要走到相应的机械坐标位置
就可以找到相应的刀位,并进行抓松刀操作。
2、增量式编码器电机:
由于电机坐标掉电丢失,故要求每次开机之后刀库电机进行回零操作才可以固定每
个刀位的具体位置。同样,回零完成之后,找刀时,NC只需要走到相应的机械坐标位
置就可以找到相应的刀位,并进行抓松刀操作。
找刀方式不同:
1、就近找刀:
使由于刀库电机为旋转轴,可以通过设定旋转轴参数进行就近旋转找刀操作。
设定参数:1008#1=0(就近旋转)
2、固定方向找刀:
对于间隙较大的机械,如果进行就近找刀可能导致刀位位置发生变化,故可采用
固定方形找刀的方式,设定参数如下:
1008#1=1(按指令值符号方向找刀)
三、示例:
以下示例一个固定方向找刀,且为增量编码器的圆盘斗笠刀库宏程序,刀库共8把刀,
且为等距离分布,即每45度一个刀位。
使用M6调用O9001号宏程序,指令格式为M6T****,需要设定参数6071=6。
宏变量解释如下:
#100:目标刀号输出地址,为非保持型公共变量,掉电丢失,可自由定义。
#4120:T代码输出变量地址,为系统变量。
#3000:报警信息设置地址。括号内为报警内容。
#500:主轴上刀具号存储地址,为保持型公共变量,掉电不丢失,可自由定义。
#504:X轴换刀位坐标值存储地址,为保持型公共变量,掉电不丢失。
#505:Z轴换刀位坐标值存储地址,为保持型公共变量,掉电不丢失。
#105:同#100
注1:以上为车床系统范例,指令格式为M6T****,T代码由四位代码指令,前两位为刀号,
后两位为刀补号。
注2:上述的编程格式为在A代码体系下的编程,即3401#6,#7=0。即上述编程中均为绝
对坐标指令。如果更改代码体系,必须对程序进行修改。
注3:如果手动松刀,请手动将#500的内容清0。
四、宏程序内容注释
O9001;
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N11 IF[#100GT0]GOTO15; 如果T代码刀号大于0,跳至N15执行,否则继续
N12 #3000=1(TOOL NUMBER IS 0); 承接N11,如果T代码小于0,则触发3001号报警
N15 IF[#100LT9]GOTO25; 如果刀号小于9,则跳至N25执行
N20 #3000=2(TOOL NOT FOUND); 承接N15,如果刀号大于等于9,触发3002报警
N25 IF[#500EQ#100]GOTO105; 如果主轴上刀号等于目标刀号,跳至N105执行
N26 M19; 主轴定向
N27 G53G0Z0; Z轴到达一安全位等待,此例中为Z0,可修改
N30 IF[#500EQ0]GOTO57; 如果主轴上无刀,跳至N57执行
N35 G53G00A[#500*45.000-45.000]; 刀库旋转至主轴刀号对应刀位
N40 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N45 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N46 M36; 还刀(将主轴上的刀还回刀库)
N55 G4X4.; 暂停4秒(可根据需要调整)
N56 G53G0Z-220.805; Z轴回到一安全位等待,可修改位置值
N57 M36; 松刀
N60 #105=FIX[#4120/100] 对#4120进行取整操作,得出刀号,赋值给#105
N61 IF[#105LT#500]GOTO110 如果目标刀号小于主轴上刀号,跳至N110执行
N65 G53G00A[#105*45.000-45.000] 刀库旋转至目标刀号位置
N70 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N71 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N72 M35; 抓刀(抓目标刀上主轴)
N75 G4X4.; 暂停4秒(可根据需要调整)
N80G53G00Z-220.805.; Z轴回一安全位(根据实际情况调整)
N85G53X-450.; X轴回一安全位(根据实际情况调整)
N90#500=FIX[#4120/100]; 更新主轴上刀号
N100M99; 换刀结束,返回主程序
N105#3000=3(TOOL IS ON THE SPINDLE);触发3003号报警
GOTO100 返回N100程序段执行
N110 G53G00A[#105*45.000-45.000+360.]; 由于单方向旋转,当目标刀号小时,加360度
GOTO70 跳至N70程序段执行
五、思路分解
对上例程序进行分解,以方便了解思路。
主要情况如下:
1、 主轴上无刀,指令T****;
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N26 M19; 主轴定向
N27 G53G0Z0; Z轴到达一安全位等待
N57 M36 松刀
N60 #105=FIX[#4120/100] 对#4120进行取整操作,得出刀号,赋值给#105
N70 G53G00X#504; X轴运动至抓刀位(需要预先调整测定)
N71 G53G00Z#505; Z轴运动至抓刀位(需要预先调整测定)
N72 M35; 抓刀(抓目标刀上主轴)
N75 G4X4.; 暂停4秒(可根据需要调整)
N80G53G00Z-220.805.; Z轴回一安全位(根据实际情况调整)
N85G53X-450.; X轴回一安全位(根据实际情况调整)
N90#500=FIX[#4120/100]; 更新主轴上刀号
N100M99; 换刀结束,返回主程序
2、 主轴上有刀,指令T****,且指令(目标)刀号大于主轴上刀号:
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N26 M19; 主轴定向
N27 G53G0Z0; Z轴到达一安全位等待
N35 G53G00A[#500*45.000-45.000]; 刀库旋转至主轴刀号对应刀位
N40 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N45 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N46 M36; 还刀(将主轴上的刀还回刀库)
N55 G4X4.; 暂停4秒(可根据需要调整)
N56 G53G0Z-220.805; Z轴回到一安全位等待,此例中为Z0,可修改
N60 #105=FIX[#4120/100] 对#4120进行取整操作,得出刀号,赋值给#105
N70 G53G00X#504; X轴运动至抓刀位(需要预先调整测定)
N71 G53G00Z#505; Z轴运动至抓刀位(需要预先调整测定)
N72 M35; 抓刀(抓目标刀上主轴)
N75 G4X4.; 暂停4秒(可根据需要调整)
N80G53G00Z-220.805.; Z轴回一安全位(根据实际情况调整)
N85G53X-450.; X轴回一安全位(根据实际情况调整)
N90#500=FIX[#4120/100]; 更新主轴上刀号
N100M99; 换刀结束,返回主程序
3、 主轴上有刀,指令T****,且指令(目标)刀号小于主轴上刀号:
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N1 M19; 主轴定向
N5 G53G0Z0; Z轴到达一安全位等待
N35 G53G00A[#500*45.000-45.000]; 刀库旋转至主轴刀号对应刀位
N40 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N45 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N46 M36; 还刀(将主轴上的刀还回刀库)
N55 G4X4.; 暂停4秒(可根据需要调整)
N56 G53G0Z-220.805; Z轴回到一安全位等待,此例中为Z0,可修改
N60 #105=FIX[#4120/100] 对#4120进行取整操作,得出刀号,赋值给#105
N110 G53G00A[#105*45.000-45.000+360.];单方向旋转,当目标刀号小时,加360度
N70 G53G00X#504; X轴运动至还刀位(需要预先调整测定)
N71 G53G00Z#505; Z轴运动至还刀位(需要预先调整测定)
N72 M35; 抓刀(抓目标刀上主轴)
N75 G4X4.; 暂停4秒(可根据需要调整)
N80G53G00Z-220.805; Z轴回一安全位(根据实际情况调整)
N85G53X-450.; X轴回一安全位(根据实际情况调整)
N90#500=FIX[#4120/100]; 更新主轴上刀号
N100M99; 换刀结束,返回主程序
4、 主轴上有刀,指令T****,且指令(目标)刀号等于主轴上刀号:
N10 #100=FIX[#4120/100]; 对#4120进行取整操作,得出刀号,赋值给#100
N105#3000=3(TOOL IS ON THE SPINDLE);触发3003号报警
N100M99; 换刀结束,返回主程序
六:结束语
对于上述范例,考虑了较为简单的情况,且要求每次开机后必须进行刀库回零,否则
容易出现刀位不对的现象,如果要求每次开机后不回零而直接换刀,则必须对程序进行修
改,或者更改为绝对值编码器电机。