说明
机械手与PLC使用IO板卡通讯,程序仅供验收而写的,未实际应用,仅供参考。
主要工作原理PLC给各种指令,让机械手完成贴标动作,及取料放料,其中取标信号有标就给,机械手判断先去取标,贴标还是取料,放料,取料优先,取标后才可以贴标,放料最后,但是急停后需要判断去贴标还是去放料。视觉偏移值为PC直接存PR地址。
作者只是学习半年不到的宝宝,轻喷!!
程序
1.A_HOME(急停后复位)
1: IF ((R[66:吸嘴1拍照]=1 OR R[67:吸嘴2拍照]=1 OR R[68:吸嘴3拍照]=1 OR R[69:吸嘴4拍照]=1) THEN ;
2: CALL DATA_SEND('DISCONNECT','S4') ;
3: CALL DATA_SEND('CONNECT','S4') ;
4: ENDIF ;
5: IF (DI[102:吸嘴1负压检测]=OFF),DO[102:吸嘴1负压开关]=(OFF) ;
6: IF (DI[103:吸嘴2负压检测]=OFF),DO[103:吸嘴2负压开关]=(OFF) ;
7: IF (DI[104:吸嘴3负压检测]=OFF),DO[104:吸嘴3负压开关]=(OFF) ;
8: IF (DI[105:吸嘴4负压检测]=OFF),DO[105:吸嘴4负压开关]=(OFF) ;
9: RO[1:贴标气缸1开关]=OFF ;
10: RO[2:贴标气缸2开关]=OFF ;
11: RO[3:贴标气缸3开关]=OFF ;
12: RO[4:贴标气缸4开关]=OFF ;
13: DO[101:取料负压开关]=OFF ;
14: PR[10:R2相机拍照位]=LPOS-LPOS ;
15: PR[10:R2相机拍照位]=LPOS ;
16: PR[10,3:R2相机拍照位]=270 ;
17:L PR[10:R2相机拍照位] 4000mm/sec FINE ;
18:L PR[99:HOME] 2500mm/sec FINE Wjnt ;
2.A_MAIN_UNIFY(主程序)
1: LBL[10] ;
2: !使用相机功能时激活服务器 ;
3: IF (R[66:吸嘴1拍照]=1 OR R[67:吸嘴2拍照]=1 OR R[68:吸嘴3拍照]=1 OR R[69:吸嘴4拍照]=1) THEN ;
4: CALL DATA_SEND('DISCONNECT','S4') ;
5: CALL DATA_SEND('CONNECT','S4') ;
6: ENDIF ;
7: ;
8: OVERRIDE=R[40:主速度] ;
9: IF DI[108:流线允许取料]=ON,CALL A_TAKE_UNIFY ;
10: IF DI[112:允许贴标]=ON,CALL A_PASTE_LABEL ;
11: IF R[74:是否取标完成]<>1,CALL A_PICK_LABEL ;
12: JMP LBL[10] ;
13: !设置 ;
14: !气缸设置 ;
15: !0不取1只取左2只取右 ;
16: !3取左右(左)4取左右(右) ;
17: R[36:吸嘴1状态]=0 ;
18: R[37:吸嘴2状态]=0 ;
19: R[38:吸嘴3状态]=0 ;
20: R[39:吸嘴4状态]=0 ;
21: !取完标后负压判断1是0否 ;
22: R[46:吸嘴1判断]=1 ;
23: R[47:吸嘴2判断]=1 ;
24: R[48:吸嘴3判断]=1 ;
25: R[49:吸嘴4判断]=1 ;
26: !拍照0不需要1,需要 ;
27: R[66:吸嘴1拍照]=0 ;
28: R[67:吸嘴2拍照]=0 ;
29: R[68:吸嘴3拍照]=0 ;
30: R[69:吸嘴4拍照]=0 ;
31: !换第二个贴标位 ;
32: !1为贴完第一个标 ;
33: !2为贴完第二个标 ;
34: !3为贴完第三个标 ;
35: !4为贴完第四个标 ;
36: !0为不需要 ;
37: R[75:换贴标位置]=0 ;
3.A_PASTE_LABEL(贴标)
1: IF R[74:是否取标完成]<>1,CALL A_PICK_LABEL ;
2: WAIT DI[112:允许贴标]=ON TIMEOUT,LBL[999] ;
3: !贴第一个标 ;
4: IF (R[36:吸嘴1状态]<>0) THEN ;
5: IF (R[66:吸嘴1拍照]=1) THEN ;
6:L PR[56:相机贴标1拍照位] 4500mm/sec FINE ;
7: CALL GET_POS2 ;
8: LBL[21] ;
9: R[76]=PR[5,2:相机偏移值3] ;
10: WAIT R[76]<>1000 ;
11: JMP LBL[21] ;
12: ENDIF ;
13:L PR[R[54]] R[34:去取标安全点速度]mm/sec CNT20 Offset,PR[5:相机偏移值3] ;
14: RO[1:贴标气缸1开关]=ON ;
15:L PR[R[36]] R[35:取标速度]mm/sec FINE Offset,PR[5:相机偏移值3] ;
16: DO[102:吸嘴1负压开关]=OFF ;
17: WAIT .10(sec) ;
18: RO[1:贴标气缸1开关]=OFF ;
19:L PR[R[54]] R[34:去取标安全点速度]mm/sec CNT20 Offset,PR[5:相机偏移值3] ;
20: PR[5,2:相机偏移值3]=1000 ;
21: IF (R[75:换贴标位置]=1) THEN ;
22: DO[112:贴标完成]=PULSE,0.6sec ;
23: WAIT DI[112:允许贴标]=ON ;
24: ENDIF ;
25: ENDIF ;
26: !贴第二个标 ;
27: IF (R[37:吸嘴2状态]<>0) THEN ;
28: IF (R[67:吸嘴2拍照]=1) THEN ;
29:L PR[71] 4500mm/sec FINE ;
30: CALL GET_POS2 ;
31: LBL[22] ;
32: R[76]=PR[5,2:相机偏移值3] ;
33: WAIT R[76]<>1000 ;
34: JMP LBL[22] ;
35: ENDIF ;
36:L PR[R[63]] R[34:去取标安全点速度]mm/sec CNT20 Offset,PR[5:相机偏移值3] ;
37: RO[2:贴标气缸2开关]=ON ;
38:L PR[R[59]] R[35:取标速度]mm/sec FINE Offset,PR[5:相机偏移值3] ;
39: DO[103:吸嘴2负压开关]=OFF ;
40: WAIT .10(sec) ;
41: RO[2:贴标气缸2开关]=OFF ;
42:L PR[R[63]] R[34:去取标安全点速度]mm/sec CNT20 Offset,PR[5:相机偏移值3] ;
43: PR[5,2:相机偏移值3]=1000 ;
44: IF (R[75:换贴标位置]=2) THEN ;
45: DO[112:贴标完成]=PULSE,0.6sec ;
46: WAIT DI[112:允许贴标]=ON ;
47: ENDIF ;
48: ENDIF ;
49: !贴第三个标 ;
50: IF (R[38:吸嘴3状态]<>0) THEN ;
51: IF (R[68:吸嘴3拍照]=1) THEN ;
52:L PR[58:相机贴标3拍照位] 4500mm/sec FINE ;
53: CALL GET_POS2 ;
54: LBL[23] ;
55: R[76]=PR[5,2:相机偏移值3] ;
56: WAIT R[76]<>1000 ;
57: JMP LBL[23] ;
58: ENDIF ;
59:L PR[R[64]] R[34:去取标安全点速度]mm/sec CNT20 Offset,PR[5:相机偏移值3] ;
60: RO[3:贴标气缸3开关]=ON ;
61:L PR[R[52]] R[35:取标速度]mm/sec FINE Offset,PR[5:相机偏移值3] ;
62: DO[102:吸嘴1负压开关]=OFF ;
63: WAIT .10(sec) ;
64: RO[3:贴标气缸3开关]=OFF ;
65:L PR[R[64]] R[34:去取标安全点速度]mm/sec CNT20 Offset,PR[5:相机偏移值3] ;
66: PR[5,2:相机偏移值3]=1000 ;
67: IF (R[75:换贴标位置]=3) THEN ;
68: DO[112:贴标完成]=PULSE,0.6sec ;
69: WAIT DI[112:允许贴标]=ON ;
70: ENDIF ;
71: ENDIF ;
72: !贴第四个标 ;
73: IF (R[39:吸嘴4状态]<>0) THEN ;
74: IF (R[69:吸嘴4拍照]=1) THEN ;
75:L PR[59:相机贴标4拍照位] 4500mm/sec FINE ;
76: CALL GET_POS2 ;
77: LBL[24] ;
78: R[76]=PR[5,2:相机偏移值3] ;
79: WAIT R[76]<>1000 ;
80: JMP LBL[24] ;
81: ENDIF ;
82:L PR[R[65]] R[34:去取标安全点速度]mm/sec CNT20 Offset,PR[5:相机偏移值3] ;
83: RO[4:贴标气缸4开关]=ON ;
84:L PR[R[61]] R[35:取标速度]mm/sec FINE Offset,PR[5:相机偏移值3] ;
85: DO[105:吸嘴4负压开关]=OFF ;
86: WAIT .10(sec) ;
87: RO[4:贴标气缸4开关]=OFF ;
88:L PR[R[65]] R[34:去取标安全点速度]mm/sec CNT20 Offset,PR[5:相机偏移值3] ;
89: PR[5,2:相机偏移值3]=1000 ;
90: IF (R[75:换贴标位置]=4) THEN ;
91: DO[112:贴标完成]=PULSE,0.6sec ;
92: WAIT DI[112:允许贴标]=ON ;
93: ENDIF ;
94: ENDIF ;
95: DO[112:贴标完成]=PULSE,0.8sec ;
96:L PR[50:载具取板安全位] 4800mm/sec CNT20 ;
97: LBL[999] ;
-
A_PICK_LABEL(取标)
1: LBL[10] ;
2: !初始需要信号 ;
3: RO[1:贴标气缸1开关]=OFF ;
4: RO[2:贴标气缸2开关]=OFF ;