RSLogix 500 - Unit tracking and multiple unit load/unload

This means when a load blocks a PE its destination is moved into a register. When the load UNblocks that same PE its destination is moved the next (sequential) register and so on.
Very good. This will keep up with where each unit is located.
For a system like this I'd just use the workstation number as the destination and set up the divert logic accordingly. Outbound loads could be given almost any code other than 1-18. As far as the release side, I'd set up an integer pointer sequencer to check for loads available to release - ie.
That would take care of which units get released. Now how do we decide which new entering units go to which workstations without blocking the path of exiting units?

The goal is to maximize the number of units going to EXIT, so we need to exit and enter as fast as possible. I think the exisitng program logic is set up to only allow ONE unit to exit, then ONE unit to enter, and it is 512 rungs, so integrating new rungs onto that is a major task.

It may be easier to just make a list of the available Inputs and Outputs and start from scratch. This morning, I tried matching up the I/O to the program addresses, but my old worn-out brain got a bad headache so I had to put that on hold. A editible copy of the Layhout drawing is needed to show all the Input addresses and the Ouput addresses. I managed to import part of it into AutoCAD, but that is as far as I got.
 
A good place to start.

I'm just throwing this out for consideration: Our system is set up to track by the load blocking/unblocking PEs. This means when a load blocks a PE its destination is moved into a register. When the load UNblocks that same PE its destination is moved the next (sequential) register and so on. This provides some visibility for the time when the load is "in between" PEs.

Smart way of describing it - I like it
That is what I was trying to do but probably confused it with additional logic

Led to an idea of adding additional zones for the transition steps ( the Pallet is spanning two Zones ) - something to think about

That would take care of which units get released. Now how do we decide which new entering units go to which workstations without blocking the path of exiting units?

If you are tracking load and unload correctly why can you not have them anywhere along the conveyor - you only release one to the conveyor if there is space for it at the outfeed - I think that means that it will never block the conveyor from loading any workstation
as all unload pallets exit the load system

(Note: I am expecting all Zones to block the pallet from moving to the next station if the next Zone has a load OR unload pallet in it)
 
Last edited:
I think that means that it will never block the conveyor from loading any workstation as all unload pallets exit the load system

(Note: I am expecting all Zones to block the pallet from moving to the next station if the next Zone has a load OR unload pallet in it)
MichealG, Looking at Mike's program, on Rung 241, what he calls an "Evac. Spur 1 Unload Request" can only be started if an operator pushes a "Evac. Spur #1 Release Pallet" pushbutton. Then looking at Rung 266, the Unload can only be done if a Load is not being done.

I think the existing program is going to be more of a road block than a help in improving the efficiency of this line. The old program has a certain limited operating scene built-in to every rung, and to dis-entangle that in so many different rungs will be a major effort.

24 Stations Rung 241.jpg
 
Last edited:
Lancie1: I think it would be useful to everyone who is trying to help, if you could write a short description with the Steps (1, 2, 3, ectera) to (a) move a unit into a workstation, and (b) the steps to move a unit out of a workstation.

The current steps within the logic are as follows:
LOAD

1. Pallet must be at the upstream queue spot, ready to enter
2. A station must be available and have a "load request" bit set
3. That stations lift transfer must be clear (opposite station is not loading/unloading)
4. If there is no other "Load Transfer in Progress", this station will then be enabled to load and set the "Load Transfer in Progress" bit, to prevent any other stations from loading at the same time.
5. Once the "Load Request" and "Load Transfer in Progress" bits are both set, the pallet stop at the station is raised and the pallet is allowed to enter. (The pallet travels unchecked until it reaches the pallet stop)
6. Additional bits are set to determine whether the unit is traveling to an "odd" or "even" station
7. All lift transfer prox's are next nested together so that when any of them are activated, the system knows the pallet has reached its destined pallet spot and the lift transfer gets permission to raise.
8. (Nested for all stations) The lift transfer raises, depending on the station with the "Load Transfer in Progress" and the mollers on the lift transfer will move for/rev depending on "odd" or "even" moving the unit into the station.
9. When the station prox is activated, the mollers will stop, the lift transfer will drop, a the "Load Transfer in Progress" will be unlatched.

