Skip to main content
Version: 3.0 (next)

Open Protocol Open Protocol (Tightening) Integration Guide

Receive every tightening result with torque, angle and OK/NOK, follow alarms and job progress, and control the tool from pipelines.

Status
Beta
Default port
TCP 4545
Authentication
None (the protocol has none)
Triggers
Tightening Results · Alarms · Parameter Set Selected · Job Info
Operations
Read Result · Read Tool · 7 controller commands

Open Protocol is the integration protocol of industrial tightening controllers. Atlas Copco publishes the specification, and controllers from Atlas Copco (Power Focus 4000 and 6000, MT Focus 6000), Desoutter (CVI3, CONNECT), Stanley, Cleco and others implement it. MaestroHub connects as the integrator: it opens a TCP connection to the controller (port 4545 by default), receives the results the controller pushes, and sends commands. This guide covers connection setup, the function types, how results are acknowledged, and how the matching nodes and triggers slot into the Pipeline Designer.

Beta

This connector is in beta. It is built from the Atlas Copco Open Protocol Specification (release 2.20.1) and tested against two independent Open Protocol implementations, but it has not yet been verified on every controller model and firmware. If a controller sends something it cannot decode, the connector logs the whole message and says so; please report it to support with the controller model and firmware version.

Overview​

The Open Protocol connector provides:

  • Tightening Results trigger: one pipeline event per tightening, with torque, angle, their limits and statuses, OK/NOK, parameter set, job, batch, VIN and the controller's timestamp
  • Alarms trigger: an event when the controller raises an alarm, reports its alarm status, or has an alarm acknowledged on its screen
  • Parameter Set Selected trigger: the current parameter set, then every change
  • Job Info trigger: job status and batch progress
  • Read Tightening Result: one stored result by its tightening ID, or the latest one
  • Read Tool Data: tool serial number, tightening count and calibration
  • Commands: Select Parameter Set, Select Job, Set Batch Size, Reset Batch Counter, Disable Tool, Enable Tool, Send VIN

What happens on connect​

MaestroHub opens the TCP connection and starts communication (MID 0001). It asks for the highest revision it knows; when the controller answers "revision not supported" it steps down one revision at a time until the controller accepts. It does the same for every subscription. The controller's name, supplier, protocol version, software version and each agreed revision are written to the log, and every event carries its revision and the controller name in its metadata.

The controller forgets its subscriptions whenever the connection closes. MaestroHub therefore sends every subscription that a pipeline uses again on every new connection, without a manual step.

While the connection is idle, MaestroHub sends a keep-alive (MID 9999) every Keep-Alive Interval. The controller closes a connection that has been silent for 15 seconds.

How results are acknowledged​

The controller expects every result to be acknowledged (MID 0062). MaestroHub acknowledges a result only after it has stored it for the pipelines that use it. If MaestroHub stops between receiving and storing, the controller still holds the result. A result that cannot be stored is logged and counted and still acknowledged, so one bad event cannot stop the controller from sending the next ones.

Results produced while disconnected​

The controller does not promise to keep results produced while the connection was down. When the connection comes back, MaestroHub reads the controller's latest result before it subscribes again. If that result is newer than the last one it stored, it logs a warning: results may have been missed. Use Read Tightening Result to fetch them by ID when traceability needs them.

Connection Configuration​

Creating an Open Protocol Connection​

Navigate to Connections → New Connection → Open Protocol (Tightening) and configure the form. The form has four tabs: Connection, Functions, Scaling, and Health; the last three unlock after the connection is saved.

1. Profile Information​

FieldDefaultDescription
Profile Name-A descriptive name for this connection profile (required). Must be unique across all connections.
Description-Optional description for this connection
Labels-Key-value pairs to categorize and organize the connection

2. Controller​

FieldDefaultMeaning
Address(required)The controller's host name or IP address
Port4545The Open Protocol port. 4545 on Atlas Copco controllers. On a Desoutter CVI3 each tightening unit has its own port
Controller Time ZoneUTCThe IANA zone the controller's clock runs in, for example Europe/Istanbul. Open Protocol timestamps carry no zone; they are converted from this zone to UTC
Connection Timeout10sTime allowed to open the connection and complete the communication start
Keep-Alive Interval10sA keep-alive is sent after this long without any other message. Must stay below 15 seconds; MT Focus 6000 recommends 7 seconds
Response Timeout10sMaximum wait for the controller's answer to a request. An unanswered request closes the connection, which then reconnects

