jrupp82

Tray Loading Queue Help

7 posts in this topic

Hi all, First of all, so I keep everyone square, I'm running a CompactLogix PLC with RSLogix5000. I'm looking for some help with an application I have built in-house. I have a robotic pick & place machine that I have in production, and I'm looking to make an enhancement to a Tray Loading feature that I use. Currently, the machine will accept stacks of trays that we place parts into, unstack those trays, feed singles into the Robot Zone, then restack them after exiting the zone as a full tray. These said trays are typically the same size for a production run, however, on some occasions, we will run out of available trays of the desired standard size, and substitute it for another that will work, which is just taller/shorter. Now, my machine is currently setup to handle all of the variety of trays that we have in house, that's not the issue. The issue is that currently, the only way to change tray size is to out the remainder of the current trays until the machine is empty, change tray size on the HMI, and load the new trays in. All in all that works, but we try to run this machine with what we call a partial operator. That person is responsible for 4 other machines to keep running, and what is going to happen is the machine will sit empty, shut off, for several minutes until they come back around to it. What I would like to create is a queue for the front of the machine, where typically it would be populated with 7 stacks of the "standard" tray. The information that I would store for that would be tray size & number of trays per stack. When an instance comes up that the operator has to change tray sizes, they will access the machine through the HMI, indicate how many more standard tray stacks are in line, if there is a partial stack of standard trays (and how many in it), and then the new tray size and quantity per stack. That way, the machine doesn't shut down, I'll just keep track of the queue and I'll know when to change over to the new size. I've been reading this, and other forums searching for a solution, but I still don't quite understand how to handle this. I don't know whether to use the FIFO instructions, or to write my own code to handle it, or....Just looking for some insight from others who have had more experience than myself. Thanks in advance!

Share this post


Link to post
Share on other sites
Is your application as simple as a "bit" to indicate the status of a part? Like could you use a BIT SHIFT to track your parts? I wrote an article how to use a bit shift here: http://www.mrplc.com/kb/Programming-Application-How-to-use-Bit-Shifts-(BSL)-in-PLCs_71.html If you scroll all the way down to the bottom, the last image is an animated GIF I made, that shows how a bit shift is used to track the status of a part through movement.

Share this post


Link to post
Share on other sites
No, I wouldn't call it a simple bit shift. I would like to pass information through the queue such as size of tray & quantity in the stack. I have looked at you bit shift example, however, and found it helpful in beginning to understand the uses for where it would fit. I just think I need something a little more for this application.

Share this post


Link to post
Share on other sites
Are you familiar with making an AOI? (An Add on Instruction?). Would it be possible to make your own ADD-ON instruction that has ladder logic inside of it, that takes the information as parameters. AKA. Size of Tray and Qty of Stack. So your AOI would have two parameter inputs. When the AOI goes TRUE, the ladder inside the blocks takes those two bits of information and processes it depending on what you input as parameters? That's the first thing that came to mind next.

Share this post


Link to post
Share on other sites
I have never made my own AOI's, but I have used them. I assume its not too difficult, just create the ladder to do the work, and then call the AOI as needed. So, if I create an AOI to handle loading the new stack information into place, could/should I then use plant that information into a FIFO (FFL/FFU) to handle the queue portion? Or would you recommend just storing in an array on my own and just move them up the line as they called into the Unstacking Station?

Share this post


Link to post
Share on other sites
For the QUE portion. Maybe make a UDT. Called "TrayConfig" Inside that UDT make your members you need. Right click and make a new UDT. Member #1 = Tray Size = INT Member #2 = Stack Size = INT Member #3 = whatever else you want for properties you want to keep track of. Then make an ARRAY Tag that is based on the TrayConfig Let's call it. "TrayQue" ARRAY. We can make an array of 7 of them lets say. So our Tag name is now TrayQue(0).TraySize TrayQue(0).StackSize Replace the "0" with a tag name that becomes the array pointer (an indirect address) or in this case the tag name is "CurrentTray". TrayQue[CurrentTray].TraySize TrayQue[CurrentTray].StackSize So now everything is driven off a single INT "CurrentTray, that you can increment or decrement in logic, or a paneview button etc... Now here is where the AOI comes into play. Have an AOI that has input parameters that accept these two inputs. TrayQue[CurrentTray].TraySize TrayQue[CurrentTray].StackSize Of course, you will have pre-written into the arrays the different numbers you need TrayQue[0].TraySize = 12 TrayQue[0].StackSize = 10 TrayQue[1].TraySize = 14 TrayQue[1].StackSize = 8 TrayQue[2].TraySize = 16 TrayQue[2].StackSize = 6 So when the CurrentTray is "1" The AOI gets a 14 and 8 passed into the AOI that does the "robot" part. Maybe you don't even need an AOI, but you can pass these numbers into whatever you need to make the robot do it's part. I hope I explain the idea of all that...

Share this post


Link to post
Share on other sites
I believe I understand your concept. You're saying to basically skip the FIFO tools and create a simple "pointer" to identify the defined tray stack within the array that is coming next? Basically creating my own FIFO tool without the A/B canned one. That sounds simple enough. I think from the AOI standpoint, it may be beneficial to use this to run the code which takes the tray information and calculates my corresponding robot positions, then MOV those values into the robot AOI's. I think I have a plan, now to try to write some code and test it out. Thanks...Josh

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now