Currently setting up/integrating a GP50 robot with a YRC1000 controller for a depalletizing application for a customer. This is a robot with base, no external axis. Each pallet is 7 layers tall, and each layer is a 10x12 grid of product, a total of 120 parts per layer (bottles). We are using the Cognex vision system to create a vision-guided depalletizing application. My plan is to only scan the X&Y axis of the top layer of dunnage and apply that for the whole pallet. The EOAT is a dual-row tool (20 bottles per pick). There will be a total of 6 picks per layer. I have already taught the camera TCP, pointer tool TCP (for calibration of the Cognex grid of UF#1), and all other TCPs needed. The camera is calibrated, and so are the UF. UF#2 is created from UF#1 when the ADJUST macro is ran in what I am calling my "Vision Capture" program. The ADJUST macro within my Vision_Capture program is setup as such:
Vision Result (P) = 0
Camera TCP# = 5
Mobile Camera
UF to Create = 2
Vis Result BF(P) = 10
Pause = 0
I have already taught the top layer (relative job within UF#2). I have a main "Pick_Bottles" program that calls a subprogram (Pick_Bottles_Pick_1-6) depending on what I000 (Row Pick #) is equal to (1-6). My plan is to have an IF statment at the beginning of the Pick_Bottles program stating IF I000>1 & B030=0, execute an offset of Z, then set B030 to 1 so that it does not run through that offset again until an entire layer has been picked. I am needing assistance with setting up that offset in the IF statement. I thought about teaching and making a job for each layer but that would increase program time drastically.