1 Scope

This document defines OPC UA interfaces for components of Unattended Retail & Coffee Solutions. By using those standardized interfaces, vendors and system integrators can easily combine components from different suppliers to assemble their Unattended Retail & Coffee Solutions.

This specification is marketed under the name EVA SmartLink. The name has been deliberately chosen to reflect the core ambition of the initiative: to create a smart, secure and future-proof link between all components of Unattended Retail, Vending & Coffee Solutions. "Smart" refers to the intelligent, modular architecture enabled by OPC UA; "Link" highlights interoperability, openness and the seamless connection between machine engines, user interfaces, payment systems, pricing services and audit functionalities.

The EVA SmartLink branding provides the industry with a clear, recognisable identity for this open standard, facilitating communication, market adoption and implementation across Europe and beyond. While the technical foundation remains OPC UA, the name EVA SmartLink emphasises its specific application to the unattended retail and vending ecosystem and underlines its role as an industry-driven, vendor-neutral framework designed to foster innovation, flexibility and fair competition. The logo of EVA SmartLink is shown in Figure 1.

OPC Foundation

OPC is the interoperability standard for the secure and reliable exchange of data and information in the industrial automation space and in other industries. It is platform independent and ensures the seamless flow of information among devices from multiple vendors. The OPC Foundation is responsible for the development and maintenance of this standard.

OPC UA is a platform independent service-oriented architecture that integrates all the functionality of the individual OPC Classic specifications into one extensible framework. This multi-layered approach accomplishes the original design specification goals of:

Platform independence: from an embedded microcontroller to cloud-based infrastructure

Secure: encryption, authentication, authorisation, and auditing

Extensible: ability to add new features including transports without affecting existing applications

Comprehensive information modelling capabilities: for defining any model from simple to complex

EVA

The European Vending & Coffee Service Association (EVA) is a not-for-profit organisation established and situated in Brussels since 1994. It represents the interests of the European coffee service and vending industry vis-à-vis the European Institutions and other relevant authorities or bodies. Its membership is composed of national associations and individual companies across Europe. The EVA represents all segments of the coffee service, water dispenser and vending industry: machine and component manufacturers, suppliers of commodities (coffee, ingredients, snacks, cold drinks, cups etc.), and operators.

2 Normative references

The following referenced documents are indispensable for the application of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments and errata) applies.

OPC 10000-1, OPC Unified Architecture - Part 1: Overview and Concepts

http://www.opcfoundation.org/documents/10000-1/

OPC 10000-2, OPC Unified Architecture - Part 2: Security Model

http://www.opcfoundation.org/documents/10000-2/

OPC 10000-3, OPC Unified Architecture - Part 3: Address Space Model

http://www.opcfoundation.org/documents/10000-3/

OPC 10000-4, OPC Unified Architecture - Part 4: Services

http://www.opcfoundation.org/documents/10000-4/

OPC 10000-5, OPC Unified Architecture - Part 5: Information Model

http://www.opcfoundation.org/documents/10000-5/

OPC 10000-6, OPC Unified Architecture - Part 6: Mappings

http://www.opcfoundation.org/documents/10000-6/

OPC 10000-7, OPC Unified Architecture - Part 7: Profiles

http://www.opcfoundation.org/documents/10000-7/

OPC 10000-12, OPC Unified Architecture - Part 12: Discovery and Global Services

http://www.opcfoundation.org/documents/10000-12/

OPC 10000-100, OPC Unified Architecture - Part 100: Devices

http://www.opcfoundation.org/documents/10000-100/

EVA DTS, Data Transfer Standard EVA DTS 6.2.2

MDB / ICP: Multi-Drop Bus / Internal Communication Protocol, Version 4.3

https://www.namanow.org/wp-content/uploads/Multi-Drop-Bus-and-Internal-Communication-Protocol.pdf

IEEE 802.3: IEEE Standard for Ethernet

https://standards.ieee.org/ieee/802.3/10422/

3 Terms, abbreviated terms and conventions

3.1 Overview

It is assumed that basic concepts of OPC UA information modelling and Unattended Retail & Coffee Solutions are understood in this document. This document will use these concepts to describe the Unattended Retail & Coffee Solutions Information Model. For the purposes of this document, the terms and definitions given in OPC 10000-1, OPC 10000-3, OPC 10000-4, OPC 10000-5, OPC 10000-7, OPC 10000-100 as well as the following apply.

Note that OPC UA terms and terms defined in this document are italicized in the document.

3.2 OPC UA for Unattended Retail & Coffee Solutions terms

3.2.1 Vending Machine

Unattended Retail & Coffee Solution

3.2.2 Option

any user-selectable parameter which can change product delivery

3.3 Abbreviated terms

B&BBed and Breakfast
CRLCertificate Revocation List
ERPEnterprise Resource Planning
EVAEuropean Vending & Coffee Service Association
EVA DTSEVA Data Transfer Standard
GDSGlobalDiscoveryServer
HMIHuman Machine Interface
HTTPHypertext Transfer Protocol
IPInternet Protocol
MDBMulti-drop Bus
MESManufacturing Execution System
OCSOffice Coffee Service
PMSProduction Management System
TCPTransmission Control Protocol
UIUser Interface
UMLUnified Modelling Language
URIUniform Resource Identifier
XMLExtensible Markup Language

3.4 Conventions used in this document

3.4.1 Conventions for Node descriptions

3.4.1.1 Node definitions

Node definitions are specified using tables (see Table 2).

Attributes are defined by providing the Attribute name and a value, or a description of the value.

References are defined by providing the ReferenceType name, the BrowseName of the TargetNode and its NodeClass.

  • If the TargetNode is a component of the Node being defined in the table the Attributes of the composed Node are defined in the same row of the table.

  • The DataType is only specified for Variables; "[<number>]" indicates a single-dimensional array, for multi-dimensional arrays the expression is repeated for each dimension (e.g. [2][3] for a two-dimensional array). For all arrays the ArrayDimensions is set as identified by <number> values. If no <number> is set, the corresponding dimension is set to 0, indicating an unknown size. If no number is provided at all the ArrayDimensions can be omitted. If no brackets are provided, it identifies a scalar DataType and the ValueRank is set to the corresponding value (see OPC 10000-3). In addition, ArrayDimensions is set to null or is omitted. If it can be Any or ScalarOrOneDimension, the value is put into "{<value>}", so either "{Any}" or "{ScalarOrOneDimension}" and the ValueRank is set to the corresponding value (see OPC 10000-3) and the ArrayDimensions is set to null or is omitted. Examples are given in Table 1.

Table 1 - Examples of DataTypes
Notation Data­Type Value­Rank Array­Dimensions Description
0:Int320:Int32-1omitted or nullA scalar Int32.
0:Int32[]0:Int321omitted or {0}Single-dimensional array of Int32 with an unknown size.
0:Int32[][]0:Int322omitted or {0,0}Two-dimensional array of Int32 with unknown sizes for both dimensions.
0:Int32[3][]0:Int322{3,0}Two-dimensional array of Int32 with a size of 3 for the first dimension and an unknown size for the second dimension.
0:Int32[5][3]0:Int322{5,3}Two-dimensional array of Int32 with a size of 5 for the first dimension and a size of 3 for the second dimension.
0:Int32{Any}0:Int32-2omitted or nullAn Int32 where it is unknown if it is scalar or array with any number of dimensions.
0:Int32{ScalarOrOneDimension}0:Int32-3omitted or nullAn Int32 where it is either a single-dimensional array or a scalar.
  • The TypeDefinition is specified for Objects and Variables.

  • The TypeDefinition column specifies a symbolic name for a NodeId, i.e., the specified Node points with a HasTypeDefinition Reference to the corresponding Node.

  • The ModellingRule of the referenced component is provided by specifying the symbolic name of the rule in the ModellingRule column. In the AddressSpace, the Node shall use a HasModellingRule Reference to point to the corresponding ModellingRule Object.

If the NodeId of a DataType is provided, the symbolic name of the Node representing the DataType shall be used.

Note that if a symbolic name of a different namespace is used, it is prefixed by the NamespaceIndex (see 3.4.2.2).

Nodes of all other NodeClasses cannot be defined in the same table; therefore, only the used ReferenceType, their NodeClass and their BrowseName are specified. A reference to another part of this document points to their definition. Table 2 illustrates the table. If no components are provided, the DataType, TypeDefinition and Other columns may be omitted and only a Comment column is introduced to point to the Node definition.

Each Type Node or well-known Instance Node defined shall have one or more ConformanceUnits defined in 0 that require the Node to be in the AddressSpace.

The relations between Nodes and ConformanceUnits are defined at the end of the tables defining Nodes, one row per ConformanceUnit. The ConformanceUnits are reflected in the Category element for the Node definition in the UANodeSet (see OPC 10000-6).

The list of ConformanceUnits in the UANodeSet allows Servers to optimize resource consumption by using a list of supported ConformanceUnits to select a subset of the Nodes in an Information Model.

When a Node is selected in this way, all dependencies implied by the References are also selected.

Dependencies exist if the Node is the source of HasTypeDefinition, HasInterface, HasAddIn or any HierarchicalReference. Dependencies also exist if the Node is the target of a HasSubtype Reference. For Variables and VariableTypes, the value of the DataType Attribute is a dependency. For DataType Nodes, any DataTypes referenced in the DataTypeDefinition Attribute are also dependencies.

For additional details see OPC 10000-5.

Table 2 - Type Definition Table
Attribute Value
Attribute nameAttribute value. If it is an optional Attribute that is not set "--" is used.
References NodeClass BrowseName DataType TypeDefinition Other
ReferenceType name NodeClass of the target Node. BrowseName of the target Node. DataType of the referenced Node, only applicable for Variables. TypeDefinition of the referenced Node, only applicable for Variables and Objects.Additional characteristics of the TargetNode such as the ModellingRule or AccessLevel.
NOTE Notes referencing footnotes of the table content.
Conformance Units
Name of ConformanceUnit, one row per ConformanceUnit

Components of Nodes can be complex that is containing components by themselves. The TypeDefinition, NodeClass and DataType can be derived from the type definitions, and the symbolic name can be created as defined in 3.4.3.1. Therefore, those containing components are not explicitly specified; they are implicitly specified by the type definitions.

The Other column defines additional characteristics of the Node. Examples of characteristics that can appear in this column are show in Table 3.

Table 3 - Examples of Other characteristics
Name Short Name Description
0:MandatoryMThe Node has the Mandatory ModellingRule.
0:OptionalOThe Node has the Optional ModellingRule.
0:MandatoryPlaceholderMPThe Node has the MandatoryPlaceholder ModellingRule.
0:OptionalPlaceholderOPThe Node has the OptionalPlaceholder ModellingRule.
ReadOnlyROThe Node AccessLevel has the CurrentRead bit set but not the CurrentWrite bit.
ReadWriteRWThe Node AccessLevel has the CurrentRead and CurrentWrite bits set.
WriteOnlyWOThe Node AccessLevel has the CurrentWrite bit set but not the CurrentRead bit.

If multiple characteristics are defined, they are separated by commas. The name or the short name may be used.

3.4.1.2 Additional References

To provide information about additional References, the format as shown in Table 4 is used.

Table 4 - <some>Type additional References
SourceBrowsePath Reference Type Is Forward TargetBrowsePath
SourceBrowsePath is always relative to the TypeDefinition. Multiple elements are defined as separate rows of a nested table. ReferenceType nameTrue = forward Reference.

TargetBrowsePath points to another Node, which can be a well-known instance or a TypeDefinition. You can use BrowsePaths here as well, which is either relative to the TypeDefinition or absolute.

If absolute, the first entry needs to refer to a type or well-known instance, uniquely identified within a namespace by the BrowseName.

References can be to any other Node.

3.4.1.3 Additional sub-components

To provide information about sub-components, the format as shown in Table 5 is used.

Table 5 - <some>Type additional subcomponents
BrowsePath References NodeClass BrowseName DataType TypeDefinition Others
BrowsePath is always relative to the TypeDefinition. Multiple elements are defined as separate rows of a nested tableNOTE Same as for Table 2
3.4.1.4 Additional Attribute values

The type definition table provides columns to specify the values for required Node Attributes for InstanceDeclarations. To provide information about additional Attributes, the format as shown in Table 6 is used.

Table 6 - <some>Type Attribute values for child Nodes
BrowsePath <Attribute name> Attribute
BrowsePath is always relative to the TypeDefinition. Multiple elements are defined as separate rows of a nested table

The values of attributes are converted to text by adapting the reversible JSON encoding rules defined in OPC 10000-6.

If the JSON encoding of a value is a JSON string or a JSON number then that value is entered in the value field. Double quotes are not included.

If the DataType includes a NamespaceIndex (QualifiedNames, NodeIds or ExpandedNodeIds) then the notation used for BrowseNames is used.

If the value is an Enumeration the name of the enumeration value is entered.

If the value is a Structure then a sequence of name and value pairs is entered. Each pair is followed by a newline. The name is followed by a colon. The names are the names of the fields in the DataTypeDefinition.

If the value is an array of non-structures then a sequence of values is entered where each value is followed by a newline.

If the value is an array of Structures or a Structure with fields that are arrays or with nested Structures then the complete JSON array or JSON object is entered.

There can be multiple columns to define more than one Attribute.

3.4.2 NodeIds and BrowseNames

3.4.2.1 NodeIds

The NodeIds of all Nodes described in this standard are only symbolic names. Annex A defines the actual NodeIds.

The symbolic name of each Node defined in this document is its BrowseName, or, when it is part of another Node, the BrowseName of the other Node, a ".", and the BrowseName of itself. In this case "part of" means that the whole has a HasProperty or HasComponent Reference to its part. Since all Nodes not being part of another Node have a unique name in this document, the symbolic name is unique.

The NamespaceUri for all NodeIds defined in this document is defined in Annex A. The NamespaceIndex for this NamespaceUri is vendor-specific and depends on the position of the NamespaceUri in the server namespace table.

Note that this document not only defines concrete Nodes, but also requires that some Nodes shall be generated, for example one for each Session running on the Server. The NodeIds of those Nodes are Server-specific, including the namespace. But the NamespaceIndex of those Nodes cannot be the NamespaceIndex used for the Nodes defined in this document, because they are not defined by this document but generated by the Server.

3.4.2.2 BrowseNames

The text part of the BrowseNames for all Nodes defined in this document is specified in the tables defining the Nodes. The NamespaceUri for all BrowseNames defined in this document is defined in 10.2.

For InstanceDeclarations of NodeClass Object and Variable that are placeholders (OptionalPlaceholder and MandatoryPlaceholder ModellingRule), the BrowseName and the DisplayName are enclosed in angle brackets (<>) as recommended in OPC 10000-3.

If a BrowseName is not defined by this document, a namespace index prefix is added to the BrowseName (e.g., prefix '0' leading to '0:EngineeringUnits' or prefix '2' leading to '2:DeviceRevision'). This is typically necessary if a Property of another specification is overwritten or used in the OPC UA types defined in this document. Table 144 provides a list of namespaces and their indexes as used in this document.

3.4.3 Common Attributes

3.4.3.1 General

The Attributes of Nodes, their DataTypes and descriptions are defined in OPC 10000-3. Attributes not marked as optional are mandatory and shall be provided by a Server. The following tables define if the Attribute value is defined by this document or if it is server-specific.

For all Nodes specified in this document, the Attributes named in Table 7 shall be set as specified in the table.

Table 7 - Common Node Attributes
Attribute Value
DisplayNameThe DisplayName is a LocalizedText. Each Server shall provide the DisplayName identical to the BrowseName of the Node for the LocaleId "en" unless specified differently in the specification. Whether the Server provides translated names for other LocaleIds is server-specific.
DescriptionOptionally a server-specific description is provided.
NodeClassShall reflect the NodeClass of the Node.
NodeIdThe NodeId is described by BrowseNames as defined in 3.4.2.1.
WriteMaskOptionally the WriteMask Attribute can be provided. If the WriteMask Attribute is provided, it shall set all non-server-specific Attributes to not writable. For example, the Description Attribute may be set to writable since a Server may provide a server-specific description for the Node. The NodeId shall not be writable, because it is defined for each Node in this document.
UserWriteMaskOptionally the UserWriteMask Attribute can be provided. The same rules as for the WriteMask Attribute apply.
RolePermissionsOptionally server-specific role permissions can be provided.
UserRolePermissionsOptionally the role permissions of the current Session can be provided. The value is server-specific and depends on the RolePermissions Attribute (if provided) and the current Session.
AccessRestrictionsOptionally server-specific access restrictions can be provided.
3.4.3.2 Objects

For all Objects specified in this document, the Attributes named in Table 8 shall be set as specified in the Table 8. The definitions for the Attributes can be found in OPC 10000-3.

Table 8 - Common Object Attributes
Attribute Value
EventNotifierWhether the Node can be used to subscribe to Events or not is server-specific.
3.4.3.3 Variables

For all Variables specified in this document, the Attributes named in Table 9 shall be set as specified in the table. The definitions for the Attributes can be found in OPC 10000-3.

Table 9 - Common Variable Attributes
Attribute Value
MinimumSamplingIntervalOptionally, a server-specific minimum sampling interval is provided.
AccessLevelThe access level for Variables used for type definitions is server-specific, for all other Variables defined in this document, the access level shall allow reading; other settings are server-specific.
UserAccessLevelThe value for the UserAccessLevel Attribute is server-specific. It is assumed that all Variables can be accessed by at least one user.
ValueFor Variables used as InstanceDeclarations, the value is server-specific; otherwise, it shall represent the value described in the text.
ArrayDimensions

If the ValueRank does not identify an array of a specific dimension (i.e., ValueRank <= 0) the ArrayDimensions can either be set to null or the Attribute is missing. This behaviour is server-specific.

If the ValueRank specifies an array of a specific dimension (i.e., ValueRank > 0) then the ArrayDimensions Attribute shall be specified in the table defining the Variable.

HistorizingThe value for the Historizing Attribute is server-specific.
AccessLevelExIf the AccessLevelEx Attribute is provided, it shall have the bits 8, 9, and 10 set to 0, meaning that read and write operations on an individual Variable are atomic, and arrays can be partly written.
3.4.3.4 VariableTypes

For all VariableTypes specified in this document, the Attributes named in Table 10 shall be set as specified in the table. The definitions for the Attributes can be found in OPC 10000-3.

Table 10 - Common VariableType Attributes
Attributes Value
ValueOptionally a server-specific default value can be provided.
ArrayDimensions

If the ValueRank does not identify an array of a specific dimension (i.e., ValueRank <= 0) the ArrayDimensions can either be set to null or the Attribute is missing. This behaviour is server-specific.

If the ValueRank specifies an array of a specific dimension (i.e., ValueRank > 0) then the ArrayDimensions Attribute shall be specified in the table defining the VariableType.

3.4.3.5 Methods

For all Methods specified in this document, the Attributes named in Table 11 shall be set as specified in the table. The definitions for the Attributes can be found in OPC 10000-3.

Table 11 - Common Method Attributes
Attributes Value
ExecutableAll Methods defined in this document shall be executable (Executable Attribute set to "True"), unless it is defined differently in the Method definition.
UserExecutableThe value of the UserExecutable Attribute is server-specific. It is assumed that all Methods can be executed by at least one user.

3.4.4 Structures

OPC 10000-3 differentiates between different kinds of Structures. The following conventions explain, how these Structures shall be defined.

The first kind are Structures without optional fields where none of the fields allows subtype (except fields with abstract DataTypes). Its definition is in Table 12.

Table 12 - Structures without optional fields where none of the fields allow subtypes
NameTypeDescription
<someStructure>structureSubtype of <someParentStructure> defined in …

SP1

0:Byte[]Setpoint 1

SP2

0:Byte[]Setpoint 2

The second kind are Structures with optional fields where none of the fields allows subtypes (except fields with abstract DataTypes). Its definition is in Table 13.

Structures with fields that are optional have an "Optional" column. Fields that are optional have True set, otherwise False.

Table 13 - Structures with optional fields
NameTypeDescriptionOptional
<someStructure>structureSubtype of <someParentStructure> defined in …

SP1

0:Byte[]Setpoint 1False

Optional Field_1

0:StringSome Text True

The third kind are Structures without optional fields where one or more of the fields allow subtypes. Its definition is in Table 14.

Structures with fields that allow subtypes have an "Allow Subtypes" column. Fields that allow subtypes have True set, otherwise False. Fields with abstract DataTypes can always be subtyped.

Table 14 - Structures where one or more of the fields allow subtypes
NameTypeDescriptionAllow
Subtypes
<someStructure>structureSubtype of <someParentStructure> defined in …

SP1

0:Byte[]Setpoint 1False

Allow Subtypes

0:ByteStringSome Bytestring True

4 General information to Unattended Retail & Coffee Solutions and OPC UA

4.1 Introduction to Unattended Retail & Coffee Solutions

4.1.1 Overview

The vending industry in key markets globally represents over 14 million machines and an annual estimated revenue of €80 billion.

Despite efforts to create and adopt common standards and protocols, the industry is fragmented and certain markets are more likely use particular vending machine interfaces, for historic and traditional reasons. This fragmentation leads to barriers and costs for machine and peripheral manufacturers, vending operators, as well as leading to integration problems within the machine. As the industry becomes more and more connected and in order to meet increased demand from consumers, the current situation can be considered no longer viable and hence a new specification is deemed to make the industry fit for the future.

4.1.2 Unattended Retail & Coffee Solutions

4.1.2.1 Vending Machine

A Vending Machine (see Figure 2 for examples) is an operational machine located either at a client site or in a public location designed specifically for the sale and dispensing of food, drinks, and other goods and services. The EVA does not include cigarette or gaming machines within this definition.

10,000 operating companies manage the vending machines across Europe, while the industry overall employs more than 85,000 people directly, bringing manufacturing jobs and contributing to the EU's industrial strategy.

Figure 2 - Examples of Vending Machines

Note that we use the term Vending Machine as synonym for Unattended Retail & Coffee Solutions (see 3.2.1) in later sections for better readability.

4.1.2.2 Office Coffee Service (OCS)

While 64% of the vending industry is made up of hot drinks/coffee machines, OCS is a specific part of this segment and involves a hot drink table-top operation in the office environment, maintained and supplied with ingredients by the operator. OCS machines (for examples see Figure 3), however, are filled by the company where the machines are located, and these systems do not usually have coin/payment systems as a 'free' and quality coffee provision in the office is more and more seen as a necessity for workers and a service provided by companies for their employees.

Figure 3 - Examples of Office Coffee Service
4.1.2.3 Unattended Retail (Micromarkets & Smart Fridges)

Micromarkets are small, unattended convenience stores in workplaces. A new and growing trend in Europe, with more than 10,000 in operation as of 2023 and typically include the following elements:

Products are on open shelves, or chiller cabinets or fridges so consumers can select them as they would in a store

Selected products are scanned by the consumer either at a central unattended till, or using a smartphone app

Payment is taken either at the central till (usually cashless), or through a smartphone app

Usually includes at least one hot beverage machine

May include a microwave to heat purchased food

May include an area with tables and seating

The EVA estimates the total number of Smart Fridges across Europe to be between 2,500 and 3,500, with more machine operators operating Smart Fridges than Micromarkets in Europe.

In Figure 4, an example of a Micromarket and a Smart Fridge is given.

Figure 4 - Example of Micromarket (left) and Smart Fridge (right)

4.2 Introduction to OPC Unified Architecture

4.2.1 What is OPC UA?

OPC UA is an open and royalty free set of standards designed as a universal communication protocol. While there are numerous communication solutions available, OPC UA has key advantages:

A state of art security model (see OPC 10000-2).

A fault tolerant communication protocol.

An information modelling framework that allows application developers to represent their data in a way that makes sense to them.

OPC UA has a broad scope which delivers for economies of scale for application developers. This means that a larger number of high-quality applications at a reasonable cost are available. When combined with semantic models such as Unattended Retail & Coffee Solutions, OPC UA makes it easier for end users to access data via generic commercial applications.

