I have a double gripper but one zone is controlled by the main vacuum and the second is a solenoid. How can I pick up box 1 and 2 from the infeed but drop the second box first, (close the solenoid to drop it) then move to the 1st box position then close the vacuum. I have figured out the pick, close the solenoid, move to next location but the boxes are flipped
Pick/Place
-
interndon -
June 20, 2023 at 8:13 PM -
Thread is Unresolved
-
-
I have a double gripper but one zone is controlled by the main vacuum and the second is a solenoid. How can I pick up box 1 and 2 from the infeed but drop the second box first, (close the solenoid to drop it) then move to the 1st box position then close the vacuum. I have figured out the pick, close the solenoid, move to next location but the boxes are flipped
Hello,
I don't understand what you really want.
-
It is a palletizing cell and when two boxes 1 and 2 come in the infeed I want to pick both and drop box(2) first in one location and box(1) in another location. The vacuum gripper has a zone that can close but it is above box #2. I have no way of turning off zone 1 where box 1 is without dropping box 2 as well
-
It is a palletizing cell and when two boxes 1 and 2 come in the infeed I want to pick both and drop box(2) first in one location and box(1) in another location. The vacuum gripper has a zone that can close but it is above box #2. I have no way of turning off zone 1 where box 1 is without dropping box 2 as well
Thank you, so you need either a second vaccium or 2 distributors.
-
Would I be able to spin the gripper head 180 degrees for certain unit loads
-
Would I be able to spin the gripper head 180 degrees for certain unit loads
Yes, you can attach these elements to the J4 and perform 180-degree movements. Currently on one of my robots I have 2 vaccum attached to the J4 to control two suction cups.
-
I’m still looking to do it programming wise so how would I change it to spin 180 before picking
-
Do you have any photos to help us understand ?
-
Just a friendly reminder:
People are generally not mind-readers. In order to get the best help from the community, you are better off with explaining your issue in the best way possible.
Assume that no one has any insight on your situation, and provide the information necessary for others to understand your issue and to be able to propose a solution.
Based on what you have written so far, I see no problem.
You have a robot (which model, you haven't told). It has an EOAT which is some sort of vacuum gripper that is divided in two separate zones, which are controlled separately.
Using this equipment you want to pick two boxes, one with each zone of your tool.
Then you want to place the two boxes at different locations.
Since you have separate control of your tool's zone, I don't really see the issue.
Please clarify and enlighten me (us).
-
The answer is yes, you can. You just have to learn how to program the robot.
We don't know what software you are using. If it is PalletTool then you may have to change it with the PalletPro software, or figure out how to override what it is doing in the TP program. If it is HandlingTool then it's simple, just change your pick/place position and IO logic.
It would be beneficial if you posted the code of the pick program and tell us what programming changes you have attempted.
-
Code: Grip_IO
Display More3: !PalletTool 8.30P/21 PT Turbo ; 4: ; 5: ; 6: RO[2:OFF:Zone 2]=OFF ; 7: ; 8: !Select Gripper ; 9: SELECT R[7:Current Gripper]=3,JMP LBL[3] ; 10: =5,JMP LBL[5] ; 11: =6,JMP LBL[6] ; 12: =7,JMP LBL[7] ; 13: =10,JMP LBL[10] ; 14: ELSE,JMP LBL[1000] ; 15: ; 16: LBL[3:Double] ; 17: LBL[5:Triple] ; 18: IF R[9:Cur TotUnitsPick]=1,JMP LBL[900] ; 19: JMP LBL[1000] ; 20: ; 21: LBL[6:Cust Grp1] ; 22: !Config for 5 Case ; 23: IF R[9:Cur TotUnitsPick]<=2,JMP LBL[900] ; 24: JMP LBL[1000] ; 25: ; 26: LBL[7:Cust Grp2] ; 27: IF (!F[31:OFF:Offset Infeed 1] AND R[1:Current Cycle]=1),JMP LBL[1000] ; 28: IF (!F[32:ON :Offset Infeed 2] AND R[1:Current Cycle]=2),JMP LBL[1000] ; 29: IF R[9:Cur TotUnitsPick]=1,JMP LBL[900] ; 30: IF R[9:Cur TotUnitsPick]=2 AND R[2:Current Unitload]=107,JMP LBL[900] ; 31: JMP LBL[1000] ; 32: ; 33: LBL[10:Multi] ; 34: !Config for 4 Case ; 35: IF R[9:Cur TotUnitsPick]<=2,JMP LBL[900] ; 36: JMP LBL[1000] ; 37: ; 38: LBL[900:Disable Zn] ; 39: RO[2:OFF:Zone 2]=ON ; 40: ; 41: LBL[1000:Exit] ;
-
Code: Pick from infeed
Display More3: !PalletTool 8.30P/21 PT Turbo ; 4: ; 5: ; 6: !Collision Detected ; 7: DO[134:OFF:Collision Det]=OFF ; 8: !At Perch Position ; 9: DO[135:OFF:At Perch Pos]=OFF ; 10: !Above Infeed ; 11: DO[136:OFF:Above Infeed]=OFF ; 12: !Disable Pik Agn ; 13: DO[138:OFF:Disable Pik Agn]=OFF ; 14: ; 15: !Monitor Inf Squaring Retracted ; 16: F[10:ON :Mon InfSqrFlt]=(OFF) ; 17: ; 18: R[144:PROG call mode]=1 ; 19: !Reset Pick Bypass ; 20: R[112:Pick bypass Pntr]=0 ; 21: ; 22: PR[23:Pick Offset]=PR[65:Cal Pos Offset] ; 23: TOOL_OFFSET CONDITION PR[23:Pick Offset] ; 24: ; 25: CALL CLINFRTN ; 26: ; 27: LBL[1:Req Vacuum] ; 28: RO[1:OFF:Vacuum Off]=OFF ; 29: RO[2:OFF:Vacuum On]=OFF ; 30: !Request Vacuum Blower ; 31: DO[168:OFF:Request Vacuum]=ON ; 32: ; 33: !Clear of Infeed ; 34: IF (R[1:Current Cycle]=1),DO[228:OFF:Inf1 Bot Clr]=(OFF) ; 35: IF (R[1:Current Cycle]=2),DO[292:OFF:Inf2 Bot Clr]=(OFF) ; 36: ; 37: !Robot Already at Infeed. ; 38: IF R[20:Cur Robot Posn]<=2,JMP LBL[5] ; 39: ; 40: !Motn Clear ; 41: R[107:Scratch]=PR[48,3:CalcZPos 1] ; 42: CALL GETMAXZ(R[107:Scratch],109) ; 43: PR[48,3:CalcZPos 1]=R[109:Scratch] ; 44: ; 45: !Custom CNT to Clr SSht Rack ; 46: IF (R[191:Last Pal in Srvc]<>2),R[166:Calc Motn Cnt]=(75) ; 47: IF (R[191:Last Pal in Srvc]=2),R[166:Calc Motn Cnt]=(25) ; 48: ; 49:L PR[48:CalcZPos 1] max_speed CNT R[166:Calc Motn Cnt] ; 50: R[20:Cur Robot Posn]=7 ; 51: ; 52: !Via Motn UTOOL ; 53: UTOOL_NUM=7 ; 54: ; 55: !Infeed Via Position ; 56: PR[79:Calc Via Pos]=PR[25:Perch Position] ; 57: PR[79,3:Calc Via Pos]=PR[48,3:CalcZPos 1] ; 58: PR[79,6:Calc Via Pos]=PR[1,6:Infeed Unit Posn] ; 59: ; 60: PR[99:Scratch JPOS]=JPOS-JPOS ; 61: CALL GETJPOS(79,99) ; 62: PR[98:Scratch JPOS]=JPOS ; 63: PR[98,2:Scratch JPOS]=PR[99,2:Scratch JPOS] ; 64: PR[98,3:Scratch JPOS]=PR[99,3:Scratch JPOS] ; 65: CALL GETJPOS(49,99) ; 66: PR[98,1:Scratch JPOS]=PR[99,1:Scratch JPOS] ; 67: PR[98,4:Scratch JPOS]=PR[99,4:Scratch JPOS] ; 68: !Move to Pre Appr Position ; 69:J PR[98:Scratch JPOS] 100% CNT50 ; 70: ; 71: !Picking Motn UTOOL ; 72: UTOOL_NUM=1 ; 73: ; 74: LBL[5:Inf Motn] ; 75: ; 76: !Sig PrePicking Infeed ; 77: IF (R[1:Current Cycle]=1),DO[230:OFF:Inf1 PrePicking]=(ON) ; 78: IF (R[1:Current Cycle]=2),DO[294:OFF:Inf2 PrePicking]=(ON) ; 79: ; 80: !Infeed Approach Position ; 81:J PR[49:CalcZpos 2] 100% CNT50 ; 82: R[20:Cur Robot Posn]=2 ; 83: !Clr Last Pal Srvc ; 84: R[191:Last Pal in Srvc]=0 ; 85: ; 86: LBL[9] ; 87: R[145:Collision Mon]=0 ; 88: MONITOR COL_COND ; 89: ; 90: !Appr Z Offset ; 91: TOOL_OFFSET CONDITION PR[23:Pick Offset] ; 92: PR[23,3:Pick Offset]=(-100) ; 93: SKIP CONDITION R[145:Collision Mon]=1 OR ERR_NUM=11050 ; 94:L PR[1:Infeed Unit Posn] 3000mm/sec CNT50 Tool_Offset Skip,LBL[10] ; 95: !Collision Detected ; 96: JMP LBL[900] ; 97: LBL[10] ; 98: ; 99: IF R[111:Col Rcvry Active]=0,JMP LBL[15] ; 100: !Post Collision Motion Speed ; 101: $MCR_GRP[1].$PRGOVERRIDE=25 ; 102: ; 103: LBL[15] ; 104: IF (R[1:Current Cycle]=1),GO[17:0:Ldpos1 QtyPlaced]=(R[9:Cur TotUnitsPick]) ; 105: IF (R[1:Current Cycle]=2),GO[20:0:Ldpos2 QtyPlaced]=(R[9:Cur TotUnitsPick]) ; 106: $WAITTMOUT=600 ; 107: !Verify Vacuum Ready ; 108: WAIT DI[168:OFF:Vacuum Ready]=ON TIMEOUT,LBL[20] ; 109: ; 110: !Check Dry Cycle ; 111: IF R[198:Dry Cycle]>0,JMP LBL[25] ; 112: ; 113: !Select Current Infeed ; 114: SELECT R[3:Current Infeed]=1,JMP LBL[16] ; 115: ELSE,JMP LBL[17] ; 116: ; 117: LBL[16] ; 118: $WAITTMOUT=600 ; 119: !Verify Pick Ready Sig ; 120: WAIT DI[219:OFF:Inf1 Pick Ready ]=ON TIMEOUT,LBL[20] ; 121: JMP LBL[25] ; 122: ; 123: LBL[17] ; 124: $WAITTMOUT=600 ; 125: !Verify Pick Ready Sig ; 126: WAIT DI[267:OFF:Inf2 Pick Ready ]=ON TIMEOUT,LBL[20] ; 127: JMP LBL[25] ; 128: ; 129: LBL[20:Pik Not Rdy] ; 130: CALL VAC_OFF ; 131: !Move Clear ; 132:L PR[49:CalcZpos 2] 1000mm/sec CNT5 ; 133: R[20:Cur Robot Posn]=2 ; 134: !Above Infeed ; 135: DO[136:OFF:Above Infeed]=ON ; 136: !Clear of Infeed ; 137: DO[228:OFF:Inf1 Bot Clr]=ON ; 138: DO[292:OFF:Inf2 Bot Clr]=ON ; 139: ; 140: !Inf Squaring Device Not Ret ; 141: IF (!F[10:ON :Mon InfSqrFlt]),JMP LBL[901] ; 142: GO[3:0:Robot Error Msg]=10 ; 143: !Robot Assist AH ; 144: DO[160:OFF:Req Assist AH]=ON ; 145: UALM[10] ; 146: !Robot Assist AH ; 147: DO[160:OFF:Req Assist AH]=OFF ; 148: !Clear Msg ; 149: GO[3:0:Robot Error Msg]=0 ; 150: F[10:ON :Mon InfSqrFlt]=(OFF) ; 151: JMP LBL[901] ; 152: ; 153: LBL[25:Move to Pick] ; 154: SKIP CONDITION R[145:Collision Mon]=1 OR ERR_NUM=11050 ; 155:L PR[1:Infeed Unit Posn] 1000mm/sec CNT5 Skip,LBL[50] ; 156: !Collision Detected ; 157: JMP LBL[900] ; 158: ; 159: LBL[50:Pick Prod] ; 160: R[20:Cur Robot Posn]=3 ; 161: CALL GRIP_IO ; 162: RO[1:OFF:Vacuum Off]=ON ; 163: ; 164: !Verify Square Retracted ; 165: F[10:ON :Mon InfSqrFlt]=(ON) ; 166: !Select Current Infeed ; 167: SELECT R[3:Current Infeed]=1,JMP LBL[56] ; 168: ELSE,JMP LBL[57] ; 169: ; 170: LBL[56] ; 171: !Sig Picking Infeed ; 172: DO[231:OFF:Inf1 Picking]=ON ; 173: $WAITTMOUT=600 ; 174: !Verify Square Retracted ; 175: WAIT DI[220:ON :Inf1 Square Ret]=ON TIMEOUT,LBL[20] ; 176: JMP LBL[60] ; 177: ; 178: LBL[57] ; 179: !Sig Picking Infeed ; 180: DO[295:OFF:Inf2 Picking]=ON ; 181: $WAITTMOUT=600 ; 182: !Verify Square Retracted ; 183: WAIT DI[268:ON :Inf2 Square Ret]=ON TIMEOUT,LBL[20] ; 184: JMP LBL[60] ; 185: ; 186: LBL[60] ; 187: !Payload w/Prod ; 188: PAYLOAD[2:With Product] ; 189: WAIT .80(sec) ; 190: ; 191: !Chk Collision Status ; 192: IF R[145:Collision Mon]<>0,JMP LBL[900] ; 193: MONITOR END COL_COND ; 194: JMP LBL[1000] ; 195: ; 196: LBL[900:Col Detected] ; 197: CALL VAC_OFF ; 198: !Inf Collision Recovery ; 199: CALL COL_MOTN ; 200: WAIT .50(sec) ; 201: LBL[901] ; 202: MONITOR END COL_COND ; 203: !Pick Bypassed ; 204: R[112:Pick bypass Pntr]=1 ; 205: ; 206: LBL[1000:Exit] ;
-
Code: Place on Pallet part 1
Display More3: !PalletTool 8.30P/21 PT Turbo ; 4: ; 5: ; 6: $MCR_GRP[1].$PRGOVERRIDE=R[35:Speed Override] ; 7: !End of batch Prog Override ; 8: IF R[110:EoB Active]=0,JMP LBL[1] ; 9: $MCR_GRP[1].$PRGOVERRIDE=25 ; 10: LBL[1] ; 11: ; 12: !Current Pal in Service ; 13: R[190:Cur Pal in Srvc]=R[4:Current Pallet] ; 14: R[144:PROG call mode]=2 ; 15: ; 16: !Init Part Drop Monitor ; 17: R[143:False Alarm Sel]=0 ; 18: R[24:Part Drop Cond]=1 ; 19: !Collision Status ; 20: R[111:Col Rcvry Active]=0 ; 21: ; 22: PR[24:Place Offset]=PR[65:Cal Pos Offset] ; 23: TOOL_OFFSET CONDITION PR[24:Place Offset] ; 24: ; 25: !Init Place Regs ; 26: R[8:Cur Pk/Pl count]=0 ; 27: R[28:Multi-use]=3 ; 28: R[29:Multi-use]=9 ; 29: !Reset counter ; 30: R[96:Internal Registe]=1 ; 31: ; 32: !Cell Tracks Case Serial Numbers ; 33: !Placed to Pallet ; 34: !Update Qty Cases Picked in Cycle ; 35: IF (R[1:Current Cycle]=1),R[204:Ldpos1 QtyPlaced]=(R[9:Cur TotUnitsPick]) ; 36: IF (R[1:Current Cycle]=2),R[207:Ldpos2 QtyPlaced]=(R[9:Cur TotUnitsPick]) ; 37: ; 38: !Bx Req Active ; 39: IF (R[1:Current Cycle]=1),DO[229:OFF:Inf1 Req Active]=(OFF) ; 40: IF (R[1:Current Cycle]=2),DO[293:OFF:Inf2 Req Active]=(OFF) ; 41: ; 42: !Clear Pick Position with Offset ; 43: R[58:Pal Num for Dims]=R[1:Current Cycle] ; 44: Get Unit Stats ; 45: !R[59] unit length ; 46: !R[60] unit width ; 47: !R[61] unit height ; 48: IF (R[62:Status Returned]<>0),R[61:Z Value Returned]=(500) ; 49: R[117:Inf DepartOffset]=150+R[61:Z Value Returned] ; 50: R[117:Inf DepartOffset]=R[117:Inf DepartOffset]*(-1) ; 51: ; 52: PR[24,3:Place Offset]=R[117:Inf DepartOffset] ; 53:L PR[1:Infeed Unit Posn] max_speed CNT30 Tool_Offset ACC50 ; 54: R[20:Cur Robot Posn]=2 ; 55: ; 56: !Verify Initial Pick ; 57: IF R[198:Dry Cycle]>0,JMP LBL[15] ; 58: IF R[110:EoB Active]>0,JMP LBL[15] ; 59: IF R[45:Part Drop Enb]=0,JMP LBL[15] ; 60: R[142:PD Recovery]=2 ; 61: IF (!DI[168:OFF:Vacuum Ready]),JMP LBL[90] ; 62: IF (!RO[1:OFF:Vacuum Off]),JMP LBL[90] ; 63: ; 64: LBL[13:Init PartDrop] ; 65: !Continuous checking for partdrop ; 66: !RUN PMDROP ; 67: MONITOR PD_MON ; 68: LBL[15] ; 69: ; 70: !Dropping to CHEP Pallet ; 71: IF (R[1:Current Cycle]=1 AND DI[217:ON :Ldpos1 has CHEP]),CALL CHEP_PAL ; 72: IF (R[1:Current Cycle]=2 AND DI[265:ON :Ldpos2 has CHEP]),CALL CHEP_PAL ; 73: ; 74: CALL CFG_TURN ; 75: CALL CALCZPOS ; 76: ; 77: !Req Nxt Units & Orient ; 78: CALL PMADDQ(8) ; 79: ; 80: !Custom CNT to Clr SSht Rack ; 81: IF (R[1:Current Cycle]<>2),R[166:Calc Motn Cnt]=(75) ; 82: IF (R[1:Current Cycle]=2),R[166:Calc Motn Cnt]=(25) ; 83: ; 84:L PR[48:CalcZPos 1] max_speed CNT R[166:Calc Motn Cnt] ACC50 ; 85: ; 86: !Disable Pik Agn ; 87: DO[138:OFF:Disable Pik Agn]=ON ; 88: ; 89: LBL[20] ; 90: ; 91: !Via Motn UTOOL ; 92: UTOOL_NUM=7 ; 93: ; 94: !Infeed Via Position ; 95: PR[79:Calc Via Pos]=PR[25:Perch Position] ; 96: PR[79,3:Calc Via Pos]=PR[48,3:CalcZPos 1] ; 97: ; 98: PR[99:Scratch JPOS]=JPOS-JPOS ; 99: CALL GETJPOS(79,99) ; 100: PR[98:Scratch JPOS]=JPOS ; 101: PR[98,2:Scratch JPOS]=PR[99,2:Scratch JPOS] ; 102: PR[98,3:Scratch JPOS]=PR[99,3:Scratch JPOS] ; 103: !Move to Tuck Position ; 104:J PR[98:Scratch JPOS] 100% CNT100 MROT ACC50 ; 105: ; 106: LBL[27] ; 107: !Dropping Motn UTOOL ; 108: UTOOL_NUM=1 ; 109: ; 110: !Custom CNT to Clr SSht Rack ; 111: IF (R[1:Current Cycle]<>2),R[166:Calc Motn Cnt]=(50) ; 112: IF (R[1:Current Cycle]=2),R[166:Calc Motn Cnt]=(10) ; 113: ; 114: !Reserved Area for Cust ACC ; 115: R[164:Calc Motn Acc]=100 ; 116: ; 117: !Move to Appr Position ; 118: SKIP CONDITION R[24:Part Drop Cond]=0 ; 119:J PR[49:CalcZpos 2] 100% CNT R[166:Calc Motn Cnt] Skip,LBL[50] ACC R[164] MROT ; 120: R[142:PD Recovery]=5 ; 121: !Part Drop Detected ; 122: JMP LBL[90] ; 123: ; 124: LBL[50] ; 125: R[20:Cur Robot Posn]=5 ; 126: ; 127: !Updt Last Pal Srvc ; 128: R[191:Last Pal in Srvc]=R[190:Cur Pal in Srvc] ; 129: ; 130: LBL[60] ; 131: R[6:Current Unit]=R[6:Current Unit]+1 ; 132: R[8:Cur Pk/Pl count]=R[8:Cur Pk/Pl count]+1 ; 133: R[28:Multi-use]=R[28:Multi-use]+1 ; 134: R[29:Multi-use]=R[29:Multi-use]+1 ; 135: R[97:Internal Registe]=R[96:Internal Registe] ; 136: PR[50:Cur Pal Appr]=PR[R[28]] ; 137: PR[51:Cur Pal Place]=PR[R[29]] ; 138: ; 139: !Custom Coded for BEC 3926 ; 140: PR[52:Cur Pal Retreat]=PR[51:Cur Pal Place] ; 141: PR[52,3:Cur Pal Retreat]=PR[50,3:Cur Pal Appr] ; 142: ; 143: !UpdData PMUPDCYC for next drp ; 144: CALL PMADDQ(1) ; 145: IF R[8:Cur Pk/Pl count]=R[10:Cur TotPkPlInCyc],CALL CALCPICK ; 146: LBL[61] ; 147: !Set Utool for this drop ; 148: UTOOL_NUM=R[97:Internal Registe] ; 149: ; 150: !First Drop for Cur Pick ; 151: IF R[8:Cur Pk/Pl count]>1,JMP LBL[70] ; 152: ; 153: LBL[62] ; 154: R[145:Collision Mon]=0 ; 155: MONITOR COL_COND ; 156: ; 157: !Reserved Area for Cust ACC ; 158: R[164:Calc Motn Acc]=100 ; 159: ; 160: SKIP CONDITION R[24:Part Drop Cond]=0 OR R[145:Collision Mon]=1 OR ERR_NUM=11050 ; 161:L PR[50:Cur Pal Appr] max_speed CNT25 Skip,LBL[63] ACC R[164] ; 162: R[142:PD Recovery]=7 ; 163: WAIT .25(sec) ; 164: !Chk Collision ; 165: IF R[145:Collision Mon]=1,JMP LBL[900] ; 166: !Part Drop Detected ; 167: JMP LBL[90] ; 168: ; 169: LBL[63] ; 170: ; 171: !Drop Approach Offset ; 172: PR[24,3:Place Offset]=(-30) ; 173: ; 174: IF R[6:Current Unit]>1,JMP LBL[66] ; 175: !First Drop to Layer ; 176: SKIP CONDITION R[24:Part Drop Cond]=0 OR R[145:Collision Mon]=1 OR ERR_NUM=11050 ; 177:L PR[51:Cur Pal Place] max_speed CNT25 Tool_Offset Skip,LBL[75] ACC R[164] ; 178: R[20:Cur Robot Posn]=5 ; 179: R[142:PD Recovery]=8 ; 180: WAIT .25(sec) ; 181: !Chk Collision ; 182: IF R[145:Collision Mon]=1,JMP LBL[900] ; 183: !Part Drop Detected ; 184: JMP LBL[90] ; 185: ; 186: LBL[66:Nxt Drp to Layer] ; 187: PR[50,3:Cur Pal Appr]=PR[51,3:Cur Pal Place] ; 188: SKIP CONDITION R[24:Part Drop Cond]=0 OR R[145:Collision Mon]=1 OR ERR_NUM=11050 ; 189:L PR[50:Cur Pal Appr] max_speed CNT25 Tool_Offset Skip,LBL[67] ACC R[164] ; 190: R[20:Cur Robot Posn]=5 ; 191: R[142:PD Recovery]=9 ; 192: WAIT .25(sec) ; 193: !Chk Collision ; 194: IF R[145:Collision Mon]=1,JMP LBL[900] ; 195: !Part Drop Detected ; 196: JMP LBL[90] ; 197: ; 198: LBL[67:Slide In] ; 199: R[20:Cur Robot Posn]=5 ; 200: SKIP CONDITION R[145:Collision Mon]=1 OR ERR_NUM=11050 ; 201:L PR[51:Cur Pal Place] 2000mm/sec CNT5 Tool_Offset Skip,LBL[75] ACC80 ;
-
Code: place on pallet part 2
Display More202: !Collision Detected ; 203: R[142:PD Recovery]=8 ; 204: JMP LBL[900] ; 205: ; 206: LBL[70:Nxt Multi Drp] ; 207: !Next x Plus x Drop ; 208: SKIP CONDITION R[24:Part Drop Cond]=0 ; 209:L PR[50:Cur Pal Appr] 2000mm/sec CNT25 Skip,LBL[71] ; 210: R[20:Cur Robot Posn]=7 ; 211: R[142:PD Recovery]=10 ; 212: !Part Drop Detected ; 213: JMP LBL[90] ; 214: LBL[71] ; 215: R[20:Cur Robot Posn]=5 ; 216: PR[50,3:Cur Pal Appr]=PR[51,3:Cur Pal Place] ; 217:L PR[50:Cur Pal Appr] 2000mm/sec CNT25 Tool_Offset ; 218:L PR[51:Cur Pal Place] 2000mm/sec CNT5 Tool_Offset ACC50 ; 219: JMP LBL[75] ; 220: ; 221: LBL[75:Drop] ; 222: SKIP CONDITION R[145:Collision Mon]=1 OR ERR_NUM=11050 ; 223:L PR[51:Cur Pal Place] 2000mm/sec CNT5 Skip,LBL[77] ; 224: !Collision Detected ; 225: R[20:Cur Robot Posn]=6 ; 226: R[142:PD Recovery]=8 ; 227: JMP LBL[900] ; 228: ; 229: LBL[77:Release Prod] ; 230: R[20:Cur Robot Posn]=6 ; 231: CALL VAC_OFF ; 232: !Dwell for Plenum Release ; 233: WAIT .50(sec) ; 234: ; 235: !Clr Status Regs ; 236: IF (R[4:Current Pallet]=1),R[237:Ldpos1 Purge]=(0) ; 237: IF (R[4:Current Pallet]=1),R[238:Ldpos1 SSht Comp]=(0) ; 238: IF (R[4:Current Pallet]=2),R[247:Ldpos2 Purge]=(0) ; 239: IF (R[4:Current Pallet]=1),R[248:Ldpos2 SSht Comp]=(0) ; 240: ; 241: LBL[80] ; 242: !Update rate on PD Status display ; 243: CALL PMDSPSPD ; 244: R[6:Current Unit]=R[6:Current Unit]+R[11:Cur units to drp]-1 ; 245: !If last place then jump to end ; 246: IF R[8:Cur Pk/Pl count]=R[10:Cur TotPkPlInCyc],JMP LBL[100] ; 247: ; 248: !Disable Pik Agn ; 249: DO[138:OFF:Disable Pik Agn]=ON ; 250: ; 251: !Move up to pallet retreat posn ; 252:L PR[52:Cur Pal Retreat] 2000mm/sec CNT25 ACC50 ; 253: R[20:Cur Robot Posn]=7 ; 254: JMP LBL[60] ; 255: ; 256: LBL[90:Part Drp Pal] ; 257: ; 258: !Pre Picking Infeeds ; 259: DO[230:OFF:Inf1 PrePicking]=OFF ; 260: DO[294:OFF:Inf2 PrePicking]=OFF ; 261: !Picking Infeeds ; 262: DO[231:OFF:Inf1 Picking]=OFF ; 263: DO[295:OFF:Inf2 Picking]=OFF ; 264: CALL EOATSTAT(0) ; 265: !Reset Active Menu Done ; 266: R[160:Active Menu Done]=0 ; 267: RUN PD_REC ; 268: LBL[91] ; 269: IF R[160:Active Menu Done]=1,JMP LBL[95] ; 270: WAIT .25(sec) ; 271: JMP LBL[91] ; 272: LBL[95] ; 273: IF R[220:Recovery Options]=4,JMP LBL[103] ; 274: IF R[24:Part Drop Cond]=2,JMP LBL[103] ; 275: !Reinit Part Drop Monitor ; 276: R[24:Part Drop Cond]=1 ; 277: SKIP CONDITION R[24:Part Drop Cond]=0 ; 278: !Continuous checking for partdrop ; 279: !RUN PMDROP ; 280: MONITOR PD_MON ; 281: IF R[142:PD Recovery]=2,JMP LBL[13] ; 282: IF R[142:PD Recovery]=5,JMP LBL[27] ; 283: IF R[142:PD Recovery]=7,JMP LBL[62] ; 284: IF R[142:PD Recovery]=8,JMP LBL[63] ; 285: IF R[142:PD Recovery]=9,JMP LBL[66] ; 286: IF R[142:PD Recovery]=10,JMP LBL[70] ; 287: JMP LBL[63] ; 288: ; 289: LBL[100] ; 290: ; 291: !Cell Tracks Case Serial Numbers ; 292: !Placed to Pallet ; 293: ; 294: !Select Current Pallet ; 295: SELECT R[4:Current Pallet]=1,JMP LBL[101] ; 296: ELSE,JMP LBL[102] ; 297: ; 298: LBL[101] ; 299: CALL CASEQTY(1,202) ; 300: IF (R[204:Ldpos1 QtyPlaced]=1),R[203:Ldpos1 ArryPntr]=(R[202:Ldpos1 CaseQty]) ; 301: IF (R[204:Ldpos1 QtyPlaced]=2),R[203:Ldpos1 ArryPntr]=(R[202:Ldpos1 CaseQty]-1) ; 302: IF (R[204:Ldpos1 QtyPlaced]=3),R[203:Ldpos1 ArryPntr]=(R[202:Ldpos1 CaseQty]-2) ; 303: IF (R[204:Ldpos1 QtyPlaced]=4),R[203:Ldpos1 ArryPntr]=(R[202:Ldpos1 CaseQty]-3) ; 304: IF (R[204:Ldpos1 QtyPlaced]=5),R[203:Ldpos1 ArryPntr]=(R[202:Ldpos1 CaseQty]-4) ; 305: IF (R[204:Ldpos1 QtyPlaced]=6),R[203:Ldpos1 ArryPntr]=(R[202:Ldpos1 CaseQty]-5) ; 306: GO[16:0:Ldpos1 ArryPntr]=R[203:Ldpos1 ArryPntr] ; 307: GO[17:0:Ldpos1 QtyPlaced]=R[204:Ldpos1 QtyPlaced] ; 308: GO[18:45:Ldpos1 CaseQty]=R[202:Ldpos1 CaseQty] ; 309: DO[312:OFF:Ld1 Case Placed]=ON ; 310: JMP LBL[105] ; 311: ; 312: LBL[102] ; 313: CALL CASEQTY(2,205) ; 314: IF (R[207:Ldpos2 QtyPlaced]=1),R[206:Ldpos2 ArryPntr]=(R[205:Ldpos2 CaseQty]) ; 315: IF (R[207:Ldpos2 QtyPlaced]=2),R[206:Ldpos2 ArryPntr]=(R[205:Ldpos2 CaseQty]-1) ; 316: IF (R[207:Ldpos2 QtyPlaced]=3),R[206:Ldpos2 ArryPntr]=(R[205:Ldpos2 CaseQty]-2) ; 317: IF (R[207:Ldpos2 QtyPlaced]=4),R[206:Ldpos2 ArryPntr]=(R[205:Ldpos2 CaseQty]-3) ; 318: IF (R[207:Ldpos2 QtyPlaced]=5),R[206:Ldpos2 ArryPntr]=(R[205:Ldpos2 CaseQty]-4) ; 319: IF (R[207:Ldpos2 QtyPlaced]=6),R[206:Ldpos2 ArryPntr]=(R[205:Ldpos2 CaseQty]-5) ; 320: GO[19:0:Ldpos2 ArryPntr]=R[206:Ldpos2 ArryPntr] ; 321: GO[20:0:Ldpos2 QtyPlaced]=R[207:Ldpos2 QtyPlaced] ; 322: GO[21:5:Ldpos2 CaseQty]=R[205:Ldpos2 CaseQty] ; 323: DO[328:OFF:Ld2 Case Placed]=ON ; 324: JMP LBL[105] ; 325: ; 326: LBL[105] ; 327: IF R[110:EoB Active]=0,JMP LBL[110] ; 328: !EOB Purge Pallet ; 329: !CALL PD_PURGE ; 330: !EOB Cycle Stop Request ; 331: R[23:Cyc Stop Enabled]=1 ; 332: LBL[110] ; 333: !Disable Part Drop Monitor ; 334: R[24:Part Drop Cond]=0 ; 335: MONITOR END PD_MON ; 336: !Collision Monitor ; 337: R[145:Collision Mon]=0 ; 338: MONITOR END COL_COND ; 339: !Disable Pik Agn ; 340: DO[138:OFF:Disable Pik Agn]=OFF ; 341: IF R[20:Cur Robot Posn]<>6,JMP LBL[13] ; 342: !Store pallet retreat offset ; 343: PR[47:Last Retrt Ofst]=PR[52:Cur Pal Retreat] ; 344: LBL[113] ; 345: ; 346: !Payload w/No Prod ; 347: PAYLOAD[1:No Product] ; 348: ; 349: R[21:Last Pallet]=R[4:Current Pallet] ; 350: R[99:Last Cycle ]=R[1:Current Cycle] ; 351: ; 352: !Reset speed override. ; 353: $MCR_GRP[1].$PRGOVERRIDE=100 ; 354: JMP LBL[1000] ; 355: ; 356: LBL[900:Col Detected] ; 357: !Pal Collision Recovery ; 358: CALL COL_MOTN ; 359: JMP LBL[90] ; 360: ; 361: LBL[1000:Exit] ;
-
Code: Set UTool Macro
Display More4: ; 5: ; 6: !Select Gripper ; 7: SELECT R[7:Current Gripper]=6,JMP LBL[6] ; 8: =7,JMP LBL[7] ; 9: ELSE,JMP LBL[100] ; 10: ; 11: LBL[6:Cust Grp1] ; 12: !Initialize Custom Gripper 1 ; 13: !Calculated as a 5 Case Gripper ; 14: ; 15: R[58:Pal Num for Dims]=R[1:Current Cycle] ; 16: Get Unit Stats ; 17: !R[59] unit length ; 18: !R[60] unit width ; 19: !R[61] unit height ; 20: IF (R[62:Status Returned]<>0),JMP LBL[999] ; 21: ; 22: !Boxes Picked WonL ; 23: ; 24: !Utool3 (Center of Grip) ; 25: PR[73:Calc Utool3]=PR[65:Cal Pos Offset] ; 26: PR[73,3:Calc Utool3]=347 ; 27: !Utool1 ; 28: PR[71:Calc Utool1]=PR[73:Calc Utool3] ; 29: PR[71,1:Calc Utool1]=2*R[60:Y Value Returned] ; 30: PR[71,1:Calc Utool1]=PR[71,1:Calc Utool1]*(-1) ; 31: !Utool2 ; 32: PR[72:Calc Utool2]=PR[73:Calc Utool3] ; 33: PR[72,1:Calc Utool2]=R[60:Y Value Returned] ; 34: PR[72,1:Calc Utool2]=PR[72,1:Calc Utool2]*(-1) ; 35: !Utool4 ; 36: PR[74:Calc Utool4]=PR[73:Calc Utool3] ; 37: PR[74,1:Calc Utool4]=R[60:Y Value Returned] ; 38: !Utool5 ; 39: PR[75:Calc Utool5]=PR[73:Calc Utool3] ; 40: PR[75,1:Calc Utool5]=2*R[60:Y Value Returned] ; 41: ; 42: UTOOL[1:Vacuum]=PR[71:Calc Utool1] ; 43: UTOOL[2]=PR[72:Calc Utool2] ; 44: UTOOL[3]=PR[73:Calc Utool3] ; 45: UTOOL[4]=PR[74:Calc Utool4] ; 46: UTOOL[5]=PR[75:Calc Utool5] ; 47: JMP LBL[500] ; 48: ; 49: LBL[7] ; 50: !Initialize Custom Gripper 2 ; 51: !Calculated as center picking ; 52: ; 53: R[58:Pal Num for Dims]=R[1:Current Cycle] ; 54: Get Unit Stats ; 55: !R[59] unit length ; 56: !R[60] unit width ; 57: !R[61] unit height ; 58: IF (R[62:Status Returned]<>0),JMP LBL[999] ; 59: ; 60: !Boxes Picked WonL ; 61: ; 62: PR[71:Calc Utool1]=PR[65:Cal Pos Offset] ; 63: PR[71,3:Calc Utool1]=347 ; 64: !Center Picking Or Not? ; 65: IF (F[31:OFF:Offset Infeed 1] AND R[9:Cur TotUnitsPick]=1 AND R[1:Current Cycle]=1),JMP LBL[701] ; 66: IF (F[32:ON :Offset Infeed 2] AND R[9:Cur TotUnitsPick]=1 AND R[1:Current Cycle]=2),JMP LBL[701] ; 67: IF (F[31:OFF:Offset Infeed 1] AND R[9:Cur TotUnitsPick]=2 AND R[1:Current Cycle]=1),JMP LBL[702] ; 68: IF (F[32:ON :Offset Infeed 2] AND R[9:Cur TotUnitsPick]=2 AND R[1:Current Cycle]=2),JMP LBL[702] ; 69: LBL[555] ; 70: !Utool1 ; 71: R[107:Scratch]=((R[9:Cur TotUnitsPick]*.5)*R[60:Y Value Returned]+R[181:ZW_TEMP]) ; 72: R[107:Scratch]=(R[107:Scratch])-(R[60:Y Value Returned]/2) ; 73: PR[71,1:Calc Utool1]=R[107:Scratch] ; 74: PR[71,1:Calc Utool1]=PR[71,1:Calc Utool1]*(-1) ; 75: ; 76: UTOOL[1:Vacuum]=PR[71:Calc Utool1] ; 77: JMP LBL[500] ; 78: LBL[701] ; 79: !Not Center Picking For Single Ca ; 80: R[107:Scratch]=((R[9:Cur TotUnitsPick]*1.25)*R[60:Y Value Returned]+R[181:ZW_TEMP]) ; 81: R[107:Scratch]=(R[107:Scratch])-(R[60:Y Value Returned]/2) ; 82: PR[71,1:Calc Utool1]=R[107:Scratch] ; 83: PR[71,1:Calc Utool1]=PR[71,1:Calc Utool1]*(-1) ; 84: ; 85: UTOOL[1:Vacuum]=PR[71:Calc Utool1] ; 86: JMP LBL[500] ; 87: ; 88: LBL[702] ; 89: IF R[2:Current Unitload]<>107,JMP LBL[555] ; 90: !Not Center Picking For Single Ca ; 91: R[107:Scratch]=((R[9:Cur TotUnitsPick])*R[60:Y Value Returned]+R[181:ZW_TEMP]) ; 92: R[107:Scratch]=(R[107:Scratch])-(R[60:Y Value Returned]/2) ; 93: PR[71,1:Calc Utool1]=R[107:Scratch] ; 94: PR[71,1:Calc Utool1]=PR[71,1:Calc Utool1]*(-1) ; 95: ; 96: UTOOL[1:Vacuum]=PR[71:Calc Utool1] ; 97: JMP LBL[500] ; 98: ; 99: LBL[100:PTT Calc] ; 100: !Initialize Standard UTOOLs ; 101: UTOOL[1:Vacuum]=PR[17:UTOOL 1] ; 102: UTOOL[2]=PR[18:UTOOL 2] ; 103: UTOOL[3]=PR[19:UTOOL 3] ; 104: UTOOL[4]=PR[20:UTOOL 4] ; 105: UTOOL[5]=PR[21:UTOOL 5] ; 106: UTOOL[6]=PR[22:UTOOL 6] ; 107: ; 108: LBL[500] ; 109: !Update Via Motn Utool ; 110: PR[78:Calc Via Utool]=UTOOL[1:Vacuum] ; 111: PR[78,1:Calc Via Utool]=0 ; 112: PR[78,2:Calc Via Utool]=0 ; 113: UTOOL[7]=PR[78:Calc Via Utool] ; 114: ; 115: !Update Null Utool ; 116: UTOOL[10]=PR[65:Cal Pos Offset] ; 117: JMP LBL[1000] ; 118: ; 119: LBL[999] ; 120: !Get Unit Stats Call Failed ; 121: !SETUTOOL.TP Error ; 122: GO[3:0:Robot Error Msg]=5 ; 123: !Robot Assist AH ; 124: DO[160:OFF:Req Assist AH]=ON ; 125: UALM[5] ; 126: CALL HMIABRT ; 127: ; 128: LBL[1000:Exit] ;
-
Code: Vac Off
Display More4: ;IF R[8:CUR PK/PL COUNT]= R[10:Cur TotPKPlInCyc] , JMP LBL[1] 5: IF R[8: Cur Pl/PL COUNT]=1 JMP LBL [2] LBL[1] 6: RO[1:OFF:Vacuum Off]=OFF ; 7: RO[2:OFF:Vacuum On]=OFF ; 8: !Request Vacuum Blower ; 9: DO[168:OFF:Request Vacuum]=OFF ; 10: !Picking SSht ; 11: DO[172:OFF:Picking SSht]=OFF ; 12: LBL[2] 13; RO[2:disable zone 2]=ON 14: LBL[1000:Exit] ;
-
-
Bro gave all the info and still no help dam
Wish I could help
-
It looks like an overly complicated program. It will take some digging through to understand and would be difficult to do unless you are onsite with the robot. I suggest you put it in step mode and step through each line of code until you understand the different drop positions and signals.
-
Seems to me that the whole issue is due to the EOAT/hardware being used.
Unless I misunderstand, it sounds like you have 2 boxes gripped and you want to drop box 1 but you cannot do so without also dropping box 2; in other words, G2 only works if G1 is ON or gripping. Is that accurate? If not different hardware, it seems like there should be an electrical or plumbing solution to your problem.
If my understanding is correct, I do not see how software/programming can possibly resolve things, but I was wrong once before, so I'm going to keep an eye on this thread. Maybe I'll learn something new!