A FunctionalEntity may support multiple operating modes or groupings of functionality. An example might be a simple PID function block that supports cascade. In non-cascade mode, an HMI can set a setpoint, but the ability to externally set the setpoint is blocked in cascade. ControlGroups allow a FunctionalEntity to advertise these different groupings or modes.
A FunctionalEntity may define multiple (even nested) ControlGroups. These ControlGroups may be mutually exclusive, or they may be concurrently active. A ControlGroup may be related to just part of the functionality exposed by a FunctionalEntity.
Selecting a ControlGroup for control will often result in the locking of configuration or restricted access to ConfigurationData as defined by the FunctionalEntity (when the ControlGroup was defined). ControlGroups expose what restriction would occur if the given ControlGroup were selected for control. Locking can restrict access to Variables or Methods to a specific application/user. It can also just block all access to Variables or Methods. What occurs with the selection of a ControlGroup is defined as part of the ControlGroup. For example, all changes to some configuration parameters might need to be blocked as long as communication is occurring, or all changes to some configuration might need to be restricted to a specific application. Any ControlGroup may reference any Variable / Method, and multiple ControlGroups might reference the same Variable / Method.
The ControlGroup provides a standard mechanism to configure what would be restricted or blocked and with what application or functionality the restriction/block is associated. ControlGroups might be configured by product vendors and be related to the functionality provided by the AutomationComponent (e.g., a drive vendor or function block library vendor). It may also be defined by a system integrator that defines an application that will be using the FunctionalEntity.