Download as pdf or txt
Download as pdf or txt
You are on page 1of 44

PACKML UNIT/MACHINE

IMPLEMENTATION GUIDE
Part 2: Standard Representation of PackTags in an OPC UA Server

Summary
This document “Standard Representation of PackTags in an OPC UA server” is the second part of
the PackML unit/machine Implementation Guide. The PackML unit/machine Implementation
Guide is a Best Practice Recommendation based on ANSI/ISA TR88.00.02-2015. The purpose of this
guideline is to help companies with different knowledge levels to implement PackML interfaces on
Units/Machines. This document contains best practice recommendations based on the real
implementation of PackML interfaces using OPC UA by a number of OMAC member companies as
well as other users.
This document is the second part in a series of document related to build PackML unit/machines.
Further documents are forthcoming and will focus on issues such as PackML Machine software
code structure, PackML and Safety, PackML and Line Integration, PackML OEE and PackML
HMI.

Authors: C. BOSTROM, L. SMITH, C. NØKLEBY, M. SCHLÜTER

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 1 of 44


This page is intentionally left blank.

OMAC, The Organization for Machine Automation and Control


11911 Freedom Drive
Suite 600
Reston, VA 20190 US

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 2 of 44


Contents
1. Executive Summary ..................................................................................................................... 4
1.1. Introduction ........................................................................................................................... 4
1.2. Goals....................................................................................................................................... 4
1.3. Background ............................................................................................................................ 5
1.4. Related PackML documents in process ............................................................................... 5
2. Terminologies and Definitions .................................................................................................... 6
3. Variables, Attributes and Properties .......................................................................................... 9
3.1. Common node attributes ...................................................................................................... 9
3.2. Mapping of elementary data types ..................................................................................... 11
3.3. Enumerated data types....................................................................................................... 11
3.4. Variable node attributes ..................................................................................................... 12
3.5. Mapping of structured data types ...................................................................................... 13
3.6. Mapping of array data types .............................................................................................. 17
4. PackML Base Structure Data Types......................................................................................... 19
4.1. ALARM ................................................................................................................................ 19
4.2. COUNT ................................................................................................................................ 19
4.3. DESCRIPTOR ..................................................................................................................... 20
4.4. EQUIPMENTINTERLOCK................................................................................................ 20
4.5. INGREDIENT ..................................................................................................................... 21
4.6. INTERFACE ........................................................................................................................ 21
4.7. PRODUCT ........................................................................................................................... 21
5. Top-level Organisation ............................................................................................................... 23
6. Reference information ................................................................................................................ 28
6.1. Definitions and abbreviations ............................................................................................ 28
6.2. References ............................................................................................................................ 28
6.3. People involved in preparation of the guideline ................................................................ 29
7. Appendix ..................................................................................................................................... 30
7.1. PackTags: Complex data structures mapped as Variable nodes (i.e.
NodeClass=Variable).................................................................................................................. 30
7.2. PackTags: Complex data structures mapped as Object nodes (i.e. NodeClass=Object) . 37
8. Version History........................................................................................................................... 44

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 3 of 44


1. EXECUTIVE SUMMARY
1.1. INTRODUCTION
The PackML OPC UA Working Group is currently developing an OPC UA companion specification
for PackML. This specification, which is due to be completed in 2018, will standardize how PackML
information should be presented within an OPC UA server as a fully-defined information model.
This model will describe the transition rules of the PackML state machine, as well as provide
additional semantic information for all PackML data being presented by the server. This part 2 of
the PackML unit/machine Implementation Guide “Standard Representation of PackTags in an
OPC UA Server” is to complement the coming OPC UA companion specification.
Unfortunately, not all technology providers now support some of the advanced OPC UA features
that are expected to be required by the PackML companion specification. Specifically, method
handling and finite state machine modelling do not have broad support. Current estimates of the
time required to release commercially viable implementations of the PackML companion
specification range from 6 months to 3 years. These estimates do not necessarily reflect the nature
of the technological hurdles involved, but rather are due to prolonged software development cycles.
In 2010 a joint working group of the OPC Foundation together with PLCopen published [2] an OPC
UA information model representing the IEC 61131-3 architectural models1. In particular, the
PLCopen companion specification defined how PLC variables should be represented, or “mapped”,
in an OPC UA address space. The document proposed here will consider as a special case of this
general model how PackTags should be so represented. Further, although the PLCopen document
applies nominally to programmable logic controllers (PLCs), our view is that the techniques defined
there regarding the representation of PackTags should apply equally to any type of controller (PC,
PAC, etc.) used in the packaging or related industry. This includes platforms not based on the IEC
61131-3 languages.
This document is divided into two main parts. The first, §3 Variable, Attributes and Properties,
describes the basic requirements of PackTags within the OPC UA server. The remaining sections
are provided as a reference to describe how the full set of PackTags can be constructed as a sequence
of nested data structures. In order for PackTags to be presented with the correct nested structure
within the OPC UA server, most technology providers require that the analogous structure also be
present within the PLC program. In most cases the OPC UA structure is created automatically
from the PLC tags. Getting the correct structure in the OPC UA address space happens if and only
if the data structure in the PLC is correct. The PLCs can corrently and completely reproduce all
data structures required for PackML. Hence, in most cases, correct implementation requires some
care by the machine builder or OEM (e.g. PLC programmer) at the application level.
For a general introduction to ISA-TR88.00.02-2015, see [7]. For a detailed discussion of the OPC
Unified Architecture, see [5].

1.2. GOALS
This PackML implementation guide provides a definition of the minimum requirements of a OPC
UA PackTags interface. For example, there are practical examples on how to setup the OPC UA
Server to fulfil the requirements for handling the Admin, Command and Status PackTags. It also
addresses how different OPC UA implementations can be done. The guideline provides examples
of how to configure the PackTags within the OPC UA Server.
Benefits for both End Users and Machine Suppliers include:
• Easy integration of unit/machines via standard OPC UA Server
• Reduction of integration cost

1
See also https://opcfoundation.org/markets-collaboration/plcopen/

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 4 of 44


• Same OPC UA Interface to a PackML Unit observed from a supervisory system
• Faster interface specification
• Reliable data, e.g. OEE, energy data
• Replace one unit/machine at a line by using the standard OPC UA interface
• Etc.

1.3. BACKGROUND
The OMAC End Users want to achieve a unified way of interfacing with units/machines on the
factory floor. Providing this unified interface will ensure easy integration with a supervisory
control system. There are similar interfaces to all units, and the units have the same data
structure interfaces available.
By applying a unified user interface based on the PackML State Model an operator can be guided
in case of an unplanned stoppage. Furthermore, there can be common event handling on all units,
providing the End User the possibility to view stop reasons in a common way for all units.
The interface described in this document is built on the international reference model PackML
defined by The International Society of Automation (ISA). The interface follows the PackML State
Model as described in the reference ANSI/ISA TR88.00.02-2015.
Basic understanding and knowledge of the TR88.00.02 technical report is required before reading
this Best Practice Recommendation. In fact, it is strongly recommended to have the report in
hand when reading this document.
A unit/machine is defined as a collection of physical equipment and control functions that perform
one or more major processing functions. A unit/machine can be a single machine or a subset of a
whole packaging line. The term unit and machine are used interchangeably in this document.
Machine Suppliers are defined as companies or organizations that provide PackML compliant
unit/machines. End users are defined as companies or organizations that use PackML compliant
unit/machines in production facilities.

1.4. RELATED PACKML DOCUMENTS IN PROCESS


This document is the second part in a series of documents related to build PackML unit/machines.
Further documents2 will come and have focus on issues like:
• Part 1: PackML Interface State Manager (Available)
• Part 2: Standard Representation of PackTags in an OPC UA Server (Available)
• Part 3: PackML Overall Equipment Effectivesness – OEE (Under development3)
• Part 4: PackML User Interface - HMI (Under development3)

2 The list is not complete and there could be changes in the document titles.
3
OEE guideline and HMI guideline are under development as identified by the OMAC OPW strategy.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 5 of 44


2. TERMINOLOGIES AND DEFINITIONS
The Terminologies and Definitions described in this section reflect the standard OPC UA Part 3.
For further details the OPC UA part3 is the reference.

AddressSpace: The collection of objects and related information that the OPC UA Server makes
available to Clients is referred to as its AddressSpace.

Attributes: OPC UA defines eight distinct NodeClasses. These are: Object, Variable, Method,
View, ObjectType, VariableType, DataType, and ReferenceType. Each NodeClass includes a fixed
set of information referred to as its attributes. The attributes common to all NodeClasses, the so-
called base attributes, are: NodeId, NodeClass, DisplayName, Browse Name, Description,
WriteMask, and UserWriteMask. Each of these is defined below.

BrowseName: A fixed (i.e. non-localized) string used to label the node internally. The
BrowseName is used by the client to identify the Node when browsing.

Description: A localize string used to provide additional information about the node.

DisplayName: A localized string used to display the name of the node on a user interface.
“Localized” here means that the Display Name may vary depending according to the user's native
(or configured) language.

NodeClass: The NodeClass attribute contains information about the purpose or intrinsic
functionality of the Node itself. A fixed set of enumerated values is defined: Object, Variable,
Method, ObjectType, VariableType, ReferenceType, DataType and View.

NodeId: Each node within an AddressSpace is uniquely identified by its NodeId, the components
of which are NamespaceIndex (Uint16), IdentifierType (Numeric, String, GUID or Opaque) and
Identifier. The format of the value assigned to Identifier depends on the IdentifierType.

