Develop a Monitoring Program

Edmhydraulics

Member
Join Date
Apr 2014
Location
Beaumont
Posts
173
Good day everyone, I have a system that I have designed that runs a cylinder up and down continuously. The load on the cylinder is monitored by pressure transducers on the rod end and blind end of the cylinder, the delta-p is converted to load based on the area of the cylinder, the stroke position is also monitored.

You can see the results of this system on the attached photo of the output screen.

What I want to do is design a program that can detect when the load differs substantially from the output graphs currently shown. I know I could write an algorithm that would watch the average load over one cycle, but this seems like it will be very complicated.

Does anyone have any general idea of how to accomplish what I want, or way to go about it or is the path I propose the best idea?

Thanks,

Graph.jpg
 
I will add that I am using Codesys as the programming environment, so there is a good resource of higher level math I can use to develop this monitoring program. Such as statistical analysis.
 
How about something like this:
  1. Calculate a rolling standard deviation of the max & min over some duration (or perhaps over the last 'n' cycles in your case).
  2. Calculate acceptable control limits (commonly +- 3*sigma from the mean).
  3. Raise an alarm when the max/min values for a given cycle fall outside the control limits.
I've used a similar strategy before but for continuous process monitoring (voltage & current monitoring in a plating process).

You should continue to maintain absolute high-high & low-low alarms, etc, but careful selection of the calculation window (or # of cycles) can allow you to use the calculated control limits to detect process changes over time.

Here is some sample VBA extracted from an old RSView32 project:

Code:
n = 0
mean = 0
s = 0
        
For i = 0 To UBound(Data)
    n = n + 1
    delta = Data(i) - mean
    mean = mean + delta / n
    s = s + delta * (Data(i) - mean)
Next

variance = s / (n - 1)

sigma = Sqr(variance)
gTagDb.GetTag(sigmaTagName).Value = sigma

gTagDb.GetTag(xBarTagName).Value = mean 'xBar
gTagDb.GetTag(UCLTagName).Value = mean + (3 * sigma) 'upper control limit 
gTagDb.GetTag(LCLTagName).Value = mean - (3 * sigma) 'lower control limit

Algorithms for calculating variance here

-Trevor
 
..........and that's what I'm talking about. Exactly what I was looking for Tvey, very helpful. I will try that tomorrow.

I have a function for Variance in Codesys, that I will try as well.

I will let you know how it turns out.

Thanks.
 
So you have a position+direction and you would like to know if the load is within the limits belonging to this position.
lets assume the travel is 40 mm.
make a array of 80 with minimum loads
and another with maximum loads.
If at any given position the load is not within these limits, alarm.

If you want it to be smart you will need as extra the variance tvey is talking about.
 

Similar Topics

Good Afternoon , This may be a different subject on this forum . I have been brainstorming a project with my hometown. Like many small and...
Replies
3
Views
1,849
hello, I got a job in a factory. I would like to develop my PLC programming skills. I know that every person has his own way of learning but if...
Replies
9
Views
2,540
Hi Anybody has idea of which package is best to develop reports for wonderware information server?
Replies
1
Views
1,616
Hi , I am an Electrical engineer , i am working in construction contracting field , and i would like to move to Oil and Gas sector through...
Replies
1
Views
1,805
Hi all, So I am going back to school part time, and am currently working on a student project in which I am consulting for a client in the...
Replies
8
Views
2,661
Back
Top Bottom