The OPC UA model is scalable from small devices to ERP systems. OPC UA Servers process information locally and then provide that data in a consistent format to any application requesting data - ERP, MES, PMS, Maintenance Systems, HMI, Smartphone, or a standard Browser, for examples. For a more complete overview see OPC 10000-1.

4.2.2 Basics of OPC UA

As an open standard, OPC UA is based on standard internet technologies, like TCP/IP, HTTP, Web Sockets.

As an extensible standard, OPC UA provides a set of Services (see OPC 10000-4) and a basic information model framework. This framework provides an easy manner for creating and exposing vendor defined information in a standard way. More importantly all OPC UA Clients are expected to be able to discover and use vendor-defined information. This means OPC UA users can benefit from the economies of scale that come with generic visualisation and historian applications. This specification is an example of an OPC UA Information Model designed to meet the needs of developers and users.

OPC UA Clients can be any consumer of data from another device on the network to browser based thin clients and ERP systems. The full scope of OPC UA applications is shown in Figure 5.

Figure 5 - The scope of OPC UA within an enterprise

OPC UA provides a robust and reliable communication infrastructure having mechanisms for handling lost messages, failover, heartbeat, etc. With its binary encoded data, it offers a high-performing data exchange solution. Security is built into OPC UA as security requirements become more and more important especially since environments are connected to the office network or the internet and attackers are starting to focus on automation systems.

4.2.3 Information modelling in OPC UA

4.2.3.1 Concepts

OPC UA provides a framework that can be used to represent complex information as Objects in an AddressSpace which can be accessed with standard services. These Objects consist of Nodes connected by References. Different classes of Nodes convey different semantics. For example, a Variable Node represents a value that can be read or written. The Variable Node has an associated DataType that can define the actual value, such as a string, float, structure etc. It can also describe the Variable value as a variant. A Method Node represents a function that can be called. Every Node has a number of Attributes including a unique identifier called a NodeId and non-localized name called as BrowseName. An Object representing a 'Reservation' is shown in Figure 6.

Figure 6 - A basic Object in an OPC UA Address Space

Object and Variable Nodes represent instances and they always reference a TypeDefinition (ObjectType or VariableType) Node which describes their semantics and structure. Figure 7 illustrates the relationship between an instance and its TypeDefinition.

The type Nodes are templates that define all of the children that can be present in an instance of the type. In the example in Figure 8 the PersonType ObjectType defines two children: First Name and Last Name. All instances of PersonType are expected to have the same children with the same BrowseNames. Within a type the BrowseNames uniquely identify the children. This means Client applications can be designed to search for children based on the BrowseNames from the type instead of NodeIds. This eliminates the need for manual reconfiguration of systems if a Client uses types that multiple Servers implement.

OPC UA also supports the concept of sub-typing. This allows a modeller to take an existing type and extend it. There are rules regarding sub-typing defined in OPC 10000-3, but in general they allow the extension of a given type or the restriction of a DataType. For example, the modeller may decide that the existing ObjectType in some cases needs an additional Variable. The modeller can create a subtype of the ObjectType and add the Variable. A Client that is expecting the parent type can treat the new type as if it was of the parent type. Regarding DataTypes, subtypes can only restrict. If a Variable is defined to have a numeric value, a subtype could restrict it to a float.

Figure 7 - The relationship between Type Definitions and Instances

References allow Nodes to be connected in ways that describe their relationships. All References have a ReferenceType that specifies the semantics of the relationship. References can be hierarchical or non-hierarchical. Hierarchical references are used to create the structure of Objects and Variables. Non-hierarchical are used to create arbitrary associations. Applications can define their own ReferenceType by creating subtypes of an existing ReferenceType. Subtypes inherit the semantics of the parent but may add additional restrictions. Figure 8 depicts several References, connecting different Objects.

Figure 8 - Examples of References between Objects

The figures above use a notation that was developed for the OPC UA specification. The notation is summarized in Figure 9. UML representations can also be used; however, the OPC UA notation is less ambiguous because there is a direct mapping from the elements in the figures to Nodes in the AddressSpace of an OPC UA Server.

Figure 9 - The OPC UA Information Model notation

A complete description of the different types of Nodes and References can be found in OPC 10000-3 and the base structure is described in OPC 10000-5.

The OPC UA specification defines a very wide range of functionality in its basic information model. It is not required that all Clients or Servers support all functionality in the OPC UA specifications. OPC UA includes the concept of Profiles, which segment the functionality into testable certifiable units. This allows the definition of functional subsets (that are expected to be implemented) within a companion specification. The Profiles do not restrict functionality, but generate requirements for a minimum set of functionalities (see OPC 10000-7).

4.2.3.2 Namespaces

OPC UA allows information from many different sources to be combined into a single coherent AddressSpace. Namespaces are used to make this possible by eliminating naming and id conflicts between information from different sources. Each namespace in OPC UA has a globally unique string called a NamespaceUri which identifies a naming authority and a locally unique integer called a NamespaceIndex, which is an index into the Server's table of NamespaceUris. The NamespaceIndex is unique only within the context of a Session between an OPC UA Client and an OPC UA Server- the NamespaceIndex can change between Sessions and still identify the same item even though the NamespaceUri's location in the table has changed. The Services defined for OPC UA use the NamespaceIndex to specify the Namespace for qualified values.

There are two types of structured values in OPC UA that are qualified with NamespaceIndexes: NodeIds and QualifiedNames. NodeIds are locally unique (and sometimes globally unique) identifiers for Nodes. The same globally unique NodeId can be used as the identifier in a node in many Servers - the node's instance data may vary but its semantic meaning is the same regardless of the Server it appears in. This means Clients can have built-in knowledge of what the data means in these Nodes. OPC UA Information Models generally define globally unique NodeIds for the TypeDefinitions defined by the Information Model.

QualifiedNames are non-localized names qualified with a Namespace. They are used for the BrowseNames of Nodes and allow the same names to be used by different information models without conflict. TypeDefinitions are not allowed to have children with duplicate BrowseNames; however, instances do not have that restriction.

4.2.3.3 Companion Specifications

An OPC UA companion specification for an industry specific vertical market describes an Information Model by defining ObjectTypes, VariableTypes, DataTypes and ReferenceTypes that represent the concepts used in the vertical market, and potentially also well-defined Objects as entry points into the AddressSpace.

5 Use cases

5.1 Manufacturers of unattended retail components

The unattended retail device which is used to sell a product/service to the user is the combination of the experiences of many different actors, and sometimes also from people coming from outside the unattended retail area.

As in many other areas, the knowledge required to create any device grows over time.

The basic idea of the specification is to be able better insulate the knowledge of each actor providing also simple way to interconnect the components needed.

And the boundaries are basically already the way the manufacturers of vending machines are internally dividing their knowledge: people making good coffee, or reliably delivering pre-packaged product, or making effective method of payments, or finally managing the machine data to best operate the business.

This is not done to make strong separation between company business, but to enable knowledge in each area to be able to grow in independent way; this is why the first people which will take advantage of the specification are the manufacturers.

5.2 Hotel breakfast

Many hotel, B&B, have machine used in morning to prepare and serve hot and cold beverages.

These machines many times do not have payment systems, and selections are free, being paid as an hotel service.

The machines are normally table top, and many of them have a graphical user interface. The user interface is used mainly to select the product to prepare. The machines are typically not connected.

Making these machines modular will enable large ( and small ) hotel chain to handle the use interface independently for the details of the internal operation of the delivery process.

Even if payment is not typically added, the modular approach enables to easily add different payment devices of needed, including the hotel contactless key used by the customer to enter the room. If the machine is also connected, the standardization of the exchanged data ( Audit ) will enable to automatic calculation of customer recipes, if the delivered product must be paid, for example, when product is taken after the morning breakfast time window.

5.3 Closed location vending machines

Many offices have local vending machines, to sell hot, cold beverages, and pre-packaged items: the machine are operated by the office manager, which handles machine filling, product selection.

If the office manager is also the employer, many times, the sold product can be directly accounted to the employee's payroll, or can be part of the company benefit plan.

The machine is bought based on type of product to sell, and the employer can use the machine graphical UI possibly as a company notice board.

Having the machines built by easy integrated component from different sources will enable more freedom in the selection and composition of the final device: the notice-board application must be able to be used on devices providing delivering different product.

Standardized way to connect to the machines, and a known format for the provided data make easy the integration with the company back-end.

5.4 Externally managed location vending machines

Many offices have local vending machines, to sell hot, cold beverages, and pre-packaged items: the machines are operated by an external operating company, which handles machine filling and product selection.

These companies will manage different sets of locations, and have a great variety of product to handle.

Managing a location means also to get information about the device status and operational conditions. The standard audit used today is very limited and mainly provides accounting information. A larger set of data, and a standardized way to get these data make managing widely different device simpler.

Local payment devices are basic elements for these operations: in the past days cash was the only option.

Today cash is important, but a large variety of different other payment types are available. Anything which is not cash is "cashless" but under this definition there is a large variety of different technologies:

standard credit cards,

closed system payment cards,

hotel may require integration in the general customer accounting,

employer can require integration in company payroll,

loyalty cards,

points, and many other.

5.5 Better customer engagement

Any unattended retail finally has as customer interacting with a device able to provide the service or product the customer asks.

These devices can use a graphic display which is normally used only for the selection.

An operator of an unattended retail device is never in physical contact with his customer, but the device display can provide a window: a blackboard for different other type of information, with the final intent the user can come again; but, when the user is in front of the vending device, there is good probability he will buy.

To management of the "user interface" has to be as must as possible independent for the operating details of the product delivery process, and this is the purpose of the standardized interfaces.

The technologies and knowledge used by the user interface designed are evolving and changing very fast. There is need to separate this development from the standard user interface normally embedded in the standard unattended retail devices.

5.6 New machine types

This application will use of a well-known and widely used framework, with an existing large number of devices following the same general environment.

This will enable to buy and integrate components from the market, making the development of new machine types or solving a customer specific requirement faster and more reliably.

Prototyping can be also faster, using standard parts from the market to make a sample before designing the final device.

6 Unattended Retail & Coffee Solutions Information Model overview

6.1 Overview

An Unattended Retail & Coffee Solution (for better readability we use the term Vending Machine in the following text) is built out of various components. This specification focuses on components that may be provided by different vendors and therefore require standardized exchange of information between those components. A component may be used by various Vending Machines and does not necessarily need to be physically connected to a Vending Machine, like for example a user interface (UI) that runs on a smart device of a customer like a smart phone or tablet.

In addition to the interactions of the components of a Vending Machine, this specification also defines information exchange to monitor Vending Machines by applications that cannot be considered to be part of the Vending Machine.

Requirements on the power supply of components of a Vending Machine are described in Annex C, and requirements on the network infrastructure of components of a Vending Machine in Annex D.

6.2 Components of a Vending Machine

6.2.1 Machine engine

The machine engine is the device able to create or deliver or collect a given product. It interacts with the UI, the payment service, and the audit collect. It interacts with the customer by physically providing the product to the customer. It provides information to monitor the Vending Machine. A Vending Machine according to this specification needs to support at least one machine engine, but may have several machine engines as components. A machine engine cannot be assigned to more than one Vending Machine, i.e., it can only be used by one payment service.

The machine engine provides its interface by implementing an instance of the MachineEngineType (shown in Figure 10, defined in 7.1). The machine engine does not require OPC UA Client functionality to access other components of the Vending Machine.

Figure 10 - MachineEngineType

The MachineEngineType provides the identification of the machine engine in the Identification Object, defined in OPC 10000-100. The configuration of the machine engine is provided by the Configuration Object of BaseConfigurationType defined in 7.3. The configuration may be writable via the OPC UA interface to change the configuration of the machine engine. The machine engine provides the configuration for the UI in the Capabilities Object of MachineEngineCapabilitiesType defined in 7.5. The configuration is accessed by the UI and parts may be writable to change the configuration of the UI. The Delivery Object of MachineEngineDeliveryType defined in 7.6 provides functionality to request a delivery (by the payment service) as well as expose the status of the delivery (displayed by the UI). The Status Object of MachineEngineStatusType defined in 7.7 provides the overall status of the machine engine, to be displayed in the UI and consumed by the payment service. The optional Components Object of BaseComponentsType defined in 7.4 can provide information about subcomponents of the machine engine. The machine engine generates Events of VendingBaseAuditEventType to provide audit data.

6.2.2 Payment service

The payment service is responsible to approve product delivery, for example by receiving coins or charging a credit card or any other needed condition for the delivery of a product, like age. It is also responsible of all money movements between the different payment devices, like using cash to revalue a card system, handling change or overpay. It interacts with the UI, the machine engine, the audit collect and the price service. It may interact with the customer, for example by physically collecting coins or bills or scanning a credit card. It provides information to monitor the Vending Machine. A Vending Machine according to this specification supports exactly one payment service.

The payment service provides its interface by implementing an instance of the PaymentServiceType (shown in Figure 11, defined in 7.8). The payment service requires OPC UA Client functionality to access the machine engine(s) and the primary price service of the Vending Machine.

Figure 11 - PaymentServiceType

The PaymentServiceType provides the identification of the payment service in the Identification Object, defined in OPC 10000-100. The configuration of the payment service is provided by the Configuration Object of BaseConfigurationType defined in 7.3. The configuration may be writable via the OPC UA interface to change the configuration of the payment service. The Delivery Object of PaymentServiceDeliveryType defined in 7.9 provides functionality to request a delivery (by the UI) as well as expose the status of the payment of the delivery (displayed by the UI). The PriceInformation Object of PriceInformationType defined in 7.11 provides price information for deliverables of products of machine engines manged by the payment service. The PaymentModes Object of PaymentModesType defined in 7.13 provides information about the different payment systems supported by the payment service and their status, having on Object of PaymentModeType defined in 7.14 per payment system. The Status Object provides the overall status of the payment service defined in 7.22. The optional Components Object of BaseComponentsType defined in 7.4 can provide information about subcomponents of the payment service. The payment service generates Events of VendingAuditEventType to provide audit data.

The payment service receives price information from the primary price service of the Vending Machine using the PriceInformation Object of the price service. It is up to the implementation of the payment service whether the requests of the UI about price information is always forwarded to the price service, or cached in the payment service.

