CtrlX

This driver is unfinished and not usable yet. Pinging is the only thing that works; discovery is an unimplemented stub, there is no tag address syntax, so reading and writing are not available, and the browse implementation does not work yet either. This page describes the current state for anyone continuing the work - it is not linked from the navigation.

The CtrlX driver talks to Bosch Rexroth ctrlX CORE devices through their REST/Data-Layer API over HTTPS, rather than over an industrial fieldbus protocol.

Supported Operations

Operation Description

ping

Checks that the device is reachable and the credentials are accepted.

discover

Not implemented. The driver hands out a discovery request builder, but CtrlXPlcDiscoverer.discoverWithHandler is a TODO that returns null instead of a future, so executing a discovery request fails instead of finding devices.

browse

Does not work yet. The connection carries an implementation that is meant to enumerate the device’s Data Layer nodes, and it is the furthest along of the unfinished operations, but it does not produce usable results.

read / write / subscribe

Not implemented. The corresponding request builders return null, so attempting one fails.

The connection reports read, write, subscribe and browse as unsupported in its metadata, so a caller that checks getMetadata() before deciding what to do gets an honest answer rather than being sent into a request that cannot succeed.

Connection String

ctrlx:https://{host}
ctrlx://{host}

https is the only supported transport, and it is also the default - so the transport part can be omitted. Any other transport is rejected with Only 'https' transport is supported by this driver.

Authentication

A CtrlX connection always requires a username and password. Obtaining a connection without authentication throws CtrlX connections require authentication., and an authentication object that is not a username/password pair is rejected as well.
PlcConnection connection = new DefaultPlcDriverManager()
    .getConnection("ctrlx://192.168.1.1",
        new PlcUsernamePasswordAuthentication("boschrexroth", "boschrexroth"));

Browsing

Browsing does not work yet. What follows describes how the existing implementation is meant to be used, for whoever picks the work up.

Browse queries are glob patterns matched against the Data Layer node paths, not tag addresses. ** matches everything and is intended as the simplest way to see what a device exposes:

PlcBrowseResponse response = connection.browseRequestBuilder()
    .addQuery("all", "**")
    .build().execute().get();

The driver has no tag address syntax of its own - parseTag is not implemented - which is the reason read and write are unavailable.

Discovery

Discovery does not work yet. CtrlXDriver.discoveryRequestBuilder() returns a builder backed by CtrlXPlcDiscoverer, whose discoverWithHandler is still an empty TODO returning null, so no ctrlX CORE device is ever located.

Maven Dependency

The driver is not part of the plc4j-driver-all meta package while it is unfinished, so it has to be added explicitly:

<dependency>
  <groupId>org.apache.plc4x</groupId>
  <artifactId>plc4j-driver-ctrlx</artifactId>
  <version>pre-release</version>
</dependency>
The driver declares no connection-string parameters of its own, which is why this page has no generated options table like the other protocols. Everything it needs comes from the host in the connection string plus the credentials.