Nodes: OPC UA represents features within the AddressSpace by nodes. Each node has a
distinct NodeClass, the main types of which are Object, Variable, and Method. For example, a
method is represented by a node of NodeClass Method. Each node within the AddressSpace is
uniquely identified by its NodeId. For convenience, we will sometimes refer to a node with
NodeClass Object as an Object node or a node with NodeClass Variable as a Variable node.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 6 of 44


Figure 1 Sample OPC UA AddressSpace. Each of the items shown is a node. References between nodes allow a natural hierarchy to be
constructed. For example, Root, a FolderType object, has references ("Organizes") pointing to Objects, Types and Views. Similarly,
DiagnosisLogbook contains a reference to the ClearError method while Application contains a reference to the bStart_gb variable.

Object: OPC UA uses objects to provide a formal representation of data together with related
events or methods. Objects may be linked by references. The well-known object-oriented
concepts of type hierarchy and inheritance are supported.

Figure 2 The OPC UA object model encapsulates variables, methods, etc. in a single formal entity. References to other objects may also be
defined. For more information, see [4], §4.2. Figure used with permission.

PackTags: As defined in ISA-TR88.00.02-2015, PackTags provide a set of naming conventions


for data elements commonly found in packaging machines. UnitName.Status.CurMachSpeed is
an example of a PackTag, in this case referring to the current speed of the machine in units of
primary packages per minute. Each PackTag that represents a single-value, a so-called
elementary type, has a well-defined IEC-61131-3 data type (DINT, REAL, STRING, etc.).
PackTags having a natural association to one another are then grouped in data structures or
complex types. For example, UnitName.Status.EquipmentInterlock is a complex type with
individual elements UnitName.Status.EquipmentInterlock.Blocked and

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 7 of 44


UnitName.Status.EquipmentInterlock.Starved. Blocked and Starved are Boolean elements,
hence these are elementary types.
Note that as a practical matter, PackTags may be viewed as reserved names for variables within
PLC or PC process controllers. The purpose of this document is to clarify how these variables are
represented in the OPC UA address space.
The complete list of PackTags is given in the Appendix.

References: Nodes within an AddressSpace may be related to one another by References. Both
hierarchical and non-hierarchical reference types are supported. References provide the formal
mechanism by which notions of type hierarchy and inheritance may be represented.

Root Node: Each AddressSpace has a unique node called its root. All nodes within an address
space are linked, either directly or indirectly through a sequence of references, to the root.

UserWriteMask: The UserWriteMask indicates which of the Node attributes may be modified
by the user currently connected to the server.

Variable: Computer programmers use the term variable to denote a symbolic name associated
with a memory address. For our purposes here, a variable always includes a type, which restricts
the kind of information that the variable may represent. For example, if myBool is a Boolean
variable, then myBool may either be TRUE or FALSE, but it may not take the integer value 123.
In PLC programming, variable is used interchangeably with the term tag. Variable will also be
used in the context of OPC UA to describe a particular NodeClass that introduces a Value
attribute to hold some concrete value. As we shall see in the next section, all single-valued
programming variables, and in particular all PackTags of elementary type, will be associated
with Nodes of NodeClass Variable.

Unit/machine: ISA-TR88.00.02-2015 uses the term “unit/machine” to refer to a piece of


automated machinery or, in particular, a piece of packaging machinery. To each unit/machine we
assign a unique set of PackTags. Each such set is associated with a string-valued identifier called
its UnitName. The UnitName may be thought of as the top level PackTag.

WriteMask: The WriteMask indicates which of the Node attributes may be modified by an OPC
UA client.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 8 of 44


3. VARIABLES, ATTRIBUTES AND PROPERTIES
This section follows closely the material presented in [2], §5. Key topics are the modelling within
the OPC UA AddressSpace of elementary or single-valued variables, complex or user-defined
structured data and arrays. Together these rules will allow us to present the full set of PackTags
within the OPC UA AddressSpace in a consistent way.
Note that while [2] is written specifically for programmable logic controllers, our view is that the
modelling rules for variables defined there should apply broadly to include embedded PCs or
other non-PLC platforms. OPC UA servers associated to any of these device types should present
PackTags in way consistent with the PLC methodology presented here.

3.1. COMMON NODE ATTRIBUTES


The attributes common to all NodeClasses are: NodeId, NodeClass, BrowseName, DisplayName,
Description, WriteMask and UserWriteMask. The requirements for each of these attributes are
described below.

3.1.1. NODEID
Each node within a given AddressSpace has a unique identifier called its NodeId. The PLCopen
companion specification [2] does not place any requirements on this structure. An example of
how one technology provider handles this is given in Figure 3. Note that the Identifier Type is
String and that the associated Identifier string reflects in a canonical way the nested PackTag
structure. This is considered best practice and users are strongly encouraged to follow this
pattern.

Figure 3 Example NodeId definition. The format of the Identifier string 4 is not standardized and will vary from vendor to vendor. In this
case the associated PackTag is Machine_01.Status.CurMachSpeed.

