<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
                            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>PLC4X &#x2013; </title>
    <script src="../../js/jquery.slim.min.js" type="text/javascript"></script>
    <!--script src="../../js/popper.min.js" type="javascript"></script-->
    <script src="../../js/bootstrap.bundle.min.js" type="text/javascript"></script>
    <!-- The tooling for adding images and links to Apache events -->
    <script src="https://www.apachecon.com/event-images/snippet.js" type="text/javascript"></script>
    <!-- FontAwesome -->
    <link rel="stylesheet" href="../../css/all.min.css" type="text/css"/>
    <!-- Bootstrap -->
    <link rel="stylesheet" href="../../css/bootstrap.min.css" type="text/css"/>
    <!-- Some Maven Site defaults -->
    <link rel="stylesheet" href="../../css/maven-base.css" type="text/css"/>
    <link rel="stylesheet" href="../../css/maven-theme.css" type="text/css"/>
    <!-- The PLC4X version of a bootstrap theme -->
    <link rel="stylesheet" href="../../css/themes/plc4x.css" type="text/css" id="pagestyle"/>
    <!-- A custom style for printing content -->
    <link rel="stylesheet" href="../../css/print.css" type="text/css" media="print"/>

            <meta http-equiv="Content-Language" content="en"/>
            
</head>
<body class="composite">
<nav class="navbar navbar-light navbar-expand-md bg-faded justify-content-center border-bottom">
    <!--a href="/" class="navbar-brand d-flex w-50 mr-auto">Navbar 3</a-->
    <a href="https://plc4x.apache.org/" id="bannerLeft"><img src="../../images/apache_plc4x_logo_small.png"  alt="Apache PLC4X"/></a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsingNavbar3">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="navbar-collapse collapse w-100" id="collapsingNavbar3">
        <ul class="navbar-nav w-100 justify-content-center">
                        <li class="nav-item">
                            <a class="nav-link" href="../../index.html">Home</a>
            </li>
                                                                                <li class="nav-item active">
                                    <a class="nav-link" href="../../users/index.html">Users</a>
                </li>
                                            <li class="nav-item">
                                    <a class="nav-link" href="../../developers/index.html">Developers</a>
                </li>
                                            <li class="nav-item">
                                    <a class="nav-link" href="../../apache/index.html">Apache</a>
                </li>
                    </ul>
        <ul class="nav navbar-nav ml-auto justify-content-end">
            <li class="nav-item row valign-middle">
                <a class="acevent" data-format="wide" data-mode="light" data-event="random" style="width:240px;height:60px;"></a>
            </li>
        </ul>
    </div>
