Ffl/ffu & fsc

bbishop108

Member
Join Date
Mar 2017
Location
Indiana
Posts
86
For those who may recall I had posted previously about the FSC instruction, and while I have a better understanding of how to use it I find myself wanting to incorporate it with the FIFO instruction.


So basically I have a plate that will hold 30 parts as such I have a DINT Array for each of those positions, Part_Location[30]. So my FSC will look for the first available spot that is empty, and I will move the position stored in the Control.POS into the FFL.


Before I execute the FFU, every time a part is loaded into the plate it starts a timer. Each part has to sit in the plate for a minimum of 2 minutes, so I will also have 30 timers one for each position of my DINT Array all timing at different times while I continue to load the plate.



So my confusion in understanding how to use the FFL/FFU is that I only want to trigger the FFU when the 1st placed part's timer is done. This will then indicate that I am ready to remove that part from the plate. The problem comes when multiple parts are available to be removed from the plate within a short period of time. So while I continue to load the plate, I also unload the plate when the 1st part is ready be removed. While I am removing that first part, and then proceed to load the next part more than 1 part becomes available to be unloaded.



So I am not sure of when to trigger the FFU as there will be multiple parts ready to be removed from the plate, so when I trigger the FFU it doesn't trigger again even though the next part is ready to be removed from the plate. Thanks
 
Last edited:
Based on the design description, it sounds to me that you will be using the value in the FIFO as an index into parallel 30-element arrays describing the positions of the plate. One of these arrays is a DINT Part_Location[], and another would be location occupied timers, Part_Timer[], for example. (All of the Location data could also be packed into a UDT if desired.)

In this scenario, if the FIFO is not empty, location zero is holding the index of the part that has been on the plate for the longest time. So you would use that value (i.e., FIFO_data[0]) as an index into Part_Timer[] in order to check the done bit. When that oldest part timer is done (i.e., 2 minutes), the index is unloaded (FFU) from the FIFO, and physical part removal action is initiated.

When the plate system is later ready to have another part removed, you would go back to waiting on the done bit of the oldest timer (i.e., the one now referenced by the zero element of the FIFO). It is possible more than one timer would be done, you will just be getting the oldest one.

One watch-out is that the FFU will need to see a false-to-true transition, meaning you will not be able to remove parts on contiguous program scans. This will likely not be a concern if there is some physical action involved in removing parts, which will occur over many program scans.
 
Last edited:

Similar Topics

A couple of questions with RS500 FFL-FFU instruction set. 1-Does the stack load from the bottom or the top, My stack is #N7:50 with a length of...
Replies
7
Views
1,566
I have used fifo's before, and I think I understand the general concept. However I am having trouble trying to create one that stores the...
Replies
19
Views
11,216
Hey guys, I came across one question about the FIFO, FFL & FFU instruction. I want to measure the wheel speed, so I use the RPM encoder as the...
Replies
8
Views
3,993
When executing a FFU to unload the oldest value the data in the file is shifted down and the position value is changed. Does this shifting take...
Replies
12
Views
3,366
Hello, I'm currently programming a MicroLogix 1400 in RSLogix Micro, and I'm trying to put data into FIFO queues. Would you know how to use the...
Replies
4
Views
5,063
Back
Top Bottom