The payment service will need to interface to any other device which can affect the delivery, and these devices are payment devices. Payment service will provide the UI with enough information from the payment devices to define the payment, but the detailed implementation of the process is internal to payment service. It is also possible (and for sure will happen in the transition phase before OPC UA compliant payment devices will be available, the payment service will handle internally legacy coin, bills, cashless devices using proprietary protocols. When this happens, payment service has to act relative to audit collect to provide, in a way which is in line with this specification, all the required information.

But, with OPC UA compliant payment devices, the payment service is responsible only for the delivery approval but not for the effective handling of other payment device related data, like audit and configuration. There is a specific configuration Property (IsEmulated) used to expose if the payment service is internally handling the payment device, or if an OPC UA enabled payment device is available, enabling direct access to payment device configuration and audit events.

The IsEmulated Property enable easy switch for the need, today, to handle MDB (and other legacy protocols) before fully switch to OPC UA compliant devices.

The payment service may supervise the audit collect for operation and reject new requests when the audit collect is not operating correctly using the IsCollectingAudit Variable of the AuditCollectType.

6.2.3 Standalone Payment Devices

As stated in 6.2.2, a payment device may be managed in a proprietary manner by the payment service. A standalone payment device is a payment device, that has a standardized OPC UA Server. It is responsible to receive money, either via a physical asset (coin, bill, or token), as a payment cash device, or cashless as a payment cashless device. It provides the information about the received money and mechanisms to payout money. It interacts with the payment service and the audit collect. A Vending Machine according to this specification may have zero to many standalone payment devices.

As there are different types of payment devices, the type hierarchy is shown in Figure 12.

The standalone payment device provides its interface by implementing an instance of a subtype of the StandalonePaymentDeviceType (shown in Figure 12, defined in 7.17), which is an abstract subtype of the PaymentDeviceType used in the payment service. The standalone payment device does not require OPC UA Client functionality.

Figure 12 - StandalonePaymentDeviceType and subtype

The PaymentDeviceType provides the identification of the payment device in the Identification Object, defined in OPC 10000-100. The configuration of the standalone payment device is provided by the Configuration Object of BaseConfigurationType defined in 7.3. The optional Components Object of BaseComponentsType defined in 7.4 can provide information about subcomponents of the standalone payment device. The payment device generates Events of VendingAuditEventType to provide audit data.

The abstract PaymentCashDeviceType defined in 7.18 defines common functionality for cash-based payment devices like the supported assets and the capability to payout cash. The concrete PaymentCoinDeviceType defined 7.19 represents standalone payment devices handing coins and / or token, with no additional functionality. The concrete PaymentBillDeviceType defined in 7.20 represents standalone payment devices handling bills and / or token, and provides additional functionality like cancelling the payout. The concrete PaymentCashlessDeviceType defined in 7.21 represents standalone payment devices handling cashless money, and provide the corresponding functionality.

6.2.4 UI

The UI (user interface) is the interface between the customer and the system. The UI is only related to the final customer interaction. Technical user interfaces for configuration or maintenance of the machine are not part of this component and not addressed by this specification. A Vending Machine according to this specification needs to have at least one UI, but may have several UIs.

Figure 13 - UIType

The UI provides its interface by implementing an instance of the UIType (shown in Figure 13, defined in 7.23). The UI requires OPC UA Client functionality to access the payment service and the machine engine(s) of the Vending Machine. The optional Components Object of BaseComponentsType defined in 7.4 can provide information about subcomponents of the UI. The UI generates Events of VendingBaseAuditEventType to provide audit data.

The UI receives the configuration of the Vending Machine by accessing the Machine Engine capabilities specific to a machine engine from the machine engine(s) of the Vending Machine by accessing the Capabilities Object of MachineEngineCapabilitiesType defined in 7.5. This includes the available selections and possible Options per selection. The availability of the selections is provided by the Status Object of MachineEngineStatusType defined in 7.7. The Delivery Object of MachineEngineDeliveryType defined in 7.6 expose the status of a delivery.

The UI receives price information for the selections as well as payment options provided by the payment service of the Vending Machine by accessing the PriceInformation Object of PriceInformationType defined in 7.11. A deliver request is triggered on the Delivery Object of PaymentServiceDeliveryType defined in 7.9.

6.2.5 Price service

The price service calculates the price of a selection of products and considers all discounts. Discounts may be gained on various vendor-specific options, like time of the day, expiry date of the product, availability of product, customer and discount programs, etc. A Vending Machine according to this specification needs to have access to exactly one price service. This price service may internally use other price services (see Annex B).

The price service provides its interface by implementing an instance of the PriceServiceType (shown in Figure 14, defined in 7.24). The price service does not require OPC UA Client functionality to access other components of the Vending Machine.

Figure 14 - PriceServiceType

The PriceServiceType provides the identification of the payment service in the Identification Object, defined in OPC 10000-100. The configuration of the payment service is provided by the Configuration Object of BaseConfigurationType defined in 7.3. The configuration may be writable via the OPC UA interface to change the configuration of the payment service. The PriceInformation Object of PriceInformationType defined in 7.11 provides price information for deliverables of products potentially provided by various Vending Machines. The optional Components Object of BaseComponentsType defined in 7.4 can provide information about subcomponents of the payment service.

6.2.6 Audit collect

The audit collect collects audit data from all components providing audit Events and makes them available for external access. A Vending Machine according to this specification supports exactly one audit collect, and in addition optionally one tax audit (see 6.2.7).

Figure 15 - AuditCollectType

The audit collect provides its interface by implementing an instance of the AuditCollectType (shown in Figure 15, defined in 7.25). The optional Components Object of BaseComponentsType defined in 7.4 can provide information about subcomponents of the audit collect. The audit collect requires OPC UA Client functionality to access audit information of the payment service, the standalone payment devices, the UI(s) and the machine engine(s) of the Vending Machine.

6.2.7 Tax audit

A special case of the audit collect is the TAX audit, which is selecting all tax relevant information of the audit information. This component is implemented according to the tax regulations of the area the Vending Machine is operating, and receives and processes all tax relevant information.

It provides and uses the same interfaces as the audit collect (see 6.2.6), but filters the audit Events to those relevant for the tax regulations. Depending on the tax regulations, different audit Events may be relevant.

In the following sections, the tax audit is included when an audit collect component is referenced.

6.3 Interactions between components

6.3.1 General Considerations on handling method processing

In OPC UA, each service call is executed asynchronously between Client and Server. This is also true for calling an OPC UA Method from a Client. However, a Method call is expected to return a result rather fast (milliseconds or seconds, when provided to a UI it should be milliseconds up to small fractions of a second), not after minutes. Therefore, in cases where the actual execution like creating a product may take longer, the Method is returning a result immediately, before the execution has been done, and the status of the execution is provided by some Variables. This is applied in various places in this specification.

In order to not lose any data, Clients should subscribe to the status Variables to get notified about all changes of the status.

6.3.2 Requesting and Delivering Products

6.3.2.1 Overview

In the following sections, the interactions for providing the main functionality of a Vending Machine, the requesting and delivering of products, is described.

In Figure 16, an overview of the needed components and the interfaces used is given. The interface names reflect the Object names of the corresponding ObjectTypes. To emphasise, that the UI is accessing the status of the Delivery Object of the machine engine, but not calling the Deliver Method, the DeliveryStatus interface was introduced. Same applies for StopDelivery, referencing to the StopDelivery Method of the Delivery Object of the machine engine.

A Vending Machine contains one main price service, which internally may use additional price services (see Annex B).

Figure 16 - Components used for Requesting and Delivering Products
6.3.2.2 TransactionId

A TransactionId (UInt64) is used to uniquely identify a deliver request. It is generated by the payment service and distributed to other components of the Vending Machine. The uniqueness can only be guaranteed for a certain amount of time in order to identify different deliver requests at the same time, which must be unique at least for the whole time the transaction is active. A reasonable strategy to assign the TransactionId is increasing the number every time by one and roll over to 0 at the maximum of UInt64. However, the strategy of assigning a TransactionId is vendor-specific and other components shall not make assumptions about this.

The TransactionId will not protect against false delivery request; there is protection given using the OPC UA security mechanisms, i.e., only specific Clients can communicate and request deliveries.

6.3.2.3 BasketId

A Vending Machine may support the delivery of many products at once. This can be handled in two ways.

Either by defining selections that consists of various products (e.g., a menu). In that case, it is handled like any other delivery, potentially using different outputs to deliver more than one product.

Or it may support a basket, where the user can select several products into one basket and according to the content the user may get a discount. In that case, a BasketId (UInt64) is used to uniquely identify the basket. It is generated by the payment service and distributed to other components of the Vending Machine. The same assumptions for uniqueness apply as for the TransactionId. In order to support a BasketId, the Delivery Object of the payment service needs to be of type PaymentServiceBasketDeliveryType.

Not all payment services may support basket functionality.

6.3.2.4 Startup of UI

When the UI gets started, it needs to connect to the machine engine(s) it is interested in. Depending on the UI this may be based on user interactions selecting the interesting machine engine(s).

The UI needs to read the information of the Capabilities Object of the machine engine. It may cache the information and just check the SelectionListVersion, if the configuration has changed. The UI needs to subscribe to changes of the status of the machine engine (see 6.3.2.5) to display information like a certain product is not available.

Given the SelectionId and AvailableOptionIds provided by Capabilities are only machine specific and used primarily to provide the needed info for the Deliver method, the UI need to map using separate tables (not part of this specification, typically generated by the back-end software and called plan-o-grams) the SelectionId and AvailableOptionIds to the correct graphic resources in the UI itself.

The UI needs to access the price information of the payment service by accessing the PriceInformation Object of the payment service, and potentially the PaymentModes Object to get information about the available payment modes and their status.

The price for a product is taken by combining the selection parameters (SelectionId, and Options which are machine specific) and the MachineEngineProductInstanceUri to identify the machine engine and the plan-o-gram which defines the final product to be delivered. Typically, this is done in the UI by loading the plan-o-gram into the UI.

If the price service is located on the same hardware of a vending machine, for the vending machine itself the SelectionId and Options have a defined and unique value being connected with the vending machine where they are implemented. Still, given price services can be chained, if chaining is implemented the price search can still be extended.

Any allergens, nutrition values and similar information associated with a product are not provided by mechanisms of this specification, but are typically provided by the plan-o-gram loaded into the UI.

6.3.2.5 Update UI with status of machine engine

While connected to a machine engine, the UI needs to check the status of the machine engine, by subscribing to the corresponding Variables of the Status Object of the machine engine.

In addition, it needs to subscribe to the DeliveryRequests and DeliveryProgress Variables of the Delivery Object of the machine engine. This may be done when connecting to the machine engine and is required once the UI has started a deliver request via the payment service using the DeliverRequest Method of the Delivery Object of the payment service.

6.3.2.6 Update UI with status of payment service

In order to display the price for products the UI needs to get the price information of the products. This is done calling the corresponding Methods of the PriceInformation Object of the payment service. The price may depend on the UserId and PaymentMode, therefore the UI needs to call the Methods each time, this is changing. In addition, the UI should subscribe to Events of the PriceChangeEventType to get the information, when the price information was changed and the Methods need to be called, again.

When the UI has requested a delivery, it needs to subscribe to the TransactionProgress Variable of the Delivery Object to get updates on the progress of the payment.

In case a basket is requested, it needs to subscribe to the overall basket status in the BasketProgress Variable.

In case the user is filling a basket, the UI needs to call the GetPriceForBasket Method of the PriceInformation Object each time the content of the basket is changing (adding or removing items) to get the price for the current basket.

The UI may use the Status Variable of the Status Object to display the overall status of the Vending Machine.

6.3.2.7 Requesting a delivery by the UI

UI calls payment service (DeliverRequest Method)

When a user selects a product to be delivered, the UI calls the DeliverRequest Method of the Delivery Object of the payment service. This includes the last price information recovered by the last PriceInformation Object, the PaymentMode selected, and a generic UserId (the meaning of the variable is custom specific, the effect is to possibly change the price). The payment service generates a TransactionId and returns this to UI.

The payment service may already do some of the following steps before returning the DeliverRequest Method call and potentially return a failure status instead of the TransactionId. This is up to the implementation of the payment service. However, it needs to be considered that the Method call should return rather fast (as fast as possible, not waiting till the end of the delivery, maybe milliseconds), not after minutes (see also 6.3.1).

Payment service checks correct price (internal or via price service)

The payment service checks the correctness of the price provided by the UI. Since the payment service needs to maintain the current price for the UI anyhow, it can check its local data. Alternatively, the payment service may access the primary price service again to validate the price. When the price is not correct, the payment service does not continue the deliver request and provides the corresponding status of the TransactionId in its TransactionProgress Variable.

Payment service collects payment (internal functionality)

The payment service collects the payment from the user. How this is done, is up to the nature of the payment service. It may be collecting coins or bills, charging a credit card, etc. Once successfully collected, the payment service changes the status of the TransactionId in its TransactionProgress Variable. If the payment process gets somehow aborted (implementation specific), the payment service does not continue the deliver request and provides the corresponding status of the TransactionId in its TransactionProgress Variable. The UI may handle this transparent to the user and do another deliver request with a different payment mode.

Payment service triggers delivery in machine engine (Deliver Method)

Once the payment is collected, the payment service triggers the delivery at the machine engine by calling the Deliver Method of the Delivery Object of the machine engine. It provides the TransactionId so that the machine engine can provide the TransactionId in its DeliveryRequests and DeliveryProgress Variables.

Delivery by machine engine (internal functionality)

The machine engine potentially creates the product to be delivered (e.g., coffee) and delivers it to the user. How this is done is vendor-specific. Via the DeliveryProgress Variable it informs the UI and the payment service about the status of the delivery.

Once the delivery was successfully done, the payment service informs the UI about closure of the payment via its TransactionProgress Variable.

When the delivery is aborted, for example due to an error in the machine engine, the machine engine informs both UI and payment service via the DeliveryProgress Variable. In this case, the payment service triggers (if possible) a refund of the payment to the user. How this is done, is specific to the payment service. The payment service informs the UI about this using its TransactionProgress Variable.

In both cases, the successful delivery or the abortion, the payment service and the machine engine will clean up their status Variables and remove the information about the TransactionId. The duration before doing this is vendor-specific.

6.3.2.8 Requesting a delivery stop by the UI

When a delivery has been requested by the UI as described in 6.3.2.7 in step 1, the delivery may be cancelled by the CancelDeliverRequest Method.

When the CancelDeliverRequest Method is called before the payment is collected by the payment service (step 3 in 6.3.2.7), the Method call should be successful. In that case, the payment service does not continue the deliver request and provides the corresponding status of the TransactionId in its TransactionProgress Variable.

When the CancelDeliverRequest Method is called while or after the payment gets collected by the payment service (step 3 in 6.3.2.7), but before requesting the deliver in the machine engine, and the payment service is able to refund the payment, the Method call should be successful. In that case, the payment service triggers a refund, does not continue the deliver request and provides the corresponding status of the TransactionId in its TransactionProgress Variable.

When the CancelDeliverRequest Method is called after the payment service has called the Deliver Method of the machine engine (step 4 in 6.3.2.7), the Method call should fail and no cancellation is possible anymore.

6.3.2.9 Requesting a basket delivery by the UI

In order to support this functionality, the Delivery Object of the payment service needs to be of type PaymentServiceBasketDeliveryType.

UI calls payment service (DeliverBasketRequest Method)

When a user selects the products to be delivered, the UI calls the DeliverBasketRequest Method of the Delivery Object of the payment service. This includes the price information as displayed to the user. The payment service generates a TransactionId per item of the basket and a BasketId and returns this to UI.

The payment service may already do some of the following steps before returning the DeliverBasketRequest Method call and potentially return a failure status instead of the TransactionId. This is up to the implementation of the payment service. However, it needs to be considered that the Method call should return rather fast (milliseconds or seconds), not after minutes.

Payment service checks correct price (internal or via price service)

The payment service checks the correctness of the price provided by the UI. Since the payment service needs to maintain the current price for the UI anyhow, it can check its local data. Alternatively, the payment service may access the primary price service again to validate the price. When the price is not correct, the payment service does not continue the deliver request and provides the corresponding status of the BasketId in its BasketProgress Variable and in addition per item the TransactionIds in its TransactionProgress Variable.

Payment service collects payment (internal functionality)

The payment service collects the payment from the user. How this is done, is up to the nature of the payment service. It may be collecting coins or bills, charging a credit card, etc. Once successfully collected, the payment service changes the status of the TransactionIds in its TransactionProgress Variable and the overall status of the BasketId in its BasketProgress Variable. If the payment of the whole basket is handled at once, that requires that the TransactionProgress of all TransactionIds of the basket shall change at the same time. If the payment process gets somehow aborted (implementation specific), the payment service does not continue the deliver request and provides the corresponding status of the TransactionIds in its TransactionProgress Variable and the overall status of the BasketId in its BasketProgress Variable. The UI may handle this transparent to the user and do another basket deliver request with a different payment mode.

Payment service triggers delivery in machine engine (Deliver Method)

Once the payment is collected, the payment service triggers the delivery per item of the basket at the corresponding machine engines by calling the Deliver Method of the Delivery Object of the machine engine per item. It provides a TransactionId per item of the basket, so that the machine engine can provide the TransactionId for each item in its DeliveryRequests and DeliveryProgress Variables. Whether the payment service calls the Deliver Method for all items in parallel or serializes by some internal logic the requests, is an implementation detail of the payment service.

Delivery by machine engine per item of the basket (internal functionality)

The machine engine potentially creates the product to be delivered (e.g., coffee) and delivers it to the user. How this is done is vendor-specific. Via the DeliveryProgress Variable it informs the UI and the payment service about the status of the delivery.

Once the delivery of all items was successfully done, the payment service informs the UI about closure of the payment via its TransactionProgress Variable.

When the delivery is aborted, for example due to an error in the machine engine, the machine engine informs both UI and payment service via the DeliveryProgress Variable. In this case, the payment service triggers a refund of the payment to the user. How this is done, is specific to the payment service. The payment service informs the UI about this using its TransactionProgress Variable. In addition, it updates the overall status of the basket in the BasketProgress Variable.

In both cases, the successful delivery or the abortion, the payment service and the machine engine will clean up their status Variables and remove the information about the TransactionId. The duration before doing this is vendor-specific.

Clean up of the basket information (internal functionality)

Once the delivery of all items of the basket has been finalized (either successful or not), the payment service updates the BasketProgress Variable. The payment service will clean up this Variable and remove the information about the BasketId. The duration before doing this is vendor-specific.

6.3.2.10 Requesting a basket delivery stop by the UI

When a basket delivery has been requested by the UI as described in 6.3.2.9 in step 1, the delivery may be cancelled by the CancelDeliverBasketRequest Method.

When the CancelDeliverBasketRequest Method is called before the payment is collected by the payment service (step 3 in 6.3.2.9), the Method call should be successful. In that case, the payment service does not continue the deliver request and provides the corresponding status of the TransactionIds in its TransactionProgress Variable and the overall status of the BasketId in its BasketProgress Variable.

When the CancelDeliverBasketRequest Method is called while or after the payment gets collected by the payment service (step 3 in 6.3.2.9), but before requesting any deliver in any machine engine, and the payment service is able to refund the payment, the Method call should be successful. In that case, the payment service triggers a refund, does not continue the deliver request and provides the corresponding status of the TransactionIds in its TransactionProgress Variable and the overall status of the BasketId in its BasketProgress Variable.

When the CancelDeliverBasketRequest Method is called after the payment service has called the Deliver Method of any machine engine (step 4 in 6.3.2.9) for any of the TransactionIds of the basket, the Method call should fail and no cancellation is possible anymore.

6.3.3 Handling Payment Devices

6.3.3.1 Overview

A Vending Machine may have several payment devices responsible to handle money, either received from a customer or provided to the customer. Those devices may be handled in a proprietary way by the payment service, or accessed using a standardized OPC UA information model defined in this specification. The type hierarchy for those devices is introduced in 6.2.3. The following clauses describe the interactions between the payment services and the different types of payment devices.

6.3.3.2 Coin devices

The payment service reads the configuration of the payment device like the SupportedAssetList and the SlotConfigurationList. It may monitor the SupportedAssetListVersion to get notified, when the configuration has changed. It should monitor the Status of the payment device and take appropriate actions if it changes. The AssetConfigurationList defines how to handle specific coins or tokens and can be changed by the payment service using the ChangeAssetConfigurationList Method.

By configuring the AssetConfigurationList to reject all supported assets, the payment service can effectively disable a payment device.

By monitoring the CurrentAvailableValue the payment service knows how much money is currently in the payment device that a customer has already added to the payment device and can be used for a delivery. By calling the ConsumeAvailableValue Method, the payment service can actually consume part of the CurrentAvailableValue.

By monitoring the CurrentSlotContentList the payment service knows the available money currently in the payment device for payout. By monitoring the PayoutStatus the payment service knows about the status of any payout, that can be triggered by the PayoutByValue and PayoutBySupportedAssetList Methods.

A payout does not change the CurrentAvailableValue. If the payment service wants to trigger a logic, that a payout does decrease the CurrentAvailableValue, it needs to call the ConsumeAvailableValue Method in addition to the Method for the payout.

6.3.3.3 Bill devices

The payment devices supporting bills have some additional functionality to that the payment devices for coins support. They allow to cancel a running payout with the CancelPayout Method and provide information about the current bill or token in the escrow. With the HandleBillFromEscrow Method, the payment service can control what the payment device is supposed to do with the current bill in the escrow.

6.3.3.4 Cashless devices

The payment service supervises information from the cashless payment devices, like the UserId, MaxRecharge and CurrentContentOnCard Variables.

The payment service may charge money with the Approve Method. The ApproveStatus Variable provides the result, as the approval may take time. While the approval process is ongoing, the payment service may try to cancel it by calling the CancelApproval Method.

The payment service may add money to the card with the Recharge Method. The RechargeStatus Variable provides the result, as the recharging may take time.

The payment service may refund the last approved charging with the RefundLast Method. The RefundLastStatus Variable provides the result, as the refunding may take time.

The payment service may enable or disable the payment device with the EnableOrDisable Method. The IsEnabled Variable provides the result, as the operation may take time.

6.3.4 Audit

Audit information is provided by OPC UA Events. The VendingBaseAuditEventType defined in 7.26 and its subtypes are used for all audit information. The general audit collect is supposed to subscribe to all Events of VendingBaseAuditEventType from all UIs, all machine engines, the payment service and all payment devices having their own OPC UA Server of the Vending Machine. The optional, specialized tax audit component would only subscribe to Events relevant for the tax regulations.

An audit collect may need identification information of the components its accesses, and as special case for the payment service also the identification of the payment devices. This is provided by the IdentificationType.

For some payment devices, it is required to access configuration information in order to interpret the audit information. Potentially, also the current content of those payment devices needs to be accessed, which in principle could be calculated out of the Events if the initial content is known. This information is provided by Objects of PaymentDeviceType.

As a Vending Machine may be configured not to work when no audit is collected, the audit collect provides a IsCollectingAudit Variable which may be supervised by the payment service, which may reject new requests while the audit is not collected.

In Figure 17, an overview of the needed components and the interfaces used is given.

Figure 17 - Components used for Audit

An OPC UA Server may represent several components of a Vending Machine, and as a special case, for the payment service, the payment devices. All those components individually generate Events of VendingBaseAuditEventType, in order to relate the Events to the corresponding component. The audit collect should subscribe to the 0:Server Object and filter for Events of VendingBaseAuditEventType to receive all audit information of the individual components of an OPC UA Server. In Figure 18, an example is given of an OPC UA Server AddressSpace, providing a machine engine and a payment service with two payment devices. X:MyMachineEngine, X:MyPaymentService, X:MyCoins and X:MyBills are all of TypeDefinitions generating Events of VendingBaseAuditEventType. At the bottom of Figure 18 some examples of Events are sketched, showing how the SourceNode and SourceName of the Events are identifying the source of the Events.

Figure 18 - Example of Events of VendingBaseAuditEventType

6.3.5 Initial Connection, reconnecting, and ConfigurationChangedEvents

Components like audit collect may want to keep track of information of components of a Vending Machine, and potentially subcomponents. Therefore, when initially connecting to an OPC UA Server representing one or several components of a Vending Machine, those components need to browse and read the required information. For example, audit collect does need some information, to interpret the audit information. Therefore, it may need to browse the PaymentDevices and PaymentModes of the payment service. In order to keep track of changes of the configuration of components of a Vending Machine, the audit collect should subscribe to ConfigurationChangedEvents, and in case it receives such an Event re-browse and reread the information of that component. Although the configuration of a Vending Machine is typically quite static, it may be that at restart some devices like a bill validator take a much longer time to restart, and therefore get added to the configuration while the Vending Machine is already running.

When a component like audit collect is reconnecting to an OPC UA Server representing one or several components of a Vending Machine, there are two scenarios:

The connection could be re-established without loss of data. That means, the subscription is still running and the data indicate no loss of data. In that case, the component does not need to do any specific actions.

The connection could not be re-established or some losses of data have been indicated. In that case, the component needs to reread the information from the OPC UA Server.

6.3.6 Configuration

The configuration of components of a Vending Machine is vendor-specific and not defined in this specification. This specification does define an entry point where vendors are supposed to manage their configuration options, an Object called Configuration of the BaseConfigurationType defined in 7.3.

In Figure 19 an overview of the needed components and the interfaces used is given. The Configuration Client component is vendor-specific and not further described in this specification.

Figure 19 - Components used for Configuration

7 OPC UA ObjectTypes

7.1 MachineEngineType definition

7.1.1 Overview

The MachineEngineType provides the interface to access the machine engine. It is used by other components like the UI, the payment service and the audit collect. A more detailed overview is given in 6.2.1. It is formally defined in Table 15.

7.1.2 ObjectType definition

Table 15 - MachineEngineType definition
Attribute Value
BrowseNameMachineEngineType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentObject2:IdentificationIdentificationTypeM
0:HasComponentObjectConfigurationBaseConfigurationTypeM
0:HasComponentObjectCapabilitiesMachineEngineCapabilitiesTypeM
0:HasComponentObjectDeliveryMachineEngineDeliveryTypeM
0:HasComponentObjectStatusMachineEngineStatusTypeM
0:HasComponentObjectComponentsBaseComponentsTypeO
0:GeneratesEventObjectTypeVendingBaseAuditEventType
0:GeneratesEventObjectTypeConfigurationChangedEventType
Conformance Units
UnattendedRetail MachineEngine

The 2:Identification Object provides Properties describing the identification of the machine engine (see 7.2 for details).

The Configuration Object provides the configuration information of the machine engine (see 7.3 for details).

The Capabilities Object provides configuration information for the UI (see 7.5 for details).

The Delivery Object provides functionality to request a delivery (by the payment service) as well as expose the status of the delivery (displayed by the UI) (see 7.6 for details).

The Status Object provides the overall status of the machine engine, to be displayed in the UI and consumed by the payment service (see 7.7 for details).

The optional Components Object is the entry point to information about subcomponents of the machine engine (see 7.4 for details).

The GeneratesEvent Reference to the VendingBaseAuditEventType indicates that instances will generate Events of that EventType (see 7.26 for details).

The GeneratesEvent Reference to the ConfigurationChangedEventType indicates that an instance may generate Events of that EventType (see 7.29). Such an Event shall be generated when Objects gets added or removed from the Components Object, or when the values of Variables of the Configuration or Capabilities change. Multiple changes may be reported by a single Event.

7.2 IdentificationType definition

7.2.1 Overview

The IdentificationType provides identification information of components of a Vending Machine. It is formally defined in Table 16.

7.2.2 ObjectType definition

Table 16 - IdentificationType definition
Attribute Value
BrowseNameIdentificationType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 2:FunctionalGroupType
0:HasPropertyVariable2:Manufacturer0:LocalizedText0:PropertyTypeM
0:HasPropertyVariable2:ManufacturerUri0:String0:PropertyTypeO
0:HasPropertyVariable2:Model0:LocalizedText0:PropertyTypeO
0:HasPropertyVariable2:ProductCode0:String0:PropertyTypeM
0:HasPropertyVariable2:HardwareRevision0:String0:PropertyTypeO
0:HasPropertyVariable2:SoftwareRevision0:String0:PropertyTypeM
0:HasPropertyVariable2:DeviceRevision0:String0:PropertyTypeO
0:HasPropertyVariable2:DeviceManual0:String0:PropertyTypeO
0:HasPropertyVariable2:DeviceClass0:String0:PropertyTypeO
0:HasPropertyVariable2:SerialNumber0:String0:PropertyTypeO
0:HasPropertyVariable2:ProductInstanceUri0:String0:PropertyTypeM
0:HasPropertyVariable2:RevisionCounter0:Int320:PropertyTypeO
0:HasPropertyVariable2:SoftwareReleaseDate0:DateTime0:PropertyTypeO
0:HasPropertyVariable2:PatchIdentifiers0:String[]0:PropertyTypeO
0:HasInterfaceObjectType2:IVendorNameplateType
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService
UnattendedRetail UI
UnattendedRetail PriceService
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless
UnattendedRetail AuditCollect

The ObjectType implements the Interface 2:IVendorNameplateType. The Properties of the 2:IVendorNameplateType Interface shall be used as defined in OPC 10000-100.

The 2:Manufacturer Property shall use the three-character manufacturer identification as defined in Annex B of EVA DTS, if the company is represented in that annex. The LocaleId shall be left empty.

The 2:ProductInstanceUri Property identifies the component globally unique, as defined in OPC 10000-100. The maximum length is 255 characters, as defined in OPC 10000-100. It is recommended to use the 2:ManufacturerUri followed by the 2:Model followed by the 2:SerialNumber, for example "https://example.com/Model_ABC/SN12345678".

If the component is delivered with a specific hardware, the 2:HardwareRevision Property shall be provided. If the component is only provided as software, it may be omitted.

7.3 BaseConfigurationType definition

7.3.1 Overview

The BaseConfigurationType provides configuration information of components of a Vending Machine. It is formally defined in Table 17.

7.3.2 ObjectType definition

Table 17 - BaseConfigurationType definition
Attribute Value
BrowseNameBaseConfigurationType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasPropertyVariable0:LocalTime0:TimeZoneDataType0:PropertyTypeO
0:HasPropertyVariableDefaultCurrency0:CurrencyUnitType0:PropertyTypeO
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService
UnattendedRetail UI
UnattendedRetail PriceService
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless
UnattendedRetail AuditCollect

The optional 0:LocalTime Property provides information about the current difference between the local time and the UTC time of the component. If the OPC UA Server is in the same local time (which typically is the case), the 0:LocalTime Property of the Server Object of the OPC UA Server may be referenced.

The optional DefaultCurrency Property provides the default currency the component uses when sending/receiving values of PriceDataType without a specified currency. When the default currency is provided, any usage of PriceDataType is setting the Currency field to NULL, if the DefaultCurrency is used. Any change of the DefaultCurrency requires a restart of the OPC UA Server. If an OPC UA Server provides several components with a DefaultCurrency (e.g., payment service and payment devices), the DefaultCurrency shall be identical for all those components.

Vendors may add additional configuration information to this Object. Vendors may define subtypes of this ObjectType in their implementations.

The configuration may be writable via the OPC UA interface to change the configuration of the Vending Machine component.

7.4 BaseComponentsType definition

7.4.1 Overview

The BaseComponentsType provides an entry point for subcomponents of components of a Vending Machine. It is formally defined in Table 18.

7.4.2 ObjectType definition

Table 18 - BaseComponentsType definition
Attribute Value
BrowseNameBaseComponentsType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:FolderType
0:HasComponentObject<Component>0:BaseObjectTypeOP
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService
UnattendedRetail UI
UnattendedRetail PriceService
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless
UnattendedRetail AuditCollect

The <Component> Object of optional placeholder is a representative for subcomponents that may be added to the Object. This specification does not define any requirements on how to represent a subcomponent.

Vendors may define subtypes of this ObjectType in their implementations.

7.5 MachineEngineCapabilitiesType definition

7.5.1 Overview

The MachineEngineCapabilitiesType provides configuration information for the UI. It is formally defined in Table 19.

7.5.2 ObjectType definition

Table 19 - MachineEngineCapabilitiesType definition
Attribute Value
BrowseNameMachineEngineCapabilitiesType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasPropertyVariableOptionsOptionDescriptionDataType[]0:PropertyTypeM
0:HasPropertyVariableSelectionListSelectionDescriptionDataType[]0:PropertyTypeM
0:HasPropertyVariableSelectionListVersion0:SemanticVersionString0:PropertyTypeM
0:HasPropertyVariableOutputIds0:UInt16[]0:PropertyTypeM
Conformance Units
UnattendedRetail MachineEngine

The Options Variable provides the available options of the machine engine. For each possible selection in the SelectionList, it is defined what options are allowed to be used. The DataType is defined in 8.1. Each OptionId in the array shall be unique.

The SelectionList Variable provides the available selections of the machine engine. The DataType is defined in 8.2. Each entry of AvailableOptionIds shall be unique and shall also be an OptionId in the Options Variable.

The SelectionListVersion provides the current version of the SelectionList. Clients may cache the SelectionList and only access it after reconnect, if the SelectionListVersion has changed. Therefore, each change in the SelectionList shall change the SelectionListVersion. The same SelectionListVersion shall only be used if the new SelectionList is identical to the content of the previous SelectionList using the same SelectionListVersion. As the Options are used from the SelectionList, this also applies to the Options. If the Options are changing, the SelectionListVersion shall change as well.

The OutputIds provide a list of outputs for products the machine engine supports. It shall have at least one entry.

7.6 MachineEngineDeliveryType definition

7.6.1 Overview

The MachineEngineDeliveryType provides functionality to request a delivery (by the payment service) as well as exposes the status of the delivery (displayed by the UI). It is formally defined in Table 20.

7.6.2 ObjectType definition

Table 20 - MachineEngineDeliveryType definition
Attribute Value
BrowseNameMachineEngineDeliveryType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentVariableDeliveryRequestsDeliveryRequestDataType[]0:BaseDataVariableTypeM
0:HasComponentVariableDeliveryProgressDeliveryProgressDataType[]0:BaseDataVariableTypeM
0:HasComponentMethodDeliverM
0:HasComponentMethodStopDeliveryM
Conformance Units
UnattendedRetail MachineEngine

The DeliveryRequests Variable is an array that contains all delivery requests that have recently been added to the machine engine. It shall contain all delivery requests that are currently executing or are queued for execution. It is up to the implementation when the finished delivery requests get removed from the array. The simplest implementation just manages one entry and disallows a new delivery request while there is already one in execution. The DataType is defined in 8.3.

The DeliveryProgress Variable is an array that contains the progress information of delivery requests that are currently in execution or have recently been executed. It shall have one entry for each delivery request entry in the DeliveryRequests Variable. The DataType is defined in 8.5. It is up to the implementation how often to update the ProgressInPercent of a delivery progress entry. When the Status is changing, the entry of a delivery progress shall change.

7.6.3 Deliver Method

The Deliver Method puts a delivery request into the machine engine. When successfully executed, the delivery request shall be added to the DeliveryRequests Variable, and, considering the internal logic of the machine engine with respect to the order of the delivery requests, being executed. The status of the execution shall be reflected in the DeliveryProgress Variable.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed, and no entries are added to the DeliveryRequests and DeliveryProgress Variables.

The signature of this Method is specified below. Table 21 and Table 22 specify the Arguments and AddressSpace representation, respectively.

Signature

	Deliver (
	  [in]  0:String                      SelectionId,
	  [in]  OptionSelectionDataType[]     Options,
	  [in]  0:UInt64                      TransactionId,
	  [out] 0:Int32                       Status);
Table 21 - Deliver Arguments
Argument Description
SelectionIdSelectionId of the order. Method execution shall fail, if SelectionId not in the SelectionList of the Capabilities Object.
OptionsList of selected options for the SelectionId. May be an empty array, if no option is selected. The option shall be allowed for the SelectionId as defined in the SelectionList of the Capabilities Object.
TransactionId

A unique identifier given into the machine engine that uniquely identifies the deliver request. It shall be used as the TransactionId in the DeliveryRequests and the DeliveryProgress Variables.

The TransactionId shall only be used by the machine engine if the method returns successful (StatusCode is Good and Status is 0).

Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful

-1 = Invalid SelectionId

-2 = Invalid Options

-3 = Invalid TransactionId - duplicate

-4 = Cannot execute delivery

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 22 - Deliver AddressSpace definition
Attribute Value
BrowseNameDeliver
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.6.4 StopDelivery Method

The StopDelivery Method stops the physical delivery of a TransactionId, that has already been started. When executed, the delivery is still counted to be successfully delivered. The StopDelivery may be called by the UI, when for example a cup is overflowing with a coffee delivery.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed and the delivery was not stopped.

The signature of this Method is specified below. Table 23 and Table 24 specify the Arguments and AddressSpace representation, respectively.

Signature

	StopDelivery (
	  [in]  0:UInt64                      TransactionId,
	  [out] 0:Int32                       Status);
Table 23 - StopDelivery Arguments
Argument Description
TransactionIdUnique identifier representing a deliver request
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Invalid TransactionId.

-2 = Invalid status of TransactionId - delivery already finished

-3 = Invalid status of TransactionId - delivery not started

-4 = Selection does not support stopping

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 24 - StopDelivery AddressSpace definition
Attribute Value
BrowseNameStopDelivery
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.7 MachineEngineStatusType definition

7.7.1 Overview

The MachineEngineStatusType provides status information of the machine engine. It is formally defined in Table 25.

7.7.2 ObjectType definition

Table 25 - MachineEngineStatusType definition
Attribute Value
BrowseNameMachineEngineStatusType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentVariableWorkingStatusMachineEngineWorkingStatusEnum0:BaseDataVariableTypeM
0:HasComponentVariableOutputStatusOutputStatusDataType[]0:BaseDataVariableTypeM
0:HasComponentVariableSelectionIdStatusAvailabilityStatusDataType[]0:BaseDataVariableTypeM
0:HasComponentVariableOptionIdStatusAvailabilityStatusDataType[]0:BaseDataVariableTypeM
0:HasComponentVariable<SensorData>0:Number0:AnalogUnitTypeOP
0:HasComponentVariableMainColdTemperature0:Float0:AnalogUnitTypeO
0:HasComponentVariableMainHotTemperature0:Float0:AnalogUnitTypeO
0:HasComponentVariableActiveEVADTSStatusCodes0:String[]0:BaseDataVariableTypeO
Conformance Units
UnattendedRetail MachineEngine

The WorkingStatus Variable provides the information about the main status of the machine engine. The DataType is defined in 8.10.

The OutputStatus Variable indicates the status of each output from the machine engine. It shall have one entry per entry of the OutputIds of Capabilities with the same OutputId. The DataType is defined in 8.7.

The SelectionIdStatus Variable is an array and indicates for each selection the status. The UI should use this information to indicate if a selection is currently not available. For each entry in the SelectionList of the Capabilities Object there shall be an entry in the SelectionIdStatus. There shall not be entries in the SelectionIdStatus, that are not also in the SelectionList. The DataType is defined in 8.11.

The OptionIdStatus Variable is an array and indicates for each Option the status. The UI should use this information to indicate if an Option of a selection is currently not available. For each entry in the Options of the Capabilities Object there shall be an entry in the OptionIdStatus. There shall not be entries in the OptionIdStatus, that are not also in the Options. The DataType is defined in 8.11.

The <SensorData> Variable is an optional placeholder indicating that vendors may add additional sensor data to the Status Object. In this case, the AnalogUnitType should be used in order to provide meta data like the EngineeringUnits.

The MainHotTemperature is an optional Variable that should be used in Vending Machines where there is one main hot temperature, like the hot water temperature of a coffee machine.

The MainColdTemperature is an optional Variable that should be used in Vending Machines where there is one main cold temperature, like the cold air temperature in a snack or beverage machine.

The ActiveEVADTSStatusCodes Variable is an array of active status codes according to Annex C of EVA DTS.

7.8 PaymentServiceType definition

7.8.1 Overview

The PaymentServiceType provides the interface to access the payment service. It is used by other components like the UI and the audit collect. A more detailed overview is given in 6.2.2. It is formally defined in Table 26.

7.8.2 ObjectType definition

Table 26 - PaymentServiceType definition
Attribute Value
BrowseNamePaymentServiceType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentObject2:IdentificationIdentificationTypeM
0:HasComponentObjectDeliveryPaymentServiceDeliveryTypeM
0:HasComponentObjectConfigurationBaseConfigurationTypeM
0:HasComponentObjectPriceInformationPriceInformationTypeM
0:HasComponentObjectPaymentModesPaymentModesTypeO
0:HasComponentObjectPaymentDevicesPaymentDevicesTypeO
0:HasComponentObjectStatusPaymentServiceStatusTypeM
0:HasComponentObjectComponentsBaseComponentsTypeO
0:GeneratesEventObjectTypeVendingAuditEventType
0:GeneratesEventObjectTypeConfigurationChangedEventType
Conformance Units
UnattendedRetail PaymentService

The 2:Identification Object provides Properties describing the identification of the payment service (see 7.2 for details).

The Delivery Object provides the functionality to trigger a delivery by the UI (see 7.9 for details). In order to support a BasketId (see 6.3.2.3), the Delivery Object needs to be of type PaymentServiceBasketDeliveryType (see 7.10 for details).

The Configuration Object provides the configuration information of the payment service (see 7.3 for details).

The PriceInformation Object provides the prices for the selections of the machine engines, managed by the payment service (see 7.11 for details).

The optional PaymentModes Object contains one Object of PaymentModeType per payment mode supported by the payment service. It shall reference at least one Object of PaymentModeType (see 7.13 for details).

The optional PaymentDevices Object contains one Object of PaymentDeviceType per payment device provided by the payment service. It shall reference at least one Object of PaymentDeviceType (see 7.15 for details). Several payment devices may support the same payment mode. For example, there may be the payment mode "Cash" and the payment devices "Coin" and "Bill".

The PaymentModes and PaymentDevices Objects are optional and should be included only if the vending machine charges a price for any of the offered products; otherwise, they should be omitted.

The Status Object provides the status of the payment service and thereby of the overall Vending Machine (see 7.22 for details).

The optional Components Object is the entry point to information about subcomponents of the payment service (see 7.4 for details).

The GeneratesEvent Reference to the VendingAuditEventType indicates that instances will generate Events of that EventType (see 7.27 for details).

The GeneratesEvent Reference to the ConfigurationChangedEventType indicates that an instance may generate Events of that EventType (see 7.29). Such an Event shall be generated when Objects gets added or removed from the Components, PaymentModes or PaymentDevices Objects, or when the values of Variables of the Configuration change. Multiple changes may be reported by a single Event.

Note: Changes of Variables of the PaymentModes like AvailableCredit or the PaymentDevices do not trigger the creation of a ConfigurationChangedEvent. Clients interested in changes of those Variables need to subscribe to them.

7.9 PaymentServiceDeliveryType definition

7.9.1 Overview

The PaymentServiceDeliveryType provides the functionality to trigger a delivery by the UI. It is formally defined in Table 27.

7.9.2 ObjectType definition

Table 27 - PaymentServiceDeliveryType definition
Attribute Value
BrowseNamePaymentServiceDeliveryType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentMethodDeliverRequestM
0:HasComponentMethodCancelDeliverRequestM
0:HasComponentVariableTransactionProgressTransactionProgressDataType[]0:BaseDataVariableTypeM
Conformance Units
UnattendedRetail PaymentService

The TransactionProgress Variable is an array that contains the progress information of the payment of the delivery requests that are currently in execution or have recently been executed. The DataType is defined in 8.15. When the Status is changing, the entry of a delivery progress shall change. It is up to the implementation when the finished delivery requests get removed from the array. The simplest implementation just manages one entry and disallows a new delivery request while there is already one in execution and will keep the value there till a new delivery is started.

7.9.3 DeliverRequest Method

The DeliverRequest Method puts a deliver request into the payment service. The payment service checks the correct price, collects the payment and puts the deliver request into the corresponding machine engine (see 6.3.2.7 for details).

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed, and no deliver request was added to the corresponding machine engine.

The signature of this Method is specified below. Table 28 and Table 29 specify the Arguments and AddressSpace representation, respectively.

If no UserId or PaymentMode is provided, the payment service assumes appropriate values. If the user choses a different UserId or PaymentMode when initiating the payment, that effects the price, the transaction may fail. The entry of the transaction in the TransactionProgress Variable indicates the used UserId and PaymentMode. The UI may use this information to get the price for those, displays it to the user and if the user accepts, automatically triggers a new DeliverRequest.

Signature

	DeliverRequest (
	  [in]  0:String                   UserId,
	  [in]  0:String                   PaymentMode,
	  [in]  SelectionDataType          Selection,
	  [in]  PriceDataType              Price,
	  [out] 0:UInt64                   TransactionId,
	  [out] 0:Int32                    Status);
Table 28 - DeliverRequest Arguments
Argument Description
UserIdIdentification of the user. If the UserId is NULL or an empty string, the payment service selects the most appropriate UserId. If during payment a different UserId is used, which effects the price, the transaction may fail, or the price for the selected UserId is used.
PaymentMode

Payment mode to be used for the delivery. Supported payment modes of the payment service are defined in the PaymentModes of the PaymentService Object, using the PaymentModeId.

If the PaymentMode is NULL or an empty string, the payment service selects the most appropriate payment mode or potentially several payment modes. If during payment a different payment mode is used, which effects the price, the transaction will fail.

The special PaymentMode "NoCheck" indicates, that the Price is not checked, and the payment service will use a price depending on the payment mode used in the payment. This supports scenarios, where the user does not choose a payment mode before the deliver request and the UI typically displays the potentially different prices for all payment modes.

SelectionDefines what should be delivered, including the corresponding machine engine, the SelectionId, and the requested options.
PriceThe price expected to be paid for the selection.
TransactionIdA unique identifier given into the machine engine that uniquely identifies the deliver request. It shall be used as the TransactionId in the DeliveryRequests and the DeliveryProgress Variables. Shall not be interpreted when the Method returns with an UNCERTAIN StatusCode.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Machine engine referenced in MachineEngineProductInstanceUri not managed by payment service.

-2 = Invalid UserId

-3 = Invalid PaymentMode

-4 = Invalid Price

-5 = Invalid SelectionId

-6 = Invalid Option contained in Options

-7 = MachineEngine currently not available

-8 = PriceService currently not available

-9 = Cannot be executing because another payment is running

-10 = Invalid SelectionListVersion

-11 = Audit not running

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 29 - DeliverRequest AddressSpace definition
Attribute Value
BrowseNameDeliverRequest
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.9.4 CancelDeliverRequest Method

The CancelDeliverRequest Method requests to cancel a deliver request. The payment service checks if the deliver request can still be cancelled, and if yes, cancels the request, otherwise returns a corresponding Status argument.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed, and the TransactionId was not cancelled.

The signature of this Method is specified below. Table 28 and Table 29 specify the Arguments and AddressSpace representation, respectively.

Note: If a TransactionId is used inside a basket (see 7.10), it cannot be cancelled individually. A call of the Method with such a TransactionId should return a -2 Status.

Note: Once a TransactionId has been forwarded to the MachineEngine it is expected that it cannot be cancelled anymore and should return a -2 Status.

Signature

	CancelDeliverRequest (
	  [in] 0:UInt64                    TransactionId,
	  [out] 0:Int32                    Status);
Table 30 - CancelDeliverRequest Arguments
Argument Description
TransactionIdThe unique identifier of the deliver request to be cancelled.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Invalid TransactionId

-2 = Cancelling not possible anymore.

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 31 - CancelDeliverRequest AddressSpace definition
Attribute Value
BrowseNameCancelDeliverRequest
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.10 PaymentServiceBasketDeliveryType definition

7.10.1 Overview

The PaymentServiceBasketDeliveryType provides the functionality to trigger the delivery of a basket by the UI. It is formally defined in Table 32.

7.10.2 ObjectType definition

Table 32 - PaymentServiceBasketDeliveryType definition
Attribute Value
BrowseNamePaymentServiceBasketDeliveryType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the PaymentServiceDeliveryType
0:HasComponentMethodDeliverBasketRequestM
0:HasComponentMethodCancelDeliverBasketRequestM
0:HasComponentVariableBasketProgressBasketProgressDataType[]0:BaseDataVariableTypeM
Conformance Units
UnattendedRetail PaymentService BasketDelivery

The BasketProgress Variable is an array that contains the progress information of the payment of the basket delivery requests that are currently in execution or have recently been executed. The DataType is defined in 8.17. When the Status is changing, the entry of a delivery progress shall change. It is up to the implementation when the finished basket delivery requests get removed from the array. The simplest implementation just manages one entry and disallows a new basket delivery request while there is already one in execution.

Note that in addition to the BasketProgress the TransactionProgress provides the status of the individual entries of the basket.

7.10.3 DeliverBasketRequest Method

The DeliverBasketRequest Method receives a set of deliver requests and puts them into one or several machine engines, after checking the correct price and collecting the (see 6.3.2.9 for details).

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed, and no basket was created.

The signature of this Method is specified below. Table 33 and Table 34 specify the Arguments and AddressSpace representation, respectively.

If no UserId or PaymentMode is provided, the payment service assumes appropriate values. If the user choses a different UserId or PaymentMode when initiating the payment, that effects the price, the basket delivery may fail. The status of the basket indicates the used UserId and PaymentMode. The UI may use this information to get the price for those, displays it to the user and if the user accepts, automatically triggers a new DeliverRequest.

Signature

	DeliverBasketRequest (
	  [in]  0:String                   UserId,
	  [in]  0:String                   PaymentMode,
	  [in]  SelectionDataType[]        BasketContent,
	  [in]  PriceDataType              Price,
	  [out] 0:UInt64[]                 TransactionIds,
	  [out] 0:UInt64                   BasketId,
	  [out] 0:Int32                    Status);
Table 33 - DeliverBasketRequest Arguments
Argument Description
UserIdIdentification of the user. If the UserId is NULL or an empty string, the payment service selects the most appropriate UserId. If during payment a different UserId is used, which effects the price, the basket delivery may fail, or the price for the selected UserId is used.
PaymentMode

Payment mode to be used for the delivery. Supported payment modes of the payment service are defined in the PaymentModes of the PaymentService Object, using the PaymentModeId.

If the PaymentMode is NULL or an empty string, the payment service selects the most appropriate payment mode or potentially several payment modes. If during payment a different payment mode is used, which effects the price, the basket delivery will fail.

The special PaymentMode "NoCheck" indicates, that the Price is not checked, and the payment service will use a price depending on the payment mode used in the payment. This supports scenarios, where the user does not choose a payment mode before the deliver request and the UI typically displays the potentially different prices for all payment modes.

BasketContentDefines an array what should be delivered, each entry including the corresponding machine engine, the SelectionId, and the requested options. Shall have at least one entry.
PriceThe price expected to be paid for the basket.
TransactionIdsAn array of unique identifiers given into the machine engine that uniquely identifies each deliver request. It shall be used as the TransactionId in the DeliveryRequests and the DeliveryProgress Variables. The array shall have the same length as the BasketContent and reflects each selection of that array. Shall not be interpreted when the Method returns with an UNCERTAIN StatusCode.
BasketIdA unique identifier of the basket. Shall not be interpreted when the Method returns with an UNCERTAIN StatusCode.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Machine engine referenced in MachineEngineProductInstanceUri not managed by payment service.

-2 = Invalid UserId

-3 = Invalid PaymentMode

-4 = Invalid Price

-5 = Invalid SelectionId

-6 = Invalid Option contained in Options

-7 = MachineEngine currently not available

-8 = PriceService currently not available

-9 = Cannot be executing because another payment is running

-10 = Invalid SelectionListVersion

-11 = Audit not running

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 34 - DeliverBasketRequest AddressSpace definition
Attribute Value
BrowseNameDeliverBasketRequest
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.10.4 CancelDeliverBasketRequest Method

The CancelDeliverBasketRequest Method requests to cancel all deliver requests of a basket. The payment service checks if the basket can still be cancelled, and if yes, cancels all the requests of the basket, otherwise returns a corresponding Status argument.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed, and the BasketId was not cancelled.

The signature of this Method is specified below. Table 28 and Table 29 specify the Arguments and AddressSpace representation, respectively.

Signature

	CancelDeliverBasketRequest (
	  [in] 0:UInt64                    BasketId,
	  [out] 0:Int32                    Status);
Table 35 - CancelDeliverBasketRequest Arguments
Argument Description
BasketIdThe unique identifier of the basket to be cancelled.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Invalid BasketId

-2 = Cancelling not possible anymore.

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 36 - CancelDeliverBasketRequest AddressSpace definition
Attribute Value
BrowseNameCancelDeliverBasketRequest
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.11 PriceInformationType definition

7.11.1 Overview

The PriceInformationType provides information on selections with specific Options and baskets. It is provided by the payment service and the price service. It is formally defined in Table 37.

7.11.2 ObjectType definition

Table 37 - PriceInformationType definition
Attribute Value
BrowseNamePriceInformationType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentMethodGetPriceForSelectionsM
0:HasComponentMethodGetPriceForOneSelectionM
0:HasComponentMethodGetPriceForBasketO
0:GeneratesEventObjectTypePriceChangeEventType
Conformance Units
UnattendedRetail PaymentService
UnattendedRetail PriceService

Instances of the PriceInformationType will generate Events of PriceChangeEventType, when the prices provided with one of the Methods may have changed, for example based on the time, different base prices, etc. Clients currently using the price information (e.g., for display) should subscribe for these Events and call the Methods again, after receiving the Event.

7.11.3 GetPriceForSelections Method

The GetPriceForSelections Method asks for the current price of all selections of a machine engine of the Vending Machine. It takes indications (UserId, PaymentMode) as input that influence the price. The output contains the price information including price information per Option.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed, and the returned PriceInformationList shall not be interpreted.

The signature of this Method is specified below. Table 38 and Table 39 specify the Arguments and AddressSpace representation, respectively.

Signature

	GetPriceForSelections (
	  [in]   0:String                   UserId,
	  [in]   0:String                   PaymentMode,
	  [in]   0:UriString                MachineEngineProductInstanceUri,
	  [in]   0:SemanticVersionString    SelectionListVersion,
	  [out]  SelectionPriceDataType[]   PriceInformationList,
	  [out]  0:Int32                    Status);
Table 38 - GetPriceForSelections Arguments
Argument Description
UserIdThe UserId context for which the provided price is valid.
PaymentMode

The payment mode that will be used for the payment, which may influence the price. Supported payment modes of the payment service are defined in the PaymentModes of the PaymentService Object, using the PaymentModeId.

It is not allowed to provide a NULL or empty string or to use the PaymentMode "NoCheck".

MachineEngineProductInstanceUriThe machine engine for which the price information shall be provided.
SelectionListVersionProvides the version of the selections as defined in the Capabilities. Used as context to interpret the Selections and Options correctly.
PriceInformationListThe price per selection available for the machine engine. Shall contain exactly one entry for all SelectionIds currently supported by the machine engine. Shall not be interpreted when the Method returns with an UNCERTAIN StatusCode.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Machine engine referenced in MachineEngineProductInstanceUri not managed by payment service or price service.

-2 = Invalid UserId

-3 = Invalid PaymentMode

-4 = Invalid SelectionListVersion

-5 = Price service not available

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 39 - GetPriceForSelections AddressSpace definition
Attribute Value
BrowseNameGetPriceForSelections
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.11.4 GetPriceForOneSelection Method

The GetPriceForOneSelection Method asks for the current price of one selection of the Vending Machine. It takes indications as input that influence the price. The output contains the price information.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed, and the returned PriceInformation shall not be interpreted.

The signature of this Method is specified below. Table 40 and Table 41 specify the Arguments and AddressSpace representation, respectively.

Signature

	GetPriceForOneSelection (
	  [in]   0:String                   UserId,
	  [in]   0:String                   PaymentMode,
	  [in]   SelectionDataType          Selection,
	  [out]  PriceAndContextDataType    PriceInformation,
	  [out]  0:Int32                    Status);
Table 40 - GetPriceForOneSelection Arguments
Argument Description
UserIdThe UserId context for which the provided price is valid.
PaymentMode

The payment mode that will be used for the payment, which may influence the price. Supported payment modes of the payment service are defined in the PaymentModes of the PaymentService Object, using the PaymentModeId.

It is not allowed to provide a NULL or empty string or to use the PaymentMode "NoCheck".

SelectionDefines for what selection the price should be provided, including the corresponding machine engine, the SelectionId, and the requested options.
PriceInformationThe price for the SelectionId. Shall not be interpreted when the Method returns with an UNCERTAIN StatusCode.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Machine engine referenced in MachineEngineProductInstanceUri not managed by payment service.

-2 = Invalid UserId

-3 = Invalid PaymentMode

-4 = Invalid SelectionId

-5 = Invalid Option contained in Options

-6 = Invalid SelectionListVersion

-7 = Price service not available

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 41 - GetPriceForSelections AddressSpace definition
Attribute Value
BrowseNameGetPriceForOneSelection
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.11.5 GetPriceForBasket Method

The GetPriceForBasket Method asks for the current price of a basket of selections of the Vending Machine. It takes indications as input that influence the price. The output contains the price information.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed, and the returned OverallPriceInformation and PriceInformationList shall not be interpreted.

The signature of this Method is specified below. Table 42 and Table 43 specify the Arguments and AddressSpace representation, respectively.

Signature

	GetPriceForBasket (
	  [in]   0:String                   UserId,
	  [in]   0:String                   PaymentMode,
	  [in]   SelectionDataType[]        BasketContent,
	  [out]  PriceDataType              OverallPriceInformation,
	  [out]  PriceAndContextDataType[]  PriceInformationList,
	  [out]  0:Int32                    Status);
Table 42 - GetPriceForBasket Arguments
Argument Description
UserIdThe UserId context for which the provided price is valid.
PaymentMode

The payment mode that will be used for the payment, which may influence the price. Supported payment modes of the payment service are defined in the PaymentModes of the PaymentService Object, using the PaymentModeId.

It is not allowed to provide a NULL or empty string or to use the PaymentMode "NoCheck".

BasketContentThe content of the basket, for which the price is asked for.
OverallPriceInformationThe overall price for the BasketContent. Shall not be interpreted when the Method returns with an UNCERTAIN StatusCode.
PriceInformationListThe price of each individual content of the basket. The array shall have the same size as the BasketContent array and each entry represents the price for the entry at the same index of the BasketContent. The OverallPriceInformation shall be the sum of each entry of the PriceInformationList. Shall not be interpreted when the Method returns with an UNCERTAIN StatusCode.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Machine engine referenced in MachineEngineProductInstanceUri not managed by payment service.

-2 = Invalid UserId

-3 = Invalid PaymentMode

-4 = Invalid SelectionId

-5 = Invalid Option contained in Options

-6 = Invalid SelectionListVersion

-6 = Price service not available

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 43 - GetPriceForBasket AddressSpace definition
Attribute Value
BrowseNameGetPriceForBasket
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.12 PriceChangeEventType definition

7.12.1 Overview

The PriceChangeEventType describes Events that are fired to indicate a change in prices. It is formally defined in Table 44.

7.12.2 ObjectType definition

Table 44 - PriceChangeEventType definition
Attribute Value
BrowseNamePriceChangeEventType
IsAbstractTrue
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseEventType
0:HasPropertyVariableMachineEngineProductInstanceUri0:UriString0:PropertyTypeM
Conformance Units
UnattendedRetail PaymentService
UnattendedRetail PriceService

The Properties of the 0:BaseEventType shall be used according to their definitions. This specification does not define any further restrictions on the usage.

The MachineEngineProductInstanceUri contains the machine engine, for which the prices have changed. Clients should use this to filter only for those price change events they are interested in.

7.13 PaymentModesType definition

7.13.1 Overview

The PaymentModesType provides all payment modes of a payment service. It is formally defined in Table 45.

7.13.2 ObjectType definition

Table 45 - PaymentModesType definition
Attribute Value
BrowseNamePaymentModesType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentObject<PaymentMode>PaymentModeTypeMP
Conformance Units
UnattendedRetail PaymentService

The <PaymentMode> Object indicates that Objects of PaymentModesType shall have one or more Objects of PaymentModeType, each representing one payment mode (see 7.14 for details).

7.14 PaymentModeType definition

7.14.1 Overview

The PaymentModeType provides information on selections with specific Options and baskets. It is provided by the payment service and the price service. It is formally defined in Table 46.

7.14.2 ObjectType definition

Table 46 - PaymentModeType definition
Attribute Value
BrowseNamePaymentModeType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentVariableStatusPaymentModeOrDeviceStatusEnum0:BaseDataVariableTypeM
0:HasComponentVariablePaymentModeId0:String0:BaseDataVariableTypeM
0:HasComponentVariableCurrentlyUsedUserId0:String0:BaseDataVariableTypeO
0:HasComponentVariableAvailableCreditPriceDataType0:BaseDataVariableTypeM
0:HasComponentMethodEscrowRefundO
Conformance Units
UnattendedRetail PaymentService

The Status represents the current status of the payment system supporting the payment mode (see 8.21 for details).

The PaymentModeId represents a unique identification of the payment mode, that is used in the DeliverRequest Method of the Delivery Object. It is recommended, that this string is also used for the text part of the DisplayName Attribute of the Object for the default locale. The PaymentMode "NoCheck" has a special meaning and shall not be used as PaymentModeId. The recommended PaymentModeId values are: "Cash" and "Cashless".

The optional CurrentlyUsedUserId provides information about the UserId currently used in the payment mode (e.g., when a customer card is used).

The optional AvailableCredit Variable contains the currently managed amount (e.g., coins already added to the machine, pre-charged credit card, etc.).

7.14.3 EscrowRefund Method

The optional EscrowRefund Method is provided when the payment mode contains an escrow area (e.g., a special area to keep coins). When called, the escrow gets returned.

The signature of this Method is specified below. Table 47 and Table 48 specify the Arguments and AddressSpace representation, respectively.

Signature

	EscrowRefund ();
Table 47 - EscrowRefund Arguments
Argument Description

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 48 - EscrowRefund AddressSpace definition
Attribute Value
BrowseNameEscrowRefund
References NodeClass BrowseName DataType TypeDefinition ModellingRule

7.15 PaymentDevicesType definition

7.15.1 Overview

The PaymentDevicesType provides all payment devices of a payment service. It is formally defined in Table 49.

7.15.2 ObjectType definition

Table 49 - PaymentDevicesType definition
Attribute Value
BrowseNamePaymentDevicesType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentObject<PaymentDevice>PaymentDeviceTypeMP
Conformance Units
UnattendedRetail PaymentService

The <PaymentDevice> Object indicates that Objects of PaymentDevicesType shall have one or more Objects of PaymentDeviceType, each representing one payment device (see 7.16 for details).

7.16 PaymentDeviceType definition

7.16.1 Overview

The PaymentDeviceType provides information about a payment device. It is formally defined in Table 50.

7.16.2 ObjectType definition

Table 50 - PaymentDeviceType definition
Attribute Value
BrowseNamePaymentDeviceType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentObject2:IdentificationIdentificationTypeM
0:HasPropertyVariableIsEmulatedBoolean0:PropertyTypeM
0:HasComponentVariableStatusPaymentModeOrDeviceStatusEnum0:BaseDataVariableTypeM
0:HasPropertyVariableSupportedAssetListPriceDataType[]0:PropertyTypeO
0:HasPropertyVariableSupportedAssetListVersion0:SemanticVersionString0:PropertyTypeO
0:HasPropertyVariableSlotConfigurationListSlotConfigurationDataType[]0:PropertyTypeO
0:GeneratesEventObjectTypeVendingAuditEventType
Conformance Units
UnattendedRetail PaymentService
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

The 2:Identification Object provides Properties describing the identification of the payment device (see 7.2 for details).

The string-part of the DisplayName of Objects of this ObjectType shall be the 2:ProductInstanceUri defined in the 2:Identification Object. This simplifies identifying in the Events of the VendingAuditEventType which payment device has generated the Event, as the 0:SourceName of the Event is the string-part of the DisplayName.

The mandatory Property IsEmulated indicates if the Object is just an emulation. When set to "true", it indicates that the Object of PaymentDeviceType is just an emulation representing the payment device, and the payment device itself provides an OPC UA Server with an instance of PaymentDeviceType. In that case, no Events of VendingAuditEventType are generated, and consumers of those Events need to subscribe to the OPC UA Server of the payment device for those Events. This is used in a payment service providing information about the payment device, but the payment device has its own OPC UA Server. When set to "false", it indicates that this Object is not emulated and generates Events of VendingAuditEventType. This is used in a payment service where the payment device does not have an OPC UA Server and in the payment device if the payment device has an OPC UA Server. In 6.2.2 more descriptive text is given.

The mandatory Status represents the current status of the payment device (see 8.21 for details). A payment device taking physical assets of value (e.g., coins, bills, and tokens) provides the information about the physical assets it supports in the SupportedAssetList Property. The list shall be in ascending order by the Amount, not considering the Currency. If no physical assets of value are taken, the optional SupportedAssetList shall not be provided. For coin changers the SupportedAssetList is the list of accepted coins and tokens, as for bill validators is the list of bills and tokens handled.

Note: Tokens are managed the same way as cash, but the Currency of the PriceDataType shall use 000 as NumericCode and 0 as Exponent.

The SupportedAssetListVersion provides the current version of the SupportedAssetList. Clients may cache the SupportedAssetList and only access it after reconnect, if the SupportedAssetListVersion has changed. Therefore, each change in the SupportedAssetList shall change the SupportedAssetListVersion. The same SupportedAssetListVersion shall only be used if the SupportedAssetList is identical to the content of the previous SupportedAssetList using the same SupportedAssetListVersion.

A payment device taking physical assets of value (e.g., coins, bills, and tokens) may have two places where to store those assets.

The cashbox (coins) or stacker (bills) stores the assets and will be emptied by the technician. Typically, the amount of value in the cashbox or stacker is not known. A VendingAuditEvent (see 7.27) gets generated when a new value is added to the cashbox or stacker. Therefore, no information on the amount of value in the cashbox or stacker is provided by the PaymentDeviceType.

The tube (for coins) or recycler (for bills) buffers the assets, so that they can be returned as change, payback or when the user cancels the order or requests a refund. Those buffers have different slots to store different types of coins, bills, or tokens. The information about the general setup of those slots is provided in the SlotConfigurationList. Each entry of the list of SlotConfigurationDataType (see 8.20) consists of two indexes, the first one identifying the slot and the second the asset going to the slot as an index into the SupportedAssetList. Several entries of the SupportedAssetList may be assigned to the same slot index. In this case, the Amount and Currency shall be identical. Several slot indexes may have the same entries of the SupportedAssetList assigned to them. The slot indexes shall start with 0 and increase without interruptions (0, 1, 2, 3, …). As special index -1 is used in the SlotConfigurationList to indicate that the referenced entry of the SupportedAssetList is directly moved into the cashbox / stacker. The SlotConfigurationList shall have at least one entry for each entry of the SupportedAssetList.

In the following, an example is given.

SupportedAssetList = { (10, € cent), (50, € cent), (50, € cent), (100, € cent), (100, € cent) }

SlotConfigurationList = {(-1,4), (0,0), (1,0), (2,1), (2,2), (3,3), (4,3) }

In the example, the machine accepts coins of 10, 50, and 100 € cent. It distinguishes between two different types of 50 and 100 € cent coins.

The buffer contains 5 slots, the first two (index 0 and 1) taking 10 € cent coins, another one (index 2) taking all 50 € cent coins, and two more taking 100 € cent coins of one type, whereas the second one never goes into the buffer but always directly into the cashbox (index -1, first entry in the SlotConfigurationList).

An Object emulating a payment device (IsEmulated = "true") should not provide the SupportedAssetList, SupportedAssetListVersion, and SlotConfigurationList.

An Object not emulating a payment device (IsEmulated = "false") and taking physical assets of value (e.g., coins, bills, and tokens) shall provide the SupportedAssetList, the SupportedAssetListVersion and the SlotConfigurationList.

Remark: The SupportedAssetList and SlotConfigurationList are needed to interpret Events of VendingAuditEventType having a SlotIndex.

The GeneratesEvent Reference to the VendingAuditEventType indicates that instances may generate Events of that EventType (see 7.27 for details).

7.17 StandalonePaymentDeviceType definition

7.17.1 Overview

The abstract StandalonePaymentDeviceType provides information about a payment device having its own OPC UA Server. It is formally defined in Table 51.

7.17.2 ObjectType definition

Table 51 - StandalonePaymentDeviceType definition
Attribute Value
BrowseNameStandalonePaymentDeviceType
IsAbstractTrue
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the PaymentDeviceType
0:HasComponentObjectConfigurationBaseConfigurationTypeM
0:HasComponentObjectComponentsBaseComponentsTypeO
0:GeneratesEventObjectTypeConfigurationChangedEventType
Conformance Units
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

The Configuration Object provides the configuration information of the payment device (see 7.3 for details). It may provide the default currency used in the payment device.

The optional Components Object is the entry point to information about subcomponents of the payment device (see 7.4 for details).

The GeneratesEvent Reference to the ConfigurationChangedEventType indicates that an instance may generate Events of that EventType (see 7.29). Such an Event shall be generated when Objects gets added or removed from the Components Object, or when the values of Variables of the Configuration change. Multiple changes may be reported by a single Event.

7.18 PaymentCashDeviceType definition

7.18.1 Overview

The abstract PaymentCashDeviceType provides information about a payment device taking cash. It is formally defined in Table 52.

7.18.2 ObjectType definition

Table 52 - PaymentCashDeviceType definition
Attribute Value
BrowseNamePaymentCashDeviceType
IsAbstractTrue
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the StandalonePaymentDeviceType
0:HasPropertyVariableSupportedAssetListPriceDataType[]0:PropertyTypeM
0:HasPropertyVariableSupportedAssetListVersion0:SemanticVersionString0:PropertyTypeM
0:HasPropertyVariableSlotConfigurationListSlotConfigurationDataType[]0:PropertyTypeM
0:HasComponentVariableCurrentSlotContentList0:UInt32[]0:BaseDataVariableTypeO
0:HasComponentVariableAssetConfigurationListAssetConfigurationEnum[]0:BaseDataVariableTypeM
0:HasComponentMethodChangeAssetConfigurationListM
0:HasComponentVariablePayoutStatusPayoutStatusEnum0:BaseDataVariableTypeO
0:HasComponentMethodPayoutByValueO
0:HasComponentMethodPayoutBySupportedAssetListO
0:HasComponentVariableCurrentAvailableValuePriceDataType0:BaseDataVariableTypeM
0:HasComponentMethodConsumeAvailableValueM
Conformance Units
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill

The inherited Variables SupportedAssetList, SupportedAssetListVersion, and SlotConfigurationList become mandatory in the PaymentCashDeviceType.

In case of the buffer (see 7.16.2), most payment devices maintain the information about the current amount stored in the buffer. If the payment device supports this information, it shall be provided in the CurrentSlotContentList Property. This list contains for each index representing a slot the number of physical assets currently in the slot. The list shall have the same size as the maximum slot index of the SlotConfigurationList.

In the following, an example is given, extending the example of 7.16.2.

SupportedAssetList = { (10, € cent), (50, € cent), (50, € cent), (100, € cent), (100, € cent) }

SlotConfigurationList = { (-1,4), (0,0), (1,0), (2,1), (2,2), (3,3), (4,3) }

CurrentSlotContentList = { 10, 3, 15, 7, 0 }

An explanation of SupportedAssetList and SlotConfigurationList can be found in 7.16.2.

The CurrentSlotContentList indicates, that there are 10+3 10 € cent coins, 15 50 € cent coins, and 7 100€ cent coins in the buffer.

The CurrentSlotContentList Variable value is the best approximation for the slot content, and may not be the exact number of assets in each slot, the behaviour can be manufacturer depended.

The mandatory AssetConfigurationList Variable is an array of AssetConfigurationEnum. The DataType is defined in 8.24. It shall have the same length as the SupportedAssetList. Each entry of the array defines what the payment device shall do with an asset as defined in the corresponding entry of the SupportedAssetList when inserted into the payment device. The AssetConfigurationList can be changed by the ChangeAssetConfigurationList Method defined in 7.18.3.

The optional PayoutStatus Variable indicates the status of a payout, requested via the PayoutByValue (see 7.18.4) or PayoutBySupportedAssetList (see 7.18.5) Method call. The DataType is defined in 8.25. The CurrentSlotContentList Variable needs to be updated when a payout occurs. If a payout was not successful, checking the CurrentSlotContentList indicates what assets have been paid out. The CurrentSlotContentList Variable can also be monitored to identify in case of a successful payout, what assets have been paid out.

The mandatory CurrentAvailableValue Variable indicates the amount of money currently available in the payment cash device for deliveries. When a user inserts an asset (e.g., a coin) that is accepted by the payment cash device, the CurrentAvailableValue increases. Typically, the CurrentAvailableValue is initialized to 0 when the payment cash device starts. When the ConsumeAvailableValue Method is called (see 7.18.6), the CurrentAvailableValue decreases according to the input parameters of the Method. Any payout operation (PayoutByValue or PayoutBySupportedAssetList Methods) does not affect the CurrentAvailableValue.

7.18.3 ChangeAssetConfigurationList Method

The ChangeAssetConfigurationList Method changes the configuration of the payment device reflected in the AssetConfigurationList.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, the AssetConfigurationList shall reflect the new configuration.

The signature of this Method is specified below. Table 53 and Table 54 specify the Arguments and AddressSpace representation, respectively.

Signature

	ChangeAssetConfigurationList (
	  [in]   AssetConfigurationEnum[]   NewAssetConfigurationList,
	  [out]  0:Int32                    Status);
Table 53 - ChangeAssetConfigurationList Arguments
Argument Description
NewAssetConfigurationListContains the new configuration to be configured. The resulting configuration may not be identical to this input argument as the configuration may be adjusted as described in the AssetConfigurationEnum.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Invalid length of NewAssetConfigurationList

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 54 - ChangeAssetConfigurationList AddressSpace definition
Attribute Value
BrowseNameChangeAssetConfigurationList
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.18.4 PayoutByValue Method

The PayoutByValue Method triggers a payout.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, it does not indicate, that the payout has been completed successful. Clients need to access the PayoutStatus Variable to get the information, if the payout gets successfully finished.

The signature of this Method is specified below. Table 55 and Table 56 specify the Arguments and AddressSpace representation, respectively.

Signature

	PayoutByValue (
	  [in]   PriceDataType              PayoutValue,
	  [out]  0:Int32                    Status);
Table 55 - PayoutByValue Arguments
Argument Description
PayoutValueThe value to be paid out.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Cannot trigger payout as another payout is ongoing

-2 = Cannot trigger payout, not enough assets left

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 56 - PayoutByValue AddressSpace definition
Attribute Value
BrowseNamePayoutByValue
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.18.5 PayoutBySupportedAssetList Method

The PayoutBySupportedAssetList Method triggers a payout.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, it does not indicate, that the payout has been completed successful. Clients need to access the PayoutStatus Variable to get the information, if the payout gets successfully finished.

The signature of this Method is specified below. Table 57 and Table 58 specify the Arguments and AddressSpace representation, respectively.

Signature

	PayoutBySupportedAssetList (
	  [in]   0:UInt32[]             NumberOfAssetsBySupportedAssetList,
	  [out]  0:Int32                Status);
Table 57 - PayoutBySupportedAssetList Arguments
Argument Description
NumberOfAssetsBySupportedAssetListFor each entry of the SupportedAssetList, the number of assets to be paid out.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Cannot trigger payout as another payout is ongoing

-2 = Cannot trigger payout, not enough assets left

-3 = Invalid length of NumberOfAssetsBySupportedAssetList

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 58 - PayoutBySupportedAssetList AddressSpace definition
Attribute Value
BrowseNamePayoutBySupportedAssetList
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.18.6 ConsumeAvailableValue Method

The ConsumeAvailableValue Method consumes part of the available money provided in the CurrentAvailableValue Variable.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, it does indicate, that the CurrentAvailableValue Variable has been decreased.

The signature of this Method is specified below. Table 59 and Table 60 specify the Arguments and AddressSpace representation, respectively.

Signature

	ConsumeAvailableValue (
	  [in]   PriceDataType              ValueToConsume,
	  [out]  0:Int32                    Status);
Table 59 - ConsumeAvailableValue Arguments
Argument Description
ValueToConsumeFor each entry of the SupportedAssetList, the number of assets to be paid out.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Not enough value to consume available

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 60 - ConsumeAvailableValue AddressSpace definition
Attribute Value
BrowseNameConsumeAvailableValue
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.19 PaymentBillDeviceType definition

7.19.1 Overview

The PaymentBillDeviceType provides information about a payment device taking bills or token. It is formally defined in Table 61.

7.19.2 ObjectType definition

Table 61 - PaymentBillDeviceType definition
Attribute Value
BrowseNamePaymentBillDeviceType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the PaymentCashDeviceType
0:HasComponentMethodCancelPayoutM
0:HasComponentVariableCurrentValueInEscrow0:UInt320:BaseDataVariableTypeM
0:HasComponentMethodHandleBillFromEscrowM
Conformance Units
UnattendedRetail PaymentDevice Bill

The CurrentValueInEscrow Variable indicates the asset currently in the escrow by pointing to the index of the SupportedAssetList.

7.19.3 CancelPayout Method

The CancelPayout Method cancels the current payout.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, it indicates, that the current payout has been cancelled and will not continue.

The signature of this Method is specified below. Table 62 and Table 63 specify the Arguments and AddressSpace representation, respectively.

Signature

	CancelPayout (
	  [out]  0:Int32                    Status);
Table 62 - CancelPayout Arguments
Argument Description
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = No payout ongoing that can be cancelled

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 63 - CancelPayout AddressSpace definition
Attribute Value
BrowseNameCancelPayout
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.19.4 HandleBillFromEscrow Method

The HandleBillFromEscrow Method defines what the payment device shall do with the bill or token currently stored in the escrow.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, it does not indicate, that the bill or token was already processed completely from the escrow. Clients need to access the CurrentValueInEscrow Variable to get the information, if the bill or token has successfully been moved.

The signature of this Method is specified below. Table 64 and Table 65 specify the Arguments and AddressSpace representation, respectively.

Signature

	HandleBillFromEscrow (
	  [in]   0:Boolean                  AcceptBill,
	  [out]  0:Int32                    Status);
Table 64 - HandleBillFromEscrow Arguments
Argument Description
AcceptBillIf true, the current bill or token in escrow (see Variable CurrentValueInEscrow) gets accepted, if false, it gets rejected. The place where the bill or token is moved to in case of it gets accepted is defined in the AssetConfigurationList.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Currently no bill in escrow

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 65 - HandleBillFromEscrow AddressSpace definition
Attribute Value
BrowseNameHandleBillFromEscrow
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.20 PaymentCoinDeviceType definition

7.20.1 Overview

The PaymentCoinDeviceType provides information about a payment device taking coins or token. It is formally defined in Table 66.

7.20.2 ObjectType definition

Table 66 - PaymentCoinDeviceType definition
Attribute Value
BrowseNamePaymentCoinDeviceType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the PaymentCashDeviceType
Conformance Units
UnattendedRetail PaymentDevice Coin

This ObjectType does not define any additional InstanceDeclarations.

7.21 PaymentCashlessDeviceType definition

7.21.1 Overview

The PaymentCashlessDeviceType provides information about a cashless payment taking for example credit cards. It is formally defined in Table 67.

7.21.2 ObjectType definition

Table 67 - PaymentCashlessDeviceType definition
Attribute Value
BrowseNamePaymentCashlessDeviceType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the StandalonePaymentDeviceType
0:HasComponentVariableUserId0:String0:BaseDataVariableTypeM
0:HasPropertyVariableMaxRechargePriceDataType0:PropertyTypeM
0:HasComponentVariableCurrentContentOnCardPriceDataType0:BaseDataVariableTypeM
0:HasComponentVariableApproveStatusOperationStatusEnum0:BaseDataVariableTypeM
0:HasComponentMethodApproveM
0:HasComponentMethodCancelApprovalM
0:HasComponentVariableRechargeStatusOperationStatusEnum0:BaseDataVariableTypeO
0:HasComponentMethodRechargeO
0:HasComponentVariableRefundLastStatusOperationStatusEnum0:BaseDataVariableTypeM
0:HasComponentMethodRefundLastM
0:HasComponentVariableIsEnabled0:Boolean0:BaseDataVariableTypeM
0:HasComponentMethodEnableOrDisableM
7Conformance Units
UnattendedRetail PaymentDevice Cashless

The UserId Variable indicates the UserId associated with the card or other identification used for the cashless payment device. If the UserId is null or an empty string, it implies that there is currently nothing associated to the cashless payment device and neither money can be taken nor recharged.

The MaxRecharge Variable indicates how much money can be recharged to the account of the current UserId. Null or an amount of 0 indicates that no recharge functionality is available.

The CurrentContentOnCard Variable indicates how much money can currently be used. This may be the amount on a rechargeable card, or a fixed value already pre-charged from a credit card. A null value indicates that the amount is unknown. When no UserId is available, the CurrentContentOnCard shall be null.

The ApproveStatus Variable indicates the status of the last call of the Approve Method (see 7.21.4). The DataType is defined in 8.26. The CancelApproval Method (see 7.21.5) may be called while the approval is still ongoing to cancel the approval and thereby effecting the ApproveStatus.

The optional RechargeStatus Variable indicates the status of the last call of the optional Recharge Method (see 7.21.6). The DataType is defined in 8.26.

The RefundLastStatus Variable indicates the status of the last call of the RefundLast Method (see 7.21.7). The DataType is defined in 8.26.

The IsEnabled Variable indicates if the cashless payment device is enabled ("true") or disabled ("false"). When the payment device is disabled, the Approve, Recharge and RefundLast Methods will fail. IsEnabled can be changed by calling the EnableOrDisable Method.

7.21.3 Relation to MDB / ICP state for cashless devices

MDB / ICP defines several states for cashless devices. How to receive this information from the PaymentCashlessDeviceType is described in the following.

Table 68 - Relation to MDB / ICP states
MDB / ICP stateStatus
(Available, Offline, OutOfOrder)
IsEnabled
(true, false)
UserId
(empty, value)
ApproveStatus
(Idle, Ongoing, SuccessfullyFinished, Failed)
RechargeStatus
(Idle, Ongoing, SuccessfullyFinished, Failed)
RefundLastStatus
(Idle, Ongoing, SuccessfullyFinished, Failed)
InactiveOffline, OutOfOrder-----
DisabledAvailablefalse----
EnabledAvailabletrueempty---
Session IdleAvailabletruevalueNot OngoingNot OngoingNot Ongoing
VendAvailabletruevalueOngoingNot OngoingNot Ongoing
RevalueAvailabletruevalueNot OngoingOne of them in Ongoing, the other not Ongoing.
Negative VendNot addressed in this version of the specification

7.21.4 Approve Method

The Approve Method is charging money from an account associated to the current UserId. It may also check if it is allowed to sell the selection to the user (e.g., based on age restrictions).

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, it does not indicate, that the approve has been completed successful. Clients need to access the ApproveStatus Variable to get the information, if the approve successfully finished.

The signature of this Method is specified below. Table 69 and Table 70 specify the Arguments and AddressSpace representation, respectively.

Signature

	Approve (
	  [in]   PriceDataType            Value,
	  [in]   0:String                 UserId,
	  [in]   SelectionDataType        Selection,
	  [out]  0:Int32                    Status);
Table 69 - Approve Arguments
Argument Description
ValueThe value to be approved and charged from the account of the UserId.
UserIdThe UserId where the Value should be charged from the associated account.
SelectionSelection used to be bought. May be needed to check if selling the selection to the user is allowed (e.g., due to age restrictions).
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Invalid UserId - UserId unknown

-2 = Invalid UserId - Not the current UserId

-3 = Selection unknown

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 70 - Approve AddressSpace definition
Attribute Value
BrowseNameApprove
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.21.5 CancelApproval Method

The CancelApproval Method is cancelling the current approval triggered by calling the Approve Method.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

The Method shall return an Uncertain StatusCode and the Status -1 when the ApproveStatus is not in "Ongoing" while the Method gets executed.

If the Method returns successful, it does not indicate, that the cancelling has been completed successful. Clients need to access the ApproveStatus Variable to get the information, if the cancelling of the approval has successfully finished.

The signature of this Method is specified below. Table 71 and Table 72 specify the Arguments and AddressSpace representation, respectively.

Signature

	CancelApproval (
	  [out]  0:Int32                    Status);
Table 71 - CancelApproval Arguments
Argument Description
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Approval in a state that cannot be cancelled anymore

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 72 - CancelApproval AddressSpace definition
Attribute Value
BrowseNameCancelApproval
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.21.6 Recharge Method

The Recharge Method is recharging money to an account associated to the current UserId.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, it does not indicate, that the recharge has been completed successful. Clients need to access the RechargeStatus Variable to get the information, if the recharge successfully finished.

The signature of this Method is specified below. Table 73 and Table 74 specify the Arguments and AddressSpace representation, respectively.

Signature

	Recharge (
	  [in]   PriceDataType              Value,
	  [in]   0:String                   UserId,
	  [out]  0:Int32                    Status);
Table 73 - Recharge Arguments
Argument Description
ValueThe value to recharged to the account of the UserId.
UserIdThe UserId where the Value should be recharged to the associated account.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Invalid UserId - UserId unknown

-2 = Invalid UserId - Not the current UserId

-3 = SelectionId unknown

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 74 - Recharge AddressSpace definition
Attribute Value
BrowseNameApprove
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.21.7 RefundLast Method

The RefundLast Method refunding the last successful operation executed with Approve. This is needed, for example, when a delivery cannot be executed but was already charged.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, it does not indicate, that the approve has been completed successful. Clients need to access the RefundLastStatus Variable to get the information, if the approve successfully finished.

The signature of this Method is specified below. Table 75 and Table 76 specify the Arguments and AddressSpace representation, respectively.

Signature

	RefundLast (
	  [out]  0:Int32                    Status);
Table 75 - RefundLast Arguments
Argument Description
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = There was no previous successful approve execution

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 76 - RefundLast AddressSpace definition
Attribute Value
BrowseNameRefundLast
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.21.8 EnableOrDisable Method

The EnableOrDisable Method changing the state of the payment device either to be disabled or enabled.

If the execution of the Method cannot be done due to some application logic, the Method should return an Uncertain StatusCode and provide details of the failure in the Status output Argument. When the Method returns an Uncertain StatusCode, the Method is considered to be failed.

If the Method returns successful, it does not indicate, that the state change has been completed successful. Clients need to access the IsEnabled Variable to get the information, if the change successfully finished.

The signature of this Method is specified below. Table 77 and Table 78 specify the Arguments and AddressSpace representation, respectively.

Signature

	EnableOrDisable (
	  [in]   0:Boolean                  Enable,
	  [out]  0:Int32                    Status);
Table 77 - EnableOrDisable Arguments
Argument Description
EnableIndicates the new value to be set. False means to disable and true to enable the payment device.
Status

Status of the execution of the method. If issues occurred during execution.

0 = Execution was successful.

-1 = Already in requested state

-2 = Cannot disable, currently internal operation ongoing

Vendors may return a vendor specific status starting with number -16 or smaller.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Table 78 - EnableOrDisable AddressSpace definition
Attribute Value
BrowseNameApprove
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory
0:HasPropertyVariable0:OutputArguments0:Argument[] 0:PropertyType0:Mandatory

7.22 PaymentServiceStatusType definition

7.22.1 Overview

The PaymentServiceStatusType provides status information of the payment service and a mechanism to change the status from an OPC UA Client. It is formally defined in Table 79.

7.22.2 ObjectType definition

Table 79 - PaymentServiceStatusType definition
Attribute Value
BrowseNamePaymentServiceStatusType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentMethodRequestStatusChangeM
0:HasComponentVariableStatusPaymentServiceStatusEnum0:BaseDataVariableTypeM
Conformance Units
UnattendedRetail PaymentService

The Status Variable represents the current status of the payment service. Depending on the status, the payment service will not provide its functionality like requesting a delivery. The DataType is defined in 8.22.

7.22.3 RequestStatusChange Method

The RequestStatusChange Method requests a status change of the payment service. The signature of this Method is specified below. Table 80 and Table 81 specify the Arguments and AddressSpace representation, respectively.

Signature

	RequestStatusChange (
	  [in]  PaymentServiceStatusEnum    RequestedState);
Table 80 - RequestStatusChange Arguments
Argument Description
RequestedStateDefines the state to be switched to. The allowed states are: ExternallyStopped and Available.

Method Result Codes (defined in Call Service)

Result Code Description
Bad_UserAccessDeniedSee OPC 10000-4 for a general description.
Bad_InvalidStateSee OPC 10000-4 for a general description.
Table 81 - RequestStatusChange AddressSpace definition
Attribute Value
BrowseNameRequestStatusChange
References NodeClass BrowseName DataType TypeDefinition ModellingRule
0:HasPropertyVariable0:InputArguments0:Argument[] 0:PropertyType0:Mandatory

7.23 UIType definition

7.23.1 Overview

The UIType provides the interface to access the UI. It is used by other components like the audit collect. A more detailed overview is given in 6.2.4. It is formally defined in Table 82.

7.23.2 ObjectType definition

Table 82 - UIType definition
Attribute Value
BrowseNameUIType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentObject2:IdentificationIdentificationTypeM
0:HasComponentObjectConfigurationBaseConfigurationTypeM
0:HasComponentObjectComponentsBaseComponentsTypeO
0:GeneratesEventObjectTypeVendingBaseAuditEventType
0:GeneratesEventObjectTypeConfigurationChangedEventType
Conformance Units
UnattendedRetail UI

The 2:Identification Object provides Properties describing the identification of the UI (see 7.2 for details).

The Configuration Object provides the configuration information of the UI (see 7.3 for details).

The optional Components Object is the entry point to information about subcomponents of the UI (see 7.4 for details).

The GeneratesEvent Reference to the VendingBaseAuditEventType indicates that instances will generate Events of that EventType (see 7.26 for details).

The GeneratesEvent Reference to the ConfigurationChangedEventType indicates that an instance may generate Events of that EventType (see 7.29). Such an Event shall be generated when Objects gets added or removed from the Components Object, or when the values of Variables of the Configuration change. Multiple changes may be reported by a single Event.

7.24 PriceServiceType definition

7.24.1 Overview

The PriceServiceType provides the interface to access the price service. It is used by other components like the payment service. A more detailed overview is given in 6.2.5. It is formally defined in Table 83.

7.24.2 ObjectType definition

Table 83 - PriceServiceType definition
Attribute Value
BrowseNamePriceServiceType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentObject2:IdentificationIdentificationTypeM
0:HasComponentObjectConfigurationBaseConfigurationTypeM
0:HasComponentObjectPriceInformationPriceInformationTypeM
0:HasComponentObjectComponentsBaseComponentsTypeO
0:GeneratesEventObjectTypeConfigurationChangedEventType
Conformance Units
UnattendedRetail PriceService

The 2:Identification Object provides Properties describing the identification of the price service (see 7.2 for details).

The Configuration Object provides the configuration information of the price service (see 7.3 for details).

The PriceInformation Object provides the prices for the selections of the machine engines, managed by the payment service (see 7.11 for details).

The optional Components Object is the entry point to information about subcomponents of the machine engine (see 7.4 for details).

The GeneratesEvent Reference to the ConfigurationChangedEventType indicates that an instance may generate Events of that EventType (see 7.29). Such an Event shall be generated when Objects gets added or removed from the Components Object, or when the values of Variables of the Configuration change. Multiple changes may be reported by a single Event.

7.25 AuditCollectType definition

7.25.1 Overview

The AuditCollectType provides the interface to access the audit collect. It is not needed by other components of the Vending Machine but may be used by a configuration client (see 6.3.6). A more detailed overview is given in 6.2.6. It is formally defined in Table 84.

7.25.2 ObjectType definition

Table 84 - AuditCollectType definition
Attribute Value
BrowseNameAuditCollectType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseObjectType
0:HasComponentObject2:IdentificationIdentificationTypeM
0:HasComponentObjectConfigurationBaseConfigurationTypeM
0:HasComponentVariableIsCollectingAudit0:Boolean0:BaseDataVariableTypeM
0:HasComponentObjectComponentsBaseComponentsTypeO
0:GeneratesEventObjectTypeConfigurationChangedEventType
Conformance Units
UnattendedRetail AuditCollect

The 2:Identification Object provides Properties describing the identification of the audit collect (see 7.2 for details).

The Configuration Object provides the configuration information of the audit collect (see 7.3 for details).

The mandatory IsCollectingAudit Variable indicates if the audit collect is configured and running and connected to all relevant parts of the system to collect audit information. True indicates that all relevant audit information is collected, false indicated that not. The payment service may supervise this Variable and reject requests if audit is not running.

The optional Components Object is the entry point to information about subcomponents of the audit collect (see 7.4 for details).

The GeneratesEvent Reference to the ConfigurationChangedEventType indicates that an instance may generate Events of that EventType (see 7.29). Such an Event shall be generated when Objects gets added or removed from the Components Object, or when the values of Variables of the Configuration change. Multiple changes may be reported by a single Event.

7.26 VendingBaseAuditEventType definition

7.26.1 Overview

The VendingBaseAuditEventType provides base audit information to the audit collect. A more detailed overview is given in 6.3.4. It is formally defined in Table 86.

7.26.2 ObjectType definition

Table 85 - VendingBaseAuditEventType definition
Attribute Value
BrowseNameVendingBaseAuditEventType
IsAbstractTrue
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseEventType
0:HasPropertyVariableInMaintenanceMode0:Boolean0:PropertyTypeM
0:HasPropertyVariableCategory0:String0:PropertyTypeM
0:HasPropertyVariableEVADTSStatusCode0:String0:PropertyTypeO
0:HasPropertyVariableEVADTSStatusIsActive0:Boolean0:PropertyTypeO
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService
UnattendedRetail UI
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

The Properties defined in the BaseEventType shall be used in the following way:

EventId as defined in OPC 10000-5, uniquely identifying each Event.

EventType as defined in OPC 10000-5, identifying the type of Event.

SourceNode and SourceName as defined in OPC 10000-5, identifying the component of the Vending Machine generating the Event in the Server. This is helpful in environments where the OPC UA Server represents several components of a Vending Machine, e.g., payment service and machine engine. In addition, for Events specific to the payment device, the Object representing the payment device is used as SourceNode and SourceName in order to identify the payment device.

Time and ReceiveTime as defined in OPC 10000-5, indicating the time the Event occurred.

Message as defined in OPC 10000-5, containing a human-readable text of the Event.

Severity as defined in OPC 10000-5. For Events of VendingBaseAuditEventType the Severity shall be in the range of 201 to 400.

The optional Properties LocalTime, ConditionClassId, ConditionClassName, ConditionSubCassId and ConditionSubClassName should be omitted.

The mandatory InMaintenanceMode indicates whether the Event is generated while the component generating the Event is in maintenance mode. Set to true if in maintenance mode, false otherwise.

The mandatory Category defines the category of Event. Details of predefined categories are defined in 7.27.2, in Table 87.

The optional EVADTSStatusCode Variable contains a status code according to Annex C of EVA DTS. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional EVADTSStatusIsActive Variable shall only be provided in combination with EVADTSStatusCode and provides the information, if the status code has become active (True) or not (False).

7.27 VendingAuditEventType definition

7.27.1 Overview

The VendingAuditEventType provides audit information to the audit collect. A more detailed overview is given in 6.3.4. It is formally defined in Table 86.

7.27.2 ObjectType definition

Table 86 - VendingAuditEventType definition
Attribute Value
BrowseNameVendingAuditEventType
IsAbstractTrue
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the VendingBaseAuditEventType
0:HasPropertyVariableCounter0:UInt320:PropertyTypeO
0:HasPropertyVariableMonetaryValuePriceDataType0:PropertyTypeO
0:HasPropertyVariableSlotIndex0:Int320:PropertyTypeO
0:HasPropertyVariableNewSlotContent0:UInt320:PropertyTypeO
0:HasPropertyVariableSelectionSelectionDataType0:PropertyTypeO
0:HasPropertyVariableUserId0:String0:PropertyTypeO
0:HasPropertyVariablePaymentDetailsActualPaymentDataType[]0:PropertyTypeO
0:HasPropertyVariableMonetaryValueWithContextPriceAndContextDataType0:PropertyTypeO
0:HasPropertyVariablePaymentMode0:String0:PropertyTypeO
0:HasPropertyVariableFailStatusDeliveryAndPaymentStatusEnum0:PropertyTypeO
0:HasPropertyVariableNonRefundedValuePriceAndContextDataType0:PropertyTypeO
Conformance Units
UnattendedRetail PaymentService
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

The mandatory Category defines the category of Event. This specification defines a set of categories. Vendors may define additional categories according to their implementations. The categories are defined in Table 87. In addition to the category, it is defined what optional fields of the Event shall be provided.

Table 87 - Categories for Events of VendingAuditEventType
Category Mandatory Fields ObjectTypes of Objects generating the Event Description
CoinInCashbox

Counter

MonetaryValue

PaymentDeviceTypeGets generated when coins get inserted into cashbox. Fields contain information of new inserted coins. The counter is the number of coins, the MonetaryValue the value of one coin. This event only considers coins of the same value. If coins of different values get inserted, several events need to be generated.
CoinInTube

Counter

MonetaryValue

SlotIndex

NewSlotContent

PaymentDeviceType

Gets generated when coins get inserted into tube. Fields contain information of new inserted coins. The counter is the number of coins, the MonetaryValue the value of one coin.

The SlotIndex indicates in which SlotIndex the coins get stored. This event only considers coins of the same value and the same SlotIndex. If coins of different value and / or SlotIndex get inserted, several events need to be generated. The NewSlotContent is the number of coins in the SlotIndex after the coins have been added.

CoinManualFillTube

Counter

MonetaryValue

SlotIndex

NewSlotContent

PaymentDeviceType

Gets generated when coins get manually inserted into tube. Fields contain information of new inserted coins. The counter is the number of coins, the MonetaryValue the value of one coin.

The SlotIndex indicates in which SlotIndex the coins get stored. This event only considers coins of the same value and the same SlotIndex. If coins of different value and / or SlotIndex get inserted, several events need to be generated. The NewSlotContent is the number of coins in the SlotIndex after the coins have been added.

CoinOut

Counter

MonetaryValue

SlotIndex

NewSlotContent

PaymentDeviceType

Gets generated when coins get dispensed by technician manually. Fields contain information of coins dispensed.

The counter is the number of coins, the MonetaryValue the value of one coin.

The SlotIndex indicates from which SlotIndex the coins get dispensed. This event only considers coins of the same value and the same SlotIndex. If coins of different value and / or SlotIndex get dispensed, several events need to be generated. The NewSlotContent is the number of coins in the SlotIndex after the coins have been dispensed.

CoinPayout

Counter

MonetaryValue

SlotIndex

NewSlotContent

PaymentDeviceType

Gets generated when coins get dispensed as payout. Fields contain information of coins dispensed.

The counter is the number of coins, the MonetaryValue the value of one coin.

The SlotIndex indicates from which SlotIndex the coins get dispensed. This event only considers coins of the same value and the same SlotIndex. If coins of different value and / or SlotIndex get dispensed, several events need to be generated. The NewSlotContent is the number of coins in the SlotIndex after the coins have been dispensed.

CoinReject-PaymentDeviceTypeGets generated when coin was inserted into payment service and got rejected.
BillInStacker

Counter

MonetaryValue

PaymentDeviceTypeGets generated when bill was inserted into payment service and moved into stacker. The counter is the number of bills, the MonetaryValue the value of one bill.
BillInRecycle

Counter

MonetaryValue

SlotIndex

NewSlotContent

PaymentDeviceType

Gets generated when bill was inserted into payment service and moved into recycler. The counter is the number of bills, the MonetaryValue the value of one bill.

The SlotIndex indicates from which SlotIndex the bills get inserted. This event only considers bills of the same value and the same SlotIndex. If bills of different value and / or SlotIndex get inserted, several events need to be generated. The NewSlotContent is the number of bills in the SlotIndex after the bills have been inserted.

BillOut

Counter

MonetaryValue

SlotIndex

NewSlotContent

PaymentDeviceType

Gets generated when bills get manually removed from recycler. The counter is the number of bills, the MonetaryValue the value of one bill.

The SlotIndex indicates from which SlotIndex the bills get removed. This event only considers bills of the same value and the same SlotIndex. If bills of different value and / or SlotIndex get removed, several events need to be generated. The NewSlotContent is the number of bills in the SlotIndex after the bills have been removed.

BillPayout

Counter

MonetaryValue

SlotIndex

NewSlotContent

PaymentDeviceType

Gets generated when bills get dispensed as payout from recycler. The counter is the number of bills, the MonetaryValue the value of one bill.

The SlotIndex indicates from which SlotIndex the bills get dispensed. This event only considers bills of the same value and the same SlotIndex. If bills of different value and / or SlotIndex get dispensed, several events need to be generated. The NewSlotContent is the number of bills in the SlotIndex after the bills have been dispensed.

BillManualFillRecycle

Counter

MonetaryValue

SlotIndex

NewSlotContent

PaymentDeviceType

Gets generated when bills get manually inserted into recycler. Fields contain information about the manually inserted bills.

The counter is the number of bills, the MonetaryValue the value of one bill.

The SlotIndex indicates to which SlotIndex the bills get inserted. This event only considers bills of the same value and the same SlotIndex. If bills of different value and / or SlotIndex get inserted, several events need to be generated. The NewSlotContent is the number of bills in the SlotIndex after the bills have been inserted.

BillTransferRecycle

Counter

MonetaryValue

SlotIndex

NewSlotContent

PaymentDeviceType

Gets generated when bills get transferred from the recycler to the stacker. Fields contain information about the transferred bills.

The counter is the number of bills, the MonetaryValue the value of one bill.

The SlotIndex indicates from which SlotIndex the bills get transferred. This event only considers bills of the same value and the same SlotIndex. If bills of different value and / or SlotIndex get transferred, several events need to be generated. The NewSlotContent is the number of bills in the SlotIndex after the bills have been transferred.

BillReject-PaymentDeviceTypeGets generated when bill was inserted into payment service and got rejected.
CardIn

MonetaryValue

UserId

PaymentDeviceType

Gets generated when the cashless payment service is able to start the payment (e.g., when card gets inserted or card or app on a device is contactless read from payment device).

The MonetaryValue contains the monetary value, the Vending Machine may consume. Depending on the system, this may be handled differently, e.g., may be the amount on a pre-paid card or some general credit allowed for a credit card.

The UserId contains the identification of the user associated with the card.

CardRefund

MonetaryValue

UserId

PaymentDeviceType

Gets generated when a delivery gets cancelled and a monetary value gets refunded back to the card.

The MonetaryValue contains the monetary value refunded, the UserId contains the identification of the user associated with the card.

CardRevalue

MonetaryValue

UserId

PaymentDeviceTypeGets generated when a monetary value gets recharged to the card, for example from cash. The MonetaryValue contains the monetary value recharged to the card, the UserId contains the identification of the user associated with the card.
CardCharge

MonetaryValue

UserId

PaymentDeviceTypeGets generated when a monetary value gets charged from the card by requesting a delivery. The MonetaryValue contains the monetary value charged from the card, the UserId contains the identification of the user associated with the card.
CardOut

MonetaryValue

UserId

PaymentDeviceTypeGets generated when card was removed from payment service. The MonetaryValue is the MonetaryValue of CardIn minus and the amount of value taken from the card plus the value added to the card. The UserId contains the identification of the user associated with the card.
DeliverRequestDoneSelection, PaymentDetails, MonetaryValueWithContextPaymentServiceTypeGets generated when a deliver request was successfully executed. Fields contain information about the effective selection, the effective PaymentDetails (an array of a structure containing the effective PaymentMode, the effective payment device, the effective UserId and the price received in the combination) to support mixed payments, and the overall paid price in the MonetaryValueWithContext, contain additional information like tax.
DeliverRequestFailedSelection, PaymentMode, UserId, FailStatus, NonRefundedValuePaymentServiceTypeGenerated when a deliver request fails. The Fields contain information about the requested selection, the PaymentMode and UserId used in the DeliverRequest method, the reason for the failure, and the amount of money that could not be refunded to the customer.
DeliverBasketRequestDone

BasketContent, PaymentDetails,

MonetaryValuePerBasketContent

PaymentServiceTypeGenerated when a deliver request is successfully executed. The Fields contain information about the effective BasketContent, the effective PaymentDetails (an array of structures containing the effective PaymentMode, the effective payment device, the effective UserId, and the price received for each combination, to support mixed payments), and the paid price per basket content represented as a MonetaryValuePerBasketContent, which may include additional information such as tax.
DeliverBasketRequestFailed

BasketContent, PaymentMode, UserId, FailStatus,

NonRefundedValue

PaymentServiceTypeGenerated when a deliver request of a basket fails. The Fields contain information about the requested basket content, the PaymentMode and UserId used in the DeliverBasketRequest method, the reason for the failure, and the amount of money that could not be refunded to the customer.
DeliverBasketRequestPartiallyDone

BasketContent,

PaymentDetails,

MonetaryValuePerBasketContent, PartialSuccessful,

FailStatus,

NonRefundedValue

PaymentServiceTypeGenerated when a deliver request of a basket was partially done. The Fields contain information about the requested basket content, the effective PaymentDetails (an array of structures containing the effective PaymentMode, the effective payment device, the effective UserId, and the price received for each combination, to support mixed payments), and the paid price per basket content represented as a MonetaryValuePerBasketContent, which may include additional information such as tax. In addition, PartialSuccessful indicates what parts of the basket have been delivered, FailStatus the reason for the partial failure, and NonRefundedValue the amount of money that could not be refunded to the customer.
Restart-

PaymentDeviceType

PaymentServiceType

MachineEngineType

UIType

Gets generated when the device gets restarted. The event gets actually generated before the device gets restarted.
OverpayMonetaryValuePaymentServiceTypeGets generated when the payment service cannot payout all inserted monetary value. That may be because the payment service does not have the possibility to payout enough monetary value or the user has not interacted / left the vending machine.
EVADTSStatusCode

EVADTSStatusCode

EVADTSStatusIsActive

PaymentServiceType

PaymentDeviceType

MachineEngineType

Gets generated when a DTSStatus becomes active or inactive. The Fields indicate the status as well as it has become active or inactive.

Note: When customer cancels the coins, a Vending Machine may create a CoinOut or a CoinPayout Event.

Note: Card as in CardIn, CardCharge, CardOut, can reference to any cashless asset like a credit card, company card, payment apps, etc.

Note: Tokens are managed the same way as cash, but the Currency of the PriceDataType shall use 000 as NumericCode and 0 as Exponent.

The optional Counter indicates the number of assets of value (coins, bills, or tokens) that are affected by the Event. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional MonetaryValue indicates the monetary value of the asset of value (coins, bills, or tokens) affected by the Event. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional SlotIndex indicates the slot used for buffering assets of value (coins, bills, or tokens). For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional NewSlotContent indicates the number of assets of value (coins, bills, or tokens) in the SlotIndex after the operation triggering the Event has been done. This field shall only be provided, if the SlotIndex is also provided. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional Selection identifies the selection that has been delivered or should have been delivered. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional UserId identifies the user associated with any cashless asset inserted into a payment device, or the UserId of the deliver request. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional PaymentDetails contains details of the payment done for a specific delivery associated to the Event. It provides an array to be able to represent mixed payments. If no mixed payment is used, the array shall have one entry. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional MonetaryValueWithContext contains the absolute amount of monetary value paid for a specific delivery associated to the Event. It contains additional information like the tax rate used, the discount or surcharge and the used price list. The monetary value shall be the sum of the monetary value provided in the PaymentDetails, if provided. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional PaymentMode indicates the PaymentMode of the DeliverRequest method in case the deliver associated to the Event was not successful. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional FailStatus indicates the failure, when the deliver request associated with the Event was not successful. Only the following values of the DeliveryAndPaymentStatusEnum are allowed: PaymentFailed, PaymentCancelledByUser, PaymentFailedWrongPrice, DeliveryFailRefundSuccess, DeliveryAndRefundFailed, DeliveryMixResultRefundSuccess, DeliveryMixResultRefundFailed. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional NonRefundedValue indicates, how much money could not be refunded when a delivery (partially) fails and stays in the Vending Machine. It may provide additional information like tax if applicable. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

7.27.3 Examples of Events of VendingAuditEventType

In the following, Events of VendingAuditEventType are shown, that would occur on a Vending Machine, having as payment devices a coin device COIN1, a bill device BILL1 and a cashless device CARD1.

The user requests a delivery which costs 9 €, inserts a 1 € coin, a token worth 1 €, a 5 € bill, and then inserts a credit card to pay the remaining 2 €. Afterwards the delivery is executed.

Event for 1 € coin:

Event for 1 token:

Event for 5 € bill:

Event for presenting a credit card:

Event for successful delivery:

7.28 VendingBasketAuditEventType definition

7.28.1 Overview

The VendingBasketAuditEventType provides audit information to the audit collect when a basket is involved. A more detailed overview is given in 6.3.4. It is formally defined in Table 86.

7.28.2 ObjectType definition

Table 88 - VendingBasketAuditEventType definition
Attribute Value
BrowseNameVendingBasketAuditEventType
IsAbstractTrue
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the VendingAuditEventType
0:HasPropertyVariableBasketContentSelectionDataType[]0:PropertyTypeO
0:HasPropertyVariableMonetaryValuePerBasketContentPriceAndContextDataType[]0:PropertyTypeO
0:HasPropertyVariablePartialSuccessful0:Boolean[]0:PropertyTypeO
Conformance Units
UnattendedRetail PaymentService Basket

The optional BasketContent identifies the content of a basket that has been delivered or should have been delivered. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional MonetaryValuePerBasketContent contains the monetary amount paid for each basket entry of a specific basket delivery associated with the Event. It shall be provided only in combination with the BasketContent Field and shall have the same array length as BasketContent. Each entry may include additional information such as the applied tax rate, any discount or surcharge, and the price list used. If PaymentDetails is provided, the sum of all monetary values in MonetaryValuePerBasketContent shall equal the sum of the monetary values specified in PaymentDetails. In the case of a partial basket delivery, the value corresponding to each undelivered entry in BasketContent shall be 0. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

The optional PartialSuccessful Field is used in the case of a partial basket delivery to indicate which parts of the BasketContent were actually delivered. It shall be provided only in combination with the BasketContent field and shall have the same array length as BasketContent. A value of "True" indicates that the corresponding part of the basket was successfully delivered. For the standardized Categories (see Table 87) it is defined whether this optional Property shall be provided.

7.29 ConfigurationChangedEventType definition

7.29.1 Overview

The ConfigurationChangedEventType provides the information that the configuration of a component of a Vending Machine has changed. Such an Event gets generated when the configuration of a component has changed and indicates to Clients, that they may need to reread the current configuration of the component. It is formally defined in Table 89.

7.29.2 ObjectType definition

Table 89 - ConfigurationChangedEventType definition
Attribute Value
BrowseNameConfigurationChangedEventType
IsAbstractTrue
References Node Class BrowseName DataType TypeDefinition Other
Subtype of the 0:BaseEventType
Conformance Units
UnattendedRetail ConfigurationChangedEvents

The Properties defined in the BaseEventType shall be used in the following way:

EventId as defined in OPC 10000-5, uniquely identifying each Event

EventType as defined in OPC 10000-5, identifying the type of Event

SourceNode and SourceName as defined in OPC 10000-5, identifying the component of the Vending Machine generating the Event in the Server. This is helpful in environments where the OPC UA Server represents several components of a Vending Machine, e.g., payment service and machine engine.

Time and ReceiveTime as defined in OPC 10000-5, indicating the time the Event occurred

Message as defined in OPC 10000-5, containing a human-readable text of the Event

Severity as defined in OPC 10000-5. For Events of ConfigurationChangedEventType the Severity shall be in the range of 401 to 600.

The optional Properties LocalTime, ConditionClassId, ConditionClassName, ConditionSubCassId and ConditionSubClassName should be omitted.

8 OPC UA DataTypes

8.1 OptionDescriptionDataType

This structure describes an option that can be used in a selection to order a delivery. The structure is defined in Table 90.

Table 90 - OptionDescriptionDataType Structure
NameTypeDescription
OptionDescriptionDataTypestructure

OptionId

0:StringShort string identifying the option.

Range

0:RangeThe minimum and maximum allowed value for the amount of the option.

Step

0:DoubleThe step size from the minimum that should be used to define the amount of the option.

Default

0:DoubleThe default value of the option.

EngineeringUnit

0:EUInformationThe unit of the option.

Its representation in the AddressSpace is defined in Table 91.

Table 91 - OptionDescriptionDataType definition
Attribute Value
BrowseNameOptionDescriptionDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine

8.2 SelectionDescriptionDataType

This structure describes a selection that can be used to order a delivery. The structure is defined in Table 92.

Table 92 - SelectionDescriptionDataType Structure
NameTypeDescription
SelectionDescriptionDataTypestructure

SelectionId

0:StringShort string identifying the selection.

AvailableOptionIds

0:String[]OptionIds that may be used when ordering the selection.

IsStoppable

0:BooleanTrue if the section can be stopped during its delivery, false otherwise.

Its representation in the AddressSpace is defined in Table 93.

Table 93 - SelectionDescriptionDataType definition
Attribute Value
BrowseNameSelectionDescriptionDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine

8.3 DeliveryRequestDataType

This structure describes a delivery request. The structure is defined in Table 94.

Table 94 - DeliveryRequestDataType Structure
NameTypeDescription
DeliveryRequestDataTypestructure

TransactionId

0:UInt64Unique identification of the delivery request.

SelectionId

0:StringUnique identification of the selection of the delivery request.

Options

OptionSelectionDataType[]Selected options, including the amount per option. May be an empty array if no option is selected.

Its representation in the AddressSpace is defined in Table 95.

Table 95 - DeliveryRequestDataType definition
Attribute Value
BrowseNameDeliveryRequestDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine

8.4 OptionSelectionDataType

This structure describes the selection of an Option, including the amount. The structure is defined in Table 96.

Table 96 - OptionSelectionDataType Structure
NameTypeDescription
OptionSelectionDataTypestructure

OptionId

0:StringUnique identification of the selected option.

Value

0:DoubleThe selected amount of the selected option.

Its representation in the AddressSpace is defined in Table 97.

Table 97 - OptionSelectionDataType definition
Attribute Value
BrowseNameOptionSelectionDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService

8.5 DeliveryProgressDataType

This structure describes the process of a delivery request. The structure is defined in Table 98.

Table 98 - DeliveryProgressDataType Structure
NameTypeDescription
DeliveryProgressDataTypestructure

ProgressInPercent

0:ByteProgress of the delivery request in percent. Shall be 0 if delivery request has not been started to be executed.

Status

OutputDeliveryStatusDataType[]The status of the delivery per output. Shall have at least one entry. If the delivery request requires to deliver several products that need to be received from different outputs or id delivers several products in one output that needs to be taken before the delivery continues, it shall have one entry for each of those.

TransactionId

0:UInt64Unique identification of the delivery request.

Its representation in the AddressSpace is defined in Table 99.

Table 99 - DeliveryProgressDataType definition
Attribute Value
BrowseNameDeliveryProgressDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine

8.6 OutputDeliveryStatusDataType

This structure describes the status of a delivery of an individual output of the machine engine. The structure is defined in Table 100.

Table 100 - OutputDeliveryStatusDataType Structure
NameTypeDescription
OutputDeliveryStatusDataTypestructure

Status

DeliveryStatusEnumThe status of the delivery progress.

OutputId

0:UInt16Unique identification of the output.

Its representation in the AddressSpace is defined in Table 101.

Table 101 - OutputDeliveryStatusDataType definition
Attribute Value
BrowseNameOutputDeliveryStatusDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine

8.7 OutputStatusDataType

This structure describes the general status of an individual output of the machine engine. The structure is defined in Table 102.

Table 102 - OutputStatusDataType Structure
NameTypeDescription
OutputStatusDataTypestructure

OutputId

0:UInt16Unique identification of the output.

Status

OutputStatusEnumStatus of the output

VendorStatus

0:Int32Vendor-specific status-

Its representation in the AddressSpace is defined in Table 103.

Table 103 - OutputStatusDataType definition
Attribute Value
BrowseNameOutputStatusDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine

8.8 OutputStatusEnum

This enumeration represents the status of an output of a Vending Machine. The enumeration is defined in Table 104.

Table 104 - OutputStatusEnum Items
NameValueDescription
Free0The output is empty and ready to be used.
ProductNotTaken1A product was delivered to the output and not taken.
OutOfOrder2The output is out of order.
Locked3The output is currently locked.
CleaningRequired4The output requires cleaning.
VendorSpecific5A vendor-specific status is provided.

Its representation in the AddressSpace is defined in Table 105.

Table 105 - OutputStatusEnum definition
Attribute Value
BrowseNameOutputStatusEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail MachineEngine

8.9 DeliveryStatusEnum

This enumeration represents the status of a delivery request. The enumeration is defined in Table 106.

Table 106 - DeliveryStatusEnum Items
NameValueDescription
ReadyToDeliver0The delivery request has not been started to be executed.
DeliveryStarted1Execution of the delivery request is ongoing.
DeliveryFinished2Delivery of the delivery request has successfully ended.
DeliveryFailed3Execution of the delivery request has failed.
DeliveryCannotStart4The delivery cannot start because of a machine engine condition, e.g., the output is not empty

Its representation in the AddressSpace is defined in Table 107.

Table 107 - DeliveryStatusEnum definition
Attribute Value
BrowseNameDeliveryStatusEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail MachineEngine

8.10 MachineEngineWorkingStatusEnum

This enumeration represents the status of the machine engine. The enumeration is defined in Table 108.

Table 108 - MachineEngineWorkingStatusEnum Items
NameValueDescription
Initializing0
WaitingForTemperature1
Ready2Ready to take requests
Cleaning3
Dispensing4Currently dispensing something
Busy5
OutOfOrder6
EnergySavingMode7

Its representation in the AddressSpace is defined in Table 109.

Table 109 - MachineEngineWorkingStatusEnum definition
Attribute Value
BrowseNameMachineEngineWorkingStatusEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail MachineEngine

8.11 AvailabilityStatusDataType

This structure describes the availability status of a selection or Option by Id. The structure is defined in Table 110.

Table 110 - AvailabilityStatusDataType Structure
NameTypeDescription
AvailabilityStatusDataTypestructure

Id

0:StringUnique identification of a selection or option offered by the machine engine.

Status

AvailabilityEnumCurrent status of the selection in the machine engine.

EstimatedRemainingStock

0:UInt32

Indicates the remaining stock of a selection or option. Shall only be interpreted, if the Status is "Available".

The number is only an estimate. If not known, 0 shall be used. For a selection, a positive number indicates, how often the selection is currently available. For an option, a positive number indicates, the amount the option is currently available. The number gets multiplied by step (defined for the option) to get the concrete estimated amount in the engineering unit defined for the option.

Its representation in the AddressSpace is defined in Table 111.

Table 111 - AvailabilityStatusDataType definition
Attribute Value
BrowseNameAvailabilityStatusDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine

8.12 AvailabilityEnum

This enumeration represents the availability of a selection or Option offered by a machine engine. The enumeration is defined in Table 112.

Table 112 - AvailabilityEnum Items
NameValueDescription
Available0The selection or option is currently available.
OutOfOrder1The selection or option cannot be provided due to some errors that may take a while to get fixed.
TemporaryNotAvailable2The selection or option is shortly not available, e.g., because some water needs to be heated first.
Empty3Material for the selection or option is currently not available in the machine engine and it needs to be refilled.

Its representation in the AddressSpace is defined in Table 113.

Table 113 - AvailabilityEnum definition
Attribute Value
BrowseNameAvailabilityEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail MachineEngine

8.13 PriceDataType

This structure describes a price including the currency. The structure is defined in Table 114.

Table 114 - PriceDataType Structure
NameTypeDescription
PriceDataTypestructure

Amount

0:UInt32The amount of the price. If the Currency is provided with an exponent, the amount is expressed in the minor currency unit, like cent for USD (US Dollar).

Currency

0:CurrencyUnitTypeThe currency of the price. Based in ISO 4217. Shall be NULL, if the default currency (defined in the BaseConfigurationType) is used and the currency of Amount is the default currency.

Its representation in the AddressSpace is defined in Table 115.

Table 115 - PriceDataType definition
Attribute Value
BrowseNamePriceDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService
UnattendedRetail PriceService
UnattendedRetail UI
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

8.14 PriceAndContextDataType

This structure describes a price including the currency and in addition the PriceListId, Tax and DiscountSurcharge to provide additional context. It is a subtype of the PriceDataType. The structure is defined in Table 116.

Table 116 - PriceAndContextDataType Structure
NameTypeDescription
PriceAndContextDataTypestructure

PriceListId

0:StringIdentifies a price list containing the prices for the individual selections of a Vending Machine. May be null or an empty string if the price service does not identify or exposes its price list.

Tax

0:DoubleThe tax to be paid from the Amount in percentage. Any negative value indicates that the tax is unknown. All applications doing calculations with the Tax field shall check for negative values before doing calculations.

DiscountSurcharge

0:Int32Informative value of the discount or surcharge received. The Amount is the price where the DiscountSurcharge is already considered. The currency of the DiscountSurcharge is defined in the Currency field. A negative value indicates a surcharge, a positive value a discount. By adding this value to the Amount, you get the assumed default price.

Its representation in the AddressSpace is defined in Table 117.

Table 117 - PriceAndContextDataType definition
Attribute Value
BrowseNamePriceAndContextDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of PriceDataType
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService
UnattendedRetail PriceService
UnattendedRetail UI
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

8.15 TransactionProgressDataType

This structure describes the progress of a TransactionId. The structure is defined in Table 118.

Table 118 - TransactionProgressDataType Structure
NameTypeDescription
TransactionProgressDataTypestructure

TransactionId

0:UInt64Unique identification of the delivery request.

Status

DeliveryAndPaymentStatusEnumThe status of the payment of the delivery request.

TransactionFinished

0:BooleanShall be true, if the TransactionId is finished and the Status is not changing anymore.

PaymentMode

0:String

Initially indicates the PaymentMode the transaction is created with. This may contain a "NoCheck" or null or empty string. If the actual used PaymentMode is changing, it provides the actual used PaymentMode.

If the transaction is executed in the context of a basket, the PaymentMode may be null or an empty string, since the information is provided in the BasketProgress.

UserId

0:String

Initially indicates the UserId the transaction is created with. If the actual used UserId is changing, it provides the actual used UserId.

If the transaction is executed in the context of a basket, the UserId may be null or an empty string, since the information is provided in the BasketProgress.

UsedPrice

PriceAndContextDataType

When the transaction was successfully executed, it provides the actually used price for the transaction. Otherwise, it shall be null.

If the transaction is executed in the context of a basket, the UsedPrice may be null, even if the transaction was successfully executed, since the overall price is provided in the BasketProgress.

Its representation in the AddressSpace is defined in Table 119.

Table 119 - TransactionProgressDataType definition
Attribute Value
BrowseNameTransactionProgressDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail PaymentService

8.16 DeliveryAndPaymentStatusEnum

This enumeration represents the status of the payment and delivery of a delivery request. The enumeration is defined in Table 120.

Table 120 - DeliveryAndPaymentStatusEnum Items
NameValueDescription
DeliveryRequestReceived0The delivery request has been received and the payment can start.
PaymentInExecution1Execution of the payment is ongoing.
PaymentFinished2Payment of the delivery request has successfully ended.
PaymentFailed3Execution of the payment has failed. No delivery will be triggered. This is an end state of a delivery and afterwards the state is not changing anymore.
PaymentCancelledByUser4The payment has been cancelled by the user, for example by calling the CancelDeliverRequest() method.
PaymentFailedWrongPrice5The price used for requesting the delivery is different from the price that effectively has to be used (e.g., because payment mode or user id have changed). Therefore, execution of the payment does not take place and no delivery will be triggered. This is an end state of a delivery and afterwards the state is not changing anymore.
DeliveryInExecution6The payment has successfully ended and the delivery has started.
DeliveryAndPaymentSuccess7Payment and delivery request have been successful. This is an end state of a delivery and afterwards the state is not changing anymore.
DeliveryFailRefundInExecution8Delivery has failed and refund has started.
DeliveryFailRefundSuccess9Delivery has failed and refund has successfully ended. This is an end state of a delivery and afterwards the state is not changing anymore.
DeliveryAndRefundFailed10Delivery has failed and the refund has failed, as well. This is an end state of a delivery and afterwards the state is not changing anymore.
DeliveryMixResultRefundInExecution11Shall only be applied to basket delivery. Parts of the basket have been delivered and parts have failed, refund has started.
DeliveryMixResultRefundSuccess12Shall only be applied to basket delivery. Parts of the basket have been delivered and parts have failed, refund has successfully ended. This is an end state of a delivery and afterwards the state is not changing anymore.
DeliveryMixResultRefundFailed13Shall only be applied to basket delivery. Parts of the basket have been delivered and parts have failed, refund has failed. This is an end state of a delivery and afterwards the state is not changing anymore.
CancelledByUserRefundInExcecution14The deliver request has been cancelled by the user and the refund operation is in execution. If a basket is cancelled after delivery has started, use the DeliveryMixResultRefundInExecution state.
CancelledByUserRefundSuccess15The deliver request has been cancelled by the user and the refund operation has successfully ended. This is an end state of a delivery and afterwards the state is not changing anymore.
CancelledByUserRefundFailed16The deliver request has been cancelled by the user and the refund has failed. This is an end state of a delivery and afterwards the state is not changing anymore.

Its representation in the AddressSpace is defined in Table 121.

Table 121 - DeliveryAndPaymentStatusEnum definition
Attribute Value
BrowseNameDeliveryAndPaymentStatusEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService
UnattendedRetail UI
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

8.17 BasketProgressDataType

This structure describes the progress of the payment and delivery of a basket delivery request. The structure is defined in Table 122.

Table 122 - BasketProgressDataType Structure
NameTypeDescription
BasketProgressDataTypestructure

BasketId

0:UInt64Unique identification of the basket delivery request.

TransactionIds

0:UInt64[]Array of all TransactionIds assigned to the basket.

Status

DeliveryAndPaymentStatusEnumThe overall status of the payment of the basket delivery request, taking all transactions into account.

BasketFinished

0:BooleanShall be true, if the BasketId is finished and the Status is not changing anymore.

PaymentMode

0:StringInitially indicates the PaymentMode the basket is created with. This may contain a "NoCheck" or null or empty string. If the actual used PaymentMode is changing, it provides the actual used PaymentMode.

UserId

0:StringInitially indicates the UserId the basket is created with. If the actual used UserId is changing, it provides the actual used UserId.

UsedPrice

PriceAndContextDataTypeWhen the basket was successfully executed, or partially executed, it provides the effectively used price for the basket. Otherwise, it shall be null.

Its representation in the AddressSpace is defined in Table 123.

Table 123 - BasketProgressDataType definition
Attribute Value
BrowseNameBasketProgressDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail PaymentService BasketDelivery

8.18 SelectionPriceDataType

This structure describes the price of a selection. The structure is defined in Table 124.

Table 124 - SelectionPriceDataType Structure
NameTypeDescription
SelectionPriceDataTypestructure

SelectionId

0:StringShort string identifying the selection.

Price

PriceAndContextDataTypeThe price of the selection if no option is selected effecting the price.

OptionsThatMayAffectThePrice

0:String[]

OptionIds of the selection that may affect the price. Shall only contain OptionIds available in the selection.

If an option is available in the selection, but not in the OptionsThatMayAffectThePrice, the option is free of additional charge. Clients may use this information to avoid calling GetPriceForOneSelection again when an option has changed, that is not affecting the price.

Its representation in the AddressSpace is defined in Table 125.

Table 125 - SelectionPriceDataType definition
Attribute Value
BrowseNameSelectionPriceDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail PaymentService
UnattendedRetail PriceService

8.19 SelectionDataType

This structure describes one selection of a Vending Machine. The structure is defined in Table 126.

Table 126 - SelectionDataType Structure
NameTypeDescription
SelectionDataTypestructure

MachineEngineProductInstanceUri

0:UriStringThe unique identification of the machine engine as defined in the ProductInstanceUri of the Identification Object of the MachineEngineType.

SelectionListVersion

0:SemanticVersionStringProvides the version of the Selections as defined in the Capabilities. Used as context to interpret the SelectionId and Options correctly.

SelectionId

0:StringSelectionId identifying the selection. Method execution shall fail, if SelectionId not in the SelectionList of the Capabilities Object of the MachineEngineProductInstanceUri.

Options

OptionSelectionDataType[]List of selected options for the SelectionId. May be an empty array, if no option is selected. The option shall be allowed for the SelectionId as defined in the SelectionList of the Capabilities Object of the MachineEngineProductInstanceUri.

Its representation in the AddressSpace is defined in Table 127.

Table 127 - SelectionDataType definition
Attribute Value
BrowseNameSelectionDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService
UnattendedRetail PriceService
UnattendedRetail UI
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

8.20 SlotConfigurationDataType

This structure describes one configuration of a payment device. The structure is defined in Table 128.

Table 128 - SlotConfigurationDataType Structure
NameTypeDescription
SlotConfigurationDataTypestructure

SlotIndex

0:Int32Indication of the slot buffering cash or token. -1 indicates that no slot is used.

SupportedAssetListIndex

0:UInt32Index into the SupportedAssetList identifying what coin, bill or token should go into the slot identified by SlotIndex.

Its representation in the AddressSpace is defined in Table 129.

Table 129 - SlotConfigurationDataType definition
Attribute Value
BrowseNameSlotConfigurationDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail PaymentService
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill

8.21 PaymentModeOrDeviceStatusEnum

This enumeration represents the status of a payment mode or device of a Vending Machine. The enumeration is defined in Table 130.

Table 130 - PaymentModeOrDeviceStatusEnum Items
NameValueDescription
Available0The payment mode or device is ready to be used.
Offline1No connection can be established to the payment mode or device.
OutOfOrder2The payment mode or device is out of order.

Its representation in the AddressSpace is defined in Table 131.

Table 131 - PaymentModeOrDeviceStatusEnum definition
Attribute Value
BrowseNamePaymentModeOrDeviceStatusEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail PaymentService
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

8.22 PaymentServiceStatusEnum

This enumeration represents the status of a payment service, and thereby the overall status of a Vending Machine. The enumeration is defined in Table 132.

Table 132 - PaymentServiceStatusEnum Items
NameValueDescription
Available0The payment service is ready to be used.
Offline1No connection can be established to needed components like the price service or machine engines.
OutOfOrder2The payment service is out of order.
ExternallyStopped3The payment service was stopped by calling the RequestStatusChange method.

Its representation in the AddressSpace is defined in Table 133.

Table 133 - PaymentServiceStatusEnum definition
Attribute Value
BrowseNamePaymentServiceStatusEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail PaymentService

8.23 ActualPaymentDataType

This structure describes part of a payment actually done. The structure is defined in Table 134.

Table 134 - ActualPaymentDataType Structure
NameTypeDescription
ActualPaymentDataTypestructure

PaymentMode

0:StringContains the PaymentModeId of the payment mode used for the payment.

PaymentDevice

0:StringThe ProductInstanceUri of the PaymentDevice receiving the MonetaryValue. May be an empty string or null if the PaymentDevice is of no relevance, for example for cash payment.

UserId

0:StringIdentifies the user associated with any cashless asset inserted into a payment device. May be null or empty string if no specific UserId is used.

MonetaryValue

PriceDataTypeThe money collected by the PaymentMode / PaymentDevice with the given UserId.

Its representation in the AddressSpace is defined in Table 135.

Table 135 - ActualPaymentDataType definition
Attribute Value
BrowseNameActualPaymentDataType
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Structure
Conformance Units
UnattendedRetail MachineEngine
UnattendedRetail PaymentService
UnattendedRetail UI
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill
UnattendedRetail PaymentDevice Cashless

8.24 AssetConfigurationEnum

This enumeration represents the configuration of an asset. The enumeration is defined in Table 136.

Table 136 - AssetConfigurationEnum Items
NameValueDescription
AcceptToCashboxOrStacker0Asset shall be accepted and moved into cashbox (coins or token) or stacker (bills or token). If the system does not have a cashbox or stacker, the setting shall change to AcceptToRecyclerOrTube.
AcceptToRecyclerOrTube1Asset shall be accepted and moved into recycler (bills and token) or tube (coins or token). If the system does not have a recycler or tube, the setting shall change to AcceptToCashboxOrStacker.
AcceptToEscrowAndStacker2

Asset shall be accepted and kept in the escrow. Can only be applied to bills and tokens. If escrow gets accepted, bill gets moved into stacker.

If the system does not have an escrow, the setting shall change to AcceptToCashboxOrStacker.

If the system does not have a stacker, the setting shall change to AcceptToEscrowAndRecycler.

AcceptToEscrowAndRecycler3

Asset shall be accepted and kept in the escrow. Can only be applied to bills and tokens. If escrow gets accepted, bill gets moved into recycler.

If the system does not have an escrow, the setting shall change to AcceptToRecyclerOrTube.

If the system does not have a recycler, the setting shall change to AcceptToEscrowAndStacker.

Reject4Asset shall be rejected, when inserted.

Its representation in the AddressSpace is defined in Table 137.

Table 137 - AssetConfigurationEnum definition
Attribute Value
BrowseNameAssetConfigurationEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill

8.25 PayoutStatusEnum

This enumeration represents the status of a payout. The enumeration is defined in Table 138.

Table 138 - PayoutStatusEnum Items
NameValueDescription
Idle0No payout is currently ongoing.
Ongoing1The payout is currently ongoing.
SuccessfullyFinished2The payout was successfully finished.
Failed3The payout failed.

Its representation in the AddressSpace is defined in Table 139.

Table 139 - PayoutStatusEnum definition
Attribute Value
BrowseNamePayoutStatusEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail PaymentDevice Coin
UnattendedRetail PaymentDevice Bill

8.26 OperationStatusEnum

This enumeration represents the status of an operation. The enumeration is defined in Table 140.

Table 140 - OperationStatusEnum Items
NameValueDescription
Idle0Currently no operation is ongoing.
Ongoing1The operation is currently ongoing.
SuccessfullyFinished2The operation was successfully finished.
Failed3The operation failed.
Failed_NoCommunication4The operation failed because there was no communication with the backend.
Failed_NotEnoughCredit5The operation failed because the card does not provide enough credit.

Its representation in the AddressSpace is defined in Table 141.

Table 141 - OperationStatusEnum definition
Attribute Value
BrowseNameOperationStatusEnum
IsAbstractFalse
References NodeClass BrowseName DataType TypeDefinition Other
Subtype of the 0:Enumeration type defined in OPC 10000-5
0:HasPropertyVariable0:EnumStrings0:LocalizedText []0:PropertyType
Conformance Units
UnattendedRetail PaymentDevice Cashless

9 Profiles and Conformance Units

Meaning and significance of Profiles and ConformanceUnits are described in OPC 10000-7.

The Profiles and ConformanceUnits for this specification are maintained in an online database and accessible via https://profiles.opcfoundation.org/?pg=EVA%201.0.

10 Namespaces

10.1 Namespace Metadata

Table 142 defines the namespace metadata for this document. The Object is used to provide version information for the namespace and an indication about static Nodes. Static Nodes are identical for all Attributes in all Servers, including the Value Attribute. See OPC 10000-5 for more details.

The information is provided as Object of type NamespaceMetadataType. This Object is a component of the Namespaces Object that is part of the Server Object. The NamespaceMetadataType ObjectType and its Properties are defined in OPC 10000-5.

The version information is also provided as part of the ModelTableEntry in the UANodeSet XML file. The UANodeSet XML schema is defined in OPC 10000-6.

Table 142 - NamespaceMetadata Object for this document
Attribute Value
BrowseName http://opcfoundation.org/UA/UnattendedRetail/
Property DataType Value
NamespaceUriString http://opcfoundation.org/UA/UnattendedRetail/
NamespaceVersionString1.0.0
NamespacePublicationDateDateTime2026-07-15
IsNamespaceSubsetBooleanFalse
StaticNodeIdTypesIdType[]0
StaticNumericNodeIdRangeNumericRange []
StaticStringNodeIdPatternString

Note: The IsNamespaceSubset Property is set to False as the UANodeSet XML file contains the complete Namespace. Servers only exposing a subset of the Namespace need to change the value to True.

10.2 Handling of OPC UA Namespaces

Namespaces are used by OPC UA to create unique identifiers across different naming authorities. The Attributes NodeId and BrowseName are identifiers. A Node in the UA AddressSpace is unambiguously identified using a NodeId. Unlike NodeIds, the BrowseName cannot be used to unambiguously identify a Node. Different Nodes may have the same BrowseName. They are used to build a browse path between two Nodes or to define a standard Property.

Servers may often choose to use the same namespace for the NodeId and the BrowseName. However, if they want to provide a standard Property, its BrowseName shall have the namespace of the standards body although the namespace of the NodeId reflects something else, for example the EngineeringUnits Property. All NodeIds of Nodes not defined in this document shall not use the standard namespaces.

Table 143 provides a list of namespaces typically used in an Unattended Retail & Coffee Solutions OPC UA Server.

Table 143 - Namespaces used in an Unattended Retail & Coffee Solutions Server
NamespaceURI Description
http://opcfoundation.org/UA/ Namespace for NodeIds and BrowseNames defined in the OPC UA specification. This namespace shall have namespace index 0.
Local Server URINamespace for nodes defined in the local server. This namespace shall have namespace index 1.
http://opcfoundation.org/UA/DI/ Namespace for NodeIds and BrowseNames defined in OPC 10000-100. The namespace index is Server specific.
http://opcfoundation.org/UA/UnattendedRetail/ Namespace for NodeIds and BrowseNames defined in this document. The namespace index is Server specific.
Vendor specific typesA Server may provide vendor-specific types like types derived from ObjectTypes defined in this document in a vendor-specific namespace.
Vendor specific instances

A Server provides vendor-specific instances of the standard types or vendor-specific instances of vendor-specific types in a vendor-specific namespace.

It is recommended to separate vendor specific types and vendor specific instances into two or more namespaces.

Table 144 provides a list of namespaces and their indices used for BrowseNames in this document. The default namespace of this document is not listed since all BrowseNames without prefix use this default namespace.

Table 144 - Namespaces used in this document
NamespaceURI Namespace Index Example
http://opcfoundation.org/UA/ 00:EngineeringUnits
http://opcfoundation.org/UA/DI/ 22:DeviceRevision

Annex A Unattended Retail & Coffee Solutions Namespace and mappings (Normative)

A.1 NodeSet and supplementary files for Unattended Retail & Coffee Solutions Information Model

The Unattended Retail & Coffee Solutions Information Model is identified by the following URI:

http://opcfoundation.org/UA/UnattendedRetail/

Documentation for the NamespaceUri can be found here.

The NodeSet associated with this version of specification can be found here:

https://reference.opcfoundation.org/nodesets/?u=http://opcfoundation.org/UA/UnattendedRetail/&v=1.0.0&i=1

The NodeSet associated with the latest version of the specification can be found here:

https://reference.opcfoundation.org/nodesets/?u=http://opcfoundation.org/UA/UnattendedRetail/&i=1

Supplementary files for the Unattended Retail & Coffee Solutions Information Model can be found here:

https://reference.opcfoundation.org/nodesets/?u=http://opcfoundation.org/UA/UnattendedRetail/&v=1.0.0&i=2

The files associated with the latest version of the specification can be found here:

https://reference.opcfoundation.org/nodesets/?u=http://opcfoundation.org/UA/UnattendedRetail/&i=2

_____________

Annex B Chaining price services (Informative)

B.1 Overview

According to this specification a Vending Machine accesses one price service. This price service may, internally and transparent to the Vending Machine, access additional price services in order to access different resources for discounts and other price relevant information. In order to communicate in a standardized way between those different price services inside the main price service, the interface for price services defined in this specification may be used. That is, the main price service can implement OPC UA Client functionality to access potentially several price services being an OPC UA Server and providing the PriceServiceType. The logic, in which order those price services have to be accessed and what price to use in the end and provide to the Vending Machine, is an implementation detail of the price service.

B.2 Example

In Figure 20, an example is given. The MainPriceService is the price service accessed by the Vending Machine (not shown in figure). It is accessing PriceServiceDiscountA and PriceServiceDiscountB. As each price service can access additional price services, PriceServiceDiscountB is accessing PriceServiceDiscountC and PriceServiceDiscountD.

Figure 20 - Chaining price services

Note that each communication between the price services is potentially a remote operation and may take some time. Therefore, caching information from different price services may be required in order to have a reasonable response time for the main price service. Cashing strategies are vendor-specific.

Annex C Requirements on Power Supply of Components of a Vending Machine (Normative)

Power supply requirement can change by order of magnitude on different machine configurations.

The common configuration for Vending Machines, all components are located inside a single housing, which is built around the Machine Engine; on small Vending Machines the most power is needed by the actuators on the Machine Engine.

On the existing MDB / ICP protocol (but also on previous Vending related protocols), the power supply for the payment devices is provided by the Machine Engine.

The power distribution inside the machine shall follow the specification from chapter 4.1 and 4.3 of MDB / ICP specification version 4.3; the only change shall be a two-pin connector instead of a 6-pin connector.

On the specification there is no minimum requirement for the needed power the Machine Engine has to provide, the Machine Engine manufacture has to provide its own power rating.

If any additional device requires more than the provided power rating, as stated in MDB Chapter 4.1, the device manufacturer shall provide its own power supply solution.

Annex D Requirements on Network Infrastructure of Components of a Vending Machine (Normative)

The communication infrastructure between the different OPC UA components is IP based, which enable all components to be installed as software components on a single hardware able to run the client/server applications using the localhost interface.

The addition of a component which is also a hardware part, require to add ethernet connections between the parts.

The hardware interface used by the Vending Machine components shall be 802.3 (either 10 or 100 (803.3u) or 1000BaseT (802.3ab)), using the standard RJ45 interface connector and the cables specified by IEEE 802.3.

Physically connecting more than two devices requires the addition of a hub or switch device; powered from the main power source inside the machine (see Annex C); to enable easy integration, the space for the Hub must be provided inside the Vending Machine enclosure.

A preferred solution will be each device has a couple of Ethernet ports with switch capabilities between the two ports; in this way adding a cable is the only needed addition to add any number of devices.

Device manufactures which can make their devices as combination of different components can use any way to connect their components, but finally has to provide an Ethernet interface towards with OPC UA protocol to connect to the outside word.

Given the system is IP based, other functions can run on the same interface. A good example is the need for external connectivity: if one the devices connected to the network has external connection capabilities, is can be useful to make these capabilities accessible to all other components: the needed information is the device IP address and a proper configuration of the bridge/router/gateway which enable the sharing of this interface. Even if this is not a requirement for this document, this capability is highly recommended; the major issue to solve is about the data transfer accounting when different actors are using the same communication channel.

_____________

Annex E Initial security setup of components and setting up a Vending Machine (Informative)

E.1 Overview

This informative annex describes how components vendors can distribute their components in some initial configuration and mechanisms system integrators can use to configure those components in order to allow them to communicate via OPC UA.

E.2 Initial configuration of Components

All components defined in this specification contain an OPC UA server part and according to the defined profiles implement the global certificate management server facet that allows a GDS (see OPC 10000-12) to configure the security certificates of the component via the OPC UA server. Those components can be shipped in a provisioning mode (see OPC 10000-12) that allows an initial Client (of the GDS) to connect and do the configuration of the certificates. Typically, a component does not provide its intended functionality while in provisioning mode in order to force a correct configuration of security.

E.3 Initial integration of Components

When setting up a Vending Machine the components of the Vending Machine need to be configured with respect to their security certificates in order to allow them to communicate with each other. The components implement the global certificate management server facet (see E.2) that allows the configuration via an off-the-shelf GDS product or tailored applications to configure a vending machine, using the standardized OPC UA interfaces (see OPC 10000-12). When using this, it is reasonable to use the concept of a CA (certificate authority) to sign certificates instead of using self-signed certificates. That implies, that all components trust the CA and get their certificates signed by the CA, and thereby they trust each other. More precise, an GDS can manage several certificate groups. The scope of such a group can be handled differently. The most restrictive configuration would be to put all components of a Vending Machine into a certificate group. This guarantees that only the components of the Vending Machine can communicate to each other. But other settings are possible, as well. For example, an Operator may choose to put all its components into one certificate group or all components of a specific type of Vending Machine, etc. This is decreasing the security to a certain degree, but simplifies the usage.

All components of a Vending Machine need to be integrated into the same certificate group, and switched from provisioning mode into normal operation mode (that may be done by restarting the component after the certificates have been configured). Afterwards, they will be able to communicate to each other. The Vending Machine can be configured and deployed in its intended destination.

E.4 What needs to be considered during runtime?

A GDS or tailored application is not required to run 24/7 and access the OPC UA servers it manages all the time. When only considering the certificate management, its only tasks after the initial configuration is to renew the certificates before they expire and to update the CRL (certificate revocation list: certificates, that have been signed, have still a valid lifetime but should not be trusted anymore).

The lifetime of a certificate can be configured in the GDS. Typically, this is rather short (1-3 month) in order to avoid that the CRL gets too large. If the scope of a certificate group is a Vending Machine, where typically components are not coming and going, the length of certificates may be made much longer (years), since the CRL will often not have any entries at all.

That implies that a GDS does neither need to run inside a Vending Machine nor have remote access to the Vending Machine under normal operations. It may need to be available when reconfiguring a Vending Machine or replacing components (see E.5). And it needs to be used to renew the certificates before expiring, which depends on the configured lifetime of the certificates and may be executed during normal maintenance operations of a Vending Machine or remotely, if the Vending Machine is connected to the Internet. OPC UA defines an CertificateExpirationAlarmType (see OPC 10000-12) that can be used to warn before the certificate expires.

E.5 Adding / removing / replacing Components into a configured Vending Machine

When a component should be added to an existing Vending Machine it needs to be added to the certificate group by the GDS or specialized application. This does not require access by the GDS to the other components of the Vending Machine, i.e., this could be done on a workbench before the technician travels to the location of the Vending Machine. By signing the certificate, the new component will be accepted as communication partner from the other components of the Vending Machine.

When a component gets removed from the Vending Machine, ideally it should be removed from the certificate group and therefore be added to the CRL, while the lifetime of the signed certificate is still valid. This requires, that the GDS or specialized application has access to all the other components of the Vending Machine. This is the most secure option. Alternatively, the component gets reset and the reset reliably removes the certificate (including the private key) from the component. If this process is trusted, the component can be removed and reset in order to disable it talking to the other components of the Vending Machine. If the component gets removed because it is broken and cannot be reset, the memory section should be physically destroyed in order to avoid security risks.

Replacing a component is combining adding and removing a component, so the above text can be applied.

Annex F Default IP Addresses for components of a Vending Machine (Informative)

This informative annex describes default IP addresses component providers may use when delivering their components (see Table 145). How to change the IP addresses is vendor-specific. The OPC UA servers should, as default, use port 4840.

Table 145 - Default IP Addresses for components of a Vending Machine
Component IP Address Network Mask Gateway
Machine Engine192.168.101.2255.255.255.0192.168.101.1
Payment Service192.168.101.3255.255.255.0192.168.101.1
Price Service192.168.101.4255.255.255.0192.168.101.1
UI192.168.101.5255.255.255.0192.168.101.1
Audit Collect192.168.101.6255.255.255.0192.168.101.1
Tax Audit192.168.101.7255.255.255.0192.168.101.1
Bill Payment Device192.168.101.8255.255.255.0192.168.101.1
Coin Payment Device192.168.101.9255.255.255.0192.168.101.1
Cashless Payment Device192.168.101.10255.255.255.0192.168.101.1

If a piece of hardware is implementing more than one component, it is vendor-specific which IP address should be used as default. For example, if the machine engine and payment service are implemented in one OPC UA server, the default IP address may either be 192.168.101.2 or 192.168.101.3.

Using dynamic IP resolution, etc. requires a vendor-specific configuration of the components. The default IP addresses are intendent to work in simple environments without configuration of network addresses.

Agreement of Use

COPYRIGHT RESTRICTIONS

This document is provided "as is" by the OPC FOUNDATION and the EUROPEAN VENDING & COFFEE ASSOCIATION.

Right of use for this specification is restricted to this specification and does not grant rights of use for referred documents.

Right of use for this specification will be granted without cost.

This document may be distributed through computer systems, printed or copied as long as the content remains unchanged and the document is not modified.

OPC FOUNDATION and EUROPEAN VENDING & COFFEE ASSOCIATION do not guarantee usability for any purpose and shall not be made liable for any case using the content of this document.

The user of the document agrees to indemnify OPC FOUNDATION and EUROPEAN VENDING & COFFEE ASSOCIATION and their officers, directors and agents harmless from all demands, claims, actions, losses, damages (including damages from personal injuries), costs and expenses (including attorneys' fees) which are in any way related to activities associated with its use of content from this specification.

The document shall not be used in conjunction with company advertising, shall not be sold or licensed to any party.

The intellectual property and copyright is solely owned by the OPC FOUNDATION and the EUROPEAN VENDING & COFFEE ASSOCIATION.

PATENTS

The attention of adopters is directed to the possibility that compliance with or adoption of OPC or EUROPEAN VENDING & COFFEE ASSOCIATION specifications may require use of an invention covered by patent rights. OPC Foundation or EUROPEAN VENDING & COFFEE ASSOCIATION shall not be responsible for identifying patents for which a license may be required by any OPC or EUROPEAN VENDING & COFFEE ASSOCIATION specification, or for conducting legal inquiries into the legal validity or scope of those patents that are brought to its attention. OPC or EUROPEAN VENDING & COFFEE ASSOCIATION specifications are prospective and advisory only. Prospective users are responsible for protecting themselves against liability for infringement of patents.

WARRANTY AND LIABILITY DISCLAIMERS

WHILE THIS PUBLICATION IS BELIEVED TO BE ACCURATE, IT IS PROVIDED "AS IS" AND MAY CONTAIN ERRORS OR MISPRINTS. THE OPC FOUDATION NOR EUROPEAN VENDING & COFFEE ASSOCIATION MAKES NO WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, WITH REGARD TO THIS PUBLICATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF TITLE OR OWNERSHIP, IMPLIED WARRANTY OF MERCHANTABILITY OR WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE. IN NO EVENT SHALL THE OPC FOUNDATION NOR EUROPEAN VENDING & COFFEE ASSOCIATION BE LIABLE FOR ERRORS CONTAINED HEREIN OR FOR DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, RELIANCE OR COVER DAMAGES, INCLUDING LOSS OF PROFITS, REVENUE, DATA OR USE, INCURRED BY ANY USER OR ANY THIRD PARTY IN CONNECTION WITH THE FURNISHING, PERFORMANCE, OR USE OF THIS MATERIAL, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

The entire risk as to the quality and performance of software developed using this specification is borne by you.

RESTRICTED RIGHTS LEGEND

This Specification is provided with Restricted Rights. Use, duplication, or disclosure by the U.S. government is subject to restrictions as set forth in (a) this Agreement pursuant to DFARs 227.7202-3(a); (b) subparagraph (c)(1)(i) of the Rights in Technical Data and Computer Software clause at DFARs 252.227-7013; or (c) the Commercial Computer Software Restricted Rights clause at FAR 52.227-19 subdivision (c)(1) and (2), as applicable. Contractor / manufacturer are the OPC Foundation, 16101 N. 82nd Street, Suite 3B, Scottsdale, AZ, 85260-1830.

COMPLIANCE

The combination of EUROPEAN VENDING & COFFEE ASSOCIATION and OPC Foundation shall at all times be the sole entities that may authorize developers, suppliers and sellers of hardware and software to use certification marks, trademarks, or other special designations to indicate compliance with these materials as specified within this document. Products developed using this specification may claim compliance or conformance with this specification if and only if the software satisfactorily meets the certification requirements set by EUROPEAN VENDING & COFFEE ASSOCIATION or the OPC Foundation. Products that do not meet these requirements may claim only that the product was based on this specification and must not claim compliance or conformance with this specification.

Trademarks

Most computer and software brand names have trademarks or registered trademarks. The individual trademarks have not been listed here.

GENERAL PROVISIONS

Should any provision of this Agreement be held to be void, invalid, unenforceable, or illegal by a court, the validity and enforceability of the other provisions shall not be affected thereby.

This Agreement shall be governed by and construed under the laws of Germany.

This Agreement embodies the entire understanding between the parties with respect to, and supersedes any prior understanding or agreement (oral or written) relating to, this specification.

ISSUE REPORTING

If an error or problem is found in this specification, the UANodeSet, or any associated supplementary files, it should be reported as an issue.

The reporting process can be found here: https://opcfoundation.org/resources/issue-tracking/

The Link to the issue tracking project for this document is here:

https://mantis.opcfoundation.org/set_project.php?project_id=256&make_default=no

Revision 1.0 Highlights

The following table includes the Mantis issues resolved with this revision.

Mantis ID Scope Summary Resolution
- FeatureInitial Version