UNLOAD
1. A pallet must be present in a station and the operator must press the release pushbutton to activate and "Unload Request"
2. If the queue spot downstream of the stations is empty, an "Unload permissive" bit will be set.
3. If there is an "Unload Request", "Unload Permissive", and "No Load In Progress" than the station will set an "Unload in Progress" bit.
4. It will then be determined whether the unit is unloading from "odd" or "even"
5. (Nested for all stations) Depending on the station with the "Load Transfer in Progress", the lift transfer will raise, the mollers will kick the unit out onto the lift transfer, and the lift transfer will drop.
6. After the exiting unit hits a prox one station downstream, it will activate the "Unload Pallet Clear" bit
7. Once the unit reaches the exit queue spot, the "Unload Transfer in Progress" bit will be unlatched.
 
MichaelG: I would track numbers - The number is positive for loading Station number Negative for unloading Station number

I apologize if I am being repetitive/ignorant. So I can follow, how exactly does the PLC / code track these numbers? I understand your concepts, but how does that translate into actual programmable "tracking" instructions that the system can read and react to what is occurring in the table? How do you write a positive or negative number? Would these all be "N7" bits?


cwal61: I would expect a Line Full condition to not allow that or a tote in transport to stop next tote until provisions are true for release.

That is correct. With the current logic, a unit is only allowed to enter if a station is requesting a unit. Once this unit is entering, it latches a "Load Transfer in Progress" bit, which prevents any other actions to occur.

I am concerned that allowing several units to occupy the line at a time, this task will become much more complex.


cwal61: P.S. Welcome to Form and the world of PLC's

Thank you cwal61 and everyone else who has posted! I am amazed by the amount of advice and support I have received. I am very appreciative!



Lancie1: The existing code that we have from Mike is very long and convoluted. The rung explanatory comments are missing.

There were never any comments or explanations included in the program. This is the original code that was built in 10-15 years ago and has not been altered since. I completely agree that it is very long and difficult to walk through. Personally, I would be very curious to see what a well defined and organized code with "PLC best practices" would actually look like. With my previous projects, I have tried to follow along with what I have taught myself working through code on other parts of the line.


Lancie1: It may be easier to just make a list of the available Inputs and Outputs and start from scratch.

I have a spreadsheet I put together earlier to try and map out all of the I/O. I have attached it below. If this isn't what you were referring to let me know and I can definitely put something else together!


Lancie1: Now how do we decide which new entering units go to which workstations without blocking the path of exiting units?

In my opinion, it would be best to always load the furthest away / highest number station first. It is typical that all 24 stations are not in use at the same time. I would estimate that due to line throughput/demand, an average of 16 stations are used. That being said:

1. This would enable you to release a second unit to load behind the first (en route to furthest station) and enter a lower number station without possibility of interference/collision.