3.1.2. NODECLASS
All PackTags of elementary type (DINT, REAL, STRING, etc.) shall be represented in the in
AddressSpace by nodes of NodeClass Variable. Examples of PackTags of elementary type are
UnitName.Status.CurMachSpeed (REAL), UnitName.Admin.Parameter[#].Unit (STRING) or
UnitName.Status.StateCurrent (DINT).
It is recommended that complex types be represented by Variable nodes as well, but it is
acceptable to represent these simply as Objects. Representing the complex types as Variables has
the advantage of allowing the underlying complex data to be read by a UA client in a single call.
The two basic approaches to complex type modelling are compared in Appendices 1 and 2. This
topic is also revisited in detail in §3.5 Mapping of structure data types.

4 It’s not mandatory to have a string identifier – Numeric based identifiers is also possible. A lot of very small
implementations (resource limited devices) may wish to use numeric identifiers as they require less memory. Basically,
string Ids are the preference but not mandatory.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 9 of 44


3.1.3. BROWSENAME
The BrowseName of a PackTag shall include the name of the innermost member within the given
nested structure.
For example, the BrowseName of the PackTag UnitName.Status.CurMachSpeed must include the
string “CurMachSpeed”.
The BrowseName also includes a reference to a namespace index. With respect to PackTags, the
namespace index is server and/or vendor specific; this document imposes no additional
restrictions on the namespace index. See [2], §7.3 for more information.

3.1.4. DISPLAYNAME
The DisplayName is a localized string used to display the name of the node. Because ISA-
TR88.00.02-2015 does not describe localized PackTag names, it is recommended that the
DisplayName match the BrowseName as defined above.

3.1.5. DESCRIPTION
Description is an optional attribute used to provide additional information about the node itself.
Its use is not specified.

3.1.6. WRITEMASK
WriteMask is an optional attribute that describes which of the node's attributes may be altered
by a client. Its use is not specified.

3.1.7. USERWRITEMASK
UserWriteMask is an optional attribute that describes which of the node's attributes may be
altered by a particular user. Its use is not specified.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 10 of 44


3.2. MAPPING OF ELEMENTARY DATA TYPES
All single-valued PackTags comprise the following IEC 61131-3 elementary data types: BOOL,
DINT, STRING and REAL. The mapping of these types to their OPU UA built-in counterparts is
given in the following table. See [2], Table 26 for a complete mapping of all IEC 61131-3 types.

Table 1 Comparison of ISA-TR88.00.02, IEC 61131-3 and OPC UA elementary types.

ISA-TR88.00.02 IEC 61131-3 OPC UA built in data Comment


elementary data elementary data types
types types
Boolean BOOL Boolean Single bit value (true or false)
Integer (32-bit) DINT Int32 32 bit signed integer value
Real 32-bit IEEE REAL Float OPC UA definition: An IEEE-754 single
754 standard precision (32 bit) floating point value.
floating point
IEC 61131-3 definition: Real (32 bit)
format
with a range of values as defined in IEC
60559 for the basic single width
floating-point format
String, null- STRING String The PLC open specific OPC UA
terminated ASCII, elementary data type STRING is derived
any size but not from the built in data type String. It
to exceed 80 describes that the type is used as a
characters variable-length single-byte character
string

3.3. ENUMERATED DATA TYPES


ISA-TR88.00.02-2015 does not define explicitly any enumerated data types, and so, all single-
valued PackTags should be mapped according to their elementary type. This includes PackTags
for which an enumeration might make sense. In concrete terms, this means that
UnitMachine.Status.StateCurrent, UnitMachine.Status.UnitModeCurrent,
UnitMachine.Command.CntrlCmd should be mapped as elementary DINT values, not their
associated canonical enumerations.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 11 of 44


3.4. VARIABLE NODE ATTRIBUTES
As stated previously, all Nodes representing single-valued PackTags in an OPC UA server shall
have NodeClass=Variable. OPC UA defines the set of fixed attributes for this NodeClass as
follows: Value, DataType, ValueRank, ArrayDimensions, AccessLevel, UserAccessLevel,
MinimumSamplingInterval and Historizing. Table 1 defines each of these attributes and
provides additional information about their use in the case of PackTags5.

Table 2 Attributes of the Variable NodeClass

Attribute Use DataType Description


Value Mandatory See The active value of the node. Ignoring update
DataType delays, it is expected that the register is equal to the
value of the associated PackTag in the PLC, PC or
PAC controller. The node value is expected to equal
the current value of the PackTag in the underlying
system.

DataType Mandatory NodeId The DataType of the Value attribute. With respect to
single-valued PackTags, only four BaseDataTypes are
used: Boolean [1], Int32 [6], Float [10] and String
[12]. Here the numeric identifiers are defined by the
standard OPC UA nodeset. For complex data, an
appropriate subtype of BaseDataType>Structure
must be defined.

ValueRank Mandatory Int32 ValueRank indicates whether the Value attribute is


an array. If Value is a scalar (i.e. not array),
ValueRank = -1. Otherwise, ValueRank is assigned
the number of dimensions of the Value array. All
PackTags have ValueRank equal to -1, 1 or 2.
ArrayDimensions Optional UInt32[] ArrayDimensions indicates the length of each array
dimension. If Value is a scalar, ArrayDimensions is
left undefined or null.

AccessLevel Mandatory Byte AccessLevel indicates whether the Value attribute is


readable and/or writable. All PackTags included in
the Command set must be writable. All PackTags
included in the Admin and Status sets must be
readable. If Historizing 6 is supported (see below),
access to the historical data stream may also be
defined.
UserAccessLevel Mandatory Byte The user specific settings for the AccessLevel.
Vendors may restrict read or write access to
PackTags for given users as required.

5
See [2] §5.3 for additional information regarding the general case.
6
This Guideline places no focus on historizing.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 12 of 44


Attribute Use DataType Description
MinimumSamplingInterval Optional Duration MinimumSamplingInterval indicates the minimum
update rate in milliseconds of the OPC UA server for
the particular node. MinimumSamplingInterval=0
indicates that the server monitors the item
continuously.
MinimumSamplingInterval=-1 indicates that the
sample rate is indeterminate.
The value of this Attribute is server specific.
Historizing Mandatory Boolean Indicates if the server is currently collecting history
for the Variable Value. The support of value history
is server specific. Historizing of PackTags is not
required 7.

3.5. MAPPING OF STRUCTURED DATA TYPES


There are two acceptable approaches to the modelling of complex or structured data types. The
preferred method is to model a complex type as a Variable node. Such a node has an associated
Value attribute which comprises the complete set of underlying data. This value attribute may be
read by an OPC UA client in a single call. An alternative approach is to model the complex type
as an Object node. In this case, such an Object node has simply an organizational function: it
references all subtypes of the structured data itself. It is possible to model some complex data as
variables while modelling other complex data as objects. Each of these approaches are describe in
detail.

3.5.1. VARIABLE APPROACH


If a complex data type is to be mapped as a Variable node, then the associated IEC 61131-3
structure data type should be mapped as a subtype of the OPC UA DataType Structure. See
Figure 4. This OPC UA type is then assigned to the node’s DataType attribute. Note that OPC
UA servers must explicitly describe how structured DataTypes are encoded and provide this
information to the client so that the data may be read or written properly. OPC UA servers must
support at a minimum binary encoding (“Default Binary”). See [2], §5.2.3.4 for more information.
Using the Variable approach, all of the data structures used to construct the full set of PackTags
should be defined as subtypes of the standard type Structure. A complete listing of the PackML
base types is given in the subsequent section titled PackML Base Structure Data Types.

7 History can be represented in a more primitive way, e.g. history of last X alarms as an array rather than historizing.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 13 of 44


Figure 4 Mapping of a PackML base structure to an OPC UA Structure subtype.

It is recommended that OPC UA servers also provide the component data of each structure as a
set of sub-variables. This allows OPC UA clients that do not support complex data to access each
of the individual scalar values. It also allows advanced clients to read/write an individual tag
without having to read/write an entire command/status/admin structure. Figures 4 and 5 indicate
how a sample data structure, together with its individual elements, may be mapped. Note that
this approach requires that each IEC 61131-3 structure be modelled additionally as a
VariableType. The examples are taken directly from [2].

We define an IEC61131-3 data type as follows:

TYPE ExampleIEC611313Structure:
STRUCT
IntStructureElement: INT;
RealStructureElement: REAL;
BoolStructureElement: BOOL;
END_STRUCT;
END_TYPE

The equivalent data structure in C# would be defined:

Struct ExampleIEC61131-3
{
public short IntStructureElement;
public float RealStructureElement;
public bool BoolStructureElement;
}

The associated mapping OPC UA is given in Figure 5.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 14 of 44


Figure 5 Mapping a sample structure data type.

Figure 6 shows the further mapping of the structure into subvariables.

Figure 6 Mapping a structure data type to individual components

To take a concrete example, UnitName.Status.EquipmentInterlock is defined as a PackTag of


type EQUIPMENTINTERLOCK. See §4.4 EQUIPMENTINTERLOCK. To model this PackTag
as a VariableNode, we define a subtype of Structure as shown in Figure 7.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 15 of 44


Figure 7 EquipmentInterlockType, derived from BaseDataType>Structure, is defined with Boolean components Blocked and Starved.

Additionally, we define a VariableType, specifically a subtype of BaseDataVariableType, as


follows:

Figure 8 Mapping of the PackML EQUIPMENTINTERLOCK type as a variable type. The components of EquipmentInterlock VariableType,
Blocked and Starved, are Booleans.

The Variable node itself is then defined to have TypeDefinition=EquipmentInterlockVariableType


with DataType=EquipmentInterlockType as shown in Figure 9.

Figure 9 Mapping of UnitName.Status.EquipmentInterlock as a Variable node. Here EquipmentInterlockVariableType and


EquipmentInterlockType are similar, but EquipmentInterlockVariableType (derived from BaseVariableType) is suitable as a TypeDefinition
for a Variable node, whereas EquipmentInterlockType (derived from BaseDataType) is suitable as a data type for its associated Value.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 16 of 44


3.5.2. OBJECT APPROACH
Complex data may alternatively be modelled as Object nodes. Such an approach allows the
subtypes comprising the complex data to be grouped together within the OPC UA server.
However, as stated previously, in this scenario the underlying complex data cannot be read by an
OPC UA client in a single call. Rather, each of the elementary subtypes must be read
separately8. A “Hybrid approach” which combines object, structures and varuable types is also a
possible solution. Modelling a complex ISA-TR88.00.02 type as an object requires the definition of
an analogous OPC UA ObjectType. For example, returning to the example from the previous
section, if UnitName.Status.EquipmentInterlock is to be modelled as an Object node, then the
following ObjectType should be defined:

Figure 10 PackML type EQUIPMENTINTERLOCK mapped as an ObjectType.

The node itself would then be defined to be of type EquipmentInterlockObjectType.

Figure 11 Mapping a complex PackTag as an ObjectNode requires the definition of a suitable ObjectType. Note that in this case there is no
value associated with the node itself. Only the elementary subtypes (Blocked and Starved) may be read.

3.6. MAPPING OF ARRAY DATA TYPES


OPC UA allows any Variable node to be viewed as an array by the appropriate definition of
attributes ValueRank and ArrayDimensions. For example, if a given variable node represents a
one-dimensional array, then ValueRank is set to 1 and ArrayDimensions[0] is set to the number
of elements in the array itself. OPC UA defines that all arrays begin at index 0.

8
The top level PackMLV30, Command, Status and Admin could be ObjectTypes as it’s not required to read all data
atomically at that level. Anything lower could be a variable of datatype custom structure allowing for atomic read. At the
same level, variables could also be associated with a variable type definition to expose individual sub data items.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 17 of 44


IEC 61311-3 is more flexible in its approach to arrays. Specifically, the user is free to define the
upper and lower array index bounds. In order to preserve this flexibility [2] adds additional
references to property types Dimensions, IndexMax and IndexMin, where Dimensions represents
the number of dimensions of the array and IndexMax and IndexMin point to the upper and lower
array index bounds respectively.
For example, using standard IEC 61311-3 notation, we may define a two-dimensional array as
follows.
VAR MyArray : ARRAY [1..2, 3..5] OF DINT; END_VAR
This array contains elements {MyArray[1,3], MyArray[1,4], MyArray[1,5], MyArray[2,3],
MyArray[2,4], MyArray[2,5]}. Following [2], the corresponding variable node in the OPC UA
server would include properties Dimensions, IndexMax and IndexMin with values:
Dimensions.Value = 2
IndexMin.Value[0] = 1, IndexMax.Value[0] = 2,
IndexMin.Value[1] = 3, IndexMax.Value[1] = 5

The general case defined in [2] is given below.


Table 3 General case definition

Attribute Value
BrowseName <Variable Name> or <IEC Data Type Name>

Table 4 Instance of any Variable Type or a Data Type Node

References NodeClass BrowseName DataType TypeDefinition ModellingRule


HasProperty Variable Dimensions UInt32 PropertyType Mandatory
HasProperty Variable IndexMin UInt32 [ ] PropertyType Mandatory
HasProperty Variable IndexMax UInt32 [ ] PropertyType Mandatory

Note that ISA-TR88.00.02-2015 does not specify lower and upper limits for most of the arrays
included in the PackTags interface. In these cases, IndexMin and IndexMax may be freely
defined provided IndexMin.Value <= IndexMax.Value. By constrast DateTime and
AckDateTime9 must be defined as DINT arrays with a IndexMin.Value = 0 and IndexMax.Value
= 6.
Some users may want to simplify the PackTags interface by imposing the rule that all arrays
begin at index 0. Other users may have this rule forced on them. C#, for example, begins all
arrays at index 0. In these cases, the additional properties defined by [2] are essentially
redundant and may be safely omitted in non-PLC implementations.

9 DataTime and AckDateTime are elements of ALARM as defined in §4.1.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 18 of 44


4. PACKML BASE STRUCTURE DATA TYPES
ISA-TR88.00.02-2015 defines 7 base structure data types that are required to build the complete
set of PackTags. These are listed below. Our notation follows the conventions used by IEC
61131-3 to define complex data types. Comments are preceded by “///”. Note that the type names
themselves are not normative.

4.1. ALARM
The alarm type contains information required to describe an individual alarm or warning. PackTags
of this type include UnitName.Admin.Alarm[#], UnitName.Admin.AlarmHistory[#],
UnitName.Admin.Warning[#], etc.

TYPE ALARM:
STRUCT
///
///Alarm or warning current status
Trigger: BOOL;
///
///Alarm or warning identification number
ID: DINT;
///
///Context specific value associated to given alarm or warning
Value: DINT;
///
///Alarm or warning description
Message: STRING;
///
///Identification number associated to alarm type or severity
Category: DINT;
///
///Time stamp of alarm or warning occurrence. Format year:month:day:hour:min:sec:µsec
DateTime: ARRAY[0..6] OF DINT;
///
///Time stamp of alarm or warning acknowledgment. Format year:month:day:hour:min:sec:µsec
AckDateTime: ARRAY[0..6] OF DINT;
END_STRUCT
END_TYPE

4.2. COUNT
The count type contains information required to track the number of occurrences of a given
operation. The operation itself may also be described. UnitName.Admin.ProdConsumedCount[#]
and UnitName.Admin.ProdProcessedCount[#] are examples of PackTags of this type.
TYPE COUNT:
STRUCT
///
///Product identification number
ID: DINT;
///
///Product description

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 19 of 44


Name: STRING;
///
///Product unit of measure
Unit: STRING;
///
///Count since last operator reset
Count: DINT;
///
///Count since last accumulative counter reset
AccCount: DINT;
END_STRUCT
END_TYPE

4.3. DESCRIPTOR
The descriptor type is used to describe parameters in the unit/machine.
UnitName.Status.Parameter[#] and UnitName.Command.Product[#].Ingredients[#].Parameter[#]
are examples of this type.

TYPE DESCRIPTOR:
STRUCT
///
///Parameter identification number
ID: DINT;
///
///Parameter description
Name: STRING;
///
///Parameter units of measure
Unit: STRING;
///
///Numeric value of parameter
Value: REAL;
END_STRUCT
END_TYPE

4.4. EQUIPMENTINTERLOCK
The equipment interlock type signals if the unit/machine is blocked or starved.
UnitName.Status. EquipmentInterlock is the only example of this type.

TYPE EQUIPMENTINTERLOCK:
STRUCT
///
///Machine stoppage due to downstream fault
Blocked: BOOL;
///
///Machine stoppage due to upstream or supply fault
Starved: BOOL;
END_STRUCT
END_TYPE

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 20 of 44


4.5. INGREDIENT
The ingredient type comprises the collection of tags required to describe the raw materials used in a
given product recipe. UnitName.Command.Product[#].Ingredients[#] is an example of this type.

TYPE INGREDIENT:
STRUCT
///
///Ingredient identification number
IngredientID: DINT;
///
///Parameters associated to given ingredient
Parameter: ARRAY[] OF DESCRIPTOR;
END_STRUCT
END_TYPE

4.6. INTERFACE
The interface type includes data used to coordinate state machine transitions between machines.
Parameter information may also be exchanged. UnitName.Command.RemoteInterface[#]
is an example of this type.

TYPE INTERFACE:
STRUCT
///
///Identification number of upstream or downstream unit machine
Number: DINT;
///
///Control command for upstream or downstream machine
ControlCmdNumber: DINT;
///
///Control command value associated with ControlCmdNumber
CmdValue: DINT;
///
///Parameter data required for peer-to-peer coordination
Parameter: ARRAY[] OF DESCRIPTOR;
END_STRUCT
END_TYPE

4.7. PRODUCT
The product type comprises all tags required to make a given product. This includes process-specific
data, as well as all recipe data. UnitName.Command.Product[#] and UnitName.Status.Product[#] are
examples of this type.

TYPE PRODUCT:
STRUCT
///
///Product identification number
ProductID: DINT;
///
///Parameters required for processing given product

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 21 of 44


ProcessVariables: ARRAY[] OF DESCRIPTOR;
///
///Ingredients required for processing given product
Ingredients: ARRAY[] OF INGREDIENT;
END_STRUCT
END_TYPE

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 22 of 44


5. TOP-LEVEL ORGANISATION
PackTags comprise a set of nested data types, the top-level of which is defined in ISA-TR88.00.02-
2015 as PACKMLV30. PACKMLV30 has three components: Command, Status, Admin defined
as subtypes PMLc, PMLs and PMLa respectively. These types are listed below. Note that ISA-
TR88.00.02-2015 does not require all components of PMLc, PMLs and PMLa to be implemented
on a given machine. Mandatory components of PMLc, PMLs and PMLa are shown in bold.
TYPE PACKMLV30 :
STRUCT
///
///Command data produced by the 'Information Sender' (i.e. HMI, machine peers, etc.)
Command: PMLc;
///
///Status data produced for 'Information Sender' (i.e. HMI, machine peers, etc.)
Status: PMLs;
///
///Administration data produced for higher level supervisory system.
Admin: PMLa;
END_STRUCT
END_TYPE

TYPE PMLa :
STRUCT
///
///Parameters associated to the local interface (e.g. HMI)
Parameter: ARRAY[] OF DESCRIPTOR;
///
///Listing of all currently active alarms
Alarm: ARRAY[] OF ALARM;
///
///Extent of the Alarm array
AlarmExtent: DINT;
///
///Chronological alarm history, with most recent given as AlarmHistory[0]
AlarmHistory: ARRAY[] OF ALARM;
///
///Extent of AlarmHistory array
AlarmHistoryExtent: DINT;
///
///Alarm associated to the primary cause of machine stoppage ('first fault') (required)
StopReason: ALARM;
///
///Extent of StopReason array
StopReasonExtent: DINT;
///
///Listing of all currently active warnings
Warning: ARRAY[] OF ALARM;
///
///Extent of warning array
WarningExtent: DINT;
///
///Elapsed time in seconds of current mode.
ModeCurrentTime: ARRAY[] OF DINT;

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 23 of 44


///
///Cumulative time in seconds in each defined mode.
ModeCumulativeTime: ARRAY[] OF DINT;
///
///Elapsed time in seconds of current [mode, state] pair.
StateCurrentTime: ARRAY[,] OF DINT;
///
///Cumulative time in seconds in each defined [mode, state] pair.
StateCumulativeTime: ARRAY[,] OF DINT;
///
///Count of raw materials used or consumed during production
ProdConsumedCount: ARRAY[] OF COUNT;
///
///Count of total products (i.e. good + defective) made during production (required)
ProdProcessedCount: ARRAY[] OF COUNT;
///
///Count of defective products made during production. (required)
ProdDefectiveCount: ARRAY[] OF COUNT;
///
///Accumulative time since last reset of timer arrays.
AccTimeSinceReset: DINT;
///
///Maximum design speed of the machine within given environment.
MachDesignSpeed: REAL;
///
///Bitwise indication of inactive states in current mode.
StatesDisabled: DINT;
///
///Current date and time of local processing unit (PLC, PC, PAC, microcontroller, etc.)
PLCDateTime: ARRAY[0..6] OF DINT;
END_STRUCT
END_TYPE

TYPE PMLc :
STRUCT
///
///Numeric representation of the commanded unit mode (required)
UnitMode: DINT;
///
///Signals request that the current value of Command.UnitMode be activated (required)
UnitModeChangeRequest: BOOL;
///
///Machine speed setpoint in units of [primary packages/min] (required)
MachSpeed: REAL;
///
///Bitwise indication that materials are ready for processing.
MaterialInterlock: ARRAY[1..32] OF BOOL;
///
///Numerical representation of the state commands (1=Reset, 2=Start, etc.) (required)
CntrlCmd: DINT;
///
///Signals request that the current value of Command.CntrlCmd be activated (required)
CmdChangeRequest: BOOL;
///
///Use to coordinate activities between peers (i.e. upstream or downstream unit machines.)

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 24 of 44


RemoteInterface: ARRAY[] OF INTERFACE;
///
///Values or parameters associated to the end user supervisory interface.
Parameter: ARRAY[] OF DESCRIPTOR;
///
///Recipe or process data associated to the various products run on the unit machine.
Product: ARRAY[] OF PRODUCT;
END_STRUCT
END_TYPE

TYPE PMLs :
STRUCT
///
///Numeric representation of the active unit mode (required)
UnitModeCurrent: DINT;
///
///Handshaking bit acknowledging that unit mode change request has been made.
UnitModeRequested: BOOL;
///
///Signals that unit mode change request has been accepted; switching is actively in process.
UnitModeChangeInProcess: BOOL;
///
///Numeric representation of the active state (required)
StateCurrent: DINT;
///
///Handshaking value acknowledging that state change request has been made.
StateRequested: DINT;
///
///Signals that state change request has been accepted; switching is actively in process.
StateChangeInProcess: BOOL;
///
///Active machine speed setpoint in units of [primary packages/min] (required)
MachSpeed: REAL;
///
///Actual machine speed in units of [primary packages/min] (required)
CurMachSpeed: REAL;
///
///Bitwise indication that materials are ready for processing.
MaterialInterlock: ARRAY[0..31] OF BOOL;
///
///Signals that the machine is either blocked or starved (required)
EquipmentInterlock: EQUIPMENTINTERLOCK;
///
///Use to coordinate activities between peers (i.e. upstream or downstream unit machines.)
RemoteInterface: ARRAY[] OF INTERFACE;
///
///Current values or parameters associated to the end user supervisory interface.
Parameter: ARRAY[] OF DESCRIPTOR;
///
///Current recipe or process data associated to the various products run on the unit machine.
Product: ARRAY[] OF PRODUCT;
END_STRUCT
END_TYPE

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 25 of 44


PACKMLV30, PMLc, PMLa and PMLs, together with the base types described in the previous
section, provide the basis for the full set of PackTags listed in Appendices 1 and 2.
ISA-TR88.00.02-2015 uses the term “unit/machine” to refer to machinery used for discrete
manufacturing. To each unit/machine we assign a unique set of PackTags. Each such set is
associated with a string-valued identifier called its UnitName. What this means in the present
context is that we associate the UnitName with an instance of PACKML30. For example, if our
machine had UnitName Machine_01, then, using standard IEC61131-3 notation, we would
declare an instance of PACKML30 as follows:
Machine_01: PACKMLV30; /// IEC61131-3

Similarly, in C# we would define


PACKMLV30 Machine_01; // C#

It is recommended to organize all PackML data under an easily recognizable object or folder. In
the example below, PackTags served by Machine_01 appear under the PackML object.

Figure 12 PackTags10 from a single unit/machine, Machine_01, are organized under a dedicated object or folder. The name PackML is
recommended, but not required.

If the OPC UA server contains PackML data from multiple unit/machines, it is recommended
that this data also be organized under this same object. This is shown in Figure 13.

Figure 13 PackTags from unit/machines Machine_01, Machine_02 and Machine_03 are organized under a common object or folder.

10
The only reason Admin, Command and Status are visible in this diagram is because they have a type defintion.
Otherwise, the client is simply interacting with the Machine_01 node of data type PackML30 structure

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 26 of 44


Figure 14 shows the corresponding construction of the PackML folder. Note that in this example
each of the complex data types is modelled as a variable node.

Figure 14 Construction of the PackML folder using the "Organizes" ReferenceType. UaModeler from Unified Automation GmbH was used
to create the OPC UA model.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 27 of 44


6. REFERENCE INFORMATION

6.1. DEFINITIONS AND ABBREVIATIONS


Table 5 List of definitions and abbreviations

Abbreviation Description Explanation


HMI Human Machine Interface Human machine interface is the part of the unit/machine
that handles the human to machine interactions.
ISA The International Society of ISA is a non-profit technical society for engineers,
Automation technicians, businesspeople, educators and students, who
work, study or are interested in industrial automation and
pursuits related to it.
OEE Overall Equipment OEE measurement is commonly used as a key performance
Effectiveness indicator (KPI) in conjunction with manufacturing efforts to
provide an indicator of success.
OEM Original Equipment OEM are manufacturing products or components bought by
Manufacturer another company and sold under the purchasing company's
brand or company name.
OMAC Organization for Machine OMAC is the organization for automation and
Automation and Control manufacturing professionals that is dedicated to supporting
the machine automation and operation needs of
manufacturing.
OPC Open Platform An industrial automation industry task force developed the
Communications original standard in 1996 under the name OLE for Process
Control (Object Linking and Embedding for process control).
OPC specifies the communication of real-time plant data
between control devices from different manufacturers.
OPC UA OPC Unified Architecture OPC Unified Architecture (OPC UA) is a machine to
machine communication protocol for industrial
automation developed by the OPC Foundation.
PackML Packaging Machine Language The primary objective of PackML is to bring a common
“look and feel” and operational consistency to all machines.
PackTags PackML data identifier PackTags are data elements that have been defined by the
OMAC Packaging Workgroup to facilitate easy data exchange
between packaging machines.
PLC Programmable Logic A computer controlling instruments, motors, valves, etc.
Controller
TR 88.00.02 Technical Report Technical Report is an informative document on S88
implementation on discrete machines – It is the specification
of PackML.

6.2. REFERENCES
Table 6 List of references

Ref. no. Document


[1] A. Griffen, “PackML on OPC UA, Implementation Guide”, Mettler-Toledo
International (internal document), 2016

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 28 of 44


[2] PLCopen and OPC Foundation: OPC UA Information Model for IEC 61131-3 -
Release 1.00, March 24, 2010
[3] Machine and Unit States: An Implementation Example of ISA-88 , ISA-TR88.00.02-
2015, 2015
[4] OPC Unified Architecture Specification Part 3: Address Space Model, Release 1.03,
July 10, 2015
[5] W. Mahnke, S. Leitner and M. Damm, OPC Unified Architecture, Springer, 2010
[6] C. Nøkleby, PackML Unit/Machine Implementation Guide, Ver. 1.00, December
5, 2016
[7] Wikipedia contributors, "PackML," Wikipedia, The Free Encyclopedia,
https://en.wikipedia.org/w/index.php?title=PackML&oldid=805578184 (accessed
December 6, 2017)

6.3. PEOPLE INVOLVED IN PREPARATION OF THE GUIDELINE


The following people served as active participants in preparation of this technical report:
Table 7 List of people involved in the preparation of this technical report

Name Surname Company


Carl Bostrom Bosch Rexroth
Lee Smith Mettler Toledo
Carsten Nøkleby SESAM-World
Malte Schlüter Mitsubishi

The preparation of this document is supported by Bosch Rexroth, Mettler Toledo, SESAM-
World and Mitsubishi Electric.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 29 of 44


7. APPENDIX
7.1. PACKTAGS: COMPLEX DATA STRUCTURES MAPPED AS VARIABLE NODES (I.E. NODECLASS=VARIABLE)
In this appendix, all tables are solely examples and not definitive solutions.
Table 8 Complex data structures mapped as Variable nodes (i.e. NodeClass=Variable)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type11
Class Definition Identifier
PACKMLC30
Variable PACKML30 “en-US”, "UnitName” index, "UnitName” UnitName PACKMLV30
VariableType

PMLc
Variable PMLc "Command” "Command” UnitName.Command PMLc
VariableType

Variable BaseVariableType 6 [Int32] "UnitMode” "UnitMode” UnitName.Command.UnitMode Int (32-bit)

Variable BaseVariableType 1 [Bool] "UnitModeChangeRequest” "UnitModeChangeRequest” UnitName.Command.UnitModeChangeRequest Bool

Variable BaseVariableType 10 [Float] "MachSpeed” "MachSpeed” UnitName.Command.MachSpeed Real

Variable BaseVariableType 1 [Bool] "MaterialInterlock” "MaterialInterlock” UnitName.Command.MaterialInterlock[#] Bool

Variable BaseVariableType 6 [Int32] "CntrlCmd” "CntrlCmd” UnitName.Command.CntrlCmd Int (32-bit)

Variable BaseVariableType 1 [Bool] "CmdChangeRequest” "CmdChangeRequest” UnitName.Command.CmdChangeRequest Bool

Variable InterfaceVariableType Interface "RemoteInterface” "RemoteInterface” UnitName.Command.RemoteInterface[#] 12 Interface

Variable BaseVariableType 6 [Int32] "Number” "Number” UnitName.Command.RemoteInterface[#].Number Int (32-bit)

Variable BaseVariableType 6 [Int32] "ControlCmdNumber” "ControlCmdNumber” UnitName.Command.RemoteInterface[#].ControlCmdNumber Int (32-bit)

Variable BaseVariableType 6 [Int32] "CmdValue” "CmdValue” UnitName.Command.RemoteInterface[#].CmdValue Int (32-bit)

Descriptor
Variable Descriptor "Parameter” "Parameter” UnitName.Command.RemoteInterface[#].Parameter[#] Descriptor
VariableType

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Command.RemoteInterface[#].Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Command.RemoteInterface[#].Parameter[#].Name String

11
Data type per ISA-TR88.00.02-2015.
12
The [#] denotes an array of unspecified dimension.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 30 of 44


Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Command.RemoteInterface[#].Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Command.RemoteInterface[#].Parameter[#].Value Real

Descriptor
Variable Descriptor "Parameter” "Parameter” UnitName.Command.Parameter[#] Descriptor
VariableType

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Command.Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Command.Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Command.Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Command.Parameter[#].Value Real

Variable ProductVariableType Product "Product” "Product” UnitName.Command.Product[#] Product

Variable BaseVariableType 6 [Int32] "ProductID” "ProductID” UnitName.Command.Product[#].ProductID Int (32-bit)

Table 9 Complex data structures mapped as Variable nodes (i.e. NodeClass=Variable)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Descriptor
Variable Descriptor Descriptor
VariableType "ProcessVariables” "ProcessVariables” UnitName.Command.Product[#].ProcessVariables[#]

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Command.Product[#].ProcessVariables[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Command.Product[#].ProcessVariables[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Command.Product[#].ProcessVariables[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Command.Product[#].ProcessVariables[#].Value Real

Indredient Ingredient
Variable Ingredient
VariableType "Ingredients” "Ingredients” UnitName.Command.Product[#].Ingredients[#]
Variable BaseVariableType 6 [Int32] Int (32-bit)
"IngredientID” "IngredientID” UnitName.Command.Product[#].Ingredients[#].IngredientID
Descriptor Descriptor
Variable Descriptor
VariableType "Parameter” "Parameter” UnitName.Command.Product[#].Ingredients[#].Parameter[#]
Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Command.Product[#].Ingredients[#].Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Command.Product[#].Ingredients[#].Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Command.Product[#].Ingredients[#].Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Command.Product[#].Ingredients[#].Parameter[#].Value Real

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 31 of 44


Table 10 Complex data structures mapped as Variable nodes (i.e. NodeClass=Variable)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Variable PMLs PMLs "Status” "Status” UnitName.Status PMLs
VariableType
Variable BaseVariableType 6 [Int32] "UnitModeCurrent” "UnitModeCurrent” UnitName.Status.UnitModeCurrent Int (32-bit)

Variable BaseVariableType 1 [Bool] "UnitModeRequested” "UnitModeRequested” UnitName.Status.UnitModeRequested Bool

Variable BaseVariableType 1 [Bool] "UnitModeChangeInProcess” "UnitModeChangeInProcess” UnitName.Status.UnitModeChangeInProcess Bool

Variable BaseVariableType 6 [Int32] "StateCurrent” "StateCurrent” UnitName.Status.StateCurrent Int (32-bit)

Variable BaseVariableType 6 [Int32] "StateRequested” "StateRequested” UnitName.Status.StateRequested Int (32-bit)

Variable BaseVariableType 1 [Bool] "StateChangeInProcess” "StateChangeInProcess” UnitName.Status.StateChangeInProcess Bool

Variable BaseVariableType 10 [Float] "MachSpeed” "MachSpeed” UnitName.Status.MachSpeed Real

Variable BaseVariableType 10 [Float] "CurMachSpeed” "CurMachSpeed” UnitName.Status.CurMachSpeed Real

Variable BaseVariableType 1 [Bool] "MaterialInterlock” "MaterialInterlock” UnitName.Status.MaterialInterlock[#] Bool

EquipmentInterlock Equipment Equipment


Variable "EquipmentInterlock” "EquipmentInterlock” UnitName.Status.EquipmentInterlock
VariableType Interlock Interlock

Variable BaseVariableType 1 [Bool] "Blocked” "Blocked” UnitName.Status.EquipmentInterlock.Blocked Bool

Variable BaseVariableType 1 [Bool] "Starved” "Starved” UnitName.Status.EquipmentInterlock.Starved Bool

Variable InterfaceVariableType Interface "RemoteInterface” "RemoteInterface” UnitName.Status.RemoteInterface[#] Interface

Variable BaseVariableType 6 [Int32] "Number” "Number” UnitName.Status.RemoteInterface[#].Number Int (32-bit)

Variable BaseVariableType 6 [Int32] "ControlCmdNumber” "ControlCmdNumber” UnitName.Status.RemoteInterface[#].ControlCmdNumber Int (32-bit)

Variable BaseVariableType 6 [Int32] "CmdValue” "CmdValue” UnitName.Status.RemoteInterface[#].CmdValue Int (32-bit)

Descriptor
Variable Descriptor "Parameter” "Parameter” UnitName.Status.RemoteInterface[#].Parameter[#] Descriptor
VariableType

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Status.RemoteInterface[#].Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Status.RemoteInterface[#].Parameter[#].Name. String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Status.RemoteInterface[#].Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Status.RemoteInterface[#].Parameter[#].Value Real

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 32 of 44


Descriptor
Variable Descriptor "Parameter” "Parameter” UnitName.Status.Parameter[#] Descriptor
VariableType

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Status.Parameter[#].ID Int (32-bit)

Table 11 Complex data structures mapped as Variable nodes (i.e. NodeClass=Variable)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Status.Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Status.Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Status.Parameter[#].Value Real

Variable ProductVariableType Product "Product” "Product” UnitName.Status.Product[#] Product

Variable BaseVariableType 6 [Int32] "ProductID” "ProductID” UnitName.Status.Product[#].ProductID Int (32-bit)

Descriptor Descriptor
Variable Descriptor "ProcessVariables” "ProcessVariables” UnitName.Status.Product[#].ProcessVariables[#]
VariableType
Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Status.Product[#].ProcessVariables[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Status.Product[#].ProcessVariables[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Status.Product[#].ProcessVariables[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Status.Product[#].ProcessVariables[#].Value Real

Ingredient
Variable Ingredient "Ingredients” "Ingredients” UnitName.Status.Product[#].Ingredients[#] Ingredient
VariableType

Variable BaseVariableType 6 [Int32] "IngredientID” "IngredientID” UnitName.Status.Product[#].Ingredients[#].IngredientID Int (32-bit)

Descriptor
Variable Descriptor "Parameter” "Parameter” UnitName.Status.Product[#].Ingredients[#].Parameter[#] Descriptor
VariableType

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Status.Product[#].Ingredients[#].Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Status.Product[#].Ingredients[#].Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Status.Product[#].Ingredients[#].Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Status.Product[#].Ingredients[#].Parameter[#].Value Real

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 33 of 44


Table 12 Complex data structures mapped as Variable nodes (i.e. NodeClass=Variable)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
PMLa
Variable PMLa PMLa
VariableType "Admin” "Admin” UnitName.Admin

Descriptor
Variable Descriptor Descriptor
VariableType "Parameter” "Parameter” UnitName.Admin.Parameter[#]

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Admin.Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Admin.Parameter[#].Unit String

Variable BaseVariableType 10 [Float] Real


"Value” "Value” UnitName.Admin.Parameter[#].Value
Variable AlarmVariableType Alarm Alarm
"Alarm” "Alarm” UnitName.Admin.Alarm[#]
Variable BaseVariableType 1 [Bool] Bool
"Trigger” "Trigger” UnitName.Admin.Alarm[#].Trigger
Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.Alarm[#].ID Int (32-bit)

Variable BaseVariableType 6 [Int32] "Value” "Value” UnitName.Admin.Alarm[#].Value Int (32-bit)

Variable BaseVariableType 12 [String] "Message” "Message” UnitName.Admin.Alarm[#].Message String

Variable BaseVariableType 6 [Int32] "Category” "Category” UnitName.Admin.Alarm[#].Category Int (32-bit)

Variable BaseVariableType 6 [Int32] "DateTime” "DateTime” UnitName.Admin.Alarm[#].DateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AckDateTime” "AckDateTime” UnitName.Admin.Alarm[#].AckDateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AlarmExtent” "AlarmExtent” UnitName.Admin.AlarmExtent Int (32-bit)

Variable AlarmVariableType Alarm "AlarmHistory” "AlarmHistory” UnitName.Admin.AlarmHistory[#] Alarm

Variable BaseVariableType 1 [Bool] "Trigger” "Trigger” UnitName.Admin.AlarmHistory[#].Trigger Bool

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.AlarmHistory[#].ID Int (32-bit)

Variable BaseVariableType 6 [Int32] "Value” "Value” UnitName.Admin.AlarmHistory[#].Value Int (32-bit)

Variable BaseVariableType 12 [String] "Message” "Message” UnitName.Admin.AlarmHistory[#].Message String

Variable BaseVariableType 6 [Int32] "Category” "Category” UnitName.Admin.AlarmHistory[#].Category Int (32-bit)

Variable BaseVariableType 6 [Int32] "DateTime” "DateTime” UnitName.Admin.AlarmHistory[#].DateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AckDateTime” "AckDateTime” UnitName.Admin.AlarmHistory[#].AckDateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AlarmHistoryExtent” "AlarmHistoryExtent” UnitName.Admin.AlarmHistoryExtent Int (32-bit)

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 34 of 44


Table 13 Complex data structures mapped as Variable nodes (i.e. NodeClass=Variable)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Variable AlarmVariableType Alarm "StopReason” "StopReason” UnitName.Admin.StopReason[#] Alarm

Variable BaseVariableType 1 [Bool] "Trigger” "Trigger” UnitName.Admin.StopReason[#].Trigger Bool

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.StopReason[#].ID Int (32-bit)

Variable BaseVariableType 6 [Int32] "Value” "Value” UnitName.Admin.StopReason[#].Value Int (32-bit)

Variable BaseVariableType 12 [String] "Message” "Message” UnitName.Admin.StopReason[#].Message String

Variable BaseVariableType 6 [Int32] Int (32-bit)


"Category” "Category” UnitName.Admin.StopReason[#].Category
Variable BaseVariableType 6 [Int32] Int (32-bit)
"DateTime” "DateTime” UnitName.Admin.StopReason[#].DateTime[#]
Variable BaseVariableType 6 [Int32] Int (32-bit)
"AckDateTime” "AckDateTime” UnitName.Admin.StopReason[#].AckDateTime[#]
Variable BaseVariableType 6 [Int32] "StopReasonExtent” "StopReasonExtent” UnitName.Admin.StopReasonExtent Int (32-bit)

Variable AlarmVariableType Alarm "Warning” "Warning” UnitName.Admin.Warning[#] Alarm

Variable BaseVariableType 1 [Bool] "Trigger” "Trigger” UnitName.Admin.Warning[#].Trigger Bool

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.Warning[#].ID Int (32-bit)

Variable BaseVariableType 6 [Int32] "Value” "Value” UnitName.Admin.Warning[#].Value Int (32-bit)

Variable BaseVariableType 12 [String] "Message” "Message” UnitName.Admin.Warning[#].Message String

Variable BaseVariableType 6 [Int32] "Category” "Category” UnitName.Admin.Warning[#].Category Int (32-bit)

Variable BaseVariableType 6 [Int32] "DateTime” "DateTime” UnitName.Admin.Warning[#].DateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AckDateTime” "AckDateTime” UnitName.Admin.Warning[#].AckDateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "WarningExtent” "WarningExtent” UnitName.Admin.WarningExtent Int (32-bit)

Variable BaseVariableType 6 [Int32] "ModeCurrentTime” "ModeCurrentTime” UnitName.Admin.ModeCurrentTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "ModeCumulativeTime” "ModeCumulativeTime” UnitName.Admin.ModeCumulativeTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "StateCurrentTime” "StateCurrentTime” UnitName.Admin.StateCurrentTime[#,#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "StateCumulativeTime” "StateCumulativeTime” UnitName.Admin.StateCumulativeTime[#,#] Int (32-bit)

Variable CountVariableType Count "ProdConsumedCount” "ProdConsumedCount” UnitName.Admin.ProdConsumedCount[#] Count

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.ProdConsumedCount[#].ID Int (32-bit)

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 35 of 44


Table 14 Complex data structures mapped as Variable nodes (i.e. NodeClass=Variable)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Admin.ProdConsumedCount[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Admin.ProdConsumedCount[#].Unit String

Variable BaseVariableType 6 [Int32] "Count” "Count” UnitName.Admin.ProdConsumedCount[#].Count Int (32-bit)

Variable BaseVariableType 6 [Int32] "AccCount” "AccCount” UnitName.Admin.ProdConsumedCount[#].AccCount Int (32-bit)

Variable CountVariableType Count "ProdProcessedCount” "ProdProcessedCount” UnitName.Admin.ProdProcessedCount[#] Count

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.ProdProcessedCount[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Admin.ProdProcessedCount[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Admin.ProdProcessedCount[#].Unit String

Variable BaseVariableType 6 [Int32] "Count” "Count” UnitName.Admin.ProdProcessedCount[#].Count Int (32-bit)

Variable BaseVariableType 6 [Int32] "AccCount” "AccCount” UnitName.Admin.ProdProcessedCount[#].AccCount Int (32-bit)

Variable CountVariableType Count "ProdDefectiveCount” "ProdDefectiveCount” UnitName.Admin.ProdDefectiveCount[#] Count

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.ProdDefectiveCount[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Admin.ProdDefectiveCount[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Admin.ProdDefectiveCount[#].Unit String

Variable BaseVariableType 6 [Int32] "Count” "Count” UnitName.Admin.ProdDefectiveCount[#].Count Int (32-bit)

Variable BaseVariableType 6 [Int32] "AccCount” "AccCount” UnitName.Admin.ProdDefectiveCount[#].AccCount Int (32-bit)

Variable BaseVariableType 6 [Int32] "AccTimeSinceReset” "AccTimeSinceReset” UnitName.Admin.AccTimeSinceReset Int (32-bit)

Variable BaseVariableType 10 [Real] "MachDesignSpeed” "MachDesignSpeed” UnitName.Admin.MachDesignSpeed Real

Variable BaseVariableType 6 [Int32] "StatesDisabled” "StatesDisabled” UnitName.Admin.StatesDisabled Int (32-bit)

Variable BaseVariableType 6 [Int32] "PLCDateTime” "PLCDateTime” UnitName.Admin.PLCDateTime[#] Int (32-bit)

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 36 of 44


7.2. PACKTAGS: COMPLEX DATA STRUCTURES MAPPED AS OBJECT NODES (I.E. NODECLASS=OBJECT)

Table 15 PackTags Complex data structures mapped as Object nodes (i.e. NodeClass=Object)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type13
Class Definition Identifier
PACKML30
Object --- “en-US”, "UnitName” index, "UnitName” UnitName PACKMLV30
ObjectType

PMLc
Object --- "Command” "Command” UnitName.Command PMLc
ObjectType

Variable BaseVariableType 6 [Int32] "UnitMode” "UnitMode” UnitName.Command.UnitMode Int (32-bit)

Variable BaseVariableType 1 [Bool] "UnitModeChangeRequest” "UnitModeChangeRequest” UnitName.Command.UnitModeChangeRequest Bool

Variable BaseVariableType 10 [Float] "MachSpeed” "MachSpeed” UnitName.Command.MachSpeed Real

Variable BaseVariableType 1 [Bool] "MaterialInterlock” "MaterialInterlock” UnitName.Command.MaterialInterlock[#] Bool

Variable BaseVariableType 6 [Int32] "CntrlCmd” "CntrlCmd” UnitName.Command.CntrlCmd Int (32-bit)

Variable BaseVariableType 1 [Bool] "CmdChangeRequest” "CmdChangeRequest” UnitName.Command.CmdChangeRequest Bool

Object InterfaceObjectType --- "RemoteInterface” "RemoteInterface” UnitName.Command.RemoteInterface[#] Interface

Variable BaseVariableType 6 [Int32] "Number” "Number” UnitName.Command.RemoteInterface[#].Number Int (32-bit)

Variable BaseVariableType 6 [Int32] "ControlCmdNumber” "ControlCmdNumber” UnitName.Command.RemoteInterface[#].ControlCmdNumber Int (32-bit)

Variable BaseVariableType 6 [Int32] "CmdValue” "CmdValue” UnitName.Command.RemoteInterface[#].CmdValue Int (32-bit)

Object DescriptorObjectType --- "Parameter” "Parameter” UnitName.Command.RemoteInterface[#].Parameter[#] Descriptor

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Command.RemoteInterface[#].Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Command.RemoteInterface[#].Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Command.RemoteInterface[#].Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Command.RemoteInterface[#].Parameter[#].Value Real

Object DescriptorObjectType --- "Parameter” "Parameter” UnitName.Command.Parameter[#] Descriptor

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Command.Parameter[#].ID Int (32-bit)

13
Data type per ISA-TR88.00.02-2015.

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 37 of 44


Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Command.Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Command.Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Command.Parameter[#].Value Real

Object ProductObjectType --- "Product” "Product” UnitName.Command.Product[#] Product

Variable BaseVariableType 6 [Int32] "ProductID” "ProductID” UnitName.Command.Product[#].ProductID Int (32-bit)

Table 16 PackTags Complex data structures mapped as Object nodes (i.e. NodeClass=Object)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Object Descriptor --- "ProcessVariables” "ProcessVariables” UnitName.Command.Product[#].ProcessVariables[#] Descriptor

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Command.Product[#].ProcessVariables[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Command.Product[#].ProcessVariables[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Command.Product[#].ProcessVariables[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Command.Product[#].ProcessVariables[#].Value Real

Object Indredient --- Ingredient


"Ingredients” "Ingredients” UnitName.Command.Product[#].Ingredients[#]
Variable BaseVariableType 6 [Int32] Int (32-bit)
"IngredientID” "IngredientID” UnitName.Command.Product[#].Ingredients[#].IngredientID
Object Descriptor --- Descriptor
"Parameter” "Parameter” UnitName.Command.Product[#].Ingredients[#].Parameter[#]
Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Command.Product[#].Ingredients[#].Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Command.Product[#].Ingredients[#].Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Command.Product[#].Ingredients[#].Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Command.Product[#].Ingredients[#].Parameter[#].Value Real

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 38 of 44


Table 17 PackTags Complex data structures mapped as Object nodes (i.e. NodeClass=Object)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Object PMLs ObjectType --- "Status” "Status” UnitName.Status PMLs

Variable BaseVariableType 6 [Int32] "UnitModeCurrent” "UnitModeCurrent” UnitName.Status.UnitModeCurrent Int (32-bit)

Variable BaseVariableType 1 [Bool] "UnitModeRequested” "UnitModeRequested” UnitName.Status.UnitModeRequested Bool

Variable BaseVariableType 1 [Bool] "UnitModeChangeInProcess” "UnitModeChangeInProcess” UnitName.Status.UnitModeChangeInProcess Bool

Variable BaseVariableType 6 [Int32] "StateCurrent” "StateCurrent” UnitName.Status.StateCurrent Int (32-bit)

Variable BaseVariableType 6 [Int32] "StateRequested” "StateRequested” UnitName.Status.StateRequested Int (32-bit)

Variable BaseVariableType 1 [Bool] "StateChangeInProcess” "StateChangeInProcess” UnitName.Status.StateChangeInProcess Bool

Variable BaseVariableType 10 [Float] "MachSpeed” "MachSpeed” UnitName.Status.MachSpeed Real

Varaible BaseVariableType 10 [Float] "CurMachSpeed” "CurMachSpeed” UnitName.Status.CurMachSpeed Real

Variable BaseVariableType 1 [Bool] "MaterialInterlock” "MaterialInterlock” UnitName.Status.MaterialInterlock[#] Bool

EquipmentInterlock Equipment
Object --- "EquipmentInterlock” "EquipmentInterlock” UnitName.Status.EquipmentInterlock
ObjectType Interlock

Variable BaseVariableType 1 [Bool] "Blocked” "Blocked” UnitName.Status.EquipmentInterlock.Blocked Bool

Variable BaseVariableType 1 [Bool] "Starved” "Starved” UnitName.Status.EquipmentInterlock.Starved Bool

Object InterfaceObjectType --- "RemoteInterface” "RemoteInterface” UnitName.Status.RemoteInterface[#] Interface

Variable BaseVariableType 6 [Int32] "Number” "Number” UnitName.Status.RemoteInterface[#].Number Int (32-bit)

Variable BaseVariableType 6 [Int32] "ControlCmdNumber” "ControlCmdNumber” UnitName.Status.RemoteInterface[#].ControlCmdNumber Int (32-bit)

Variable BaseVariableType 6 [Int32] "CmdValue” "CmdValue” UnitName.Status.RemoteInterface[#].CmdValue Int (32-bit)

Object DescriptorObjectType --- "Parameter” "Parameter” UnitName.Status.RemoteInterface[#].Parameter[#] Descriptor

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Status.RemoteInterface[#].Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Status.RemoteInterface[#].Parameter[#].Name. String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Status.RemoteInterface[#].Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Status.RemoteInterface[#].Parameter[#].Value Real

Object DescriptorObjectType --- "Parameter” "Parameter” UnitName.Status.Parameter[#] Descriptor

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Status.Parameter[#].ID Int (32-bit)

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 39 of 44


Table 18 PackTags Complex data structures mapped as Object nodes (i.e. NodeClass=Object)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Status.Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Status.Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Status.Parameter[#].Value Real

Object ProductObjectType --- "Product” "Product” UnitName.Status.Product[#] Product

Variable BaseVariableType 6 [Int32] "ProductID” "ProductID” UnitName.Status.Product[#].ProductID Int (32-bit)

Object DescriptorObjectType --- "ProcessVariables” "ProcessVariables” UnitName.Status.Product[#].ProcessVariables[#] Descriptor

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Status.Product[#].ProcessVariables[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Status.Product[#].ProcessVariables[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Status.Product[#].ProcessVariables[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Status.Product[#].ProcessVariables[#].Value Real

Object IndredientObjectType --- "Ingredients” "Ingredients” UnitName.Status.Product[#].Ingredients[#] Ingredient

Variable BaseVariableType 6 [Int32] "IngredientID” "IngredientID” UnitName.Status.Product[#].Ingredients[#].IngredientID Int (32-bit)

Object DescriptorObjectType --- "Parameter” "Parameter” UnitName.Status.Product[#].Ingredients[#].Parameter[#] Descriptor

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Status.Product[#].Ingredients[#].Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Status.Product[#].Ingredients[#].Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Status.Product[#].Ingredients[#].Parameter[#].Unit String

Variable BaseVariableType 10 [Float] "Value” "Value” UnitName.Status.Product[#].Ingredients[#].Parameter[#].Value Real

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 40 of 44


Table 19 PackTags Complex data structures mapped as Object nodes (i.e. NodeClass=Object)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
PMLa
Object --- PMLa
ObjectType "Admin” "Admin” UnitName.Admin

Object DescriptorObjectType --- "Parameter” "Parameter” UnitName.Admin.Parameter[#] Descriptor

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.Parameter[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Admin.Parameter[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Admin.Parameter[#].Unit String

Variable BaseVariableType 10 [Float] Real


"Value” "Value” UnitName.Admin.Parameter[#].Value
Object AlarmObjectType --- Alarm
"Alarm” "Alarm” UnitName.Admin.Alarm[#]
Variable BaseVariableType 1 [Bool] Bool
"Trigger” "Trigger” UnitName.Admin.Alarm[#].Trigger
Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.Alarm[#].ID Int (32-bit)

Variable BaseVariableType 6 [Int32] "Value” "Value” UnitName.Admin.Alarm[#].Value Int (32-bit)

Variable BaseVariableType 12 [String] "Message” "Message” UnitName.Admin.Alarm[#].Message String

Variable BaseVariableType 6 [Int32] "Category” "Category” UnitName.Admin.Alarm[#].Category Int (32-bit)

Variable BaseVariableType 6 [Int32] "DateTime” "DateTime” UnitName.Admin.Alarm[#].DateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AckDateTime” "AckDateTime” UnitName.Admin.Alarm[#].AckDateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AlarmExtent” "AlarmExtent” UnitName.Admin.AlarmExtent Int (32-bit)

Object AlarmObjectType --- "AlarmHistory” "AlarmHistory” UnitName.Admin.AlarmHistory[#] Alarm

Variable BaseVariableType 1 [Bool] "Trigger” "Trigger” UnitName.Admin.AlarmHistory[#].Trigger Bool

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.AlarmHistory[#].ID Int (32-bit)

Variable BaseVariableType 6 [Int32] "Value” "Value” UnitName.Admin.AlarmHistory[#].Value Int (32-bit)

Variable BaseVariableType 12 [String] "Message” "Message” UnitName.Admin.AlarmHistory[#].Message String

Variable BaseVariableType 6 [Int32] "Category” "Category” UnitName.Admin.AlarmHistory[#].Category Int (32-bit)

Variable BaseVariableType 6 [Int32] "DateTime” "DateTime” UnitName.Admin.AlarmHistory[#].DateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AckDateTime” "AckDateTime” UnitName.Admin.AlarmHistory[#].AckDateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AlarmHistoryExtent” "AlarmHistoryExtent” UnitName.Admin.AlarmHistoryExtent Int (32-bit)

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 41 of 44


Table 20 PackTags Complex data structures mapped as Object nodes (i.e. NodeClass=Object)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Object AlarmObjectType --- "StopReason” "StopReason” UnitName.Admin.StopReason[#] Alarm

Variable BaseVariableType 1 [Bool] "Trigger” "Trigger” UnitName.Admin.StopReason[#].Trigger Bool

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.StopReason[#].ID Int (32-bit)

Variable BaseVariableType 6 [Int32] "Value” "Value” UnitName.Admin.StopReason[#].Value Int (32-bit)

Variable BaseVariableType 12 [String] "Message” "Message” UnitName.Admin.StopReason[#].Message String

Variable BaseVariableType 6 [Int32] Int (32-bit)


"Category” "Category” UnitName.Admin.StopReason[#].Category
Variable BaseVariableType 6 [Int32] Int (32-bit)
"DateTime” "DateTime” UnitName.Admin.StopReason[#].DateTime[#]
Variable BaseVariableType 6 [Int32] Int (32-bit)
"AckDateTime” "AckDateTime” UnitName.Admin.StopReason[#].AckDateTime[#]
Variable BaseVariableType 6 [Int32] "StopReasonExtent” "StopReasonExtent” UnitName.Admin.StopReasonExtent Int (32-bit)

Object AlarmObjectType --- "Warning” "Warning” UnitName.Admin.Warning[#] Alarm

Variable BaseVariableType 1 [Bool] "Trigger” "Trigger” UnitName.Admin.Warning[#].Trigger Bool

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.Warning[#].ID Int (32-bit)

Variable BaseVariableType 6 [Int32] "Value” "Value” UnitName.Admin.Warning[#].Value Int (32-bit)

Variable BaseVariableType 12 [String] "Message” "Message” UnitName.Admin.Warning[#].Message String

Variable BaseVariableType 6 [Int32] "Category” "Category” UnitName.Admin.Warning[#].Category Int (32-bit)

Variable BaseVariableType 6 [Int32] "DateTime” "DateTime” UnitName.Admin.Warning[#].DateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "AckDateTime” "AckDateTime” UnitName.Admin.Warning[#].AckDateTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "WarningExtent” "WarningExtent” UnitName.Admin.WarningExtent Int (32-bit)

Variable BaseVariableType 6 [Int32] "ModeCurrentTime” "ModeCurrentTime” UnitName.Admin.ModeCurrentTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "ModeCumulativeTime” "ModeCumulativeTime” UnitName.Admin.ModeCumulativeTime[#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "StateCurrentTime” "StateCurrentTime” UnitName.Admin.StateCurrentTime[#,#] Int (32-bit)

Variable BaseVariableType 6 [Int32] "StateCumulativeTime” "StateCumulativeTime” UnitName.Admin.StateCumulativeTime[#,#] Int (32-bit)

Object CountObjectType --- "ProdConsumedCount” "ProdConsumedCount” UnitName.Admin.ProdConsumedCount[#] Count

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.ProdConsumedCount[#].ID Int (32-bit)

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 42 of 44


Table 21 PackTags Complex data structures mapped as Object nodes (i.e. NodeClass=Object)

OPC UA ISA-TR88.00.02-2015
Node HasType DataType
DisplayName BrowseName PackTag Type
Class Definition Identifier
Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Admin.ProdConsumedCount[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Admin.ProdConsumedCount[#].Unit String

Variable BaseVariableType 6 [Int32] "Count” "Count” UnitName.Admin.ProdConsumedCount[#].Count Int (32-bit)

Variable BaseVariableType 6 [Int32] "AccCount” "AccCount” UnitName.Admin.ProdConsumedCount[#].AccCount Int (32-bit)

Object CountObjectType --- "ProdProcessedCount” "ProdProcessedCount” UnitName.Admin.ProdProcessedCount[#] Count

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.ProdProcessedCount[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Admin.ProdProcessedCount[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Admin.ProdProcessedCount[#].Unit String

Variable BaseVariableType 6 [Int32] "Count” "Count” UnitName.Admin.ProdProcessedCount[#].Count Int (32-bit)

Variable BaseVariableType 6 [Int32] "AccCount” "AccCount” UnitName.Admin.ProdProcessedCount[#].AccCount Int (32-bit)

Object CountObjectType --- "ProdDefectiveCount” "ProdDefectiveCount” UnitName.Admin.ProdDefectiveCount[#] Count

Variable BaseVariableType 6 [Int32] "ID” "ID” UnitName.Admin.ProdDefectiveCount[#].ID Int (32-bit)

Variable BaseVariableType 12 [String] "Name” "Name” UnitName.Admin.ProdDefectiveCount[#].Name String

Variable BaseVariableType 12 [String] "Unit” "Unit” UnitName.Admin.ProdDefectiveCount[#].Unit String

Variable BaseVariableType 6 [Int32] "Count” "Count” UnitName.Admin.ProdDefectiveCount[#].Count Int (32-bit)

Variable BaseVariableType 6 [Int32] "AccCount” "AccCount” UnitName.Admin.ProdDefectiveCount[#].AccCount Int (32-bit)

Variable BaseVariableType 6 [Int32] "AccTimeSinceReset” "AccTimeSinceReset” UnitName.Admin.AccTimeSinceReset Int (32-bit)

Variable BaseVariableType 10 [Real] "MachDesignSpeed” "MachDesignSpeed” UnitName.Admin.MachDesignSpeed Real

Variable BaseVariableType 6 [Int32] "StatesDisabled” "StatesDisabled” UnitName.Admin.StatesDisabled Int (32-bit)

Variable BaseVariableType 6 [Int32] "PLCDateTime” "PLCDateTime” UnitName.Admin.PLCDateTime[#] Int (32-bit)

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 43 of 44


8. VERSION HISTORY
Table 22 Version log

Date Initials Description Version


[YYYY-MM-DD]
2018-04-03 CPB/CAN First version 1.00
2018-05-21 CPB/CAN/LEE Review of document, and all comments included. 1.01

Ver. 1.01: Standard Representation of PackTags in an OPC UA Server Page 44 of 44

You might also like