Sortation Tracking Questions - first time doing "advanced" Ladder

nox

Member
Join Date
Oct 2007
Location
Indiana
Posts
10
Hello all, I am working for a material handling company that specializes in high speed sortation and distribution systems. Our company standard was PC based VLC up until recently. As of late we have been migrating towards RSLogix5000 and the CompactLogix platform in an attempt to appeal to a wider customer base. That being said this is the first time we have done any sort of sorter conveyor tracking in ladder and I am running into a few walls.

First off, the basic overview is that I have a piece of conveyor with 22 divert stations along its length and am tracking the conveyor position with an encoder. At the induction of the belt I receive a string from a host system that tells me the package ID as well as which lane I am to divert it to.

My current problems are twofold, first, I would need to monitor the string tag that comes from the host so that I know to parse out the data when new data is present. My first thought was to use a simple NEQ but the string can be alphanumeric so any sort of DINT or REAL is not available to me.

Second, tracking down the conveyor is giving me fits as well. I currently have the encoder mated with a ONS bit to increment a counter every time the encoder pulses. My first thoughts were to input package data into a FIFO array using the counter value + the lane location as the position of the FFL, but I am not allowed to put a tag in that place. (My thoughts were to unload the FIFO every encoder count and when the unloaded value was not equal to 0 I would know to fire the divert solenoid).

Hopefully someone has some ideas on this subject, or maybe I am going about it totally wrong. Thanks for your help.
 
Quick question I just thought of, can I load an array using the MOV and unload it with the FFU? Or do FFL and FFU have to be used together?
 
Can't provide too much assistance. I can provide a sample code for an old sortation conveyer we once had. This system had a total control software interface used an slc 504 programmed with rs 500. Total lanes was 8 and it used an wheel based encoder under the belting with a barcode reader. The operator would enter what lane he wanted a given product to go down the box would trigger a photoeye that would activate the barcode scanner and start the count. Each lane would then have a photoeye oon which would tally up how many boxes went down each lane. This same PLC also ran a pallet conveyer so you will see some of that info in it as well. Hope this provides some measure of help
 
TIP: Create your own ID for the parts.

If you can have a maximum 20 parts on the tracked zone then create an array 30 long, then as you detect parts ID them in order you see them 1-30 and the back to 1 etc.

Make the array able to store all data for the part, make this a UDT to enable mixing the data types. So an array, 30 long of data type (YOUR UDT NAME). Included here would be part no/id and destination.

In your tracking table, place the part ID, i.e 1 to 30.

When the one shot is created for the encoder, move all data in the table up 1 (ID 3 was in pos 4, moves to pos 5, etc).

Positions in the table that coincide with diverter decsion points, should look if an ID is present after a move, if an ID is present, then look-up into its array and get the destination, if they match, divert, if not, don't.
 
nox said:
My current problems are twofold, first, I would need to monitor the string tag that comes from the host so that I know to parse out the data when new data is present.
I've seen it done something like this (on a SLC/5-04):

Continually compare the incoming string, say 'ST1', with a constant string, say 'ST2', set up as null "" - a string consisting of zero characters. When the strings do not match new data has been received. Extract what you need from ST1 then set it equal ST2 to reset.
 
I can't find the thread now, but I learned the trick of using COP on each pulse of the encoder on this forum a few years back in tracking applications for controllogix.

 Encoder                       One Shot
---| |-----[ONS]-----------------( )-----

One Shot +---COP------------------+
---| |------| Copy File |---
| Source Dint_Array[1] |
| Source Dint_Array[0] |
| Length 1000 |
+------------------------+



This will shift the DINTS through the array backwards. So they will start out at Dint_Array[1000] and at each pulse of the encoder shift one position closer to Dint_Array[0].

Then if an item is entering the system, MOV an index number into Dint_Array[1000]. If nothing is entering MOV a number that represents an empty space (the most obvious, being 0 since this is what the array will be filled with when it is created.)

I would just use indexed addressing to refrence the item's ID in a string array if you are comparing alphanumeric characters at the divert stations.

Go to http://literature.rockwellautomation.com and download Logix5000 Controllers Common Procedures - Pub. 1756-PM001H-EN-P and read chapter 12 on how to manipulate ASCII text. Even though the focus of the chapter is ASCII, they use a luggage sortation system as an example.
 
thanks for the link, I think I have a handle on the ASCII stuff now. I'm still confused on the actual tracking.

In my program I have created Sorter_MAP_File[4000] which is a string array. On every encoder one shot I am incrementing a counter and moving Counter.ACC into Sorter_Pointer_Value. I then use the encoder ONS again to check for data in Sorter_MAP_File[Sorter_Pointer_Value].

The point where I am becoming confused is putting package data into the Sorter_MAP_File. My train of thought is to put any new data into Sorter_MAP_File[Sorter_Pointer_Value + Distance from induction to divert]. As the pointer indexes up it should hit this new value when the product is in front of its lane and should divert propery.

Does this sound right to you guys? Or is there maybe an easier way?
 
That sounds right to me. That is how I did a web defect tracking system several years ago. Yes, I picked it up from someone else.

You are basically constructing a circular queue. They work very well and have progressively increasing efficiency relative to shift schemes as the data sizes get bigger. Just make sure you correctly handle the wrap-around case.

Keith
 

Similar Topics

Hi Guys! Please, I'd like to know how Motor speed Control in Conveyor/Sortation Systems are Programmed/achieved for Factory and Warehouse...
Replies
10
Views
2,075
Hi Guys, I have a small sortation conveyor that I am going to write a program for and would like some suggestions for the right approach to take...
Replies
3
Views
2,715
Can someone direct me to a sample PLC5 code used to read scanner barcode from the scanner and sorting the box to the appropriate destination?
Replies
3
Views
1,992
I am attempting to reject a bottle If the label fails. The rejection works fine at normal line speed but at low speed the rejector fires (air...
Replies
35
Views
1,182
Is it possible to gather OPC data through a 1783-NATR? Searching around, it sounds like OPC data might be blocked by any NAT... Is there any work...
Replies
2
Views
261
Back
Top Bottom