2. The higher number stations will fill and process more units. This means it will unload more units and you can capture greater overlap while exiting multiple units if the downstream exits first. (There shouldn't be a concern of collision if you let an upstream unit exit after a downstream unit.)
 
I’ve hesitated to respond since you’ve received great advice from Lancie1, MichaelG, and the others.

I have done several of these for moving product into/out of sort lanes. They are on the right track of how I would basically do this. For me, the conveyor is simple a set of N7 registers. You would have approximately N7:1 through N7:24 with each station having a space for a pallet in route. You would then number each station as to their number.

When a product is in a station, set a bit that can be used to keep that station from being assigned. Unlatch it after the request to exit AND confirmation of exit is complete.

When a pallet arrives at the first PES, use the number in N7:50 to assign the lane. Move that lane assignment through the registers as the conveyor is ON and each time it reaches the next PXS

As the product reaches each set of stations, do a compare to see if it equals those station numbers, if not, let it go, if it does, then raise the pallet stop and exit the pallet. Also, set the bit that states there is a product in that lane. This will keep the program from assigning that lane to another pallet.

To send the product on the main conveyor line, look at least 2 spaces back and make sure the N7:xx registers are equal to zero, then put the product back on the line. When you do, put a 99 into that N register to allow the pallet to continue to the end.

Of course, this is a simplified version of what you need to do. Some things to consider-
What to do if there is an e-stop – send everything to the end?
Put in a timer for the first PES/PRX so it will only send one pallet every minute (or whatever is needed for good separation).
If the conveyor is moving and the PES/PRX doesn’t change, declare a jam and stop everything until reset.
Look at the exit and put in logic that if the last station (or the exit lane) isn’t clear, then don’t allow a pallet to exit any station.

I understand that most of this has already been stated by most others here, I just thought I would add what I've done in the past.
 
The current steps within the logic are as follows:
LOAD

1. Pallet must be at the upstream queue spot, ready to enter
2. A station must be available and have a "load request" bit set
3. That stations lift transfer must be clear (opposite station is not loading/unloading)

I think this is unnecessary. Except for stations 1/2 and possibly 3/4, this should not matter because by the time the incoming load gets to the transfer the load/unload should have been completed. If a load is approaching an active transfer, you can make some logic to stop the main line until this is accomplished. This could be done either by sensing the oncoming load with a prox or PE or by checking upstream register locations for a non-zero value.

4. If there is no other "Load Transfer in Progress", this station will then be enabled to load and set the "Load Transfer in Progress" bit, to prevent any other stations from loading at the same time.

As above, once the induct point is cleared another load can be positioned to release and then go once the previous load is a certain distance downstream. An exception to this might be if the line is very full and you need to make an open spot for a waiting release.

5. Once the "Load Request" and "Load Transfer in Progress" bits are both set, the pallet stop at the station is raised and the pallet is allowed to enter. (The pallet travels unchecked until it reaches the pallet stop)

This also is not necessary. The logic at the destination transfer can look upstream (in the shift register) one or two places and test for a load destined for either workstation. When this is detected, and no load is currently in the destination transfer zone and the transfer is not active, then the stop can go up and 'arm' the transfer for a divert.

6. Additional bits are set to determine whether the unit is traveling to an "odd" or "even" station

If an integer register is used this capability is built in. Take the transfer for 6/7. Once the transfer logic sees either of these codes and arms the divert, bit zero of the register word corresponding to 6/7 can be used to set the direction of the mollers - 6 = 0110, 7 = 0111.

7. All lift transfer prox's are next nested together so that when any of them are activated, the system knows the pallet has reached its destined pallet spot and the lift transfer gets permission to raise.

This is not necessary. What I've described so far will allow multiple simultaneous load/unload transfers.

8. (Nested for all stations) The lift transfer raises, depending on the station with the "Load Transfer in Progress" and the mollers on the lift transfer will move for/rev depending on "odd" or "even" moving the unit into the station.

"Load transfer in progress" will have to go away. As I understand it, this signal inhibits any new loads entering the main line.

9. When the station prox is activated, the mollers will stop, the lift transfer will drop, a the "Load Transfer in Progress" will be unlatched.

See comment for item #8. It would be a good idea though to stop the main line if a load is sensed approaching a raised transfer.


UNLOAD
1. A pallet must be present in a station and the operator must press the release pushbutton to activate and "Unload Request"
2. If the queue spot downstream of the stations is empty, an "Unload permissive" bit will be set.
3. If there is an "Unload Request", "Unload Permissive", and "No Load In Progress" than the station will set an "Unload in Progress" bit.
4. It will then be determined whether the unit is unloading from "odd" or "even"
5. (Nested for all stations) Depending on the station with the "Load Transfer in Progress", the lift transfer will raise, the mollers will kick the unit out onto the lift transfer, and the lift transfer will drop.
6. After the exiting unit hits a prox one station downstream, it will activate the "Unload Pallet Clear" bit
7. Once the unit reaches the exit queue spot, the "Unload Transfer in Progress" bit will be unlatched.
One thing not addressed yet is the drive. This system may have been spec'd to only physically handle one load at a time. If you put several loads out there and then start/stop a few times to accomodate load/unload actions (I'm assuming an across-the-line starter) stuff could break.
 