</nav>
<div class="container-fluid">
    <div class="row h-100">
                                            
                                                                    
                                                                                                    <nav class="col-sm-push col-md-2 pt-3 sidebar">
                    <div class="sidebar-sticky">
                    <ul class="nav flex-column">
                                                            <li class="nav-item">
                            <a href="../../users/index.html" class="nav-link">Section Home</a>
                            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/download.html" class="nav-link">Download</a>
                            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/adopters.html" class="nav-link">Adopters</a>
                            </li>
                                
                                                                    
                                            
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/commercial-support.html" class="nav-link">Commercial support</a>
                            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/gettingstarted.html" class="nav-link">Getting Started</a>
                                    <ul class="flex-column pl-4 nav">
                                            <li class="nav-item">
                            <a href="../../users/getting-started/plc4go.html" class="nav-link">Go</a>
                            </li>
                                            <li class="nav-item">
                            <strong class="nav-link">Java</strong>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/getting-started/using-snapshots.html" class="nav-link">Using SNAPSHOTS</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/getting-started/general-concepts.html" class="nav-link">General Concepts</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/getting-started/virtual-modbus.html" class="nav-link">Virtual Modbus</a>
                            </li>
                            </ul>
            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/blogs-videos-and-slides.html" class="nav-link">Blogs, Videos and Slides</a>
                            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/protocols/index.html" class="nav-link">Protocols</a>
                                    <ul class="flex-column pl-4 nav">
                                            <li class="nav-item">
                            <a href="../../users/protocols/ab-eth.html" class="nav-link">AB-ETH</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/ads.html" class="nav-link">ADS/AMS</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/bacnetip.html" class="nav-link">BACnet/IP</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/canopen.html" class="nav-link">CANopen</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/deltav.html" class="nav-link">DeltaV</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/df1.html" class="nav-link">DF1</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/ethernet-ip.html" class="nav-link">EtherNet/IP</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/firmata.html" class="nav-link">Firmata</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/knxnetip.html" class="nav-link">KNXnet/IP</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/modbus.html" class="nav-link">Modbus</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/opc-ua.html" class="nav-link">OPC UA</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/s7.html" class="nav-link">S7 (Step7)</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/protocols/simulated.html" class="nav-link">Simulated</a>
                            </li>
                            </ul>
            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/transports/index.html" class="nav-link">Transports</a>
                                    <ul class="flex-column pl-4 nav">
                                            <li class="nav-item">
                            <a href="../../users/transports/tcp.html" class="nav-link">TCP</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/transports/udp.html" class="nav-link">UDP</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/transports/serial.html" class="nav-link">Serial</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/transports/socketcan.html" class="nav-link">SocketCAN</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/transports/raw-socket.html" class="nav-link">Raw Socket</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/transports/pcap-replay.html" class="nav-link">PCAP Replay</a>
                            </li>
                            </ul>
            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/integrations/index.html" class="nav-link">Integrations</a>
                                    <ul class="flex-column pl-4 nav">
                                            <li class="nav-item">
                            <a href="../../users/integrations/apache-calcite.html" class="nav-link">Apache Calcite</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/integrations/apache-camel.html" class="nav-link">Apache Camel</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/integrations/apache-edgent.html" class="nav-link">Apache Edgent</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/integrations/apache-iotdb.html" class="nav-link">Apache IoTDB</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/integrations/apache-kafka.html" class="nav-link">Apache Kafka</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/integrations/apache-nifi.html" class="nav-link">Apache NiFi</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/integrations/apache-streampipes.html" class="nav-link">Apache StreamPipes</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/integrations/eclipse-ditto.html" class="nav-link">Eclipse Ditto</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/integrations/eclipse-milo.html" class="nav-link">Eclipse Milo OPC UA Server</a>
                            </li>
                            </ul>
            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/tools/index.html" class="nav-link">Tools</a>
                                    <ul class="flex-column pl-4 nav">
                                            <li class="nav-item">
                            <a href="../../users/tools/capture-replay.html" class="nav-link">Capture Replay</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/tools/connection-pool.html" class="nav-link">Connection Pool</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/tools/connection-cache.html" class="nav-link">Connection Cache</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/tools/opm.html" class="nav-link">Object PLC Mapping (OPM)</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/tools/scraper.html" class="nav-link">Scraper</a>
                            </li>
                                            <li class="nav-item">
                            <a href="../../users/tools/testing.html" class="nav-link">PLC4X without a PLC and Unit Testing</a>
                            </li>
                            </ul>
            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/industry40.html" class="nav-link">Industry 4.0 with Apache</a>
                            </li>
                                
                                                                    
                                                                <li class="nav-item">
                            <a href="../../users/security.html" class="nav-link">Security</a>
                            </li>
                                                    
                                                                    
                                            
                                                                    
                                            
                                                                    
                                            
                                                                    
                                            
                                                                    
                                            
                                                                    
                                            
                                                                    
                                            
                                                                    
                                            
                                                                    
                                            
                                                                    
                                            
                                                                    
                                            
                                                                    
                                                                
                                    
                                            
                                    
                                            
                                    
                                            
                                    
                                            
                                    
                                                    </ul>
        </div>
        </nav>
                                            <main role="main" class="ml-sm-auto px-4 col-sm-pull col-md-9 col-lg-10 h-100">
            <div class="sect1">
<h2 id="getting_started">Getting Started</h2>
<div class="sectionbody">
<div class="sect2">
<h3 id="using_the_plc4j_api_directly">Using the PLC4J API directly</h3>
<div class="paragraph">
<p>In order to write a valid PLC4X Java application, all you need, is to add a dependency to the <code>api module</code>.
When using Maven, all you need to do is add this dependency:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>    &lt;dependency&gt;
      &lt;groupId&gt;org.apache.plc4x&lt;/groupId&gt;
      &lt;artifactId&gt;plc4j-api&lt;/artifactId&gt;
      &lt;version&gt;0.9.1&lt;/version&gt;
    &lt;/dependency&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>This will allow you to write a valid application, that compiles fine.
