Jump to content

John Cox

Seeq Team
  • Posts

    52
  • Joined

  • Last visited

  • Days Won

    24

John Cox last won the day on December 1 2023

John Cox had the most liked content!

Personal Information

  • Company
    Seeq
  • Title
    Analytics Engineer
  • Level of Seeq User
    Seeq Intermediate

Recent Profile Visitors

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

John Cox's Achievements

Contributor

Contributor (5/14)

  • Reacting Well
  • Dedicated Rare
  • Conversation Starter
  • First Post
  • Collaborator Rare

Recent Badges

31

Reputation

3

Community Answers

  1. Hello, this sounds like a good use case for Seeq. I suggest you sign up for an upcoming Office Hours time slot: Seeq Office Hours In the Office Hours session, you can share your screen and an Analytics Engineer can assist with these questions.
  2. Thanks for the update. As additional information, I confirmed that currently, even though you see the scroll wheel in Organizer when hovering over the y-axis, it is not possible to change the y-axis scale from within the view in Organizer (no matter if you have view only or full edit access). If you would like, I can create a support ticket for you in our system, this is a "feature request" that other customers have asked for. Creating a support ticket would have 2 benefits: increases the likelihood it gets worked on by our team and automatically notifies you when the new feature is made available. Let me know if you'd like me to create a ticket for you - if yes, then email me at john.cox@seeq.com with your name and company name.
  3. Hello KantianKinetics, I agree that you should be able to adjust the Y-axis in view-only mode, but even if you were able to do so, those changes are only temporary and would not carry over to the Organizer. The person with edit access would have to change the axis for you to be able to see the updated axis in your Organizer, AND you would have to click on "Update from worksheet" from within Organizer for the axis changes to update in your Organizer view. I hope this helps!
  4. Hello Francesco, If this issue has not been resolved, I'd recommend you sign up for an upcoming Seeq Office Hours (link) where a Seeq analytics engineer can get more information and help determine a path forward.
  5. Hello, Notifications are sent when the capsule is detected (allowing for the 15 minute default or other chosen "check for new capsules" frequency time window). So, at the point in time that the capsule forms (which can be complex logic depending on other signals or conditions involved), you should receive a notification within 15 minutes or within whatever the "check for new capsules" time setting is. The notification does not wait until the capsule closes.
  6. Hello Learning_in_progress, I have a few suggestions for you to try. After trying these suggestions, if you need additional help, please sign up for an upcoming Seeq Office Hours (link) where a Seeq analytics engineer can help with your remaining questions. Here are my suggestions: 1. Create a new signal which is the maximum of the blue and green signals, using this formula: $signal1.max($signal2) 2. An easier way to create capsules for each change in the step signal is to use this formula, or the "Condition with Properties" tool located under Identify in Workbench: $StepSignal.toCondition() 3. To get the maximum value of the 2 signals over each step capsule, use the result from suggestion #1 above as "MaxOfTwoSignals" in the formula shown below. Also, if you use durationKey() instead of maxKey() as shown below, you should get a result which matches with the original step signal. $MaxOfTwoSignals.aggregate(maxValue(), $StepCapsules.removeLongerThan(5d), durationKey()).toStep()
  7. Hello, This is the approach I suggest: 1. Create a new formula for "Weight of Bag Being Packed" using your existing 25kg, 50lb, and 46 lb conditions. I converted 25kg to lbs as the "default weight" but you can do this however is best, and use kg or lbs as desired (I used lbs): // Default to 25 kg and substitute in other weights when those conditions are present (55.12).splice(50,$FiftyLbCondition).splice(46,$FortySixLbCondition) 2. Calculate "Amount Packed" with a new formula, using the result from step 1: // use .max(0) in case the bag counter ever resets ($BagCounterSignal.runningDelta().max(0))*$WeightBagBeingPacked 3. Calculate the "Daily Running Sum of Amount Packaged" with a new formula, using a daily condition and the result from step 2: $AmountPacked.runningSum($DailyCondition)
  8. Hi David, There have been significant OData export enhancements in the R62-R64 versions of Seeq, related to performance, export options, managing exports, etc. (more here at the What's New link). If you are wanting to do a single OData Export to Power BI across all assets, the approach outlined above may still be your best option (and note that the formulas can be created programmatically using Data Lab). Before going down that path though, I would strongly recommend you sign up for an upcoming Office Hours slot and discuss the export use case details with a Seeq Analytics Engineer - there may be other options to consider.
  9. The correlationOffset() Formula function can be a useful tool for identifying the time shift which maximizes the correlation between two signals: see this post for additional background. In some situations, a user will have a condition defined for time periods of interest (startups, process runs, specific product grades, specific modes of operation, etc.). The user then wants to analyze how the correlation offset varies for each time period of interest (each capsule in the condition). The key to this calculation is applying the transform() function to the condition in Seeq Formula, in combination with the correlationOffset() function. Let's say we have a temperature sensor in a reactor. At some point, well downstream of this temperature measurement, we have a relative humidity sensor that is sensing the same volume of air, but due to the locations of the two sensors, we know that the inverse correlation between the two signals is offset by a significant amount of time delay (at least 2 hours, as visually estimated with the dashed regions in the trend below). As a reminder, for this use case, the objective is to calculate the correlation offset separately for the data contained within each capsule in a condition of interest (shown as Time Periods to Calculate Correlation in the trend below): The formula approach for this is shown below, with comments to describe the details. The transform() function enables the correlationOffset() function to be applied separately to each capsule in the Time Periods to Calculate Correlation condition, and the correlation offset time is stored as a capsule property of the condition generated by the formula: The resulting calculated offset (in units of seconds) is shown in the capsules pane at the lower right and also at the top of the screen as labels. Optionally, the "Offset" capsule property can be converted to a signal (see Max Correlation Offset in lane 2) for trending purposes, and here the units were converted to hours. Looking at the final results, the time shift which maximizes the correlation between the 2 signals varies between 2.1 and 2.5 hours over the 3 time periods of interest shown in chain view, and this variation may offer valuable insights to the user. The time shift is a negative value which means that the relative humidity (downstream signal) would need to be shifted to the left by that time amount to maximize its correlation with the temperature signal. This is the formula to create a signal for the max correlation offset, based on the "Offset" capsule property. In this example the time shift is more meaningful in units of hours, so we convert from seconds to hours: Note that in this use case we wanted to calculate the correlation offset separately for each capsule in a condition. If the goal is to calculate the correlation offset over rolling window time periods, there are other functions in Formula expressly for this purpose, such as CrossCorrelations_timeShifts().
  10. Hi Lucas, In a future version of Seeq, pivot table functionality will enable you to easily create the tables you want, and you could do a table sort to see the top 5, but it would not quite allow you to filter to only the top 5. In the current version of the software, here are some options to consider, depending on the details of your analysis and how many different types of machine alarms are possible. 1. You could use the Histogram tool in Workbench, along with your condition with properties that has the alarm description as a capsule property, to create count of alarms and duration of alarms histograms. This would be very quick/easy to do, but will of course show ALL alarms that have occurred and without pareto sorting, and the results are not in tabular form. 2. If the number of potential alarm descriptions is relatively low and you don't expect new descriptions to be added in the future, you could manually create conditions representing each unique alarm description (via the .keep() function in Formula, using your existing condition with properties). Then you could create a table of counts and a table of durations for each of the created alarm description conditions, sort the table, etc. It will not limit the table results to the top 5, but you could filter the table based on count and duration to limit the rows displayed. 3. Pull the alarm signal into Seeq Data Lab using the Spy.pull() function, and create your desired tables using Python code.
  11. Seeq's .inverse() Formula function creates a new condition that is the inverse of the capsules of another condition. It is often used for identifying time periods between the capsules in an event related condition. For example, a user may create an "event" condition which represents equipment changes or maintenance events, and they then want to quantify the time duration in between the events, as well as the time elapsed from the last event to the current time. It may be important to statistically analyze the historical time between events, or they may want to be notified if the time since the most recent event exceeds some guideline value. A common and possibly confusing issue encountered by users is that the most recent "Time Since...." capsule (created with $EventCondition.inverse()) may extend indefinitely into the future, making it impossible to quantify the time elapsed from the last event to the current time. This issue is easily resolved with the approach shown in step 3 in the example below. 1. The user already has an event condition created named "Filter Changes", which represents maintenance events on a process filter which removes particulates. The user wants to monitor the time elapsed between filter changes and therefore creates a "Time Since Filter Change" condition using $FilterChanges.inverse(): 2. Signal from Condition is used to create the "Calculated Time Since Filter Change" signal, and the user chooses to place the result at the end of each capsule. Because the most recent capsule in the "Time Since Filter Change" condition extends past the current time and indefinitely into the future, the duration of that capsule can't be quantified (and it of course exceeds any specified maximum capsule duration). The user may be confused by the missing data point for the signal (see the trend screenshot below), and the missing value is an important result needed for monitoring. 3. The issue is easily resolved by clipping the most recent "Time Since Filter Change" capsule at the current time by adding .intersect(past()) to the Formula. This ensures the most recent "time since" capsule will not extend past the current time, by intersecting it with the "past" capsule. The "Calculated Time Since Filter Change" signal (lane 3 in screenshot, based on the clipped condition) updates dynamically as time moves forward, giving the user near real time information on the time elapsed.
  12. Hi Ivan, It's also possible that this is related to a software bug in version 61. This bug is fixed in future versions (starting in R64), but in the event you are falling victim to that same bug, here is a quick workaround you can try. It may or may not help, but is something you can try quickly. Basically you need to apply a .round(12) to each numeric signal used in the Formula, prior to the .setProperty functionality: $rounded_co = $co.round(12) $rounded_o2 = $o2.round(12) $condition.setProperty('CO (minimum)', $rounded_co, minValue()) .setProperty('CO (maximum)', $rounded_co, maxValue()) .setProperty('O2 (minimum)', $rounded_o2, minValue()) .setProperty('O2 (maximum)', $rounded_o2, maxValue())
  13. Hi Ivan, I would suggest clearing the cache on all the raw signals and conditions that are inputs to your Formula, as well as clearing cache on the Formula itself. You can clear the cache on an item using Item Properties in the Details Pane ("Clear Cached Values" under the Advanced section). If this does not resolve the issue, I would suggest making an Office Hours appointment, so that a Seeq analytics engineer can assist you further: https://info.seeq.com/office-hours
  14. Hi Marcelo, I'll add a few suggestions below, but I would most recommend you sign up for an upcoming Seeq Office Hours where you can work through the calculations with a Seeq Analytics Engineer: https://info.seeq.com/office-hours If you simply want to count regenerations, you could do a running sum of your regeneration signal over a specified time period or a Periodic Condition. If you want to break the sum into groups of 3, you could divide the running sum by 3 and look for time periods where the result is an integer. If you already have a cleanup condition, it would be easy to identify all the cleanup events (capsules) when a cleanup is performed and the number of regenerations just before the cleanup is not equal to 3. You could do this by doing a running sum of regenerations based on a condition that is the time between cleanups (which would be $Cleanups.inverse()). It is also possible that the Formula functions below may be useful to you, as they allow you to focus on a specific number of recent sample values or capsules.
  15. Hi Marcelo, I am not certain I understand but I think you want to count the number of regenerations in between each "cleanup". If this is the case then you likely need to define a condition for when "cleanups" actually occur, and then you can create a condition for "time in between cleanups" using the .inverse() Formula function (there are several relatively easy you might find the "time in between cleanups"). Once you have the condition for "time in between cleanups", then a runningSum() Formula function would be one way to count the current number of regenerations. I'm happy to try to help iterate with your solution here on the forum, but because I'm not certain about the calculations you want to do, the most efficient way to get a solution for your questions would be to sign up for an upcoming Seeq Office Hours where you can share your screen and get help: https://info.seeq.com/office-hours John
×
×
  • Create New...