Seeq Team Lindsey.Wilcox Posted June 6, 2019 Seeq Team Posted June 6, 2019 Use Case Background Commonly, engineers are interested in calculating limits on a signal based upon the average and standard deviation. Additionally, there may be different modes of operation during which the performance - and limits - is different. This post describes how to develop mode based boundaries for a process signal to identify deviations from the normal or expected behavior. Mode Conditions In this example, I am interested in calculating boundaries on a Compressor Power signal based upon the mode of operation in a Compressor Stage Signal. (Note: These signals are from Example>Cooling Tower 1> Area A of the Example data shipped with each Seeq installation.) The first step is to identify the 3 stages of operation (Off, Running 1 Compressor, Running 2 Compressors) by performing a Value Search on the Compressor Stage signal: Average Compressor Power using Formula Next, I can use the Formula tool to calculate an Average Compressor Power signal, using the following variables and syntax: Variables Name Item Type $Series Compressor Power Signal $High Compressor High Condition $Low Compressor Low Condition $Off Compressor Off Condition Formula // Identify a reference capsule over which the statistic is calculated. You can think of this as the golden batch period or the period in time that we know that the system was operating properly. $refPeriod = capsule("2016-04-01T00:00:00Z","2016-05-01T00:00:00Z") //Cut the single continuous time series signal (Compressor Power) into sections which correspond to the different modes of operation. This gives us three intermediate time series signals which only contain data for the three distinct modes of operation. $highSeries = $series.within($high) $lowSeries = $series.within($low) $offSeries = $series.within($off) // Create three intermediate time series signals, one for each mode of operation. Find the average value of the time series signal during the reference time period for each mode of operation, and then turn that scalar into a time series signal which only exists in the appropriate mode of operation $highAve = $highSeries.average($refPeriod).tosignal().within($high) $lowAve = $lowSeries.average($refPeriod).tosignal().within($low) $offAve = $offSeries.average($refPeriod).tosignal().within($off) // Splice together the three time series signals into a single signal and step interpolate the $finalSeries $finalSeries = $highAve.splice($lowAve,$low,false).splice($offAve,$off,false).toStep() return $finalSeries Boundaries Using Formula To start, let's calculate the upper boundary as the average + 3 std dev. I can use the Formula tool to calculate this upper boundary using the following variables and syntax. Variables Name Item Type $Series Compressor Power Signal $High Compressor High Condition $Low Compressor Low Condition $Off Compressor Off Condition Formula $refPeriod = capsule("2016-04-01T00:00:00Z","2016-05-01T00:00:00Z") $highSeries = $series.within($high) $lowSeries = $series.within($low) $offSeries = $series.within($off) $highAve = $highSeries.average($refPeriod).tosignal().within($high) $highStdDev = $highSeries.standarddeviation($refPeriod).tosignal().within($high) $highBoundary = $highAve + $highStdDev*3 $lowAve = $lowSeries.average($refPeriod).tosignal().within($low) $lowStdDev = $lowSeries.standarddeviation($refPeriod).tosignal().within($low) $lowBoundary = $lowAve + $lowStdDev*3 $offAve = $offSeries.average($refPeriod).tosignal().within($off) $offStdDev = $offSeries.standarddeviation($refPeriod).tosignal().within($off) $offBoundary = $offAve + $offStdDev*3 $finalSeries = $highBoundary.splice($lowBoundary,$low,false).splice($offBoundary,$off,false).toStep() return $finalSeries Similarly, I can calculate the lower boundary as average - 3 std dev using the following variables and Formula syntax. Variables Name Item Type $Series Compressor Power Signal $High Compressor High Condition $Low Compressor Low Condition $Off Compressor Off Condition Formula $refPeriod = capsule("2016-04-01T00:00:00Z","2016-05-01T00:00:00Z") $highSeries = $series.within($high) $lowSeries = $series.within($low) $offSeries = $series.within($off) $highAve = $highSeries.average($refPeriod).tosignal().within($high) $highStdDev = $highSeries.standarddeviation($refPeriod).tosignal().within($high) $highBoundary = $highAve - $highStdDev*3 $lowAve = $lowSeries.average($refPeriod).tosignal().within($low) $lowStdDev = $lowSeries.standarddeviation($refPeriod).tosignal().within($low) $lowBoundary = $lowAve - $lowStdDev*3 $offAve = $offSeries.average($refPeriod).tosignal().within($off) $offStdDev = $offSeries.standarddeviation($refPeriod).tosignal().within($off) $offBoundary = $offAve - $offStdDev*3 $finalSeries = $highBoundary.splice($lowBoundary,$low,false).splice($offBoundary,$off,false).toStep() return $finalSeries Final Results Executing these 3 formulas results in 3 new time series signals: Average Compressor Power, Compressor Power +3sd and Compressor Power -3sd. The Customize menu in the Details Pane can be used to adjust how these signals are visualized on the screen: Content Verified DEC2023
Recommended Posts
Archived
This topic is now archived and is closed to further replies.