The OPC Binary XML Schema defines the format of OPC Binary TypeDictionaries. Each OPC Binary TypeDictionary is an XML document that contains one or more TypeDescriptions that describe the format of a binary-encoded value. Applications that have no advanced knowledge of a particular binary encoding can use the OPC Binary TypeDescription to interpret or construct a value.
The OPC Binary Type Description System does not define a standard mechanism to encode data in binary. It only provides a standard way to describe an existing binary encoding. Many binary encodings will have a mechanism to describe types that could be encoded; however, these descriptions are useful only to applications that have knowledge of the type description system used with each binary encoding. The OPC Binary Type Description System is a generic syntax that can be used by any application to interpret any binary encoding.
The OPC Binary Type Description System was originally defined in the OPC Complex Data Specification. The OPC Binary Type Description System described in Annex C is quite different and is correctly described as the OPC Binary Type Description System Version 2.0.
Each TypeDescription is identified by a TypeName which shall be unique within the TypeDictionary that defines it. Each TypeDictionary also has a TargetNamespace which should be unique among all OPC Binary TypeDictionaries. This means that the TypeName qualified with the TargetNamespace for the dictionary should be a globally-unique identifier for a TypeDescription.
Each binary encoding is built from a set of opaque building blocks that are either primitive types with a fixed length or variable-length types with a structure that is too complex to describe properly in an XML document. These building blocks are described with an OpaqueType. An instance of one of these building blocks is a binary-encoded value.
The OPC Binary Type Description System defines a set of standard OpaqueTypes that all OPC Binary TypeDictionaries should use to build their TypeDescriptions. These standard type descriptions are described in Clause C.3.
In some cases, the binary encoding described by an OpaqueType may have a fixed size which would allow an application to skip an encoded value that it does not understand. If that is the case, then the LengthInBits attribute should be specified for the OpaqueType. If authors of TypeDictionaries need to define new OpaqueTypes that do not have a fixed size then they should use the documentation elements to describe how to encode binary values for the type. This description should provide enough detail to allow a human to write a program that can interpret instances of the type.
A StructuredType breaks a complex value into a sequence of values that are described by a FieldType. Each FieldType has a name, type and a number of qualifiers that specify when the field is used and how many instances of the type exist. A FieldType is described completely in C.2.6.
An EnumeratedType describes a numeric value that has a limited set of possible values, each of which has a descriptive name. EnumeratedTypes provide a convenient way to capture semantic information associated with what would otherwise be an opaque numeric value.