LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

I am looking for a better way to determine when temperatures have reached steady-state.

I am monitoring the temperature of a device, and would like to have my VI determine when steady state has been reached, and then change the operating conditions. I currently have a loop which simply looks at the slope of temperature with respect to time, and identifies steady state when that slope is below a certain value.

The problem I am having is that small ambient fluctuations and the amount of measurement error are making it hard to accurately determine when steady state has been reached. Can anyone suggest a better approach, either using an algorithm or possibly another VI?

Thanks,
Randy
0 Kudos
Message 1 of 12
(5,086 Views)
?
 
Keep a running average and use the SDE as your threshold?
 
?
 
Just sharing a thought,
 
Ben
Retired Senior Automation Systems Architect with Data Science Automation LabVIEW Champion Knight of NI and Prepper LinkedIn Profile YouTube Channel
0 Kudos
Message 2 of 12
(5,078 Views)
SDE? Not sure we have it... Also, I don't know what the steady state temperature is going to be; that is one of the things I am trying to find.

Thanks again,
Randy
0 Kudos
Message 3 of 12
(5,068 Views)

OK I should have said "Standard Deviation"

When you process variable is in steady state, the Standard Deviation will be small.

When it is drifting the standard deviation will jump up.

Ben

Retired Senior Automation Systems Architect with Data Science Automation LabVIEW Champion Knight of NI and Prepper LinkedIn Profile YouTube Channel
0 Kudos
Message 4 of 12
(5,063 Views)

near to Bens answer:

use a circular buffer (serach examples) to hold the n- past temp. points in an array

Now you can look at the min/max values (or mean/s-dev).  I used this for a temp-calibration-setup with success

Take a look at the point by point vis they already do the trick.

OR: Just think on what YOU are doing, when looking at the chart and wire that in LabVIEW

 

Greetings from Germany
Henrik

LV since v3.1

“ground” is a convenient fantasy

'˙˙˙˙uıɐƃɐ lɐıp puɐ °06 ǝuoɥd ɹnoʎ uɹnʇ ǝsɐǝld 'ʎɹɐuıƃɐɯı sı pǝlɐıp ǝʌɐɥ noʎ ɹǝqɯnu ǝɥʇ'


0 Kudos
Message 5 of 12
(5,043 Views)
I think from a numerical poiint of view, if there's a certain amount of "noise" on the signal, then the only real way to determine true steady state is using the approaches outlined here, but perhaps over an extended period of time.  By increasing the sampling time, the "random" arrors disappear, whereas a drift will remain.

I've heard of this problem with pH meters and most require a minimum deviation (max-min) within a certain time frame before declaring steady state.

If you can't get it to work properly using different functions (SD, max-mean or whatever) just try increasing your sample.  Of course this means you'll have to wait longer before the software actually registers a steady state, but if you're looking for steady states in the range of your measurement accuracy, there's no other choice.

Shane.
Using LV 6.1 and 8.2.1 on W2k (SP4) and WXP (SP2)
0 Kudos
Message 6 of 12
(5,039 Views)
Right now, I am taking 10 temperature samples over a 2 minute period, and averaging those to get one data point. I will try looking for a standard deviation of the data points. Does this seem like an OK approach? Would it be better to take more samples, or just the same number over a longer period?

I am guessing the only way to determine what SDE indicates steady state is to just let it run to steady state a few times, and calculate it?

Thanks for the help,
Randy
0 Kudos
Message 7 of 12
(5,023 Views)
Pretty similar to what Ben said, but I'd suggest using a low pass filter (pretty much the same as averaging) and then calculate the derivative just like you were. All the transient stuff will be filtered out, and you will be left with a very clear indication of changes that your threshold on the derivative will pick up. Of course, as with averaging there will be a delay between when actually achieving steady state, and when your algorithm will detect it. Hopefully a small delay is insignificant to you. If you need details about the filter, post again. I'd suggest a Butterworth set to lowpass, and make sure you initialize it only once at the beginning. (also, you won't find the vi in the LV base package).

Chris
0 Kudos
Message 8 of 12
(5,017 Views)
I believe that I have a problem similar to Randy's.  I am trying to filter transient data out of a 2D array.  The array is columns of data, engine parameters, and I want to filter out all of the transient engine speed conditions.  I have a good understanding about how to identify transient behavior after reading this thread, but I need to be able to generate a new array devoid of all parameters associated with the transient behavior.

About the data.  It is in columns and imported from a CSV file (sample attached).  I strip the first row (comments on the file) and eventually strip the second row (data labels).  The is always of unknown size and order (engine speed may be first, last, or anywhere in the middle).

I have also attached the start of the VI I am trying to create, but I believe I hit a wall and need to try something new.  My current dilema is how to identify the position of transient behavoir in the array in order to delete the associated data.
 
Thanks!
0 Kudos
Message 9 of 12
(4,692 Views)