OPC-UA Interface Guide (Meteor Inkjet)
Meteor Pane Plugin v5.3.0.8278, Copyright (c) 2024 Global Graphics Software. All rights reserved.
Overview
The Meteor Pane Plugin allows a user to obtain up-to-date information about the state of any attached Meteor hardware.
When the Open Platform Communications (OPC) server in Meteor Pane Plugin is enabled an OPC node tree is published. The nodes in this tree represent grouped areas of state and functionality.
For example, a Server section allows:
- the RIP Server name, location, and version.
- the associated Meteor status data.
- Product Detect signals to be sent.
- ...and more.
Default address: opc.tcp://localhost:26642/spc-meteor
Meteor Router
For the OPC information to be up-to-date the plugin must communicate with a MeteorRouter process running on each Windows RIP Server machine.
If using Meteor on CentOS-based RIP Servers you must ensure the Meteor_Output_Plugin.json config templates set SPDHost to true.
Certificates
Communication between OPC UA clients and servers require both parties to possess their own application certificate. To enable further communication each party must trust the opposing certificate. This trust can be established automatically, programmatically or manually depending on the application's configuration or implementation.
The certificate can be found in %programdata%\Global Graphics Software Ltd\Meteor Pane Plugin\App Certificates\certs should you need to copy it to the Trusted Peer Certificate folder.
OPC Nodes
The OPC node mechanism will report when any state changes (at all server/controller/head levels), allowing clients to react accordingly. The period at which these state changes are detected is governed by the Servers.RefreshPeriod value (Default: 0.5s), which can be modified at runtime.
Turning on Servers.EnableDebugLogging will allow closer monitoring of when state is refreshed and what values are being reported.
NOTE Updates from SPC will be paused when it has been instructed to release the printer interface. In this state, SPC cannot interact with the Meteor API, and no status updates will be provided until the interface has been reacquired. Clients relying on updates should ensure proper acquire/release handling.
NOTE The Servers.IsApplyInProgress property indicates whether SPC is currently in the process of applying a new device configuration. During this phase connections to the Meteor server(s) is unreliable, and clients should not attempt to interact with the Meteor system until this property is false.
Server/Controller/Head Tree
The Server/Controller/Head tree is the structured node hierarchy representing different levels of the Meteor system state.
Controller Node Naming vs. Controller Numbers
Each ControllerN node (for example Controller1, Controller2) uses a numeric suffix for node uniqueness only. It does not represent the real Meteor controller ID.
To identify a controller, use the ControllerNumber property inside the node.
Dynamic Changes and Node Behavior
- The
ControllerCountandHeadCountproperties allow clients to monitor the structure of the active Meteor system. - These values update dynamically as controllers or heads become available, allowing OPC clients to subscribe to the corresponding nodes.
Node Dormancy and Subscription Stability
Even when the controller or head count falls:
- Nodes beyond the current count are not removed but become dormant.
- Dormant nodes stop reporting changes until they become active again.
This means OPC clients do not need to unsubscribe and resubscribe when the hardware shape changes.
Connecting to Controller Boards
Each Controller-level node represents a single Meteor controller board and contains controller state plus a Heads subtree.
The IsConnected property indicates whether the controller board is currently powered and connected to the Meteor system. It can take a short time to become true after initialization, so callers should check it periodically before relying on the controller.
If one or more controllers fail to connect, clients can call Servers.AbortBoot to stop the boot cycle rather than waiting indefinitely.
The ControllerCount property reports how many controllers are defined in the active Meteor system.
The ConnectedControllerCount property reports how many of those controllers are currently connected.
OPC Methods
Any methods listed in this documentation will include details about their required parameters (if any), and return value.
In the event of an error please see the application log file for more information.
OPC Client Library
The following documentation provides guidance on using the Traeger Industry Components GmbH OPC client library for software developers working with Meteor Pane Plugin.
Configuring Custom Message Sizes
The default maximum message sizes used by OPC clients to communicate to the server are sufficient for most use cases. However, to ensure transfer of larger data packets it may be necessary to configure the OPC client with custom values.
For example:
Client = new OpcClient();
Client.Transport.MaxArrayLength = 1024 * 1024 * 50;
Client.Transport.MaxBufferSize = 1024 * 1024 * 50;
Client.Transport.MaxMessageSize = 1024 * 1024 * 50;
Client.Transport.MaxStringLength = 1024 * 1024 * 50;
See here for more information.
Adjusting Communication Timeouts
OPC clients regularly verify the responsiveness of the connection to the OPC server. However, in certain circumstances where the system is under heavy load, maintaining a responsive connection might not always be possible. To mitigate potential issues under such conditions, it is recommended to increase the default communication timeouts.
The example below demonstrates how to adjust the default values:
var defaultTimeOut = (int)TimeSpan.FromMinutes(10).TotalMilliseconds;
Client = new OpcClient
{
// Don't auto-disconnect - Dispose the client to explicitly disconnect.
DisconnectTimeout = int.MaxValue,
KeepAlive = { Interval = defaultTimeOut },
SessionTimeout = defaultTimeOut,
OperationTimeout = defaultTimeOut,
ReconnectTimeout = defaultTimeOut
};
Please note that the provided examples serve as illustrations, and it's important to tailor the configuration to your specific requirements.
MeteorMonitorSet
The top-level set containing all available OPC nodes.
Immediately underneath this root-level node are a categorized collection of sub-nodes, each encapsulating a different area of behavior.
| Section Name | Description |
|---|---|
| Plugin | State relating to the Meteor plugin. |
| Servers | State relating to the collection of registered RIP Servers. |
| Server1 | State relating to a single RIP Server. (The numeric suffix will change as appropriate.) |
| Controllers | State relating to the collection of head controllers. |
| Controller1 | State relating to a single head controller. (The numeric suffix will change as appropriate.) |
| Heads | State relating to the collection of print heads managed by the parent controller. |
| Head1 | State relating to a single print head. (The numeric suffix will change as appropriate.) |
| Status | State relating to the Meteor status data of a single RIP Server. |
Plugin
State relating to the Meteor plugin.
Properties
| Name | Type | Writable | Description |
|---|---|---|---|
VersionNumber | String | No | Describes the Meteor plugin version number. |
Servers
State relating to the collection of registered RIP Servers.
Details
The OpcServers class provides state and methods for managing SPC's interaction with the Meteor API through OPC interfaces.
This includes acquiring and releasing printer interfaces, which are critical for ensuring proper system monitoring and operation.
NOTE The Meteor Monitor plugin will automatically acquire the Meteor printer interface when it is first launched.
ReleasePrinterInterface()
Use this method to relinquish SPC's control over the Meteor printer interface, allowing an OPC client to make its own calls to the Meteor API directly.
NOTE Must be paired with a call to AcquirePrinterInterface() so SPC can regain control of the Meteor API.
NOTE When SPC has been instructed to release the printer interface, it will no longer interact with the Meteor API (e.g., updating status fields, controlling head power) until the interface is reacquired with a call to AcquirePrinterInterface().
AcquirePrinterInterface()
Use this method after a call to ReleasePrinterInterface().
This enables SPC to take back control of the Meteor printer interface, enabling it to monitor and manage the system, update status fields or controlling head power, etc.
Properties
| Name | Type | Writable | Description |
|---|---|---|---|
EnableDebugLogging | Boolean | Yes | When enabled the application will write Meteor structure content to the application log. |
HeadEventCount | Int32 | No | A counter incremented each time any Head state changes, allowing OPC clients to subscribe to a single 'change' event. |
IsApplyInProgress | Boolean | No | Indicates whether SPC is in the process of 'Applying' changes. (App.ApplySettings())NOTE It is unsafe to call Meteor methods while this is true, as SPC RIP servers and the connection to the Meteor server may be in a volatile state.Any attempt to perform a Meteor action whilst an 'Apply' is in progress will fail and an error will be logged. |
IsRouterConnected | Boolean | No | Reports whether communication to the Meteor Router is active and succeeding. |
PDHint | Boolean | No | A hint as to whether a Hardware Product Detect can be triggered. |
RefreshPeriod | Double | Yes | The state refresh period (seconds). NOTE Modification requires external control. |
ServerCount | Int32 | No | The number of defined RIP Servers. |
Methods
| Name | Returns | Description |
|---|---|---|
AbortBoot() | Boolean | Aborts any active boot cycle. |
AcquirePrinterInterfaces() | Boolean | Acquires the printer interface for SPC to monitor and manage the Meteor API. See above for more information. |
ReleasePrinterInterfaces() | Boolean | Releases the printer interface, allowing OPC clients to interact directly with the Meteor API. See above for more information. |
Server1
State relating to a single RIP Server. (The numeric suffix will change as appropriate.)
Properties
| Name | Type | Writable | Description |
|---|---|---|---|
IsConnected | Boolean | No | Whether the RIP Server is currently connected. |
Name | String | No | Name of the RIP Server. |
PrintEngineVersionNumber | String | No | Version of the Meteor Print Engine. |
VersionNumber | String | No | Version of the RIP Server. |
Methods
| Name | Returns | Description |
|---|---|---|
AbortTiffSubmission() | Boolean | Aborts via the Meteor Print Engine. |
EndTiffSubmission() | Boolean | Ends the doc and job in the Meteor Print Engine. |
ForcePD() | Boolean | Trigger a PD signal. |
GetEEPROM(UInt64 printControllerNumber, UInt64 headControllerNumber) | String | Returns EEPROM data for a given print head. |
GetPrintEngineError() | String | Returns the most recent print engine error. |
SetCrossWebOffset(UInt64 planeNumber, UInt64 offset) | Boolean | Sets the cross web offset (in dots). NOTE The print run must be active for this call to be effective. |
SetHeadPower(Boolean power) | Boolean | Set the head power state. |
SetParam(UInt64 printControllerNumber, UInt64 headNumber, UInt64 paramId, UInt64 value) | Boolean | Sets the state of one of the adjustment parameters for head position, head voltage, etc. |
SetParamEx(UInt64 printControllerNumber, UInt64 headControllerNumber, UInt64 headNumber, UInt64 paramId, UInt64 value, UInt64 jettingAssemblyNumber) | Boolean | Extended API to set and store parameters. |
SetParamExViaJson(String jsonPath, String serverName) | Boolean | Submits a compatible JSON file, which specifies a group of set param ex commands to send to Meteor. |
SetSignal(UInt64 printControllerNumber, UInt64 headNumber, UInt64 requestId, UInt64 state) | Boolean | Sets the state of a defined signal (I/O, PSUs etc). |
SetValuesViaJson(String jsonPath, String serverName) | Boolean | Submits a compatible JSON file, which specifies a group of signal, param or param_ex commands to send to Meteor. |
SetValuesViaJsonString(String json, String serverName) | Boolean | Submits a compatible JSON string, which specifies a group of signal, param or param_ex commands to send to Meteor. NOTE: Do not send json containing newline characters. |
StartTiffSubmission() | Boolean | Starts a job and FIFO doc in the Meteor Print Engine. |
SubmitTiff(String path, UInt32 planeNumber, UInt32 screeningMode, UInt32 greyLevel, UInt32 xLeft, UInt32 yTop) | Boolean | Submits a single Tiff to the Meteor Print Engine. |
UpdateXOffsets() | Boolean | Writes the head x-offsets to the PCC registers, allowing on-the-fly adjustment. |
Controllers
State relating to the collection of head controllers.
Properties
| Name | Type | Writable | Description |
|---|---|---|---|
ConnectedControllerCount | Int32 | No | The number of head controllers reported to be connected. |
ControllerCount | Int32 | No | The total number of head controllers defined in the system. |
Controller1
State relating to a single head controller. (The numeric suffix will change as appropriate.)
Properties
| Name | Type | Writable | Description |
|---|---|---|---|
ControllerNumber | UInt64 | No | The ID of the controller. |
IsConnected | Boolean | No | Indicates whether the controller is powered and connected. |
Heads
State relating to the collection of print heads managed by the parent controller.
Properties
| Name | Type | Writable | Description |
|---|---|---|---|
HeadCount | Int32 | No | The number of print heads. |
Head1
State relating to a single print head. (The numeric suffix will change as appropriate.)
Properties
| Name | Type | Writable | Description |
|---|---|---|---|
DdramDwordsA | Int32 | No | See Meteor SDK documentation. |
DdramDwordsB | Int32 | No | See Meteor SDK documentation. |
HeadDwordsA | Int32 | No | See Meteor SDK documentation. |
HeadDwordsB | Int32 | No | See Meteor SDK documentation. |
HeadState | UInt32 | No | See Meteor SDK documentation. |
HeadTemperature | Int32[] | No | See Meteor SDK documentation. |
Status
State relating to the Meteor status data of a single RIP Server.
Properties
| Name | Type | Writable | Description |
|---|---|---|---|
AbsoluteXCounter | Int32 | No | Absolute X Counter |
BufferLevel | UInt32 | No | Buffer Level |
DocsQueuedLane1 | Int32 | No | Docs Queued Lane 1 |
DocsQueuedLane2 | Int32 | No | Docs Queued Lane 2 |
EncoderCount | Int32 | No | Encoder Count |
FifoPathDocsSent | Int32 | No | FIFO Path Docs Sent |
MixedModePreloadDocsQueuedLane1 | Int32 | No | Mixed Mode Preload Docs Queued Lane 1 |
MixedModePreloadDocsQueuedLane2 | Int32 | No | Mixed Mode Preload Docs Queued Lane 2 |
PdCount | Int32 | No | PD Count |
PreloadPathDocsSent | Int32 | No | Preload Path Docs Sent |
PreloadPathTotalCopies | Int32 | No | Preload Path Total Copies |
PrintCount | Int32 | No | Print Count |
PrinterStatus | UInt32 | No | Printer Status |