The FunctionalEntityType is formally defined in Table 41. Most of this ObjectType is obtained from the IFunctionalEntityType Interface (see 7.2). The description of the components and properties in a FunctionalEntityType is in this clause; the IFunctionalEntityType only references this clause. For examples of extending FunctionalEntityType or utilising it in an existing model, see Annex B. Annex C provides a description of how to apply SafetyData to FunctionalEntities.

Table 41 – FunctionalEntityType definition

Attribute

Value

BrowseName

3:FunctionalEntityType

IsAbstract

False

References

NodeClass

BrowseName

DataType

TypeDefinition

Other

Subtype of the 0:BaseObjectType defined in OPC 10000-5

0:HasInterface

ObjectType

3:IFunctionalEntityType

Applied from IFunctionalEntityType

0:HasProperty

Variable

3:AuthorUri

0:UriString

0:PropertyType

O

0:HasProperty

Variable

3:AuthorAssignedIdentifier

0:String

0:PropertyType

O

0:HasProperty

Variable

3:AuthorAssignedVersion

3:FxVersion

0:PropertyType

O

0:HasProperty

Variable

3:ApplicationIdentifier

3:ApplicationIdentifierDataType[]

0:PropertyType

O

0:HasComponent

Method

3:Verify

Defined in 6.4.3

O

0:HasComponent

Object

3:InputData

3:InputsFolderType

O

0:HasComponent

Object

3:OutputData

3:OutputsFolderType

O

0:HasComponent

Object

3:ConfigurationData

3:ConfigurationDataFolderType

O

0:HasComponent

Object

3:Capabilities

3:FunctionalEntityCapabilitiesType

O

0:HasComponent

Object

3:PublisherCapabilities

3:PublisherCapabilitiesType

O

0:HasComponent

Object

3:SubscriberCapabilities

3:SubscriberCapabilitiesType

O

0:HasComponent

Object

3:ConnectionEndpoints

3:ConnectionEndpointsFolderType

O

0:HasComponent

Object

3:ControlGroups

3:ControlGroupsFolderType

O

0:HasComponent

Variable

3:OperationalHealth

3:OperationalHealthOptionSet

0:BaseDataVariableType

O, RO

0:HasComponent

Object

3:OperationalHealthAlarms

0:FolderType

O

0:HasComponent

Object

5:Status

5:FunctionalGroupType

O

0:HasComponent

Object

5:Diagnostics

5:FunctionalGroupType

O

0:HasComponent

Object

5:Operational

5:FunctionalGroupType

O

3:HasSubFunctionalEntity

Object

3:<SubFunctionalEntity>

3:FunctionalEntityType

OP

ConformanceUnits

UAFX FunctionalEntity Base

The components of the FunctionalEntityType have additional subcomponents, which are defined in Table 42.

Table 42 – FunctionalEntityType additional subcomponents

BrowsePath

References

NodeClass

BrowseName

DataType

TypeDefinition

Others

3:ConfigurationData

0:Organizes

Object

5:Configuration

5:FunctionalGroupType

O

3:ConfigurationData

0:Organizes

Object

5:Tuning

5:FunctionalGroupType

O

5:Diagnostics

0:HasComponent

Variable

3:OperationalConnectionCount

0:UInt32

0:BaseDataVariableType

O

5:Diagnostics

0:HasComponent

Variable

3:ExistingConnectionCount

0:UInt32

0:BaseDataVariableType

O

5:Diagnostics

0:HasComponent

Variable

3:ErrorConnectionCount

0:UInt32

0:BaseDataVariableType

O

5:Diagnostics

0:HasComponent

Variable

3:FailedConnectionCount

0:UInt32

0:BaseDataVariableType

O

5:Diagnostics

0:HasComponent

Variable

3:CleanedUpConnectionCount

0:UInt32

0:BaseDataVariableType

O

5:Diagnostics

0:HasComponent

Variable

3:TotalEstablishAttemptsCount

0:UInt32

0:BaseDataVariableType

O

5:Diagnostics

0:HasComponent

Variable

3:FailedEstablishAttemptsCount

0:UInt32

0:BaseDataVariableType

O

5:Diagnostics

0:HasComponent

Variable

3:FailedVerificationCount

0:UInt32

0:BaseDataVariableType

O

