Delay an output

Bmoore14

Member
Join Date
Jun 2016
Location
ohio
Posts
16
I have a conveyor belt dropping product into a burner. The conveyor has a weight belt input that is used to vary the heat to the burner. I need to delay the weight belt input by so many seconds to make sure the burner is firing at the correct rate when the product gets to the burner. What is the best way to do this in Studio 5000? For example... 10 pounds of product is 10 seconds away from the burner, I want the burner to fire in 10 seconds according to that weight.
 
Belt weight input is analog?
You want to delay the input or slow the belt down?
How do you determine the burner is firing at its correct rate? temperature? gas valve slide wire?
What is the max weight on the conveyor vs Max fire rate?
 
Last edited:
Seth350,

The weight belt input is a 4-20mA input. The burner is firing according to a thermocouple input. I want to delay the input by a set amount of time( 5 seconds lets say). So the belt reads 10 pounds at a given instance. so in 5 seconds, I want the burner to be firing at the predetermined rate for 10 pounds of product.

*The title should have been "delay an input"
 
how often do you need to read the weight belt and update the burner? is it always a 10 sec delay? will the weight belt measure more batches while the burner is waiting to fire for the first batch?

One way to do it would be with a fifo buffer (queue) tracking the fire setpoint. Every 1 second (or however often you need) you would read one fire setpoint out of the buffer and feed that to your fire output. You would also add a number to the buffer corresponding to the fire set point. The fifo buffer would have to be the correct size to match your desired delay (10s / the control interval).
 
Would not a traditional PID loop on your burner control solve this? We use burners to dry product in large dryers, with several zones. The PID loops for the burners manage the temperatures.
 
You could scale the input weight and then use the limit (LIM) function and do something like set your lower limit to 8 pounds and upper limit to 12 pounds, and if the input weight is between those, start a timer for so long and use the timer done bit to move the conveyor. It would take several different limits and timers depending on how important the weight is to the process.
 
Seth350,

The weight belt input is a 4-20mA input. The burner is firing according to a thermocouple input. I want to delay the input by a set amount of time( 5 seconds lets say). So the belt reads 10 pounds at a given instance. so in 5 seconds, I want the burner to be firing at the predetermined rate for 10 pounds of product.

*The title should have been "delay an input"

I'm having a hard time picturing what you are working with so just for clarification:

You have a conveyor belt that is transporting bulk material to a burner. Data available to you, the weight on the belt and the temperature of the burner? Is that it?
What controls your firing rate? Is it an on/off gas valve or a modulating valve? Any feedback provided back from the modulating valve if it has one?

IF the belt has a load cell under the belt at a specific point, and the belt speed does not change. You would need to know distance from load cell to end of conveyor to figure feet-per-minute, inches-per-second, or whatever measurement suits you.

Maybe try posting your program so we all can be on the same page with you. It has to be in a .zip file.

Also, need more detailed info on what this process does. A lot of things depend on what you need to use.
 
I think the problem OP has is that the input is measured x seconds before it goes into a burner, but needs the burner to react when immediately when the object is dropped in. You can't user a timer to save the information and input it later because there could be a continuous stream of product, which means you have to save a variable for each time interval and have a timer for each.

I don't know the solution to this, except maybe move the load cell closer...
 
You can't user a timer to save the information and input it later because there could be a continuous stream of product, which means you have to save a variable for each time interval and have a timer for each.

How about a shift register. The weight sampled at an acceptable rate and shifted along in time to the proper point to be used as an input to the burner.
 
So the burner is always x number of seconds behind the weight. As Bernie said, you need to buffer the weights from the scale for x number of seconds. How many samples you need to buffer depend on your process.
 
As mk42 said, sounds like a fifo buffer to me.

Check the weight every second and save that in an array of 10 reals say weight[0] to weight[9] then run a loop to that makes weight[9] = weight[8] and weight[8] = weight[7] and so on. Then use weight[9] to calculate the amount of degrees needed for the furnace.


FOR i:= 9 TO 1 BY -1 DO

Weight[i+1]:=Weight;

END_FOR;