Also, set the bit that states there is a product in that lane. This will keep the program from assigning that lane to another pallet.
Definitely - since there's only one space at each workstation.

I would offer this refinement, since inbound work at the outbound unload station is very bad - set the station's bit to indicate its unavailability for further work at the time of induction. Later when that station's outbound transfer completes, turn off this bit to again allow the station to receive work.
 
as someone who has spent almost 30 years tracking things, a few simple pieces of advice. I've not looked at your layout by the way.

1. If the conveyors are short and you pass an item at a time then tracking is fairly simple, usually you would transfer one object at a time, not allow one on until the previous is has completely left the conveyor. seeing some comments then I presume this is not the case.

2. If you have multiple object on a conveyor then you must have a timing device (not a timer). Either a rotary encoder per conveyor or a proximity picking up a flag on a shaft driven by the conveyor (in both cases not the shaft driven by the motor).

3. Each rising and falling edge of the timing device would give you a positive movement of the conveyor. each pulse would equate to a physical movement of the object (1", 2", 6", whatever).

4. The distance between each sensor will then be a set number of pulses. I would normally only want to detect the leading edge of the object.

5. You would need a plus or minus tolerance of when you expect to see an object (it won't be exact).

6. You need to decide how you will handle unknown or missing objects.

7. When detected at a sensor you can re-synchronise the real position of the object to your psuedo position.

8. you need zones, some people make a zone sensor to sensor, I prefer a conveyor = 1 zone, if there are 2 sensors then great you can re-sync twice. I don't like sensor to sensor because this confuses which conveyor is actually moving the object.

9 When a transfer is in progress (the object is straddling 2 conveyors) those two conveyors must act as one.

10. when entering the tracking zone then an ID number should be created for the object and that ID is what is moved throughout the entire tracking zone. Make sure there are at least twice as many ID's available than objects that can fit in the area.

10. If there is data and decisions related to the object, then the ID should be used as a pointer to a data area where all information for that object is kept. An array of some UDT type usually.
 
Last edited:
Station Assignments

mwesley12
I wrote this over the last couple of days. It's a Program to assign Station Calls to Load and Transfer Loads to Station. I have not done any logic for Release of Processed Load or Spacing of Unproccessed Loads. But thought you might like to have a look. Maybe this will help.
It's written with old RS500 ver.3.01 had it on an old laptop.
I will try to do an Upgrade next week after I get back to Work. I don't know the Person's name the license was originally listed Under. There's Quite a few of them, so maybe I can find the info on the network an do an upgrade so I can see your existing program.
 
mwesley12
I Have Attached A Spreadsheet To Show How I Made The Blocked And Clear Timer Logic. This Method Comes In Handy When Programming Repeative Rungs With Different I/O
Edit:
I Did Not Include All Entries In Database. After Logic is Entered Import Database And Verify File And Fix The Errors. Let Me Know How It Turns Out.
 
Last edited:
I have a spreadsheet I put together earlier to try and map out all of the I/O. I have attached it below. If this isn't what you were referring to let me know and I can definitely put something else together!
Thanks, Mike. That spreadsheet does help to see what I/O is used for each workstation.

I think now that there are two basic ways to handle your goal to increase the number of units processed. The first is to rewrite and redesign your program, adding a conveyor encoder to track the position of each unit on the conveyor. This allows complete control of all units, allowing exiting and entering units at the same time. Because the PLC will know the status of all units, and the location on the conveyor of all units, then this will allow the maximum number to be handled. However, this will require a complete re-do, and that might not be well-accepted by your bosses. They may not want to spend the time and effort to do this.

The other way is to add some limited tracking capability based on the information that you have now, by setting up memory storage words to track certain parameters. I think you need two registers, one that always shows the highest-numbered workstation that is ready to unload, and another for a lower-numbered workstation that is ready to load. Using those two pieces of information, your existing logic could be modified to unload and load only from and to those two places, allowing parallel unloading and loading. This method would need much less work, and would not require any physical equipmenmt additions.

Both the above memory words can be created by using a Sorting routine.

First, set up registers (memory words) with a list of all stations ready to be unloaded. Then sort this list from highest to lowest and save the top number to the "Station to be Unloaded Next" register. Then do the same for the stations waiting to be loaded, then sort that list for the station that has the next lowest number than the "Station to be Unloaded Next", and save to the "Station to be Loaded Next" memory register. Now you have your next two stations to be unloaded and loaded.

Second, do the unload and load at the same time for the "Station to be Unloaded Next" and the "Station to be Loaded Next".

Third, when the the Exit Queue reports an opening and the last workstation loaded reports a successful load, then repeat Steps 1 and 2 as needed, resorting and relisting for the next two stations to be unloaded and loaded. You will need some bypass logic that will allow a load if the "Station to be Unloaded Next" is empty (either no space in the exit queue or no stations with finished product), and some bypass logic that allows an unload even if the "Station to be Loaded Next" is empty (there are no new incoming unprocessed units or there are no empty stations).
 
Last edited:
If you want to send the load to highest station then put in this Conditon. Station Call equals zero in front of Main Routine's JSR for Station Assignment. I aligned the Call Subrountine Station 24 down to Station 1. If logic in Routine Solves the last condition then Reverse the Rung Alignment of Station Calls to 1-24
 
If your not careful then the stations at the end will never unload because of traffic or starve because upstream take everything.

In the past I have achieved this by allocating windows which downstream stations reserve. You would need a queuing system written, to enable stations to reserve a window or call for a pallet.
 
If your not careful then the stations at the end will never unload because of traffic or starve because upstream take everything.
Peter, I don't think that matters to the overall goal of increasing flow. These workstations are machines and they do not care if one does more work than the others. Besides, the unload time is 30 seconds, and the shortest machine processing time is 2 minutes, with average of 13 to 15 minutes. Based on those numbers, if they are unloaded in order, the work will be fairly equally shared.
There are two operators for the whole system, one for each side. The majority of the work is machine time. Operators are only there to connect and disconnect units. And you are correct. The goal is to maximize flow through the system.
It seems that we humans have a built-in sense of fair play. We think that work should be shared, things waiting in line should have the first one go first, and so on. The natural world is not like that - a herd of wild horses is controlled by the stallion that can run all the other stallions off, and the biggest, strongest pig at the feed trough gets the most slop.

There is no reason to think that machines should have to play fair. We read that the goal is to process the most units, but still what this means does not sink in. It doesn't matter to the overall goal if a workstation has a unit waiting and waiting to unload, as long as everytime that there is an unload opening, some station somewhere is being unloaded. Issac Asimovs 4 laws of robotics have not yet been implemented. Now that I think back, I believe Asimov's laws were about the relationships between robots and humans, not the relationship between machines.

EDIT: I would like to see a study about whether this "fair play" sense is greater in socialistic countries than it is in more capitalist democracies.
 
Last edited:

Similar Topics

Hi Everyone, I am not proficient in RSLogix 500 so I have a question regarding the evaluation of N7:0 data as an input. So as I understand in...
Replies
1
Views
92
I have a little bit of experience with Allen-Bradley. I have a Micrologix 1500 (RSLogix 500) and a PanelView Plus 7 (FactoryTalk View Studio ME)...
Replies
3
Views
182
buen dia. tengo una falla al pasar los tags de mi plc SLC 5 0/4 a mi panel me aparece un error Problem writing value " " to item <tag name>...
Replies
1
Views
89
Will someone please convert this logic to pdf?
Replies
2
Views
133
Hello, Haven't been on in a while. I need to generate a bit level pdf of the I/O for RSLogix 500. I can generate a report but it just shows the...
Replies
1
Views
163
Back
Top Bottom