The FunctionalEntityType is a base ObjectType. It is expected that companion specifications or vendors will define subtypes of FunctionalEntityType. Subtypes will define additional Variables that would exist in InputData, OutputData and ConfigurationData. The subtypes might also add Objects and Methods or define nested FunctionalEntityType instances. In addition, the information in the FunctionalEntityType may be directly used in an existing ObjectType, either via the AddIn concept or the Interface concept defined in OPC 10000-3. For an illustration of how this can be accomplished, see B.3.

The optional AuthorUri is a string that is a URI that resolves to the website of the company responsible for this FunctionalEntity.

NOTE Multiple instances of FunctionalEntityType could reference the same instance of AuthorUri.

The optional AuthorAssignedIdentifier provides a unique code used to identify the author-defined type of this FunctionalEntity. This Property is maintained by the author. The semantic of the AuthorAssignedIdentifier is author-specific.

The optional AuthorAssignedVersion provides the version of this FunctionalEntity. The semantic of the AuthorAssignedVersion is author-specific. This identifier is provided to allow additional information beyond what the AuthorAssignedIdentifier provides. For example, some authors might have more than one version of the motor controller model or the PID controller algorithm.

The optional ApplicationIdentifier – provides application information consisting of two properties: a localised Name that is intended to be human-readable and a unique identifier that is intended to be machine-readable. For a definition of the ApplicationIdentifierDataType, see 10.3. The ApplicationIdentifier shall be used as follows:

  • Name provides the name of the application in which this FunctionalEntity is used. The name is given by the system integrator, manufacturer or end-user that created the application.
  • UniqueIdentifier provides a unique identifier for the application in which FunctionalEntity is used. UniqueIdentifier is maintained by the creator of the identifier. This field is of ApplicationId DataType to allow the creator to create any type of identifier. An ApplicationId DataType allows the field to contain a string, integer, GUID, or ByteString. It is up to the creator of the identifier to choose which of these types is used.

The optional ApplicationIdentifier is specified as an array since it may indicate multiple levels of application and thus have multiple values. For example, the product vendor of an advanced alarm control creates a FunctionalEntity and assigns to it an identifier. A system integrator customises it with settings for boiler alarming and assigns an additional identifier. The end-user may further deploy an instance of the configured FunctionalEntity on “Boiler #5” and provide an additional identifier.

The optional InputData provides a grouping of information in this FunctionalEntity. It provides a reference to all data that this FunctionalEntity can use as input to its processing. The InputsFolderType is defined in 6.4.4.

The optional OutputData provides a grouping of information in this FunctionalEntity. It provides a reference to all data that this FunctionalEntity can use as output from its processing. The OutputsFolderType is defined in 6.4.5.

The optional ConfigurationData provides a grouping of information in this FunctionalEntity into logical groupings that are considered configuration information (for additional information, see 5.4). The ConfigurationDataFolderType is defined in 6.4.6.

The ConfigurationData Folder may also contain two FunctionalGroups (Configuration or Tuning) to further organise configuration information.

The optional Configuration FunctionalGroup contains Variables representing the configuration items of the FunctionalEntity (see OPC 10000-100 Recommended FunctionalGroup BrowseNames).

The optional Tuning FunctionalGroup contains Variables that can be used to optimise the behaviour of the FunctionalEntity (see OPC 10000-100 Recommended FunctionalGroup BrowseNames).

The optional Capabilities is a FunctionalEntityCapabilitiesType Folder that describes the functionality provided by a FunctionalEntity (see 6.4.7).

The optional PublisherCapabilities provide the Publisher capabilities associated with this FunctionalEntity. They also apply to all sub-FunctionalEntities of this FunctionalEntity. The PublisherCapabilities for the FunctionalEntity shall describe additional restrictions of the PublisherCapabilities defined in the AutomationComponent. It can also be further restricted by the PublisherCapabilities provided in OutputData (see 6.4.5) or a sub-FunctionalEntity. The restrictions for a sub-FunctionalEntity only apply if the Connection is established with the sub-FunctionalEntity or if OutputData defined in the sub-FunctionalEntity are part of the Connection. If a Connection utilises data from multiple sub-FunctionalEntities and the requested settings do not meet the PublisherCapabilities of all utilised sub-FunctionalEntities, a Server shall report an error (Bad_ConfigurationError). If an entry is an empty array, then it shall not change the settings defined in the AutomationComponent (or FunctionalEntity if defined in a sub-FunctionalEntity).

