# Search the Community

Showing results for tags 'limits'.

• ### Search By Tags

Type tags separated by commas.

### Forums

• Community Technical Forums
• General Seeq Discussions
• Product Suggestions
• Seeq Data Lab

### Calendars

• Community Calendar

• Published
• Code
• Media

• 0 Replies

• 0 Reviews

• 0 Views

### Level of Seeq User

Found 4 results

1. Summary: Many of our users monitor process variables on some periodic frequency and are interested in a quick visual way of noting when a process variable is outside some limits. Perhaps you have multiple tiers of limits indicating violations of operating envelopes or violations of operating limits, and are interested in creating a visualization like that shown below. Solution: Method 1: Boundaries Tool One method to do this involves using the boundaries tool. This tool is discussed in Step 3 of this seeq.org post, and results in a graphic like that shown below. Some frequently asked questions around the above method are: Is there a way to make the different levels of boundaries different colors? Is there a way to color the section outside of the limits rather than inside of the limits? Method 2: Scorecard Metrics in Trend View Step 1. Load the signal you are interested in monitoring as well as the limits into the display pane. The limits can be added directly from the historian, or if they do not exist in the historian they can be created using Seeq Formula. Step 2. Open a new Scorecard Metric from the tools panel, create a simple scorecard metric on your signal of interest, with no statistic. Click the "+" icon to optionally enter thresholds, and add the threshold color limits that you are interested in visualizing. Note that the thresholds input in the boundary tool can be constant (entering a numeric value) or variable, selecting a signal or scalar.
2. 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:
3. Objective: Take a signal for which you have pre-defined upper and lower limits that are determined by an operating mode or production grade. We want to create a vertical boundary around the transition region between the two operating modes that has the greater of the two upper limits and the lower of the two lower limits. Assumptions: A signal for operating mode, product grade, etc exists that can be used to create a condition for all operating modes. The signal can be string or numeric and will be referred to in the solution as \$mode. A signal for the maximum (and minimum) limit by operating mode is available. These will be referred to in the solution as \$maximumAllModes and \$minimumAllModes. If a signal does not exist for these limits, one can be created so long as the maximum and minimum limit are known (can be constant or variable) for each operating mode. This can be done in Seeq Formula using the splice() function. Solution: Use Seeq Formula and the following syntax to create a condition (\$allModes) for all operating modes. In R.21.0.41 or greater, \$mode.toString.toCondition() In versions prior to R.21.0.41, \$mode.toString().toCapsules(max capsule duration) Create a new condition (\$transitionRegion) using Seeq Formula that captures the time for some period before and after the transition between capsules occurs. The following syntax grabs a three hour window after the start of each capsule and shifts it backwards by 0.5 hours to capture a small amount of time before and a larger chunk of time following the transition. \$allModes.afterStart(3h).move(-0.5h) Calculate the minimum limit during the transition region. Use Seeq Formula and the following syntax to find the minimum value of the \$minimumAllModes signal and create a new signal (\$minimumTransitionRegion) that apply that value over the condition \$transitionRegion. \$minimumAllModes.aggregate(minvalue(),\$transitionRegion,durationkey()) Calculate the maximum limit during the transition region. Use Seeq Formula and the following syntax to find the maximum value of the \$maximumAllModes signal and create a new signal (\$maximumTransitionRegion) that apply that value over the condition \$transitionRegion. \$maximumAllModes.aggregate(maxvalue(),\$transitionRegion,durationkey()) Use the boundaries tool to create a new boundary on the original signal with the upper and lower limits. Inputs into the boundaries tool are: Primary signal = the original signal Relationship type = boundary Name = [anything you want] we use transition boundary Upper signal = \$maximumTransitionRegion Lower signal = \$minimumTransitionRegion The output is a boundary around the transition region like shown in the attached screenshot. vertical boundaries.pdf
4. This use case came up while working with a customer last week, and I thought it was worth sharing on the forum, since other users may be interested. The user I was working with was interested in creating limits for a signal. The limits would be calculated based upon the average and standard deviation of the previous 4 hours of operation; essentially the user wanted to create a rolling 4 hour boundary. We worked out the following solution: 1. Create a periodic condition for the time period that you would like to use for this rolling window. Here I created 4 hour periods: 2. Next, use signal from condition to calculate the average of the signal during each of these 4 hours periods: 3. Use signal from condition again to calculate the standard deviation of the signal during each of these 4 periods. 4. Now use Formula to calculate the upper and lower boundaries based on the average and standard deviation. Here I’m creating boundaries that are +/- 2 standard deviations. Note that the ‘.delay(4h)’ is needed to shift the boundary signals so that the PV signal is being compared to the upper and lower boundaries calculated in the previous 4 hours. 5. Once the upper and lower boundaries are identified, use Deviation Search to determine when the signal is outside of these boundaries.
×
×
• Create New...