How do you manage History data when you have two or more Historians on your system collecting different Plant Areas?'

DeltaV Live introduced Faceplate Trends, where an Operator is presented with added insight to a control loop without having to open a PHV Trend.  The Module GEMs also have a Drag Interaction for creating Watchlist trends, These items call for the configuration of the HIstory server, which is by default defined using the S_HistoryServerPreference Standard.  Simply by defining this Standard to contain the name of the History server, the trends all connect and show you history.

But what happens if you have two History servers with one part of the plant collecting data for a number of Plant Areas, and the rest of the Plant areas assigned to another Historian.  The OOB Faceplates and GEMs only allow for one history server to be defined.  Without doing something, half the tags will not show any history on faceplates and Drag to Watchlist.  

Another aspect of this is that we don't know at runtime which historian a module is being collected on.  

So the first part of this problem is how do we determine which historian a module is collecting data.  DeltaV Live was supposed to have a mechanism to automatically find where a tag is historized.  However that does not appear to be the case.  I've tried leaving the HIstory server property blank in a trend, which seems to let the trend look at the local node.  At least that is what I observed since running Live on the Pro Plus where a historian was configured resulted in history but all the workstations showed no history.  I had to define a History server to get history on the workstation faceplates.

IF this was Operate, I could look up the Plant Area of the module in the MODT.SCR file and find which Historian has this area assigned to it in PHSL.SCR, But need to resolve the Area index first from ANT.SCR.  A shortcut to this would be to populate an array in Live on startup that identifies the Historian to use for each area, then you only have to find the Module's area to know the Historian to use.  HOwever, in Live we don't have access to read the SCR files.  One solution would be to put the SCR files into a SQL database so these types of searches can be done via SQL queries.  Having knowledge of the runtime database available to Live could open alternative ways to do what we used to do in Operate reading the .SCR files directly.  Hmmm.

The brute method would be to add a string parameter in every module where you call out the History server to use with this module.  That would require a download to every module, which is rather intrusive and might not be feasible for many plants, even when upgrading.  

I'm thinking a SQL database and including the tag data of each historian, so the faceplate could search for the module name and return a history server name.  It doesn't matter if there are multiple locations as the history data will be the same.  

Now that we have a History server name, how do I get a trend to look at it?  Well the Trends are hard coded to a server.  My solution here is to configure two or more Trend objects in the faceplate, each one pointing to a different historian, and visibility set based on the module's historian from the look up.  This allows you to develop one Faceplate for all the PID loops, and show data from the correct historian of any PID loop in the system.  Maybe the SQL table uses the Area of the module to find the historian the Area is assigned to.  Point is, once I know the history server to use, I can show the trend with history.

What about the Drag Interaction?  I think here we have to do the same thing by configuring multiple Drag Interactions and setting the Active property to evaluate the modules Historian.  Only that Interaction will be active and the Watchlist trend will be pointed to that historian as defined in the interaction.  

In my system, I created a Trend Pop up that is called from a Faceplate to show history and Events, similar to a PHV combo E_CHART.  I would have to add a second and third CHART preconfigured to different historians and show only the one the module has been assigned to.  

Show should this work?  Personally, I think the History server property on trends and in the Drag interaction should support an animation.  This would allow a chart or a pen to be targeted to the appropriate historian at runtime.  This would avoid needing to create parallel objects with a visibility animation.   The Embedded Trend allows each pen to come from any server, which is good and bad.  In the case of a faceplate or Module chart, all values come from the same server.  If left blank on the individual pen, the pen should use a Chart level history server.  These parameters should support animation to support a library function or a variable reference that can be manipulated online.  Or some way to programmatically set the history property in the On Open script and such.  

The second requirement is to allow Live to read the History server of a Module.  DLSYS["MYMODULE" + "/History"].  While we are at it, how about DLSYS{"MyModule" + "/Area"] to retrieve the area of the module. That would negate the need for that SQL Database. 

Another approach might be to set a history server parameter per workstation, with the pretext that each workstation will be assigned to the same areas as the Historian serving those plant areas.  That would work if the DeltaV system has been deployed with dedicated control rooms and workstations for areas of the plant.  But the Pro Plus and other system wide stations would have issues.  I don't think this has the coverage needed.

Or this capability already exists, and I can't find it in the documentation.  That's been known to happen.  Does the S_HistoryServerPreference standard support a delimited list of history servers that enables Live to look in each server for the tag in the pen? 

Anyway, this problem existed before Live, but it is a bit more of an issue since Live places trends in the faceplates and has the Watchlist drag interaction that put this problem out in the open.  I suppose one could delete the history from the faceplate and not use Watch lists.  I'm thinking a DeltaV enhancement is required but before I submit one, I thought I'd ask what the community thinks and what direction an enhancement request should go in.

Andre Dicaire

3 Replies

  • I've decided initially to create a manual Historian simulation option, in the hopes that at some point, this can be automated based on a runtime determination.

    For Faceplates, I will enhance the Trend GEM to contain two or more Trend objects. Each Trend object links its pens to a different historian. A drop down list will present the historian options to the operator so that if the currently selected Historian does not show data for the module, the Operator can quickly select another historian.

    For GEM's, I can add a GEM property to allow the Display designer to identify the correct historian for the referenced Module of the GEM. This will likely be a custom selection that provides a sub property for each historian. Then we can duplicate the Drag Interaction for each Historian source. The interaction "Active" property is then linked to the appropriate sub property so that dragging this GEM to a WatchList will link the sparkline to the historian collecting that tag.

    The trick will be to design this so that an automated selection can be applied through the Sub GEM that holds the Drag interaction, and not require all instances of GEMs to be modified. The History selection property would be ignored as some point, but this would not impact runtime. Hopefully, we can get a runtime solution before I get too far down this GEM property setting.

    One thought is to have a property on the GEM that is set to the Plant Area of the module. A look up table could then be used to find the History server for that plant Area. This could be a Function used to set the Active property of the drag actions. If the Plant Area can be determined programatically, the History server can be determined.

    As for the Faceplate Trend, that has to be set at runtime to avoid creating Faceplates dedicated to different servers. The same mechanism used by the GEM's could be deployed in the faceplate, if Plant Area can be determined at run time. For this Trend GEM all the work is contained in the GEM so it is easier to update/enhnance this GEM progressively.

    Question: Does anyone have mechanism that can identify the Plant Area of a module at runtime. Is this a hidden property we can read in Live.

    Andre Dicaire

  • In reply to Andre Dicaire:

    Andre, not much help here but there is a DLPATH.ZoneName object that can be used and as you mentioned a function can be constructed that runs on the display open and then referenced by the contextual displays, however clunky that might be. Placing that function on the layout file might be more appropriate but have its own quirks. I pulled up GS to try to recall how this worked out of the box, but it has been a few years since I have worked extensively with Live.

    There is also an ENV object for zone name, ENV.ZoneName

  • In reply to Andre Dicaire:

    In Operate we would read 2 files to find out what area a module was assigned so that means in Live we can't get it. We will need a function AreaName added to DLPATH like the suggested ZoneName...

    You "could" connect to the Event log and look thru SQL for module events and get the area that way maybe but that will almost assuredly fail at some point.