6 Replies Latest reply on Oct 7, 2009 3:06 PM by ASchlecte

    Monitoring Connectivity of Individual Points (Sensors)


      My company uses wireless sensors to retrieve data and our engineers would like to be able to monitor the connectivity (Stale points) for each individual sensor.


      Right now I am running a performance equation that looks at timestamp of PrevEvent function to determine if the point is updating as frequently as we expect with exception and compression.  However, this equation looks at the archive and as our projects grow we will not want to store this much data solely to check for loss of data for each sensor point... I have had to lower exception and compression maximums in order to check as frequently as desired. 


      Does the "Stale and Bad Points" plug-in for SMT look at the snapshot instead of the archive (So only exception applies)?  If so, is there a way to automate this to check for loss of data and use this information in multi-state process book symbols and notifications?


      Any other ideas? Thanks!


      - Andrew



        • Re: Monitoring Connectivity of Individual Points (Sensors)

          I remember the Interface Status Utility used to report on the snapshot and you needed not to worry about the value, you could only save the digital state of the interface (Receiving, Not receiving, Shutdown, etc). and it can be configured point by point. This may not be what you want but, it's a good thing to know all the things that have been done before in order to see what can be achieved.

          • Re: Monitoring Connectivity of Individual Points (Sensors)

            Hi Andrew,


            As far as I remember the PI_SMT plugin checks the archive data. And I don't know of a way to automate PI SMT.


            I am afraid but I think you will have to write a custom application for this. Here are the options that come to my mind:

            • creating a PointList and retrieve the snapshots, check for old ones (not much code necessary, but you will query the PI server for all snapshots in the list)
            • creating a PointList and an EventPipe, listen for the events coming in and check that you get events for all tags (you need to make the housekeeping, but you will not query more data than necessary)
            • write a SQL query to retrieve all tags that don't have a snapshot newer than a certain time and belong to your sensors.

            Let's see if the community comes up with an alternative!



              • Re: Monitoring Connectivity of Individual Points (Sensors)


                As far as I remember the PI_SMT plugin checks the archive data. And I don't know of a way to automate PI SMT.


                That's correct, SMT makes use of the PISDK.Server object's GetPointsSQL method or the IGetPIPoints2 interface's GetPoints2 method (IGetPIPoints2 is a secondary interface supported by the PISDK.Server object) to look at the PIComp table supported by the PI SQL Subsystem. Which method gets used depends on whether additional Point Attributes (PointSource in this case) need to be retrieved. Interesting fact to note: beside the PI ODBC Driver (which shouldn't be used anymore, in favor of the PI OLEDB Provider), those methods are the only elements that still make use of the PI SQL Subsystem


                You might already be familiar with that type of tag search (see the code below), from in the Advanced tab of the Tag Search dialog window:

                str = "pipoint.tag=picomp.tag and picomp.status<0 and picomp.status>-32767 and picomp.time='*'" + str2;
                if (this._getPtSource)
                    listToMerge = points.GetPoints2(str, nvRetrievalAttributes, GetPointsRetrievalTypes.useGetPointsSql, null, nvExtraTableList, null);
                    listToMerge = server.GetPointsSQL(str, nvExtraTableList, null);

                As Andreas said, chances are you'll need to write your own custom app for this purpose...


                On another hand, you might recall we talked about the concept of "point groups" in the last couple Users Conferences. A point group where the parent point would contain the actual data and the children ones would contain quality/additional information on that parent point. As I said, this is still just a "concept" and, while there is no definitive plan on how to implement that at this time, I'm sure the PI Server team would be eager to hear what you have to say on the topic. What do you think would make up for a good "data quality", "point group", etc.  strategy in PI?

                  • Re: Monitoring Connectivity of Individual Points (Sensors)

                    What I have done in the past for a client (still running today) is a custom PISDK "monitoring" interface.


                    It monitors (Quality & Stale) on 2 levels, PointSource and individual Points.

                    For PointSource monitoring, you can set an output PI tag for both the Quality and the Stale state (as a %) so you can trend the data and watch for behaviour.  Values for limits could be read from PI tags or an xml attribute value.  For some applications and OPC interfaces you get to see some nice behaviour in how the data is flowing - especially when part of a plant is upset you quickly see the knock on effect.  Obviously changes in exception settings will effect the monitoring.
                    I connected it to an email gateway for email notifications for predefined limits, which you learn to set based on historical performance.

                    You could have multiple limits per monitored element:
                    - Pointsource "ABC", 2 minutes stale limit 70%, 5 minutes stale limit 80%, 2 minutes quality level 95%.  (Just an example).


                    If I was to revisit this (and client coughs up) I would move it to AF with PI Notifications, make it HA aware and look at the monitoring from an enterprise level but I am sure I would start venturing into Managed PI territory.

                    • Re: Monitoring Connectivity of Individual Points (Sensors)

                      Sorry I left this issue unresolved and have yet to answer your question.  It appears our sensor/receiver technology allows creation of "time of transmission" tags.  These tags count up from zero and reset everytime a value is sent from sensor to receiver -- exactly what we were looking for concerning monitoring connectivity of individual sensors. 


                      We are then using a performance equation to monitor the connectivity between receiver, interface and server by using the PrevEvent function and looking at the archive. 


                      For my company - so far a good "point group" would include the following child points: battery voltage for each sensor, transmission time (for connectivity b/w sensor and receiver) and some type of check for interface to server connectivity (we are using the PrevEvent performance equation).  The last part, interface to server, does not necesarily need to be monitored for individual sensors but rather a group of sensors being used for one project.