Open Protocol has no authentication or encryption. Keep controllers on an isolated cell network.

Open Protocol connection formOpen Protocol connection form

The Connection tab: the controller's address, port and time zone, and the link timers

Controller setup​

  • Power Focus 6000: Select Parameter Set needs a Source Tightening task on the virtual station, and its parameter set ID is the identifier number. Select Job needs a Source Batch task.
  • Desoutter CVI3: each tightening unit has its own Open Protocol port. Set the parameter set selection source to Open protocol before selecting parameter sets from a pipeline.
  • One integrator per port: many controllers accept one Open Protocol client per port. A second client is refused with "client already connected"; MaestroHub keeps reconnecting until the port is free.
  • Tool lock on disconnect: a controller can be set to lock the tool when the Open Protocol connection drops. Only an Enable Tool releases it. MaestroHub never sends one on its own; see Release the tool after a reconnect.

Testing the Connection​

Click Test Connection to try the settings before saving. Once the connection runs, its health probe sends a keep-alive and waits for the controller's answer; an unanswered probe drops the session and the connection reconnects.

Function Builder​

Creating Open Protocol Functions​

After the connection is saved:

  1. Open the connection and navigate to the Functions tab
  2. Click New Function to open the function type selection dialog
  3. Choose a trigger, a read or a command
  4. Fill the Basic tab and the Configuration tab
  5. Use the Test button to run the function against the controller before saving
Open Protocol function typesOpen Protocol function types

Four triggers, two reads and seven commands

Tightening Results (openprotocol.results)​

Purpose: Starts a pipeline for every tightening result. This function type is a pipeline trigger: see the Open Protocol Triggers.

ParameterMeaning
Include Non-Tightening ResultsDefault on. Off emits only results whose result type is a tightening, dropping loosening, batch increment and similar results (result revision 3 and later; earlier revisions carry no result type)
{
"tighteningId": 4711,
"status": "NOK",
"resultType": "tightening",
"psetId": 4,
"jobId": 1,
"vin": "WAUZZZ8V5KA012345",
"torque": { "value": 12.48, "min": 11, "max": 13, "target": 12, "status": "ok", "unit": "Nm" },
"angle": { "value": 182, "min": 90, "max": 180, "target": 150, "status": "high" },
"batch": { "size": 10, "counter": 4, "status": "running" },
"controller": { "name": "Line3 Station 4", "cellId": 1, "channelId": 1 },
"timestamp": "2026-10-21T07:14:03Z"
}
  • status is OK or NOK. Statuses of a measurement (torque.status, angle.status, …) are low, ok or high.
  • Torque values are numbers in the controller's unit; torque.unit (for example Nm) arrives from result revision 3 on and is absent before.
  • Later revisions add more fields: strategy, error status bits, rundown angle, self-tap, prevail torque, current monitoring, identifiers 2-4, joint ID and others.
  • A field the controller does not fill, or that its revision does not carry, is absent. It is never 0. Several controllers leave fields blank.

Alarms (openprotocol.alarms)​

Purpose: Starts a pipeline for each alarm event. event says which: raised (MID 0071), status (the alarm status the controller reports after subscribing, MID 0076), or acknowledged (an alarm acknowledged on the controller, MID 0074). Events carry errorCode, controllerReadyStatus and toolReadyStatus (ok or nok), the time, and in later revisions toolHealth and alarmText.

Parameter Set Selected (openprotocol.psetSelected)​

Purpose: Starts a pipeline with the current parameter set right after subscribing, then at every change: psetId, psetLastChange, and in later revisions the name, rotation direction, batch size and limits.

Job Info (openprotocol.jobInfo)​

Purpose: Starts a pipeline at each job event: jobId, status (ok, nok, notCompleted), batchMode, batch.size and batch.counter, the time, and in later revisions the current step, VIN and identifiers.

Read Tightening Result (openprotocol.readResult)​

Purpose: Returns one stored result, with the same fields as a Tightening Results event. Tightening ID 0 reads the latest result; it can be a ((parameter)). An ID the controller no longer holds is refused with "tightening ID requested not found".

Read Tool Data (openprotocol.readTool)​

Purpose: Returns toolSerialNumber, tighteningCount, lastCalibrationDate, controllerSerialNumber, and in later revisions calibration value, service data, tool type and motor size.

Commands​

