1      免责说明

本使用手册及样例包目录内所包含文档、PLC程序、机床可执行程序(MPF、SPF、…)、电气图,可能与用户实际使用不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。本例程的作者和拥有者对于该例程的功能性和兼容性不负任何责任,使用该例程的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。

对于在使用中发生的人员、财产损失本公司不承担任何责任,由使用者自行承担风险。

以上声明内容的最终解释权归西门子(中国)有限公司所有,后续内容更新不做另行通知。

 

 

2      概述

目前很多机床特别是龙门机床,客户现场需要的刀具较多较大,甚至有些刀具根本不能放在刀库中,只能作为库外刀处理,本文主要介绍828D龙门机床中库外刀的处理方式之一,具体的要求如下:

         在已有32位刀库外还需有库外刀具加入序列。

         不希望用刀名或者刀长等条件来判断是否属于库外刀具,希望建在库外的刀具就用自动执行库外换刀动作, 库内刀具自动执行库内换刀动作。

         库外刀会在整套循环过程中使用,程序可以暂停换刀,但不能复位程序。

3      要求

3.1      硬件要求


硬件


工艺

PPU24x.x

PPU26x.x

PPU28x.x

铣床






4      需求分析

4.1      系统需自动识别库外刀具及库内刀具   

4.2      换刀可能性及逻辑分析 

4.2.1           逻辑分析

         库内换库内:按正常L6执行即可

         库内换库外:先还库内刀再抓库外刀

         库外换库外:先还库外刀再抓库外刀

         库外换库内:先还库外再抓库内

          空刀抓库内:按正常L6执行即可

         空刀抓库外:直接抓库外

         库外只还刀:直接到卸刀点卸库外

4.2.2           动作分解

         库内换库外:走到库内换刀点接通正常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后,完成还刀。

4.2.3           难点解析:

         系统在执行跟库外刀相关的还/抓刀是DB4300.DBX1.5都会接通,因此库内换库外时不能用此简单方法去判断,否则库内换库外时系统会把PLC屏蔽掉,直接要求人为响应,没有换刀动作。

         执行库外换刀时,假设T111为库外刀,执行了T111M06后,也必须执行M206否则人为触发DB4200.DBX0.0是不能响应的,这也是为什么不能用DB4300.DBX1.5来屏蔽PLC的原因。

4.2.4           手动响应条件:

          担心手误随意按到手动刀具响应开关,在手动响应加了保护条件:待轴走到库外换刀点执行M00后,方能手动响应,其他时段响应无效。


5      判断条件及信号说明

5.1      4.1$A_DBD[40](DB4900.DBD40):库外换刀条件之一在L6中再做运算确定是哪种方案image.png

5.2      $A_MYMN[_ACT]  $A_MYMLN[_ACT]判断主轴上刀具是否为库外刀与$A_DBD[40]共同逻辑判断当前是要还库外刀还是抓库外刀(非常重要)见参考资料

5.3      $A_OUT[1](DB2900.DBD4.0)=1 是屏蔽PLC所有换刀步骤;=0时不屏蔽

image.png

5.4      具体判断及跳转执行均在L6内:

         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 ;当前是库内刀换库内刀


5.5      手动响应条件处理

image.png


6      L6程序实例:

;------------------------

; 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

 

 

 

7      参考资料:

7     参考资料:

7.1      简调   

image.png


    

7.2      DocOnCD:

image.png


8.作者/联系人

MingSong