cab and the Smart Factory:
Networked labeling with OPC UA
Requirements
In the industrial sectors, more and more productional and logistic environments are based on digital process control systems. Machines exchange information with human beings or with other machines, process manufacture-relevant data autonomously, feed data or forward it. Individualization, scalability, lean and traceable processes as well as reliable devices and components are key requirements.
Most of the applications or services on which the control systems are based are hosted on the Internet. Data from sensors, devices or software are transferred to the Cloud and can easily be exchanged between printers or labeling systems, robots and IT systems - provided that they all speak the same language and understand one other.
The protocol
Open Platform Communications Unified Architecture, abbr. OPC UA, creates the basis for interacting machines and components from different manufacturers in an industrial surrounding. In the OPC UA, various specifications have been united to a consistent data model, thus creating a new interface standard. OPC UA triggers networking in industrial manufacturing, as we know it from network and USB interfaces in offices.
Connected with cab devices
You put a production plant into operation? Or you plan to network your material warehouses according to Industry 4.0? If an IP-ready network is available, OPC UA can already be used as a consistent framework for machine-to-machine information access. In the matter of marking components, products or packaging within a plant, cab label printers of the current generation as well as IXOR labeling devices are already OPC UA-ready. They are able to cooperate with superior control units.
Highlights at a glance
- On demand production
- Automated processes
- Device configuration
- Remote device control
- Device monitoring
- Interoperability
- Prognostics and analysis
- Traceability
- Inventory resp. stock optimization
- Shortening of distances
- Transparency
Event-driven labeling
Asking a label printer at the press of a button how he is doing is outfashioned. Today, smart devices automatically indicate that they want to be maintained or that the material to be printed resp. the ribbon are running short and must be replaced. Labels can be loaded remotely, as well as label characteristics can be read and variable data can be exchanged for printing. Operating parameters such as the print head's running performance so far, its temperature or the number of labels still to be printed in the current job are displayed just in time. Information is transferred by the printer to the plant control system, which identifies and interpretes the information and directly initiates the appropriate measure.
OPC UA as a superior control system offers the advantage of bringing together production data, alarms, events and data history controlled by software under one roof. It integrates and unifies various address spaces and the interfaces to be accessed.
OPC UA with cab printers
OPC UA features that are at present supported by cab devices* are as followed:
- Communication Stack
OPC UA binary protocol - Encryption
none
Basic128Rsa15
Basic256Sha256 - Authentication
anonymous
user name/password
While fully authenticated users may have full access to the provided data model, anonymous users may only access printer nodes read-only and are not granted to call any method, even if the method does not change the printer's configuration or state.
- OPC UA Services
SecureChannel Service Set
Session Service Set
Attribute Service Set: reading/writing of attributes, events, no historical data access
Method Service Set
MonitoredItem Service Set
Subscription Service Set
View Service Set
The OPC UA Server can be activated under Settings / Interfaces / Network Services.
* cab label printers SQUIX, MACH 4S, EOS2, EOS5, HERMES Q, PX Q, labeling heads IXOR
Information model
cab printers implement the OPC UA Device Integration (DI) model. Two namespaces are provided:
http://cab.de/printer for print job monitoring and control
http://cab.de/printer/setup for device configuration
The functions displayed on the following pages correspond to the current status and are continuously further developed.
Namespace http://cab.de/Printer
This namespace provides access to the current state of the printer, including the state of the I/Os, printer model information or any information about the current job status.
Node name | Node class | Description |
---|---|---|
Printer | Object | The primary entry point for accessing the printer's information model |
FPGARevision, Manufacturer, Model, SerialNumber, SoftwareRevision, HardwareRevision |
Variable | Supply hardware and software versioning information |
Bitmap | Method | Returns the last printed label in .png format |
Screen | Method | Returns a screenshot of the printer's display in .png format |
I/O | Object | Provides software access to the printer's I/O; generates IOStatusChangeEvent |
LBLWARN | Variable | Warning before end of labels |
RIBERR | Variable | Transfer ribbon to end |
RIBWARN | Variable | Warning before end transfer ribbon |
SetInput | Method | Set input of I/O interface: PAUSE, LBLROT |
LabelBitmap | Method | Print image of the current label in .png format. Unlike the bitmap method, label orientation and size are taken into account here |
ENDPOS | Variable | Applicator is in labeling position |
ERROR | Variable | The printer is in error state |
FEEDON | Variable | A feed is currently in progress, i.e. paper is moving |
HOMEPOS | Variable | Applicator is in home position |
JOBRDY | Variable | Print data is available |
MEDERR | Variable | End of paper or ribbon |
PEELPOS | Variable | Label is in peel position |
READY | Variable | Printer is ready |
I/O Status | Variable | Output status of the I/O interface, defined by a combination of the following values: RIBWARN 1 HOMEPOS 8 ERROR 64 RIBERR 512 ENDPOS 2 PEELPOS 16 READY 128 MEDERR 1024 FEEDON 4 JOBRDY 32 LBLWARN 256 (partly only HERMES Q) |
TriggerInput | Method | Allowing to trigger an I/O input, one of FSTLBL, REPRINT, START, LBLREM, JOBDEL, RSTERR, STOP, LBLFEED |
Interpreter | Object | Job status information; generates ErrorEvent, JobInfoEvent and JobFinishEvent |
JPhase | Variable | Current state of the JScript interpreter |
QueryObject | Methode | Query of existing JScript objects |
Current Label | Object | Available whenever a job is executed by the Interpreter |
Current Id | Variable | Unique job Id of current job |
Current Name | Variable | Job name; name of the current job in Interpreter as provided by JScript j command |
Current Content Fields | Object | Root node of named label content fields. They may be replaced by setting the value of the content nodes. |
abc Status | Variable | Current status of integrated abc basic interpreter: one of Idle, Compiling, Running, RuntimeError oder SyntaxError |
Active | Variable | Indicates printer is active, i.e. interpreting or printing |
Available Space | Variable | Available print queue memory in % |
ESCs | Variable | String containing the result of JScript's ESCs command |
ESCz | Variable | String containing the result of JScript's ESCz command |
Error | Variable | Provides detailed error information as in the ESCs command; the numeric value may be interpreted as an ASCII char, e.g. 45 == '-' No error |
Labels To Print | Variable | Labels to be printed within the current job |
Last Job | Variable | Name of last job; see the corresponding direct JScript command j |
Online | Variable | Printer is ONLINE, i.e. the graphical user interface shows the home screen |
Paused | Variable | Printer is in PAUSE |
CancelJob | Method | Allows the cancellation of the current print job |
LoadLabel | Method | Allows to load a label from any printer storage |
PrintData | Method | Allows to send JScript print data directly to the printer |
TotalCancel | Method | Cancels all print jobs scheduled or currently printed by the printer |
Ribbon | Object | |
Ribbon RibbonDiameter | Variable | Detected ribbon diameter in millimeters |
Ribbon RibbonLow | Variable | Indicates whether the ribbon is considered to be low in reference to the corresponding printer setting |
Statistics | Object | |
Statistics Labels | Variable | Number of labels printed |
Statistics Operating Time | Variable | Uptime of printer in minutes |
Statistics Thermal Direct | Variable | Printed thermal direct material in millimeters |
Statistics Thermal Transfer | Variable | Printed thermal transfer material in millimeters |
Paper | ||
Paper Diameter | Variable | Calculated diameter of the label remnant at the unwinder in millimeters (HERMES Q only) |
Paper Low | Variable | Low label residual quantity according to setting in printer menu (HERMES Q only) |
SubDevices | Object | |
Applicator* | Object | |
Barcode Verifier* | Object | |
Cutter* | Object | |
Cutter* Can Perforate | Variable | The attached cutter device may be used for perforation. |
Cutter* Has Stacking Box | Variable | The attached cutter device has a stacking box. |
Demand Sensor* | Object | |
Sensor Status | Variable | Photo sensor status |
Rewinder* | Object | |
Ribbon Saver* | Object | Detected ribbon diameter in millimeters |
Ribbon Sync | Variable | Ribbon Saver is initialized and fully operational. |
Ribbon Head State | Variable | Current state of the print head, one of Printing or Saving |
Ribbon Synchronize | Method | Issues a ribbon saver synchronization command; only relevant for service tasks |
Ribbon ToggleHead | Method | Toggles the head state up or down; only relevant for service tasks |
TPH 1 | Object | Print head information |
TPH 1 Model | Variable | Human readable description string of the installed print head |
TPH 1 SoftwareRevision | Variable | |
TPH 1 Open | Variable | Open state |
TPH 1 SerialNumber | Variable | Serial string of print head |
TPH 1 Temperature | Variable | Current print head temperature in °C |
TPH 1 Statistics | Object | Statistics correlated with the print head |
Storage | Object | |
FileDelete | Method | Deletes a file on a disk of the printer |
FileDownload | Method | Downloads a file on a disk of the printer to the client |
FileList | Method | Lists all files on a disk of the printer |
FileUpload | Method | Downloads a file of the client to a disk of the printer |
FontList | Method | Queries the fonts available on the printer |
IFFS | Object | (I)nternal (F)lash (F)ile (S)ystem |
IFFS IFFS Available Space | Variable | Space available on the file system in kB |
IFFS Capacity | Variable | Capacity of the file system in kB |
SD Card | Object | |
SD Card SD Card Attached | Variable | Indicates whether the file system is attached or not |
USB Memory | Object |
* Optional node, only available with service key attached
Important note: According to the OPC UA Device Integration specification, methods must always be called in the MethodSet of the device, even if they are linked in separate FunctionalGroup for better assignment. A call via the FunctionalGroup always leads to an error.
Namespace http://cab.de/Printer/Setup
This namespace provides full access to the printer's configuration tree, which is modeled in the same way as the setting levels of the graphical user interface. The actual position of configuration parameters within the tree is subject to change, so it is not safe to look up a node via it's browse path. Instead, configuration nodes may be directly accessed by their unique string identifier.
Node name | Node class | Description |
---|---|---|
Setup | Object | This sub-node of the Printer node is the primary entry point for accessing the printer's setup; generates SetupValueChangeEvent and SetupVisibilityChangeEvent aus |
SetOpcUaClientUrl | Method | Storage of an OPC UA server address for use in standalone mode. |
ExportSettings | Method | Exports printer configuration in .xml format |
ImportSettings | Method | Imports printer configuration in .xml format |
ImportCertificateTLS | Method | Imports a custom TLS certificate |
Reset | Method | Reset to factory defaults |
ResetPasswords | Method | Reset passwords to factory defaults |
< SetupFolder> |
Object | Contains setup values |
< SetupValue> |
Object | A setup value which can be edited |
IsActive | Variable | This setup parameter is currently accessible in the printer's graphical user interface. |
The following setup value types are available:
- Boolean values
- Enumerations
- String values contain the fields
MinLen
MaxLen
Regex, an optional regular expression which will be applied to a write operation on the attribute's value - Numeric values contain the fields
Range
Step
ToggleInt (optional, for display purpose)
Unit (optional, for display purpose) - Passwords contain minimum and maximum length attributes just like string values
Important note: According to the OPC UA Device Integration specification, methods must always be called in the MethodSet of the device, even if they are linked in separate FunctionalGroup for better assignment. A call via the FunctionalGroup always leads to an error.
Events
Beyond OPC UA standard events, cab printers provide the following supplementary events.
Event name | Type | Description |
---|---|---|
ErrorEvent | Emitted whenever a printer error occurs; generated by node Interpreter | |
Message | LocalizedText | Error message |
Detail1 | LocalizedText | More details about the supplied error |
Detail2 | LocalizedText | Even more details about the supplied error |
JobInfoEvent | Emitted whenever a label is printed; generated by node Interpreter | |
LabelNo | Int32 | Number of label within current job |
JobSize | Int32 | Size of job |
IsTestPrint | Boolean | Indices that currently printed label is a test print |
JobFinishEvent | Emitted whenever a job is finished and the printer returns to Idle; generated by node Interpreter | |
no further fields | ||
SetupValueChangeEvent | Emitted whenever a setup value changes; generated by node Setup | |
SourceName | String | The name of the affected setup parameter |
SetupVisibilityChangeEvent | Emitted whenever a setup value changes its visibility state, typically due to interdependencies; generated by node Setup | |
SourceName | String | The name of the affected setup parameter |
IOStatusChangeEvent | Emitted whenever the I/O status of the device changes; generated by node I/O | |
Status | UInt32 | New printer status as described in Printer->IO->Status |
Limitations: The OPC UA stack implementation currently does not support:
- Different kinds of Monitored items - either Change notify or Event notify - within a single subscription though multiple Monitored items of the same kind in a subscription is allowed
- Where clauses in Monitored items requests
- Alarms and conditions
OPC UA Client Support in the printer
Using the JScript special command OPCUA the printer can read data from OPC UA servers in standalone mode and insert it into the label layout:
m m
J
H 75,0
S l1;0,0,25,29,50
E OPCUA;opc.tcp://192.168.200.71:4840
T 20,20,0,3,10;[OPCUA:2:DeviceSet,3:Printer,2:SoftwareRevision]
A 1
In order to be able to address several OPC UA servers, the concept of a slot is used. A slot number can be added to the token OPCUA, so that up to five different server systems can be queried:
m m J H 75,0 S l1;0,0,25,29,50 ;
Connection using a user name and passwordE OPCUA-0;opc.tcp://opcuser:opcpass@192.168.200.71:4840 ;
Anonymous connectionE OPCUA-1;opc.tcp://192.168.200.53:4840 T 10,10,0,3,10;SW Rev Drucker 1: [OPCUA-0:2:DeviceSet,3:Printer,2:SoftwareRevision] T 20,20,0,3,10;SW Rev Drucker 2: [OPCUA-1:2:DeviceSet,3:Printer,2:SoftwareRevision] A 1
As an alternative to specifying the browsepath, node IDs can also be specified for the data query in the OPCUA special command:
m m
J
H 75,0
S l1;0,0,25,29,50
E OPCUA;opc.tcp://192.168.200.71:4840
T 20,20,0,3,10;[OPCUA:ns=3;i=50723]
T 10,10,0,3,10;[OPCUA:ns=4;s=ID_BACKFEED]
A 1
The following data types are supported:
- integer numeric data types
- floating point values
- String, ByteString, XmlElement
- Boolean values
- LocalizedText
- DateTime
- Range
- EUInformation
- Enumerations
The connection information does not necessarily have to be stored in the label but can be stored in the global configuration of the printer instead. The OPC UA function SetOpcUaClientUrl is used for this purpose. By specifying the desired slot and the address to be used, up to 5 different connection information can also be stored here. In this case the E command in the label can be omitted.
For developers
Our GitHub repository provides detailed technical information and sample code for our OPC UA server. Implementations are available in C++ (using the open62541 library) and Python (using the python-opcua library).
January 2021