本使用手册及样例包目录内所包含文档、PLC程序、机床可执行程序(MPF、SPF、…)、电气图,可能与用户实际使用不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。本例程的作者和拥有者对于该例程的功能性和兼容性不负任何责任,使用该例程的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。
对于在使用中发生的人员、财产损失本公司不承担任何责任,由使用者自行承担风险。
以上声明内容的最终解释权归西门子(中国)有限公司所有,后续内容更新不做另行通知。
目前很多机床特别是龙门机床,客户现场需要的刀具较多较大,甚至有些刀具根本不能放在刀库中,只能作为库外刀处理,本文主要介绍828D龙门机床中库外刀的处理方式之一,具体的要求如下:
• 在已有32位刀库外还需有库外刀具加入序列。
• 不希望用刀名或者刀长等条件来判断是否属于库外刀具,希望建在库外的刀具就用自动执行库外换刀动作, 库内刀具自动执行库内换刀动作。
• 库外刀会在整套循环过程中使用,程序可以暂停换刀,但不能复位程序。
硬件 | ||||
工艺 | PPU24x.x | PPU26x.x | PPU28x.x | |
铣床 | ● | ● | ● | |
• 库内换库内:按正常L6执行即可
• 库内换库外:先还库内刀再抓库外刀
• 库外换库外:先还库外刀再抓库外刀
• 库外换库内:先还库外再抓库内
• 空刀抓库内:按正常L6执行即可
• 空刀抓库外:直接抓库外
• 库外只还刀:直接到卸刀点卸库外
• 库内换库外:走到库内换刀点接通正常PLC逻辑,辅助机构动作并响应即可
• 库内换库外:先执行T0走到库内换刀点执行正常的PLC逻辑,辅助机构动作并响应,执行卸刀,在走到库外换刀点屏蔽PLC辅助机构动作,执行T=_NewTool,并人为响应DB4200.dbx0.0后,完成换刀。
• 库外换库外:屏蔽PLC辅助动作,走到库外换刀点,执行T=T=_NewTool, 并人为响应DB4200.dbx0.0后,完成换刀。
• 库外换库内:走到库外换刀点,屏蔽PLC辅助动作,执行T0并响应,走到库内换刀点,打开PLC屏蔽开关,执行T=_NewTool,自动换刀并响应。(此位置需注意主轴上库外刀执行T0直接换刀需跳过红色部分,否则系统会回到库内位置在执行一遍还刀动作)
• 空刀抓库内:PLC屏蔽开关需打开,在执行政策抓刀
• 空刀抓库外:屏蔽PLC动作,走到库外换刀点,执行T=_NewTool, 并人为响应DB4200.dbx0.0后,完成抓刀。
• 库外只还刀:屏蔽PLC动作,走到库外换刀点,执行T=0, 并人为响应DB4200.dbx0.0后,完成还刀。
• 系统在执行跟库外刀相关的还/抓刀是DB4300.DBX1.5都会接通,因此库内换库外时不能用此简单方法去判断,否则库内换库外时系统会把PLC屏蔽掉,直接要求人为响应,没有换刀动作。
• 执行库外换刀时,假设T111为库外刀,执行了T111M06后,也必须执行M206否则人为触发DB4200.DBX0.0是不能响应的,这也是为什么不能用DB4300.DBX1.5来屏蔽PLC的原因。
• 担心手误随意按到手动刀具响应开关,在手动响应加了保护条件:待轴走到库外换刀点执行M00后,方能手动响应,其他时段响应无效。


• N80 IF ((_ACT==0) AND($A_DBD[40]==1)) GOTOF ZZKW ;直接抓库外刀
• N90 IF ((_ACT==0) AND($A_DBD[40]==0))GOTOF ZZKN ;直接抓库内刀
• N100IF((_ACT<>0)AND($A_MYMN[_ACT]==0)AND($A_MYMLN[_ACT]==0)AND($A_DBD[40]==1))GOTOF DHD ;当前刀是库外刀换库外刀
• N110 IF((_ACT<>0) AND ($A_MYMN[_ACT]<>0) AND ($A_MYMLN[_ACT]<>0) AND ($A_DBD[40]==1))GOTOF XHD;当前刀是库内刀换库外刀
• N120 IF((_ACT<>0) AND ($A_MYMN[_ACT]==0) AND ($A_MYMLN[_ACT]==0) AND ($A_DBD[40]==0))GOTOF DHX;当前刀是库外换库内刀
• N130IF((_ACT<>0)AND($A_MYMLN[_ACT]<>0)AND($A_MYMN[_ACT]<>0)AND($A_DBD[40]==0))GOTOF ZZKN ;当前是库内刀换库内刀

