Jump to content

All Activity

This stream auto-updates

  1. Today
  2. Objective: calculate the difference between the average temperature 10 min before an event and the average temperature 10 min after an event Create a condition for 10 min before an event. This is done in Formula using the .beforeStart() operator. 2. Create a condition for 10 min after the event. This is done in Formula using the .afterEnd() operator. 3. Calculate the average during the capsules in the conditions created in Steps 1 & 2. This is done in the Signal from Condition tool. 4. Combine the 2 signals created in Step 3 into a single, combined signal. This is done in Formula using the .combineWith() operator. 5. Create a condition that contains a capsule for each event, including the 10 min before and the 10 min after. This can be done in Formula using the .move() operator 6. Calculate the range of the combined signal using the Signal from Condition tool.
  3. Objective: calculate the time between events Method: Create a condition with the capsules when you are not in an event. This is done using the .inverse() condition in Formula. 2. Calculate the time between events using the Signal from Condition tool to calculate the duration of each capsule in the Not in Event condition.
  4. Yesterday
  5. Hi Kenny, You will need to create the access key in Seeq. Please refer to this https://seeq.atlassian.net/wiki/spaces/KB/pages/740721558/Access+Keys . Please save the generated access key and password accordingly. Then you can insert the access key details as your username (access key) and password.
  6. Hello, I wanted to use the OData export feature to PowerBI feature but I am having issues to login. We have single sign on in our company. I tried my windows login as well as the original login I had before we got single sign on set up; non worked. Wondering if that is something someone can help me figure out or confirm if perhaps our IS team need to provide me some login credentials ? Thanks in advance
  7. Last week
  8. I wanted to put together a quick guide on how to clear the cache for a particular signals inside of Seeq Workbench. Come common reasons for wanting to clear the cache on a signal Data source caching is turned on and you have changed a calculation in your source database You have added prior history to a tag and filled in a gap Steps to Clear the cache Open Item Properties Open Advanced Settings Click "Clear Cached Values"
  9. Great Thorsten! Thank you. This is exactly what I need. Regards Matthias
  10. Earlier
  11. Hi Javad, I got a solution based on this starting point: The following formula compares the durations of the first capsules for conditions B,C and D bounded by each capsule of condition A and sets a property on capsules of condition A indicating if these should be shown. The keep function on the end only displays capsules where the property is set to true $a.transform($a_capsule -> { $b_capsule = $b.toGroup($a_capsule).first() $c_capsule = $c.toGroup($a_capsule).first() $d_capsule = $d.toGroup($a_capsule).first() $show_a = ($b_capsule.duration() > $d_capsule.duration() and $d_capsule.duration() > $c_capsule.duration()) $a_capsule.setProperty('show', $show_a) }, 40h).keep('show', isequalTo(true) ) Changing capsule duration of B gets no capsule for result, which is expected: If you want to show another capsule for the last case, you can adjust the formula to generate another condition with the property show set to the inverse and select one of the conditions based on that value. Therefore you have to do the transform twice: $tempCondition1 = $a.transform($a_capsule -> { $b_capsule = $b.toGroup($a_capsule).first() $c_capsule = $c.toGroup($a_capsule).first() $d_capsule = $d.toGroup($a_capsule).first() $show_a = ($b_capsule.duration() > $d_capsule.duration() and $d_capsule.duration() > $c_capsule.duration()) $a_capsule.setProperty('show', $show_a) }, 40h) $tempCondition2 = $tempCondition1.transform($a_capsule -> { $d_capsule = $d.toGroup($a_capsule).first() $d_capsule.setProperty('show', not $a_capsule.property('show')) }, 40h) $tempCondition1.keep('show', isequalTo(true)) or $tempCondition2.keep('show', isequalTo(true)) As a result capsules for condition D are shown: Changing duration of capsule B to its original value show capsules of A as the result: Hope this helps. Regards, Thorsten
  12. Hi Matthias, you can try this: First, calculate the duration of each capsule using "Signal from Condition" tool: Then you can use timesince() to calculate the percentage value over the duration and also splice() to insert it into the base signal of 0% everytime the condition is met: 0%.splice(timesince($condition.removeLongerThan(40h), 1min)/$duration, $condition) Did I understand your question correctly? Regards, Thorsten
  13. Hello everybody, I have a signal (e.g. of a valve) that is 1.0 for being open and 0 for being closed. I would like to calculate the percentage temporal progress of this signal during the 1.0 period. Please refer to the figure I added. -> In the end I would like to create a signal that shows me the temporal percentage progress every time the signal valve opens (i.e. the signal becomes 1.0). Thank you. Regards Matthias
  14. Hi all, Does anyone have any idea for the following statement? "Select A, If Duration of B>D and D>C or Select A if B started before D and C" or anything to select all capsules of A by comparison of capsule (B-C-D) durations.
  15. Hi Javad, Here are the steps to get Condition C: Step 1: Create ''Condition C1'' by joining ''Condition A'' and ''Condition B'' using this formula : $a.afterEnd(0ns).join($b.beforeStart(0ns), 40h, false) Step 2: Create ''Condition C2'' using inverse function in formula and specify the duration. For example 10 min. Only capsule shorter than 10 min will be returned. $conditionA.inverse().removeLongerThan(10min) Step 3. Combine ''Condition C1'' and ''Condition C2'' using CombineWith function in formula combineWith($C1, $C2) Let me know if this works.
  16. Hi Siti Tay, Thanks a lot for your help and answer, There are two problems for using the Join with unchecking "Inclusive of A" and "Inclusive of B": 1- I have different size of capsules 1 hr to 5 hr. When I increase the amount of maximum capsule duration, Capsule C starts from capsule A that is one before the left side of C, see below: A=amount of maximum capsule duration=2hr (I could not see a capsule between A1 and B1) B=amount of maximum capsule duration=3hr (Now, Capsule C is incorrect) I want something to join just two different capsules (A,B) before and after a capsule for any duration When capsule A is before B. 2-also in join, I have to select two different capsules, Sometimes I have to find capsule C between two capsules A when the duration is less than a certain amount. Thanks again, Javad
  17. Hi Javad Kondori, This can be achieved by using Composite Condition tools. Select combination method of Join. Please make sure you uncheck "Inclusive of A" and "Inclusive of B" in order to create capsule between A and B. You can also refer to this example on how to use composite condition with join function: https://www.seeq.org/index.php?/forums/topic/625-creating-a-condition-for-equipment-start-up/&do=findComment&comment=1105 Hope this answer your question.
  18. Hi, How Can I select Capsule C those are between two different capsules (A and B)? It means I am looking for Capsules of Cs those are started after capsule A and finished before capsule B. Thanks
  19. Mike & Andrew - I came up with a kludgy, resource-intensive solution, but it works. Let's say $tau is a continuous signal specifying the reactor residence time in minutes. Create a new formula that calculates the average of $tau in 10-minute time intervals, and then round it to the nearest 10-minute integer value: $tenminutes = periods(10min) $tau_avg = $tau.aggregate(average(),$tenminutes,startKey()) round($tau_avg/10)*10 Now, create a formula that defines multiple signals that apply the exponential filter to the reaction parameter (in my case, monomer concentration) explicitly for each possible value of $tau_rounded. Then splice these signals together based on the current value of $tau_rounded. //conditions $tau10 = $tau_rounded == 10 $tau20 = $tau_rounded == 20 $tau30 = $tau_rounded == 30 //signals $CC2_T10 = $CC2SS.exponentialFilter(10min,1min) $CC2_T20 = $CC2SS.exponentialFilter(20min,1min) $CC2_T30 = $CC2SS.exponentialFilter(30min,1min) //final spliced signal: exponential filter with varying values of tau $CC2SS //default is the steady state C2 concentration .splice($CC2_T10, $tau10) .splice($CC2_T20, $tau20) .splice($CC2_T30, $tau30) //extend as needed to cover expected range of values of $tau_rounded edit: of course, this method has some obvious limitations. It is not going to be accurate during time periods when the residence time and concentration are both changing (reactor startup, process upset, etc.). There will be a discontinuity in the signal for each "step" in the residence time, as it jumps between the exponential signals. Perhaps an agileFilter could be applied at the end to smooth it out. It's a decent approximation (better than nothing), and during times when the residence time is constant, the output will match that of the exponentialFilter for the current residence time.
  20. I know this is an old thread, but I am including what I did in case posterity finds it useful. I am more or less working the the same issue, but with a somewhat noisier and less reliable signal. I found the above a helpful starting point, but had to do a bit of tweaking to get something reliable that didn't require tuning. The top lane is the raw signal, from which I remove all the drop outs, filled in any gaps with a persisted value, and did some smoothing with agile to get the cleansed level on the next lane. For the value decreasing condition I used a small positive threshold (since there were some small periods of the levels fluctuating and the tank being refilled was a very large positive slope) and a merge to eliminate any gaps in the condition shorter than 2 hours (since all the true fills were several hours). For the mins and maxes I did not use the grow function on the condition like was done above, instead just used relatively wide max durations and trusted that the cleansing I did on value decreasing was good enough. I was then able to use the combinewith and running delta function on the mins and maxes, and filter to get the deliveries and the usage. One additional set of calculations I added was to filter out all the periods of deliveries by converting the Delta function to a condition and removing all the data points in conditions that started positive from the cleansed signal. I then subtracted a running sum of the delta function over a quarter, yielding a signal that without the effect of an of the deliveries over each quarter. I could then aggregate the delta for days and quarters of that signal to get the daily and quarterly consumption figures. Chart showing all the calculated signals for this example. Top lane is the raw signals. Next lane shows the cleansed signal with the nexus of the mins and maxes between deliveries. Middle lane combines the mins and maxes and takes the running deltas, and then filters them into delivery and usage numbers. The next lane removes the deliveries from the cleansed signal and does a running sum of the consumption over the quarter. The last two lanes are daily and quarterly deltas in those consumption figures. Calculation for identifying the periods in which the chemical level is decreasing. I used a small positive threshold and removed two hour gaps, and that allowed it to span the whole time between deliveries. Aggregate the cleansed signal over those decreasing time periods to find the min and max values. Used the combinewith and running delta functions to get the next deltas of consumption and deliveries. Filtered based on positive and negative value to separate into deliveries and consumption numbers. Removed the delivery numbers from the cleansed signal in order to get a running sum of consumption over a quarter. aggregated the deltas in the consumption history over days and quarters to calculate daily and quarterly consumption.
  21. Wow! Very good description and explanation! Thank you very much - it worked for me.
  22. Hi Matthias, The first question is to identify each maximum peak of the blue trend : 1. First apply an agileFilter to remove noisy signal and calculate the derivative of the signal. Please refer to formula documentation for derivative. Example: $signal.agileFilter(15min).derivative('min') 2. Then use value search to identify increasing trend, example as below and you can optimize accordingly. or you can refer to step 4 and 5 from this post : 3. Use Signal from condition to find the maximum value bounded to the condition created in step 2 and place the timestamp at point of max value: Second Question : Rate of change of one peak and the upcoming peak 4. We can apply the same derivative function. Example: $max.derivative('min') Third Question : to detect a significant change of the signal (marked by red X's) 5. The max derivative will increase or decrease significantly when there's a sudden change. Example here, we're using the threshold of +-0.005 to detect the changes for max rate decrease and increase respectively. Forth Question : to know its Duration (marked by the red arrows) : 6. Use Composite condition to join ''Rate Decreased'' and ''Rate Increased" 8. Calculate Total Duration of ''Join Decreased to Increased'' condition using signal from condition tool. Please give this a try to your signal and let us know if you have further question.
  23. Hello everybody, I am very new to SEEQ and have the following problem/question: I would like to identify each maximum peak of the blue curve (shown below in the figure). Then I would like to compare each maximum peak's value - meaning something like the rate of change of lets say one peak and the upcoming peak. In the end I want to detect a significant change of the signal (marked by red X's) and would like to know its duration (marked by the red arrows). Thank you. Regards Matthias
  24. Can you tell us a little more about your use case? We have added some export features to various elements within Seeq over the last few releases. What data format is required?
  25. Hi Rohan. The example you see above is a combination of an image file representing the process and several Seeq scorecard metrics linked from Workbench workbooks. For a brief tutorial, see this video from the Seeq YouTube channel.
  1. Load more activity
  • Create New...