加工中心与铣床的不同处,就是刀库,刀库的种类也是千差万别,但控制方式基本原理都是一样的,昨天去维修了一个802D系统的加工中心,虽然系统早已停产,但换刀程序思路和现在的换刀思路基本是一致的,问题就是换刀中间卡住了,所以要参看换刀程序,感觉小程序挺有代表性,就做了注释,发出来供坛友参阅;
%_N_CHANG_TOOL_SPF
;$PATH=/_N_CUS_DIR
PROC CHANG_TOOL SAVE DISPLOF SBLOF
;MD14510[15]刀盘刀位数
;MD14514[1]Z 轴准备位置
;MD14514[2]Z轴换刀位置
;MD14514[3]高速度
;MD14514[4]低速度
;MD14514[6]换刀位置误差值
; 由正常方式进入程序测试方式后第一次换刀
IF ((_TM[5]==0)AND($P_ISTEST==1)) GOTOF _SIMU1
; 程序测试方式下换刀
IF ((_TM[5]==1)AND($P_ISTEST==1)) GOTOF _SIMU2
; 由程序测试方式返回正常方式后第一次换刀
IF ((_TM[5]==1)AND($P_ISTEST==0)) GOTOF _E_SIM
_T_CHG:
M87;换刀开始
M86;刀库旋转到主轴刀号位
IF $P_TOOLP==$P_TOOLNO GOTOF _NOCHG1
IF $P_TOOLP>$MN_USER_DATA_INT[15] GOTOF _NOCHG2
IF $MN_USER_DATA_INT[15] ==0 GOTOF _E_PAR1
IF $MN_USER_DATA_FLOAT[1]==$MN_USER_DATA_FLOAT[2] GOTOF _E_PAR2
IF $MN_USER_DATA_FLOAT[3]==0 GOTOF _E_PAR3
IF $MN_USER_DATA_FLOAT[4]==0 GOTOF _E_PAR4
IF $MN_USER_DATA_FLOAT[6]==0 GOTOF _E_PAR5
G500 ;取消工件坐标系
D0 ;取消刀具参数
_TM[0]=1 ;取刀标志
IF ($P_TOOLP==0)AND($P_TOOLNO<>0) GOTOF _T_RET ;还刀
IF ($P_TOOLP<>0)AND($P_TOOLNO==0) GOTOF _T_GET ;取刀
IF ($P_TOOLP<>0)AND($P_TOOLNO<>0) GOTOF _T_EXC ;换刀
GOTOF _EOSBR
_T_EXC: ;换刀
_TM[0]=3 ;刀具交换标志
_T_RET: ;还刀
G90 G01
F=$MN_USER_DATA_FLOAT[3] ;高速度
G153 Z=$MN_USER_DATA_FLOAT[2]+0.01
M3S1100
M5
M39
M82 ;发出刀库伸出命令
M81 ;发出松刀命令
F= $MN_USER_DATA_FLOAT[4] ;低速度
G153 Z=$MN_USER_DATA_FLOAT[2]+0.01+30 ;Z 轴拉丁换刀位置
F=$MN_USER_DATA_FLOAT[3] ;高速度
G153 Z=$MN_USER_DATA_FLOAT[1]+0.01 ;Z 轴返回准备位置
IF _TM[0]==3 GOTOF _T_LOC ;如果是换刀, 则找刀并取刀
; 如果是只还刀, 则主轴紧刀, 刀库缩回, 还刀过程结束
M80 ;发出紧刀命令且等待命令应答
M83 ;发出刀库缩回命令且等待命令应答
STOPRE
IF $P_TOOLP==0 GOTOF _INI1
$TC_DP25[$P_TOOLP,1]=0
_INI1:
IF $P_TOOLNO==0 GOTOF _INI2
$TC_DP25[$P_TOOLNO,1]=$A_DBB[133]
_INI2:
T0 M206 ;主轴上无刀具, T0生效
M88 ;换刀结束
GOTOF _END ;>>>>>>>>>>>>>> 还刀结束返回 <<<<<<<<<<<<<<<<<<<<<<
_T_LOC:
M84 ;发出刀库定位命令
GOTOF _T_TAKE ;
_T_GET: ;取刀
G90 G01 ;
M84 ;发出刀库定位命令, 进入换刀准备位置,
F= $MN_USER_DATA_FLOAT[3] ;高速度
G153 Z=$MN_USER_DATA_FLOAT[1]+0.01
M3S1100
M5
STOPRE
M39
M82 ;发出刀库伸出命令且等待命令应答
STOPRE
M81 ;发出松刀命令且等待命令应答
_T_TAKE: ;
F= $MN_USER_DATA_FLOAT[3] ;高速度
G153 Z=$MN_USER_DATA_FLOAT[2]+0.01+30 ;Z 轴拉丁换刀位置
F= $MN_USER_DATA_FLOAT[4] ;低速度
G153 Z=$MN_USER_DATA_FLOAT[2]+0.01 ;Z 轴进入换刀位置
M80 ;发出紧刀命令且等待命令应答
M83 ;发出刀库缩回命令且等待命令应答
F= $MN_USER_DATA_FLOAT[3] ;高速度
G153 Z=$MN_USER_DATA_FLOAT[1]+0.01 ;Z 轴回到换刀准备位置
STOPRE
IF $P_TOOLP==0 GOTOF _INI11
$TC_DP25[$P_TOOLP,1]=0
_INI11:
IF $P_TOOLNO==0 GOTOF _INI21
$TC_DP25[$P_TOOLNO,1]=$A_DBB[133]
_INI21:
T=$P_TOOLP M206 ;激活刀补
M88 ;换刀结束
GOTOF _END
;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_E_SIM:
;SS 换刀控制过程: 程序测试处理
_TM[7]=$P_TOOLP
T=_TM[6] ;恢复主轴刀具号
M206 ;主轴刀具参数生效
T=_TM[7]
MSG("恢复主轴刀具号:"<<_TM[6]) ;
G04 F5 ;
_TM[5]=0 ;清除程序测试标记
_TM[6]=0
_TM[7]=0 ;
GOTOB _T_CHG ;
_SIMU1: ;
;仿真方式时,T功能生效, 刀具参数立即生效
_TM[5]=1 ;记录程序测试状态
_TM[6]=$P_TOOLNO ;记录主轴刀具号
_SIMU2: ;
T=$P_TOOLP ;
M206
GOTOF _END
;%% 故障信息显示 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
_NOCHG1:
MSG("### 没有换刀: 编程刀具等于主轴刀具")
G04 F3
GOTOF _EOSBR
_NOCHG2:
MSG("### 没有换刀: 编程刀号超过最大值. 循环启动继续或复位")
M00
GOTOF _EOSBR
_E_PAR1:
MSG("*** PLC 参数错: 刀盘刀位数 MD14510[15] 没有设定")
M00
GOTOF _EOSBR
_E_PAR2:
MSG("*** PLC 参数错: 换刀准备位置14514[1]等于换刀位置14514[2]");
M00
GOTOF _EOSBR
_E_PAR3:
MSG("*** PLC 参数错: 抓刀速度 MD14514[3] 等于 0")
M00
GOTOF _EOSBR
_E_PAR4:
MSG("*** PLC 参数错: 提刀速度 MD14514[4] 等于 0")
M00
GOTOF _EOSBR
_E_PAR5:
MSG("*** PLC 参数错: 换刀位置误差 MD14514[6] 等于 0")
M00
GOTOF _EOSBR
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
_END:
M18 ; 主轴恢复速度控制方式
S100M3
M5
_EOSBR:
MSG(" ")
M17 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>