Value Roll Ups to Area Objects

What will be the best way to roll up values ( for some specific attributes) from child objects to Area Objects in System Platform. The way must be dynamic (static scripting with + is not suitable) as the child objects could be added or deleted in the area or could be reassigned to a different area. As an eg, my Data Hall is an Area Object, which has Cabinets having kW attribute in it. It is required to have sum of all kW at Data Hall level. This is very easily done in PI with simple steps of configuration but couldn't find anything much simpler in System Platform

Parents
  • As this is not a out of the box feature I have in some projects created logic to have an energy object register it self in a array (setting the array and unique position as IO Source) on the contained object (or area), when going on-scan, and ensure the kW value is updated to this to.

    Then the array/contained object is summarizing this as total kW.

    It requires some tinkering to get the logic working, but it is an alternative if you can not do this on a Historian level where expressions are possible on the trend client. or by some smart query to summarize based on your object hierarchy.

    It will require some arrays to manage the 'Registration' and you need to unregister your object if its undeployed etc. to keep the arrays on the summarization object clean.
    You also need to manage the deployment selection 'Preserve Runtime Changes' since un-selecting this will clear the array and objects has to re-register to function fully.

    To summarize an slightly confusing answer from my side, I would love a native solution for this, but with enough tinkering its possible Smiley but I guess this is where you started out with your question.

  • Thanks Richard, definitely a quirky way to do things. Yes those workarounds and with the dlls are still available. But I was looking for a more native and non-programmer friendly way.  Just wondering how you manage your array size if the attribute is an array and is defined on configuration. 

  • It all depends on how dynamic you want it to be, you could use a fixed, max range with a reasonable amount of positions. Or you could work with the MyArray.Dimension1 attribute, to set the array size depending on circumstances.

Reply Children