FunctionMIDParameters
Select Parameter Set (openprotocol.selectPset)0018Parameter Set ID, 1-999
Select Job (openprotocol.selectJob)0038Job ID, 0-9999. IDs above 99 are sent in revision 2
Set Batch Size (openprotocol.setBatchSize)0019Parameter Set ID, Batch Size 0-9999. Sizes above 99 are sent in revision 2
Reset Batch Counter (openprotocol.resetBatchCounter)0020Parameter Set ID
Disable Tool (openprotocol.disableTool)0042None
Enable Tool (openprotocol.enableTool)0043None
Send VIN (openprotocol.sendVin)0050VIN, up to 25 printable ASCII characters, sent as given

Every parameter can be a ((parameter)) and is checked before anything is sent. A command succeeds when the controller accepts it (MID 0005); a refusal (MID 0004) names the controller's reason.

Send VIN function parametersSend VIN function parameters

A Send VIN function whose VIN is the ((vin)) parameter, filled by the pipeline

Commands act on the tool

Disabling the tool stops the operator; selecting a parameter set changes the next tightening. MaestroHub adds these rules:

  • Checked before sending. A missing or out-of-range ID, or a VIN that is too long or not printable ASCII, is refused with nothing sent.
  • Sent at most once. If the controller does not answer, or the connection drops, the outcome is unknown: the controller may have acted. MaestroHub reports outcome unknown and never sends it again on its own: not the connector, not a pipeline's Retry on Fail, not a ForEach retry. A command the controller refused is not retried either. Commands are never buffered for later delivery.

Pipeline Integration​

  • Open Protocol Read Tightening Result (connected.openprotocol.readResult)
  • Open Protocol Read Tool Data (connected.openprotocol.readTool)
  • Open Protocol command nodes: connected.openprotocol.selectPset, selectJob, setBatchSize, resetBatchCounter, disableTool, enableTool, sendVin
  • Open Protocol triggers: trigger.openprotocol.results, trigger.openprotocol.alarms, trigger.openprotocol.psetSelected, trigger.openprotocol.jobInfo
Open Protocol node in the pipeline designerOpen Protocol node in the pipeline designer

The Read Tightening Result node with its connection and function

For node-level details, see the Open Protocol Nodes and Open Protocol Triggers pages.

Common Use Cases​

Tightening Traceability​

A Tightening Results trigger stores every result with its VIN, torque, angle and OK/NOK in the historian or the Unified Namespace, so a part's tightenings can be looked up by VIN.

NOK Alerts​

Branch on status with a Condition node: a NOK result raises an alert to the line lead, with torque.status and angle.status saying which limit was missed.

Order-Driven Parameter Sets​

When a part arrives, send its VIN with Send VIN and select the variant's parameter set with Select Parameter Set; disable the tool until both are accepted, then enable it.

Release the tool after a reconnect​

If the controller locks the tool when the connection drops, a pipeline can release it: a Parameter Set Selected trigger fires right after every new subscription, that is after every reconnect, so an Enable Tool node behind it releases the tool once the connection is back. Only do this where releasing the tool automatically is safe.

Troubleshooting​

Error Reference​

What you seeMeaningRetried?
controller refused MID 0018: error 02, parameter set ID not presentThe parameter set does not exist on the controllerNo
controller refused MID 0018: error 03, parameter set can not be setThe controller does not allow selecting it now (on PF6000: no Source Tightening task)No
controller refused MID 0050: error 08, VIN input source not grantedOpen Protocol is not the controller's identifier sourceNo
error 92, open protocol commands disabledOpen Protocol commands are turned off on the controllerNo
another integrator holds this controller's Open Protocol connectionA second client on the same port (error 96 or 35)Reconnects until the port is free
outcome unknown / no response from the controllerThe command may have reached the controller and no verdict came backNever: check the controller first
results may have been missed while the connection was down (log)The controller's latest result is newer than the last stored one after a reconnectRead them with Read Tightening Result
message could not be decoded; acknowledged and skipped (log)The controller sent a layout this connector does not decodeReport the logged message with the controller model
not connectedThe connection is downYes, after reconnect

Connection Issues​

SymptomPossible CauseSolution
Connect times outWrong address or port, a firewall, or Open Protocol turned offCheck the controller's Open Protocol settings and open TCP 4545 (or the configured port)
The connection drops every 15 secondsKeep-alive interval at or above the controller's timeoutKeep the interval below 15 seconds
Healthy but no resultsThe tool is not tightening, or another client took the subscriptionCheck the log for the agreed revision and subscription; one integrator per port
Timestamps are hours offController Time Zone does not match the controller's clockSet the zone the controller's clock runs in