;------------------------
; Version: V01
; Date: 2011.01.12
; last change: 2020.11.19----Fe
; AUTOR: KONGLINGJUN / SLC MC APC
; CUSTOMER: KEMAIDE
;------------------------
;N10 PROC L6 SBLOF DISPLOF SAVE
N10 DEF INT _ACT,_NWT ; Integer Active Tool Data
N20 STOPRE
N30 GETSELT(_NWT) ; Order Tool Number
N40 _ACT=$TC_MPP6[9998,1] ; Current Tool Number
N50 ;IF ($TC_MPP6[9998,1]>10000) OR ($P_TOOLR>125) GOTOF INFO3
N60 IF(($P_SEARCH<>0) OR ($P_SIM==1) OR ($P_ISTEST==1)) GOTOF END1
;执行/不执行空运行状态执行换刀动作
N70 ;IF(($P_SEARCH<>0) OR ($P_SIM==1) OR ($P_ISTEST==1) OR ($P_DRYRUN==1)) GOTOF END1
N80 IF ((_ACT==0) AND($A_DBD[40]==1)) GOTOF ZZKW ;直接抓库外刀
N90 IF ((_ACT==0) AND($A_DBD[40]==0))GOTOF ZZKN ;直接抓库内刀
N100 IF ((_ACT<>0) AND ($A_MYMN[_ACT]==0) AND ($A_MYMLN[_ACT]==0)AND($A_DBD[40]==1))GOTOF DHD ;当前刀是大刀换大刀
N110 IF ((_ACT<>0) AND ($A_MYMN[_ACT]<>0) AND ($A_MYMLN[_ACT]<>0) AND ($A_DBD[40]==1))GOTOF XHD;当前刀是小刀换大刀
;N130 IF ((_ACT<>0) AND ($A_MYMN[_ACT]==0) AND ($A_MYMLN[_ACT]==0) AND ($A_DBD[40]==0))GOTOF DHX
N120 IF ((_ACT<>0) AND ($A_MYMN[_ACT]==0) AND ($A_MYMLN[_ACT]==0) AND ($A_DBD[40]==0))GOTOF DHX;
;当前刀是大刀换小刀
N130 IF ((_ACT<>0) AND ($A_MYMLN[_ACT]<>0) AND ($A_MYMN[_ACT]<>0) AND($A_DBD[40]==0))GOTOF ZZKN ;当前是小刀换小刀
N140 ZZKW:
N150 D0
N160 M5
N170 SPOSA=__ATC_UDG_V_S
N180 G0 G153 Z-200
N190 G0 G153 Y-3400
N200 G0 G153 Z-600
N210 $A_OUT[1]=1
N220 T=$TC_TP2[_NWT]
N230 MSG("**** 请手动换刀,结束按响应键,按循环启动程序继续 ****")
$A_OUT[2]=1
N240 M206
N250 M00
N260 G153 G0 G90 Z= __ATC_UDG_Z_SAFE
N270 D1
N280 MSG()
$A_OUT[2]=0
N290 M17
N300 DHD:
N310 D0
N320 M5
N330 SPOSA=__ATC_UDG_V_S
N340 G0 G153 Z-200
N350 G0 G153 Y-3400
N360 G0 G153 Z-600
N370 $A_OUT[1]=1
N380 T=$TC_TP2[_NWT]
N390 MSG("**** 请手动换刀,结束按响应键,按循环启动程序继续 ****")
$A_OUT[2]=1
N400 M206
N410 M00
N420 G153 G0 G90 Z= __ATC_UDG_Z_SAFE
N430 D1
N440 MSG()
$A_OUT[2]=0
N450 M17
N460 XHD:
N470 $A_OUT[1]=0
N480 CYCLE800()
N490 D0
N500 STOPRE
N510 G153 G0 G90 Z= __ATC_UDG_Z_SAFE
N520 M70
N530 G04 F2
N540 HEAD_B(0)
N550 HEAD_C(0)
N560 STOPRE
N570 SPOSA=__ATC_UDG_V_S ;$MN_USER_DATA_FLOAT[2]
N580 G153 G0 G90 Y=__ATC_UDG_V_Y ;$MN_USER_DATA_FLOAT[4]
N590 G153 G0 G90 Z=__ATC_UDG_V_Z ;$MN_USER_DATA_FLOAT[5]
N600 WAITS
N610 M94
N620 STOPRE
;N600 IF (_ACT<>0) and (_NWT<>0)
;N610 if ($tc_tp3[_ACT]>1) ;or ($tc_tp8[_ACT] B_AND ’B1000000’))
N630 T0
N640 M206
N650 D0
N660 STOPRE
;N660 ENDIF
;N670 endif
N670 G153 G0 G90 Z= __ATC_UDG_Z_SAFE
N680 M71
N690 G0 G153 Z-200
N700 G0 G153 Y-3400
N710 G0 G153 Z-600
N720 STOPRE
$A_OUT[1]=1
N740 T=$TC_TP2[_NWT]
N750 MSG("**** 请手动换刀,结束按响应键,按循环启动程序继续 ****")
$A_OUT[2]=1
N760 M206; Tool Change Order
N770 M00
N780 G153 G0 G90 Z= __ATC_UDG_Z_SAFE
N790 D1
N800 MSG()
$A_OUT[2]=0
N810 M17
N820 DHX:
N830 D0
N840 M5
N850 SPOSA=__ATC_UDG_V_S
N860 G0 G153 Z-200
N870 G0 G153 Y-3400
N880 G0 G153 Z-600
N890 $A_OUT[1]=1
N900 T0
N910 MSG("**** 请手动换刀,结束按响应键,按循环启动程序继续 ****")
$A_OUT[2]=1
N920 M206
N930 M00
N940 IF _NWT<>0 GOTOF BBB
N950 G153 G0 G90 Z= __ATC_UDG_Z_SAFE
$A_OUT[2]=0
N960 M17
N970 BBB:
N980 CYCLE800()
N990 D0
N1000 STOPRE
N1010 G153 G0 G90 Z= __ATC_UDG_Z_SAFE
N1020 M70
N1030 G04 F2
N1040 HEAD_B(0)
N1050 HEAD_C(0)
N1060 STOPRE
N1070 SPOSA=__ATC_UDG_V_S ;$MN_USER_DATA_FLOAT[2]
N1080 G153 G0 G90 Y=__ATC_UDG_V_Y ;$MN_USER_DATA_FLOAT[4]
N1090 G153 G0 G90 Z=__ATC_UDG_V_Z ;$MN_USER_DATA_FLOAT[5]
N1100 WAITS
N1110 M94
N1120 STOPRE
N1130 STOPRE
N1140 $A_OUT[1]=0
N1150 T=$TC_TP2[_NWT]
N1160 M206
N1170 G153 G0 G90 Z= __ATC_UDG_Z_SAFE
N1180 M71
N1190 D1
N1200 M17
N1210 ZZKN:
N1220 $A_OUT[1]=0
N1230 IF ((_NWT==_ACT) AND (_NWT>0) AND (_ACT>0)) GOTOF INFO1
N1240 IF ((_NWT==_ACT) AND (_NWT==0) AND (_ACT==0)) GOTOF INFO2
N1250 STOPRE
N1260 CYCLE800()
N1270 D0
N1280 STOPRE
N1290 G153 G0 G90 Z= __ATC_UDG_Z_SAFE
N1300 M70
N1310 G04 F2
N1320 HEAD_B(0)
N1330 HEAD_C(0)
N1340 STOPRE
N1350 SPOSA=__ATC_UDG_V_S ;$MN_USER_DATA_FLOAT[2]
N1360 G153 G0 G90 Y=__ATC_UDG_V_Y ;$MN_USER_DATA_FLOAT[4]
N1370 G153 G0 G90 Z=__ATC_UDG_V_Z ;$MN_USER_DATA_FLOAT[5]
N1380 WAITS
N1390 M94
N1400 STOPRE
N1410 IF (_ACT<>0) and (_NWT<>0)
N1420 if ($tc_tp3[_ACT]>1) ;or ($tc_tp8[_ACT] B_AND ’B1000000’))
N1430 T0
N1440 M206
N1450 D0
N1460 stopre
N1470 T=$TC_TP2[_NWT]
N1480 ENDIF
N1490 endif
N1500 END1:
N1510 G153 G0 G90 Z=__ATC_UDG_V_Z ;$MN_USER_DATA_FLOAT[5]
N1520 M206; Tool Change Order
N1530 M95
N1540 D0
N1550 G153 G0 G90 Z=__ATC_UDG_Z_SAFE
N1560 M71 ;CLOSED DOOR ;M40
N1570 G153 G0 G90 Y=__ATC_UDG_Y_SAFE
N1580 END2:
N1590 STOPRE
N1600 D1
N1610 M17
N1620 INFO1:MSG("****无换刀动作 原因:编程刀具号 = 主轴刀具号****")
N1630 G04 F0.1
N1640 MSG("")
N1650 D1
N1660 M17
N1670 INFO2:MSG("**** 无换刀动作 原因:主轴上无刀 ****")
N1680 G04 F0.1
N1690 MSG("")
N1700 D1
N1710 M17
N1720 INFO3:SETAL (65001);手动刀/超规刀,禁入库
N1730 M00
N1740 MSG("")
N1750 D1
N1760 M17


MingSong