However, in order to actually connect to a device using a given protocol, you need to add this protocol implementation to the classpath.</p>
</div>
<div class="paragraph">
<p>For example in order to communicate with an <code>S7 device</code> using the <code>S7 Protocol</code>, you would need to add the following dependency:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>    &lt;dependency&gt;
      &lt;groupId&gt;org.apache.plc4x&lt;/groupId&gt;
      &lt;artifactId&gt;plc4j-driver-s7&lt;/artifactId&gt;
      &lt;version&gt;0.9.1&lt;/version&gt;
      &lt;scope&gt;runtime&lt;/scope&gt;
    &lt;/dependency&gt;</pre>
</div>
</div>
<div class="paragraph">
<p>So as soon as your project has the API and a driver implementation available, you first need to get a <code>PlcConnection</code> instance.
This is done via the <code>PlcDriverManager</code> by asking this to create an instance for a given <code>PLC4X connection string</code>.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>String connectionString = "s7://10.10.64.20";

try (PlcConnection plcConnection = new PlcDriverManager().getConnection(connectionString)) {

  ... do something with the connection here ...

}</pre>
</div>
</div>
<div class="paragraph">
<p>PLC4X generally supports a very limited set of functions, which is not due to the fact, that we didn&#8217;t implement things, but that PLCs generally support a very limited set of functions.</p>
</div>
<div class="paragraph">
<p>The basic functions supported by PLCs and therefore supported by PLC4X are:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Read data</p>
</li>
<li>
<p>Write data</p>
</li>
<li>
<p>Subscribe for data</p>
</li>
<li>
<p>Execute functions in the PLC</p>
</li>
<li>
<p>List resources in the PLC</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>In general we will try to offer as many features as possible.
So if a protocol doesn&#8217;t support subscription based communication it is our goal to simulate this by polling in the background so it is transparent for the users.</p>
</div>
<div class="paragraph">
<p>But there are some cases in which we can&#8217;t simulate or features are simply disabled intentionally:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>If a PLC and/or protocol don&#8217;t support executing of functions, we simply can&#8217;t provide this functionality.</p>
</li>
<li>
<p>We will be providing stripped down versions of drivers, that for example intentionally don&#8217;t support any writing of data and executing of functions.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Therefore we use metadata to check programmatically, if a given feature is available.</p>
</div>
<div class="sect3">
<h4 id="reading_data">Reading Data</h4>
<div class="listingblock">
<div class="content">
<pre>// Check if this connection support reading of data.
if (!plcConnection.getMetadata().canRead()) {
  logger.error("This connection doesn't support reading.");
  return;
}</pre>
</div>
</div>
<div class="paragraph">
<p>As soon as you have ensured that a feature is available, you are ready to build a first request.
This is done by getting a <code>PlcReadRequest.Builder</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>// Create a new read request:
// - Give the single item requested an alias name
PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
builder.addItem("value-1", "%Q0.4:BOOL");
builder.addItem("value-2", "%Q0:BYTE");
builder.addItem("value-3", "%I0.2:BOOL");
builder.addItem("value-4", "%DB.DB1.4:INT");
PlcReadRequest readRequest = builder.build();</pre>
</div>
</div>
<div class="paragraph">
<p>So, as you can see, you prepare a request, by adding items to the request and in the end by calling the <code>build</code> method.</p>
</div>
<div class="paragraph">
<p>The request is sent to the PLC by issuing the <code>execute</code> method on the request object:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>CompletableFuture&lt;? extends PlcReadResponse&gt; asyncResponse = readRequest.execute();
asyncResponse.whenComplete((response, throwable) -&gt; {
  try {
    ... process the response ...
  } catch (Exception e) {
    ... Handle any errors ...
  }
});</pre>
</div>
</div>
<div class="paragraph">
<p>In general all requests are executed asynchronously.
So as soon as the request is fully processed, the callback gets called and will contain a <code>readResponse</code>, if everything went right or a <code>throwable</code> if there were problems.</p>
</div>
<div class="paragraph">
<p>However if you want to write your code in a more synchronous fashion, the following alternative will provide this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>PlcReadResponse response = readRequest.execute().get(5000, TimeUnit.MILLISECONDS);</pre>
</div>
</div>
<div class="paragraph">
<p>Processing of the responses is identical in both cases.
The following example will demonstrate some of the options you have:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>for (String fieldName : response.getFieldNames()) {
    if(response.getResponseCode(fieldName) == PlcResponseCode.OK) {
        int numValues = response.getNumberOfValues(fieldName);
        // If it's just one element, output just one single line.
        if(numValues == 1) {
            logger.info("Value[" + fieldName + "]: " + response.getObject(fieldName));
        }
        // If it's more than one element, output each in a single row.
        else {
            logger.info("Value[" + fieldName + "]:");
            for(int i = 0; i &lt; numValues; i++) {
                logger.info(" - " + response.getObject(fieldName, i));
            }
        }
    }
    // Something went wrong, to output an error message instead.
    else {
        logger.error("Error[" + fieldName + "]: " + response.getResponseCode(fieldName).name());
    }
}</pre>
</div>
</div>
<div class="paragraph">
<p>In the for loop, we are demonstrating how the user can iterate over the address aliases in the response.
In case of an ordinary read request, this will be predefined by the items in the request, however in case of a subscription response, the response might only contain some of the items that were subscribed.</p>
</div>
<div class="paragraph">
<p>Before accessing the data, it is advisable to check if an item was correctly returned.
This is done by the <code>getResponseCode</code> method for a given alias.
If this is <code>PlcResponseCode.OK</code>, everything is ok, however it could be one of the following:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>NOT_FOUND</p>
</li>
<li>
<p>ACCESS_DENIED</p>
</li>
<li>
<p>INVALID_ADDRESS</p>
</li>
<li>
<p>INVALID_DATATYPE</p>
</li>
<li>
<p>INTERNAL_ERROR</p>
</li>
<li>
<p>RESPONSE_PENDING</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Assuming the return code was <code>OK</code>, we can continue accessing the data.</p>
</div>
<div class="paragraph">
<p>As some addresses support reading arrays, with the method <code>getNumberOfValues</code> the user can check how many items of a given type are returned.
For convenience the response object has single-argument methods for accessing the data, which default to returning the first element.</p>
</div>
<div class="literalblock">
<div class="content">
<pre>response.getObject(fieldName)</pre>
</div>
</div>
<div class="paragraph">
<p>If you want to access a given element number, please use the two-argument version instead:</p>
</div>
<div class="literalblock">
<div class="content">
<pre>response.getObject(fieldName, 42)</pre>
</div>
</div>
<div class="paragraph">
<p>PLC4X provides getters and setters for a wide variety of Java types and automatically handles the type conversion.
However when for example trying to get a long-value as a byte and the long-value exceeds the range supported by the smaller type, a <code>RuntimeException</code> of type <code>PlcIncompatibleDatatypeException</code>.
In order to avoid causing this exception to be thrown, however there are <code>isValid{TypeName}</code> methods that you can use to check if the value is compatible.</p>
</div>
</div>
<div class="sect3">
<h4 id="writing_data">Writing Data</h4>
<div class="paragraph">
<p>In general the structure of code for writing data is extremely similar to that of reading data.</p>
</div>
<div class="paragraph">
<p>So first it is advisable to check if this connection is even able to write data:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>// Check if this connection support writing of data.
if (!plcConnection.getMetadata().canWrite()) {
  logger.error("This connection doesn't support writing.");
  return;
}</pre>
</div>
</div>
<div class="paragraph">
<p>As soon as we are sure that we can write, we create a new <code>PlcWriteRequest.Builder</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>// Create a new write request:
// - Give the single item requested an alias name
// - Pass in the data you want to write (for arrays, pass in one value for every element)
PlcWriteRequest.Builder builder = plcConnection.writeRequestBuilder();
builder.addItem("value-1", "%Q0.4:BOOL", true);
builder.addItem("value-2", "%Q0:BYTE", (byte) 0xFF);
builder.addItem("value-4", "%DB.DB1.4:INT[3]", 7, 23, 42);
PlcWriteRequest writeRequest = builder.build();</pre>
</div>
</div>
<div class="paragraph">
<p>The same way read requests are sent to the PLC by issuing the <code>execute</code> method on the request object:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>CompletableFuture&lt;? extends PlcWriteResponse&gt; asyncResponse = writeRequest.execute();
asyncResponse.whenComplete((response, throwable) -&gt; {
  ... process the response ...
});</pre>
</div>
</div>
<div class="paragraph">
<p>You could here also use the blocking option:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>PlcWriteResponse response = writeRequest.execute().get();</pre>
</div>
</div>
<div class="paragraph">
<p>As we don&#8217;t have to process the data itself, for the write request, it&#8217;s enough to simply check the return code for each field.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>for (String fieldName : response.getFieldNames()) {
    if(response.getResponseCode(fieldName) == PlcResponseCode.OK) {
        logger.info("Value[" + fieldName + "]: updated");
    }
    // Something went wrong, to output an error message instead.
    else {
        logger.error("Error[" + fieldName + "]: " + response.getResponseCode(fieldName).name());
    }
}</pre>
</div>
</div>
</div>
<div class="sect3">
<h4 id="subscribing_to_data">Subscribing to Data</h4>
<div class="paragraph">
<p>Subscribing to data can be considered similar to reading data, at least the subscription itself if very similar to reading of data.</p>
</div>
<div class="paragraph">
<p>First of all we first have to check if the connection supports this:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>// Check if this connection support subscribing to data.
if (!plcConnection.getMetadata().canSubscribe()) {
    logger.error("This connection doesn't support subscribing.");
    return;
}</pre>
</div>
</div>
<div class="paragraph">
<p>Now we&#8217;ll create the subscription request.</p>
</div>
<div class="paragraph">
<p>The main difference is that while reading there is only one form how you could read, with subscriptions there are different forms of subscriptons:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Change of state (Event is sent as soon as a value changes)</p>
</li>
<li>
<p>Cyclic (The Event is sent in regular cyclic intervals)</p>
</li>
<li>
<p>Event (The Event is usually explicitly sent form the PLC as a signal)</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Therefore instead of using a normal <code>addItem</code>, there are tree different methods as you can see in the following examples.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>// Create a new subscription request:
// - Give the single item requested an alias name
PlcSubscriptionRequest.Builder builder = plcConnection.subscriptionRequestBuilder();
builder.addChangeOfStateField("value-1", "{some address}");
builder.addCyclicField("value-2", "{some address}", Duration.ofMillis(1000));
builder.addEventField("value-3", "{some alarm address}");
PlcSubscriptionRequest subscriptionRequest = builder.build();</pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
The <code>addCyclicField</code> method requires a third parameter <code>duration</code>.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>The request itself is executed exactly the same way the read and write operations are executed, using the <code>execute</code> method, therefore just the short synchronous version here (The async version works just as good)</p>
</div>
<div class="listingblock">
<div class="content">
<pre>PlcSubscriptionResponse response = subscriptionRequest.execute().get();</pre>
</div>
</div>
<div class="paragraph">
<p>Now comes the little more tricky part, as subscriptions are always asynchronous, we have to register a callback for the connection to call as soon as there is news available:</p>
</div>
<div class="paragraph">
<p>In general you can&#8217;t say how many of your subscribed fields will be available in every callback so it is double important to check or iterate over the field names.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>for (String subscriptionName : response.getFieldNames()) {
    final PlcSubscriptionHandle subscriptionHandle = response.getSubscriptionHandle(subscriptionName);
    subscriptionHandle.register(plcSubscriptionEvent -&gt; {
        for (String fieldName : plcSubscriptionEvent.getFieldNames()) {
            System.out.println(plcSubscriptionEvent.getPlcValue(fieldName));
        }
    });
}</pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Here there currently is a double iteration over the field names, this will probably change soon.
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
</div>
        </main>
        <footer class="pt-4 my-md-5 pt-md-5 w-100 border-top">
            <div class="row justify-content-md-center" style="font-size: 13px">
                <div class="col col-6 text-center">
                                    Copyright &#169;      2017&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
All rights reserved.<br/>
                    Apache PLC4X, PLC4X, Apache, the Apache feather logo, and the Apache PLC4X project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
                                        <br/><div style="text-align:center;">Home screen image taken from <a
                        href="https://flic.kr/p/chEftd">Flickr</a>, "Tesla Robot Dance" by Steve Jurvetson, licensed
                    under <a href="https://creativecommons.org/licenses/by/2.0/">CC BY 2.0 Generic</a>, image cropped
                    and blur effect added.</div>
                                </div>
            </div>
        </footer>
    </div>
</div>

<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="../../js/jquery.slim.min.js"></script>
<script src="../../js/popper.min.js"></script>
<script src="../../js/bootstrap.min.js"></script>
<script type="text/javascript">
    $('.carousel .carousel-item').each(function(){
        var next = $(this).next();
        if (!next.length) {
            next = $(this).siblings(':first');
        }
        next.children(':first-child').clone().appendTo($(this));

        for (let i = 0; i < 3; i++) {
            next=next.next();
            if (!next.length) {
                next = $(this).siblings(':first');
            }
            next.children(':first-child').clone().appendTo($(this));
        }
    });
</script>
</body>
</html>