The optional SubscriberCapabilities provide the Subscriber capabilities associated with this FunctionalEntity. They also apply to all sub-FunctionalEntities of this FunctionalEntity. The SubscriberCapabilities for the FunctionalEntity shall describe additional restrictions of the SubscriberCapabilities defined in the AutomationComponent. It can also be further restricted by the SubscriberCapabilities provided in InputData (see 6.4.4) or a sub-FunctionalEntity. The restrictions for a sub-FunctionalEntity only apply if the Connection is established with the sub-FunctionalEntity or if InputData defined in the sub-FunctionalEntity are part of the Connection. If a Connection utilises data from multiple sub-FunctionalEntities and the requested settings do not meet the SubscriberCapabilities of all utilised sub-FunctionalEntities, a Server shall report an error (Bad_ConfigurationError).. If an entry is an empty array, then it shall not change the settings defined in the AutomationComponent (or FunctionalEntity if defined in a sub-FunctionalEntity).

NOTE   The PublisherCapabilities and SubscriberCapabilities on the FunctionalEntity level apply to data and heartbeats. PublisherCapabilities and SubscriberCapabilities on Output-/InputData level only apply to that data, i.e. not for heartbeats.

The ConnectionEndpoints Folder provides a container for all Connection-related information that this FunctionalEntity might contain. For details on the ConnectionEndpointsFolderType, see 6.4.8. For details on the ConnectionEndpointType that this Folder contains, see 6.6. If the FunctionalEntity does not expose ConnectionEndpoints, the Folder may be missing.

The ControlGroups Folder provides a container for all ControlGroupType instances this FunctionalEntity might contain. For the concepts, see 5.3. For details on the ControlGroupsFolderType, see 6.4.9. For details on the ControlGroupType that this Folder contains, see 6.5.

The optional OperationalHealth indicates the operational health of the FunctionalEntity. It aggregates the health of its SubFunctionalEntities and the health of ConnectionEndpoints. For the definition of the OperationalHealthOptionSet, see 10.34.

The aggregation rules are defined as follows:

All top-level FunctionalEntities shall implement OperationalHealth. The OperationalHealth of the top-level FunctionalEntities is aggregated into the AggregatedOperationalHealth (see 9.1.2) Variable of the AggregatedHealth Variable in the AutomationComponent (see 6.2.2).

The optional OperationalHealthAlarms Folder shall be restricted to hold only instances of Alarms. No UAFX-specific Alarms are defined in this release, but base OPC UA Alarms can be used. In future versions of this document, UAFX-specific Alarms will be defined.

The Operational FunctionalGroup contains Variables and Methods useful during normal operation, like process data (see OPC 10000-100 Recommended FunctionalGroup BrowseNames).

The Status FunctionalGroup contains Variables which describe the general health of the FunctionalEntity (see OPC 10000-100 Recommended FunctionalGroup BrowseNames).

The Diagnostics FunctionalGroup contains Variables and Methods for diagnostics. For UAFX, this includes diagnostics defined by UAFX (see OPC 10000-100 Recommended FunctionalGroup BrowseNames).

The optional <SubFunctionalEntity> allows for the nesting of FunctionalEntities. A FunctionalEntity can have any number of SubFunctionalEntities. SubFunctionalEntities are identified by the HasSubFunctionalEntity ReferenceType. They may be of FunctionalEntityType or another ObjectType that implements the IFunctionalEntityType Interface.

The OperationalConnectionCount provides the number of current ConnectionEndpoints with a Status of Operational in this FunctionalEntity.

The ExistingConnectionCount provides the number of ConnectionEndpoints that currently exist in this FunctionalEntity.

The ErrorConnectionCount provides the number of current ConnectionEndpoints with a Status of Error in this FunctionalEntity.

The FailedConnectionCount provides the number of transitions to the Error state for any ConnectionEndpoint in this FunctionalEntity.

The CleanedUpConnectionCount provides the number of ConnectionEndpoints that have been removed due to the expiration of the CleanupTimeout in this FunctionalEntity.

The TotalEstablishAttemptsCount provides the total number of attempts to create a ConnectionEndpoint that failed or succeeded in this FunctionalEntity.

The FailedEstablishAttemptsCount provides the total number of attempts to create a ConnectionEndpoint that failed due to an error in this FunctionalEntity.

The FailedVerificationCount provides the number of calls to Verify that returned a bad StatusCode in this FunctionalEntity.