Weight[1]:=fCurrentWeight; //the 4-20ma signal scaled to a real/float value

fWantedTemp := fMinTemp + Weight[9] * fSomeEmpiricalFactor //Some calculation to work out the temp needed


The way I would do it in Siemens would be to use an OB35 that is called every 100ms or 1000ms and write some SCL to handle the FIFO calculations. I think the equivalent is called a periodic task in Allen Bradley. If you are going for more than values(like measuring every 10 or 100ms), you may want to change i and use it as a pointer instead of moving all the values to save on processor time. But that makes the code more complicated.


http://www.plctalk.net/qanda/showthread.php?t=52053&highlight=running+average&page=2
This thread may be useful to you though, check the program posted by OkiePC .
 
Last edited:
Hello all,

Thank you all for you help!! Being a newer programmer, this is awesome to know so many people want to help!

This is a customer request. We have the control programming done. I just ran into a snag delaying the weight belt input.

I have a numeric entry on the screen to adjust the set point of the delay in seconds. My goal is to receive the weight belt input at a given instance, then hold that number for the set amount of seconds then when that time has elapsed, that number will output to burner control actuator. I can do the scaling. I do not need help with that.
Would something like this work(pictures attached)?

I'm not familiar with fifo load and unload. Would I need to clear the fifo array once it fills up?

Capture.jpg Capture1.jpg
 
Whatever you do is going to depend on how fast this conveyor is running.
If it is dumping material in that burner every 4-5 seconds or every 4 minutes.

If the conveyor speed never changes, then measure the time it takes to travel. If time of travel from weigh scale to burner is greater than burner response time, then you can do what you are wanting to do.
But, if the time of travel is less than burner response, then you are better off leaving it alone, in my opinion.

Everyone's suggestions will work as long as:
1. There is only one bulk of material being weighed, and there is only that one bulk between weigh scale and burner.
2. The conveyor speed does not change, or you are able to get feedback for speed of conveyor for calculations.
3.Burner response to fire rate change is faster than bulk drop off intervals.

This one would work as well, granted the three scenarios above are true.
IE., From weigh scale to burner takes 3 minutes. 3x60=180seconds

The 180 seconds figure is going to be your "encoder".
Once you see a positive signal from the weigh scale, start timing your "encoder".

Choose a spot on the belt to be your "feedforward" point. Meaning, at what point on the conveyor should you send a new fire rate to the burner?
You mentioned, when the product was 10 seconds from the burner. You wanted to send a new fire rate to it. Now, you can subtract the 10 seconds from 180seconds. So, when your timer equals 170seconds, send your new value to the burner.

You can then scale your weight captured to burner rate, then move that value once your "encoder" timer reaches 170.
Calculate your slope between your min and max weight and min and max burner rate.
(Y2-Y1)/(X2-X1)=Slope
Y1=Min. Burner Rate
Y2=Max Burner Rate
X2= Max Weight
X1=Min Weight

Slope x weight= New Burner Rate

You can also add in something simple like, if weight>X, subtract X from 180. All this does, is if the weight is greater than X, move the point at which you start increasing the fire rate father from the burner.

As well as always have a minimum fire rate being sent to the burner. This will keep the burner semi hot during dead periods.
 
Last edited:

Similar Topics

Hi I need a safety system with safety encoders as input (profisafe bus) and digital outputs. When position or speed of some rotating device...
Replies
2
Views
1,730
The diagram in the "Learn PLC's" tutorial showing the longest time it takes to turn an output on looks incorrect to me? Surely the diagram should...
Replies
16
Views
4,170
hai.. im quiet new for plc programming, and now currently learning plc with siemens s5 - 100. btw, my friend gave a program to me, its a...
Replies
2
Views
4,165
Build error occurs with TON ladder logic command. Time Input expected on block. Using Integer Tag under Control Local, and then hard number 19...
Replies
2
Views
752
I have an SLC 503 running a machine with a scanner and 1794 RIO. One of the functions is a register motor on a printing cylinder. The manual 3...
Replies
3
Views
1,273
Back
Top Bottom