Jump to content

Allison Buenemann

Seeq Analytics Engineers
  • Content Count

    26
  • Joined

  • Last visited

  • Days Won

    4
  • Points

    10 [ Donate ]

Allison Buenemann last won the day on September 12

Allison Buenemann had the most liked content!

Community Reputation

10 Good

Personal Information

  • Company
    Seeq Corporation
  • Title
    Analytics Engineer
  • Level of Seeq User
    Seeq Beginner

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Summary: I want to create a process variable monitoring dashboard to view the trends over the last day against various threshold values. Solution: To create the monitoring charts to be included in the dashboard, follow the methods described in this seeq.org post: Then follow the steps below to create your dashboard. Step 1. Create a new Organizer Topic. From the Seeq home screen, click the "New" drop down and select "Organizer Topic". Step 2. Use the "Insert Table" button to insert a table with an many row and columns as you would like charts in your dashboard. Step 3. Use the table formatting options (available by clicking into the cell in the table or highlighting multiple cells) to merge the top row to create a title row if desired. From the table formatting options, you can also change the background color of the cell. Step 4. Click into the cell that you want to insert your Seeq trend into and, with your cursor in the cell, use the Seeq Q logo to insert Seeq content. Alternatively, insert your content anywhere in your Topic and cut and paste the content into the correct cell in the table. Step 5. Repeat step 4 for each monitoring chart you want to view in your dashboard. Step 6. Create a custom date range to apply to the Seeq content in your dashboard. This example shows how to create a daily date range that reports from 6AM the previous day to 6AM the current day, with a daily auto-update frequency to ensure the correct dates are always displayed. Click the + icon in the Date Ranges panel to open a new custom date range window. Then click the + sign next to "Optionally choose a capsule within the time window to define the date range". Create a new periodic condition of Daily duration. Optionally shift the start time of the capsules to whatever you would like to see as the start time on your daily charts (in this case shifting by 6 hours from midnight = 6AM). Don't forget to click Execute! Select the capsule offset by 1 from the end to get the capsule going from 6AM yesterday to 6AM the current day. Click save when complete and all charts will adjust to the configured date range. To configure auto-updates, check the auto-update box and set the rate to 1 day. Step 7. Share your dashboard with your peers, either via presentation view or a PDF. Presentation View: PDF:
  2. 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.
  3. Background: I have a sensor that shows a step change in the amplitude of the signal noise a couple of days prior to instrument failure. It would be useful to be able to identify that step change in the amplitude of the noise so that preventative maintenance can be scheduled rather than running the instrument to failure and causing an unplanned shutdown or production loss event. Solution: Use a combination of Formula and the Value Search tool to identify when this increased signal noise is occurring. Starting signal: 1. Use Seeq Formula and the runningDelta() and Abs() functions to calculate the absolute value of the running delta of the signal of interest. The formula code to achieve this is: //calculates absolute value of running delta of signal $signal .runningDelta() .abs() 2. Use the Value Search tool to identify the periods of time when this absolute value of running delta signal is above some threshold. In this example we use the remove short capsules/gaps functionality to remove capsules and gaps shorter than 1 hour to capture a single event each time the instrument noise increases.
  4. Background: Sensors or calculated tags that totalize a value over time often need to be reset due to maxing out the range of the sensor or the number of available digits in the calculation database. This can create a saw-tooth signal that resets every time this range maximum is reached. In actuality, the signal is constantly increasing rather than building up to the range max and then stepping down to zero to begin counting back up towards the max. Solution: Use Seeq Formula to convert the saw-tooth signal into a continuously increasing signal bounded in time by some reset period determined by the Subject Matter Expert. 1. In this example we begin with a saw-tooth counter signal that resets every time the sensor reaches its range max of 100. 2. Use Seeq Formula to convert the sawtooth signal into a continuous, increasing signal. Note that in order for Seeq to do this calculation, a bounding condition is required. This can either be a repeating periodic condition, or a condition created using the custom condition tool. This can be done in one step using the following code: //creates a bounding condition for running sum calculation $reset = years() //calculates running delta of signal between each sample, compares to zero to ignore negative running delta values, //calculates the running sum of the running delta signal over the bounding condition $signal .runningDelta() .max(0) .runningAggregate(sum(),$reset)
  5. FAQ: I have a CSV file that has the start and end times of some historical events and various information about the events that I would like to use in my analysis in Seeq. How do I go about getting these events and all of their associated information into Seeq? Solution: Use the Import from CSV tool and Seeq Formula to bring in a condition comprised of each of these events and assign the data in each column of the CSV as a property of the condition. 1. Ensure your CSV file is formatted correctly for import into Seeq. The first column should be the event start time, the second column should be the event end time, and all other data columns should be to the right of these. A list of acceptable timestamp formats can be found on the Seeq Knowledge Base in this article. 2. Use the Import CSV File tool to bring the condition into Seeq. Drag and drop your CSV file or navigate to your file through Windows (Mac) Explorer. Under "Import File as" select "condition". Choose the start-time and end-time columns in the "Choose columns" section. Specify a max capsule duration that is just longer than your longest event. 3. Once your condition is imported, use Seeq Formula to assign the data from the other columns of our CSV as properties of each capsule. Begin by using the item properties for the CSV imported condition to duplicate the condition to Formula. Once in Formula, add the column headers from your CSV to the query in line 1 of the code, separated by commas. Then use the setProperty() function to assign each of the columns of the CSV as a property of each capsule. Once executed, the output is a new condition that looks exactly like the original from trend view in the display pane. However, this new condition has properties, that can be added to the capsules pane using the gridded+ button.
  6. Question: I have a condition with multiple properties that I have displayed in the capsules pane. Is there a way to get the data from the capsules pane into a Seeq Organizer Topic? Solution: Create a new string signal for each property that you are interested in displaying in your Organizer Topic, then create a scorecard that displays those values in a table that can be added to Organizer Topic. 1. Use Formula to create a new string signal with a value equal to the capsule data for a certain property. The formula syntax to do this is: $YourCondition.removeLongerThan(1d).transformToSamples($cap -> Sample($cap.getStart(),$cap.getProperty('Product')), 2d).toStep() 2. Duplicate step 1 for each of the other capsule properties that you are interested in. The best way to do this is by using the duplicate button found in the item properties for your new string signal. This will automatically open a new formula window with the same formula from the string signal that you created in step 1. All you need to do in the new formula window is change the name and change the property that you want to create a new signal from. 3. Repeat step 2 for each capsule property that you would like to be able to display in your organizer topic. 4. Now you can create a scorecard that displays the value of each string signal over each capsule. Switch to Scorecard View using the green drop down at the top of the Display Pane. 5. Click “Add a Metric” from the center of the display pane and populate the Scorecard Metric Tool input with your string signal, your condition with the properties, and the statistic Value at End (note Value at Start will also work since this is a string tag and the value is constant across each capsule). You’ll then see a single row in your scorecard like below. You can change the format that the column headers are displayed from the headers dropdown in the top of the display. Here I have selected to display only the start time as the header and selected the first pre-defined date format. 6. Follow the same calculation duplication method described in step 2 to create a new metric for each capsule property you want to display in your organizer topic. Make sure to change the Scorecard metric name and item to measure (input signal) each time. 7. Now add your score card to an Organizer Topic and configure custom date ranges as desired.
  7. Use Case: Users are often interested in identifying when a particular process is operating in a specific mode, or when it is in transition between modes. When looking at these transition periods, you may want to know what the modes of operation were immediately before and after the transition. If you can assign the starting and ending modes during a transition period to each transition capsule, you can filter for specific types of transitions and get a better idea of what to expect during like transitions. Solution: For Versions R.21.0.43 + 1. Add a signal to your display that describes the mode of operation you are interested in. In this example I have added the Example Data > Cooling Tower 1 > Area A > Compressor Stage string signal. Other signals that this use case applies to may include: production grade code, equipment operating mode, signal for step in a sequential or batch process. 2. Next we can use Formula to create a new condition comprised of capsules each time our Compressor Stage signal changes value. These capsules will contain a new capsule property called 'StartModeEndMode' that represents the value of the compressor stage immediately before and immediately after the signal changed value, or transitioned. The formula syntax to achieve this is: //creates a condition for 1 minute of time encompassing 30 seconds on either side of a transition $Transition = $CompressorStage.toCondition().beforeStart(0.5min).afterStart(1min) //Assigns the mode on both sides of the step change to a concatenated string that is a property of the capsule. $Transition .transform( $cap -> $cap.setProperty('StartModeEndMode', $CompressorStage.toCondition() .toGroup($cap, CAPSULEBOUNDARY.INTERSECT) .reduce("", ($seq, $stepCap) -> $seq + $stepCap.getProperty('Value') //Changes the format of the stage names for more clear de-lineation as a property in the capsules pane. .replace('STAGE 1','-STAGE1-').replace('STAGE 2','-STAGE2-').replace('TRANSITION','-TRANSITION-').replace('OFF','-OFF-') ))) and the Output is: Note that we added the new property 'StartModeEndMode' to the Capsules Pane. 3. We can now filter this condition to look for specific transitions of interest. In this example, we are interested in every time our compressor went from a TRANSITION state to STAGE2. Use Formula and the filter() function with the following syntax to achieve this. //Create a new condition comprised only of capsules where the 'StartModeEndMode' property is equal to '-TRANSITION--STAGE2-' $ConditionCreatedInStep2.filter( $capsule -> $capsule.getProperty('StartModeEndMode').isEqualTo('-TRANSITION--STAGE2-')) and the Output is: 4. Now we are able to add other signals of interest to the display and switch to Capsule Time view to observe how those signals behave during these similar transition events.
  8. FAQ: For reporting purposes, I want to calculate statistics based on the current period to date and display that next to the periods immediately preceding it. This is easy to do using the custom date range tool in Organizer Topic (Creating a Periodic Condition and the grabbing the capsule closest to or offset by 1 from the end). Is there a way to create these same date ranges relevant to the current time in Seeq Workbench? Solution: We can create identical conditions in Seeq Workbench by following the methods below. The first method defines how to create conditions for current and previous conditions for years, days, weeks, shifts. The second method includes an extra step that is necessary for current and previous months and quarters since the exact duration of these periods can vary based on the number of days each month. Method 1 - when the length of time in each period is definitive (e.g. year, week, day, shift). This example shows how to create conditions for "Current Week" and "Previous Week" 1. Create a Periodic Condition for "Weekly" using the Periodic Condition tool. 2. Create a Condition around the current time ("Now") using Formula --> condition(1min, capsule(now() - 1min, now())) 3. Use the Composite Condition tool to create a condition for "Current Week" when the Periodic Condition "Weekly" touches the tiny capsule at "Now". 4. Use Formula to create a condition for the "Previous Week" --> $currentWeek.beforeStart(7d) Method 2 - when the length of time in each period is variable (e.g. month, quarter). This example creates a condition for "Current Month" and "Previous Month" 1. Create a Periodic Condition for "Monthly" using the Periodic Condition tool. 2. Create a Condition around the current time ("Now") using Formula --> condition(1min, capsule(now() - 1min, now())) 3. Use the Composite Condition tool to create a condition for "Current Month" when the Periodic Condition "Monthly" touches the tiny capsule at "Now". 4. Use Formula to create a Condition for the last day of the last period (in this case "Last Day of the Last Month") $currentMonth.beforeStart(1d) 5. Use the Composite Condition tool to create a condition for the "Previous Month" when the Periodic Condition "Monthly" touches the "Last Day of Last Month".
  9. FAQ: I've got a signal for which the average and standard deviation are believed to be drifting over time. When I view the average and standard deviation in calendar time, it isn't helpful because they are highly dependent upon the production grade that I am running. Is there a better way that I could be viewing my data to get a sense of the drift of the average and standard deviation by production grade over time? Solution 1: Histogram 1. Add your signal of interest and your production grade code signal to the display. 2. Create a condition for all production grades using formula: $gradeCode.toCondition() 3. Use the Histogram tool to calculate the average reactor temperature during each grade campaign and display them aggregated over production grade, and time. The same methods from step 3 can be applied to get a second histogram of the distribution of the standard deviation of the signal of interest by grade over time. Solution 2: Chain View 1. Add your signal of interest and your operating state signal to the display. 2. Use Formula to create a condition for all operating states: $stateSignal.toCondition() 3. Use the Signal from Condition tool to calculate the average temperature over the all operating states condition. 4. Use the Signal from Condition tool to calculate the standard deviation of temperature over the all operating states condition. 5. Use Formula to calculate two new signals for “Avg + 2 SD” and “Avg – 2 SD”. 6. Filter your all operating states condition for only the state that you are interested in viewing. In this example we want to view only the capsules during which the compressor is in stage 2, for which the syntax is: $AllOperatingStates.removeLongerThan(7d).removeShorterThan(4h).filter($capsule -> $capsule.getProperty('Value').isEqualTo('STAGE 2')) This formula is taking our condition for all operating states, keeping only capsules that are between 4h and 7d in length, then filtering those capsules to include only those for which the value is equal to stage 2. 7. Swap to chain view and view a longer time range.
  10. The objective of creating a new signal that has a value equal to the number of instruments reading above a certain threshold can be achieved in one step using Seeq Formula. It is a good bit of code, but the majority is copy and paste. 1. Add all relevant signals to be used in count. 2. Open a new Seeq Formula window and use the following code to get your counter. //Create a value search for when each area temperature is above 80F $HighTempAreaA = $a.valueSearch(isGreaterThan(80)) $HighTempAreaB = $b.valueSearch(isGreaterThan(80)) $HighTempAreaC = $c.valueSearch(isGreaterThan(80)) $HighTempAreaG = $g.valueSearch(isGreaterThan(80)) $HighTempAreaH = $h.valueSearch(isGreaterThan(80)) $HighTempAreaI = $i.valueSearch(isGreaterThan(80)) //Create a new signal for each temperature tag that is 1 if temp > 80, else 0 $AreaA = 0.toSignal().splice(1.toSignal(),$HighTempAreaA) $AreaB = 0.toSignal().splice(1.toSignal(),$HighTempAreaB) $AreaC = 0.toSignal().splice(1.toSignal(),$HighTempAreaC) $AreaG = 0.toSignal().splice(1.toSignal(),$HighTempAreaG) $AreaH = 0.toSignal().splice(1.toSignal(),$HighTempAreaH) $AreaI = 0.toSignal().splice(1.toSignal(),$HighTempAreaI) //Create a new Signal that is the sum of the 1-0 signals for all temperatures add($AreaA, $AreaB, $AreaC, $AreaG, $AreaH, $AreaI) The result is the brown step function below. Optionally add a threshold line and use cursors to validate the counter. Note that this approach works for signals that share a common threshold, but can also be applied to variable thresholds since each 1,0 signal is determined by a unique value search.
  11. Another possible method is to first cleanse the compressor stage signal to remove values equal to 'OFF' and then apply the toCondition() function. This can be done in one step using formula: $CompressorStage.remove(isEqualTo('OFF')).toCondition()
  12. FAQ: I would like to create a condition for the summer season that runs from May 1 - September 30, but when I use the Periodic Condition tool to create a monthly condition and select the months May-September, I get individual monthly capsules rather than one capsule for the entire summer. Is there a better way to do this using Seeq's tools? Solution 1 - Using Seeq Point & Click Tools: 1. Use the Periodic Condition tool to create a condition for May. 2. Use the Periodic Condition tool to create a condition for September. 3. Use the Composite Condition tool (join operator, inclusive of A, inclusive of B) to create a new condition that spans from the beginning of May to the end of September. Solution 2 - Using Seeq Formula: 1. Create a monthly Periodic Condition selecting all of you "summer months". Note that while it looks like one long capsule at the top of the display pane, it is actually 5 adjacent monthly capsules. You can confirm this by looking at the capsules pane in the bottom right hand corner of the application. 2. Use Seeq Formula and the merge() function to merge adjacent capsules. The appropriate syntax for merging adjacent capsules can be found by searching the word "merge" in the search documentation bar within Seeq Formula and scrolling to the example to "merge overlapping AND adjacent capsules". Note now in the capsules pane there are still the individual capsules for summer months, but there is a new green capsule that spans the entire summer as defined in this problem statement.
  13. FAQ: I've got a signal with drop-outs and I want to filter my signal to only visualize samples with values above a threshold. Is there a quick way to do this in Seeq? Solution: We can use Seeq's Signal Filtering capabilities to break down a signal into individual samples and create a new signal that keeps the samples only above your specified threshold. 1. Visualize your signal with drop-outs and determine the threshold value. For this example, we will filter out all samples with a value of less than or equal to 40F. 2. Open a new Seeq Formula window and use the search documentation to look for information on filtering a signal. When we begin to type filter, we see right away an option "filter() Signal". Open the documentation to get an understanding of what the function is doing and example syntax. The first example below is taking a string signal and breaking it down into samples, then keeping samples only if their string value is not equal to 'T4A' (note single or double quotes are required for string inputs). The second example is filtering to remove infinite values or NaN values. The first logical statement "$sample.getValue().isValid()" is keeping only the samples with valid values, removing NaN or other invalid values. The second logical statement "$sample.getValue().isFinite()" is keeping only the samples with finite values. Note that we can string as many logical criteria together as we want here using the && operator. In our case, we want to filter our temperature signal to show only samples with values above 40F. The syntax in the formula input window below "$Temp.filter($sample -> ($sample.getValue().isGreaterThan(40)))" shows how we are able to take our temperature signal, break it down into individual samples, and then only keep samples whose value is greater than 40F. The new filtered signal appears nearly exactly the same as the original, but with the drop-outs removed.
  14. Hi John, The following method can be used to calculate an hourly average and standard deviation over the lagging 24 hours. 1. Create a periodic condition 24 hours in length that begins every hour. Periodic conditions this specific cannot be done in the Periodic Condition wizard tool, but can be done in Formula using the following syntax: periods(24h, 1h) 2. Use signal from condition to calculate an hourly average over the last 24 hours. Make sure to select end as where you want to put the timestamp of the summary statistic. 3. Use a similar method with signal from condition to calculate an hourly standard deviation over the last 24 hours. 4. Use formula to calculate an upper limit for your temp signal equal to your 24 hr lagging average + X*standard deviation. In this example we chose + 3 SD, so the formula syntax is $average + (3*$standardDeviation) 5. Use formula to calculate a lower limit for your temp signal equal to your 24 hr lagging average - X*standard deviation. In this example we chose - 3 SD, so the formula syntax is $average - (3*$standardDeviation) 6. Use the Boundaries tool to transform your upper and lower limit signals into shaded boundaries.
  15. Use case: A piece of equipment has a start-up sequence in which it goes through different discrete states sequentially before completing the sequence and reaching steady state. When the equipment is off, the state is 0. When the equipment enters the start-up sequence it cycles through states 1-6 in the pattern "1-2-3-4-5-6". A successful start-up sequence will have all 6 states in the pattern "1-2-3-4-5-6." If a disruption occurs at any point in the start-up sequence the state number will read as state 7, thus a failed start-up sequence could have the pattern "1-7", "1-2-7", 1-2-3-7", etc. This use case describes methods to identify only the successful start-up sequences. Approach 1: If the signal for the state is numeric (e.g. with discrete numeric values of 0-7) 1. Create a new signal that is the running delta of the STATENUMBER signal. Use Seeq Formula and syntax: $statenumbersignal.runningDelta() 2. Create a new condition for all start-up sequences using value search for when the runningDelta signal just created is greater than zero. 3. Calculate the delta in your STATENUMBER signal over each start-up sequence. This value should always be equal to 6 or 7 as the sequence will either complete successfully (go to 6) or fail and end with a value of 7. Use the signal from condition tool to calculate this. 4. Create a new condition for when this delta in the STATENUMBER signal just created is equal to 6. This must be done in Seeq formula (there is a known issue in using value search for this operation) with the following syntax: $deltaInSTATENUMBERsignal.valueSearch(isEqualTo(6)) Approach 2: If the signal for the state is a string that is easily convertible to a numeric signal. This example is a string with discrete values "STAGE0", "STAGE6", etc. 1. In Seeq formula, use the replace() function with the following syntax: $StringSignalForStateNumber.replace('STATE','') 2. In a new Seeq Formula Window apply the toNumber() function to the signal created in step 1 with the following syntax: $SignalFromStep1.toNumber() - this will create a numeric signal with discrete values of 0-7. Approach 3: If the signal for the state is a string value, not easily converted to a numeric signal or if you wish to proceed using the string signal. 1. Use Value Search to identify STATE6 2. Use Value Search to identify STATE7 3. Use Composite Condition (union operator) to create a combined condition "finalStateinSequence" for the final state in sequence, either STATE6 or STATE7. 4. Use formula to create a condition for all start-up sequences (successful and failed). Syntax: $FinalStateInSequence.inverse().move(0,1h) This formula code is identifying all of the time when the final state in sequence condition is not true and extending those capsules by a short amount of time so that the final state value is contained within the "all start-up sequences" capsules. 5. Use Signal from Condition to identify the ending STATENUMBER value for each of the start-up sequences. 6. Identify your successful start-up sequences by doing a valueSearch in Formula to identify when the ending STATENUMBER is equal to STATE7. Formula syntax: $endingSTATENUMBERsignal.valueSearch(isEqualTo("STATE7"))
×
×
  • Create New...