This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch fix/DATE_AND_TIME_2
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit a7b0a073a04db939e97311bc80f3007de8769211
Author: Christofer Dutz <[email protected]>
AuthorDate: Tue Jan 30 21:19:23 2024 +0100

    feat: Got the RealIdentifitationRequest working for my Adam devices in the 
new Profinet driver
    
    Also tried getting the old driver working with my Adam devices.
---
 .../profinet/protocol/ProfinetProtocolLogic.java   | 72 ++++++++++++----------
 ...PN.java => ManualProfinetIoTestAdam6117PN.java} | 23 ++++---
 ...de.java => ManualProfinetIoTestAdam6150PN.java} | 24 +++++---
 ...de.java => ManualProfinetIoTestSimocodePN.java} | 15 ++++-
 ...oupler.java => ManualProfinetIoTestWagoPN.java} | 23 ++++---
 .../src/test/resources/logback-test.xml            |  2 +-
 ...etIoTest.java => ManualProfinetIoAdamTest.java} |  9 +--
 ...Test.java => ManualProfinetIoSimocodeTest.java} |  4 +-
 .../java/profinet/ManualProfinetPcapTest.java      | 54 +++++++++++-----
 9 files changed, 136 insertions(+), 90 deletions(-)

diff --git 
a/plc4j/drivers/profinet-ng/src/main/java/org/apache/plc4x/java/profinet/protocol/ProfinetProtocolLogic.java
 
b/plc4j/drivers/profinet-ng/src/main/java/org/apache/plc4x/java/profinet/protocol/ProfinetProtocolLogic.java
index 142d078e63..169bfca6be 100644
--- 
a/plc4j/drivers/profinet-ng/src/main/java/org/apache/plc4x/java/profinet/protocol/ProfinetProtocolLogic.java
+++ 
b/plc4j/drivers/profinet-ng/src/main/java/org/apache/plc4x/java/profinet/protocol/ProfinetProtocolLogic.java
@@ -254,17 +254,21 @@ public class ProfinetProtocolLogic extends 
Plc4xProtocolBase<Ethernet_Frame> imp
                                             
submoduleIndex.get(curSlot).put(curSubslot, curSubmodule);
 
                                             // Replace the text-ids with 
readable values
-                                            for (ProfinetIoDataInput 
profinetIoDataInput : curSubmodule.getIoData().getInput()) {
-                                                for (ProfinetDataItem 
profinetDataItem : profinetIoDataInput.getDataItemList()) {
-                                                    if 
(textMapping.containsKey(profinetDataItem.getTextId())) {
-                                                        
profinetDataItem.setTextId(textMapping.get(profinetDataItem.getTextId()));
+                                            
if(curSubmodule.getIoData().getInput() != null) {
+                                                for (ProfinetIoDataInput 
profinetIoDataInput : curSubmodule.getIoData().getInput()) {
+                                                    for (ProfinetDataItem 
profinetDataItem : profinetIoDataInput.getDataItemList()) {
+                                                        if 
(textMapping.containsKey(profinetDataItem.getTextId())) {
+                                                            
profinetDataItem.setTextId(textMapping.get(profinetDataItem.getTextId()));
+                                                        }
                                                     }
                                                 }
                                             }
-                                            for (ProfinetIoDataOutput 
profinetIoDataOutput : curSubmodule.getIoData().getOutput()) {
-                                                for (ProfinetDataItem 
profinetDataItem : profinetIoDataOutput.getDataItemList()) {
-                                                    if 
(textMapping.containsKey(profinetDataItem.getTextId())) {
-                                                        
profinetDataItem.setTextId(textMapping.get(profinetDataItem.getTextId()));
+                                            
if(curSubmodule.getIoData().getOutput() != null) {
+                                                for (ProfinetIoDataOutput 
profinetIoDataOutput : curSubmodule.getIoData().getOutput()) {
+                                                    for (ProfinetDataItem 
profinetDataItem : profinetIoDataOutput.getDataItemList()) {
+                                                        if 
(textMapping.containsKey(profinetDataItem.getTextId())) {
+                                                            
profinetDataItem.setTextId(textMapping.get(profinetDataItem.getTextId()));
+                                                        }
                                                     }
                                                 }
                                             }
@@ -341,34 +345,38 @@ public class ProfinetProtocolLogic extends 
Plc4xProtocolBase<Ethernet_Frame> imp
                     ProfinetVirtualSubmoduleItem subslotModule = 
subslotEntry.getValue();
 
                     // Add all the input tags.
-                    for (ProfinetIoDataInput profinetIoDataInput : 
subslotModule.getIoData().getInput()) {
-                        for (int i = 0; i < 
profinetIoDataInput.getDataItemList().size(); i++) {
-                            ProfinetDataItem profinetDataItem = 
profinetIoDataInput.getDataItemList().get(i);
-                            ProfinetDataTypeMapper.DataTypeInformation 
dataTypeInformation =
-                                
ProfinetDataTypeMapper.getPlcValueType(profinetDataItem);
-                            // The ids have been replaced by real textual 
values in the connection phase.
-                            String name = profinetDataItem.getTextId();
-                            items.add(new DefaultPlcBrowseItem(new ProfinetTag(
-                                slot, subslot, ProfinetTag.Direction.INPUT,
-                                i, dataTypeInformation.getPlcValueType(), 
dataTypeInformation.getNumElements()),
-                                name, false, true, true,
-                                Collections.emptyMap(), 
Collections.emptyMap()));
+                    if(subslotModule.getIoData().getInput() != null) {
+                        for (ProfinetIoDataInput profinetIoDataInput : 
subslotModule.getIoData().getInput()) {
+                            for (int i = 0; i < 
profinetIoDataInput.getDataItemList().size(); i++) {
+                                ProfinetDataItem profinetDataItem = 
profinetIoDataInput.getDataItemList().get(i);
+                                ProfinetDataTypeMapper.DataTypeInformation 
dataTypeInformation =
+                                    
ProfinetDataTypeMapper.getPlcValueType(profinetDataItem);
+                                // The ids have been replaced by real textual 
values in the connection phase.
+                                String name = profinetDataItem.getTextId();
+                                items.add(new DefaultPlcBrowseItem(new 
ProfinetTag(
+                                    slot, subslot, ProfinetTag.Direction.INPUT,
+                                    i, dataTypeInformation.getPlcValueType(), 
dataTypeInformation.getNumElements()),
+                                    name, false, true, true,
+                                    Collections.emptyMap(), 
Collections.emptyMap()));
+                            }
                         }
                     }
 
                     // Add all the output tags.
-                    for (ProfinetIoDataOutput profinetIoDataOutput : 
subslotModule.getIoData().getOutput()) {
-                        for (int i = 0; i < 
profinetIoDataOutput.getDataItemList().size(); i++) {
-                            ProfinetDataItem profinetDataItem = 
profinetIoDataOutput.getDataItemList().get(i);
-                            ProfinetDataTypeMapper.DataTypeInformation 
dataTypeInformation =
-                                
ProfinetDataTypeMapper.getPlcValueType(profinetDataItem);
-                            // The ids have been replaced by real textual 
values in the connection phase.
-                            String name = profinetDataItem.getTextId();
-                            items.add(new DefaultPlcBrowseItem(new ProfinetTag(
-                                slot, subslot, ProfinetTag.Direction.OUTPUT,
-                                i, dataTypeInformation.getPlcValueType(), 
dataTypeInformation.getNumElements()),
-                                name, false, true, true,
-                                Collections.emptyMap(), 
Collections.emptyMap()));
+                    if(subslotModule.getIoData().getOutput() != null) {
+                        for (ProfinetIoDataOutput profinetIoDataOutput : 
subslotModule.getIoData().getOutput()) {
+                            for (int i = 0; i < 
profinetIoDataOutput.getDataItemList().size(); i++) {
+                                ProfinetDataItem profinetDataItem = 
profinetIoDataOutput.getDataItemList().get(i);
+                                ProfinetDataTypeMapper.DataTypeInformation 
dataTypeInformation =
+                                    
ProfinetDataTypeMapper.getPlcValueType(profinetDataItem);
+                                // The ids have been replaced by real textual 
values in the connection phase.
+                                String name = profinetDataItem.getTextId();
+                                items.add(new DefaultPlcBrowseItem(new 
ProfinetTag(
+                                    slot, subslot, 
ProfinetTag.Direction.OUTPUT,
+                                    i, dataTypeInformation.getPlcValueType(), 
dataTypeInformation.getNumElements()),
+                                    name, false, true, true,
+                                    Collections.emptyMap(), 
Collections.emptyMap()));
+                            }
                         }
                     }
                 }
diff --git 
a/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdamPN.java
 
b/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdam6117PN.java
similarity index 62%
rename from 
plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdamPN.java
rename to 
plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdam6117PN.java
index 8f5352d8eb..6c122538d9 100644
--- 
a/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdamPN.java
+++ 
b/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdam6117PN.java
@@ -21,24 +21,27 @@ package org.apache.plc4x.java.profinet;
 
 import org.apache.plc4x.java.DefaultPlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
+import org.apache.plc4x.java.api.messages.*;
 
 import java.time.Duration;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-public class ManualProfinetIoTestAdamPN {
+public class ManualProfinetIoTestAdam6117PN {
 
     public static void main(String[] args) throws Exception {
+        // Advantech Adam 6150PN (8 chanel 16 bit analog inputs)
         // WireShark filter: "eth.addr == 74:fe:48:63:f6:c2"
         try(PlcConnection connection =  new 
DefaultPlcDriverManager().getConnection("profinet:raw://192.168.24.41")) {
-            // Create and execute the subscription request.
-            PlcSubscriptionRequest subscriptionRequest = 
connection.subscriptionRequestBuilder()
-                .addCyclicTagAddress("inputs", "1.1.INPUT.0:BYTE[10]", 
Duration.ofMillis(400))
-                .addCyclicTagAddress("output", "1.1.OUTPUT.0:DWORD", 
Duration.ofMillis(400))
-                .build();
-            PlcSubscriptionResponse subscriptionResponse = 
subscriptionRequest.execute().get(10000, TimeUnit.MILLISECONDS);
-            System.out.println(subscriptionResponse);
+            // List up all resources found in the remote device.
+            PlcBrowseRequest browseRequest = 
connection.browseRequestBuilder().addQuery("all", "*").build();
+            PlcBrowseResponse plcBrowseResponse = 
browseRequest.execute().get();
+            for (String queryName : plcBrowseResponse.getQueryNames()) {
+                List<PlcBrowseItem> values = 
plcBrowseResponse.getValues(queryName);
+                for (PlcBrowseItem value : values) {
+                    System.out.println(value.getName() + ": " + 
value.getTag().getAddressString());
+                }
+            }
         }
     }
 
diff --git 
a/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocode.java
 
b/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdam6150PN.java
similarity index 58%
copy from 
plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocode.java
copy to 
plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdam6150PN.java
index 95072070d8..70b65d0587 100644
--- 
a/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocode.java
+++ 
b/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestAdam6150PN.java
@@ -24,20 +24,24 @@ import org.apache.plc4x.java.api.PlcConnection;
 import org.apache.plc4x.java.api.messages.*;
 
 import java.time.Duration;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-public class ManualProfinetIoTestSimocode {
+public class ManualProfinetIoTestAdam6150PN {
 
     public static void main(String[] args) throws Exception {
-        // WireShark filter: "eth.addr == 88:3f:99:00:06:ef"
-        try(PlcConnection connection =  new 
DefaultPlcDriverManager().getConnection("profinet:raw://192.168.24.31")) {
-            // Create and execute the subscription request.
-            PlcSubscriptionRequest subscriptionRequest = 
connection.subscriptionRequestBuilder()
-                .addCyclicTagAddress("inputs", "1.1.INPUT.0:BYTE[10]", 
Duration.ofMillis(400))
-                .addCyclicTagAddress("output", "1.1.OUTPUT.0:DWORD", 
Duration.ofMillis(400))
-                .build();
-            PlcSubscriptionResponse subscriptionResponse = 
subscriptionRequest.execute().get(100000, TimeUnit.MILLISECONDS);
-            System.out.println(subscriptionResponse);
+        // Advantech Adam 6150PN (8 channel digital input, 7 chanel digital 
output)
+        // WireShark filter: "eth.addr == 74:fe:48:82:4a:7c"
+        try(PlcConnection connection =  new 
DefaultPlcDriverManager().getConnection("profinet:raw://192.168.24.42")) {
+            // List up all resources found in the remote device.
+            PlcBrowseRequest browseRequest = 
connection.browseRequestBuilder().addQuery("all", "*").build();
+            PlcBrowseResponse plcBrowseResponse = 
browseRequest.execute().get();
+            for (String queryName : plcBrowseResponse.getQueryNames()) {
+                List<PlcBrowseItem> values = 
plcBrowseResponse.getValues(queryName);
+                for (PlcBrowseItem value : values) {
+                    System.out.println(value.getName() + ": " + 
value.getTag().getAddressString());
+                }
+            }
         }
     }
 
diff --git 
a/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocode.java
 
b/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocodePN.java
similarity index 70%
rename from 
plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocode.java
rename to 
plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocodePN.java
index 95072070d8..7b1c82b1bc 100644
--- 
a/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocode.java
+++ 
b/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestSimocodePN.java
@@ -24,17 +24,28 @@ import org.apache.plc4x.java.api.PlcConnection;
 import org.apache.plc4x.java.api.messages.*;
 
 import java.time.Duration;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
-public class ManualProfinetIoTestSimocode {
+public class ManualProfinetIoTestSimocodePN {
 
     public static void main(String[] args) throws Exception {
         // WireShark filter: "eth.addr == 88:3f:99:00:06:ef"
         try(PlcConnection connection =  new 
DefaultPlcDriverManager().getConnection("profinet:raw://192.168.24.31")) {
+            // List up all resources found in the remote device.
+            PlcBrowseRequest browseRequest = 
connection.browseRequestBuilder().addQuery("all", "*").build();
+            PlcBrowseResponse plcBrowseResponse = 
browseRequest.execute().get();
+            for (String queryName : plcBrowseResponse.getQueryNames()) {
+                List<PlcBrowseItem> values = 
plcBrowseResponse.getValues(queryName);
+                for (PlcBrowseItem value : values) {
+                    System.out.println(value.getName() + ": " + 
value.getTag().getAddressString());
+                }
+            }
+
             // Create and execute the subscription request.
             PlcSubscriptionRequest subscriptionRequest = 
connection.subscriptionRequestBuilder()
                 .addCyclicTagAddress("inputs", "1.1.INPUT.0:BYTE[10]", 
Duration.ofMillis(400))
-                .addCyclicTagAddress("output", "1.1.OUTPUT.0:DWORD", 
Duration.ofMillis(400))
+//                .addCyclicTagAddress("output", "1.1.OUTPUT.0:DWORD", 
Duration.ofMillis(400))
                 .build();
             PlcSubscriptionResponse subscriptionResponse = 
subscriptionRequest.execute().get(100000, TimeUnit.MILLISECONDS);
             System.out.println(subscriptionResponse);
diff --git 
a/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestWagoPNCoupler.java
 
b/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestWagoPN.java
similarity index 61%
rename from 
plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestWagoPNCoupler.java
rename to 
plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestWagoPN.java
index aed2d41140..895f46843d 100644
--- 
a/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestWagoPNCoupler.java
+++ 
b/plc4j/drivers/profinet-ng/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTestWagoPN.java
@@ -21,24 +21,23 @@ package org.apache.plc4x.java.profinet;
 
 import org.apache.plc4x.java.DefaultPlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
+import org.apache.plc4x.java.api.messages.*;
 
-import java.time.Duration;
-import java.util.concurrent.TimeUnit;
+import java.util.List;
 
-public class ManualProfinetIoTestWagoPNCoupler {
+public class ManualProfinetIoTestWagoPN {
 
     public static void main(String[] args) throws Exception {
         // WireShark filter: "eth.addr == 00:30:de:61:37:79"
         try(PlcConnection connection =  new 
DefaultPlcDriverManager().getConnection("profinet:raw://00:30:de:61:37:79?ip-address=192.168.24.51"))
 {
-            // Create and execute the subscription request.
-            PlcSubscriptionRequest subscriptionRequest = 
connection.subscriptionRequestBuilder()
-                .addCyclicTagAddress("inputs", "1.1.INPUT.0:BYTE[10]", 
Duration.ofMillis(400))
-                .addCyclicTagAddress("output", "1.1.OUTPUT.0:DWORD", 
Duration.ofMillis(400))
-                .build();
-            PlcSubscriptionResponse subscriptionResponse = 
subscriptionRequest.execute().get(10000, TimeUnit.MILLISECONDS);
-            System.out.println(subscriptionResponse);
+            PlcBrowseRequest browseRequest = 
connection.browseRequestBuilder().addQuery("all", "*").build();
+            PlcBrowseResponse plcBrowseResponse = 
browseRequest.execute().get();
+            for (String queryName : plcBrowseResponse.getQueryNames()) {
+                List<PlcBrowseItem> values = 
plcBrowseResponse.getValues(queryName);
+                for (PlcBrowseItem value : values) {
+                    System.out.println(value.getName() + ": " + 
value.getTag().getAddressString());
+                }
+            }
         }
     }
 
diff --git a/plc4j/drivers/profinet-ng/src/test/resources/logback-test.xml 
b/plc4j/drivers/profinet-ng/src/test/resources/logback-test.xml
index d5ea1081e7..7465159b17 100644
--- a/plc4j/drivers/profinet-ng/src/test/resources/logback-test.xml
+++ b/plc4j/drivers/profinet-ng/src/test/resources/logback-test.xml
@@ -29,7 +29,7 @@
     </encoder>
   </appender>
 
-  <logger name="org.apache.plc4x.java.spi.Plc4xNettyWrapper" level="TRACE"/>
+  <logger name="org.apache.plc4x.java.spi.Plc4xNettyWrapper" level="WARN"/>
 
   <root level="info">
     <appender-ref ref="STDOUT" />
diff --git 
a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTest.java
 
b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoAdamTest.java
similarity index 93%
copy from 
plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTest.java
copy to 
plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoAdamTest.java
index eac8db3f34..aa89d13262 100644
--- 
a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTest.java
+++ 
b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoAdamTest.java
@@ -29,21 +29,18 @@ import org.slf4j.LoggerFactory;
 
 import java.util.concurrent.TimeUnit;
 
-public class ManualProfinetIoTest {
+public class ManualProfinetIoAdamTest {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(ManualProfinetIoTest.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(ManualProfinetIoAdamTest.class);
 
     public static void main(String[] args) throws Exception {
         // eth.addr == 88:3f:99:03:ef:b0
 
-        // Zylk device name = simocodexbpn156e
-        // Chris device name = cdxb195b3
-
         // In this example 192.168.54.2 is the local IP of the computer 
running PLC4J and 192.168.54.23 is the IP of the PN device.
         //final PlcConnection connection = new 
DefaultPlcDriverManager().getConnection("profinet://192.168.54.2?gsddirectory=~/.gsd&devices=[[simocodexbpn156e,DAP%201,(1,),192.168.54.23]]&reductionratio=16&sendclockfactor=32&dataholdfactor=3&watchdogfactor=3");
         // REMARK: The driver would use the local network device with the 
given IP address and to an auto-discovery, trying to find any devices returned 
with the matching name.
         // If this device is then found and an IP address is provided, it 
would use PN-DCP to set the IP address of that device to the given value.
-        final PlcConnection connection = new 
DefaultPlcDriverManager().getConnection("profinet://192.168.54.220?gsddirectory=~/.gsd&devices=[[simocodexbpn156e,DAP%201,(1,)]]&reductionratio=128&sendclockfactor=128&dataholdfactor=3&watchdogfactor=3");
+        final PlcConnection connection = new 
DefaultPlcDriverManager().getConnection("profinet://192.168.54.220?gsddirectory=~/.gsd&devices=[[adam-6117pn,ID_DAP1,(1,)]]&reductionratio=64&sendclockfactor=64&dataholdfactor=3&watchdogfactor=3");
 
         PlcBrowseRequest browseRequest = 
connection.browseRequestBuilder().addQuery("all", "*").build();
         PlcBrowseResponse plcBrowseResponse = 
browseRequest.execute().get(4000, TimeUnit.MILLISECONDS);
diff --git 
a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTest.java
 
b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoSimocodeTest.java
similarity index 98%
rename from 
plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTest.java
rename to 
plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoSimocodeTest.java
index eac8db3f34..e1ba5b5b47 100644
--- 
a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoTest.java
+++ 
b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetIoSimocodeTest.java
@@ -29,9 +29,9 @@ import org.slf4j.LoggerFactory;
 
 import java.util.concurrent.TimeUnit;
 
-public class ManualProfinetIoTest {
+public class ManualProfinetIoSimocodeTest {
 
-    private static final Logger LOGGER = 
LoggerFactory.getLogger(ManualProfinetIoTest.class);
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(ManualProfinetIoSimocodeTest.class);
 
     public static void main(String[] args) throws Exception {
         // eth.addr == 88:3f:99:03:ef:b0
diff --git 
a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetPcapTest.java
 
b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetPcapTest.java
index 684c11ffd0..596114b087 100644
--- 
a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetPcapTest.java
+++ 
b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ManualProfinetPcapTest.java
@@ -30,20 +30,25 @@ import org.pcap4j.packet.Packet;
 import org.pcap4j.packet.UnknownPacket;
 
 import java.io.EOFException;
+import java.sql.Timestamp;
 import java.util.Arrays;
 import java.util.concurrent.TimeoutException;
 
 public class ManualProfinetPcapTest {
 
     public static void main(String[] args) throws Exception {
-        try (PcapHandle handle = 
Pcaps.openOffline("/Users/cdutz/Projects/Apache/PLC4X/profinet-slow.pcapng", 
PcapHandle.TimestampPrecision.NANO);){
-            int lastIncomingCycleTime = 0;
-            int lastOutgoingCycleTime = 0;
-            int minDelay = 65000;
-            int maxDelay = 0;
+        try (PcapHandle handle = 
Pcaps.openOffline("/Users/cdutz/Projects/Apache/PLC4X/profinet.pcapng", 
PcapHandle.TimestampPrecision.NANO);){
+            int lastIncomingCycleCounter = 0;
+            double averageIncomingCycleCounter = 0.0;
+            int numberIncomingPackets = 0;
+            Timestamp lastIncomingCycleTime = null;
+            int lastOutgoingCycleCounter = 0;
+            Timestamp lastOutgoingCycleTime = null;
             while (true) {
                 try {
                     Packet packet = handle.getNextPacketEx();
+                    Timestamp timestamp = handle.getTimestamp();
+
                     EthernetPacket.EthernetHeader packetHeader = 
(EthernetPacket.EthernetHeader) packet.getHeader();
                     boolean fromDevice = Arrays.equals(new byte[]{(byte) 0xF8, 
(byte) 0xE4, (byte) 0x3B, (byte) 0xB6, (byte) 0x9B, (byte) 0xBF}, 
packetHeader.getSrcAddr().getAddress());
 
@@ -56,8 +61,24 @@ public class ManualProfinetPcapTest {
                             PnDcp_Pdu pnDcpPdu = 
PnDcp_Pdu.staticParse(readBuffer);
                             if(pnDcpPdu instanceof PnDcp_Pdu_RealTimeCyclic) {
                                 PnDcp_Pdu_RealTimeCyclic pnDcpPdu1 = 
(PnDcp_Pdu_RealTimeCyclic) pnDcpPdu;
-                                lastIncomingCycleTime = 
pnDcpPdu1.getCycleCounter();
-                                //System.out.printf("--> %d\n", 
pnDcpPdu1.getCycleCounter());
+
+                                if(lastIncomingCycleCounter != 0) {
+                                    int lastCycles;
+                                    if(pnDcpPdu1.getCycleCounter() > 
lastIncomingCycleCounter) {
+                                        lastCycles = 
pnDcpPdu1.getCycleCounter() - lastIncomingCycleCounter;
+                                    } else {
+                                        lastCycles = 
(pnDcpPdu1.getCycleCounter() + 0xFFFF) - lastIncomingCycleCounter;
+                                    }
+                                    averageIncomingCycleCounter = 
(numberIncomingPackets * averageIncomingCycleCounter + lastCycles) / 
(numberIncomingPackets + 1);
+
+                                    if (lastIncomingCycleTime != null) {
+                                        System.out.printf("--> %3d %3d         
   %f\n", lastCycles, (timestamp.getNanos() - lastIncomingCycleTime.getNanos()) 
/ 1000000, averageIncomingCycleCounter);
+                                    }
+                                }
+
+                                numberIncomingPackets++;
+                                lastIncomingCycleCounter = 
pnDcpPdu1.getCycleCounter();
+                                lastIncomingCycleTime = timestamp;
                             }
                         } else {
                             System.out.println("Other packet");
@@ -68,17 +89,20 @@ public class ManualProfinetPcapTest {
                         PnDcp_Pdu pnDcpPdu = PnDcp_Pdu.staticParse(readBuffer);
                         if(pnDcpPdu instanceof PnDcp_Pdu_RealTimeCyclic) {
                             PnDcp_Pdu_RealTimeCyclic pnDcpPdu1 = 
(PnDcp_Pdu_RealTimeCyclic) pnDcpPdu;
-                            int difference = (pnDcpPdu1.getCycleCounter() < 
lastIncomingCycleTime) ? lastIncomingCycleTime - pnDcpPdu1.getCycleCounter() : 
pnDcpPdu1.getCycleCounter() - lastIncomingCycleTime;
-                            if(difference < 60000 && difference > 100) {
-                                if (difference < minDelay) {
-                                    minDelay = difference;
+                            if(lastOutgoingCycleCounter != 0) {
+                                int lastCycles;
+                                if(pnDcpPdu1.getCycleCounter() > 
lastOutgoingCycleCounter) {
+                                    lastCycles = pnDcpPdu1.getCycleCounter() - 
lastOutgoingCycleCounter;
+                                } else {
+                                    lastCycles = (pnDcpPdu1.getCycleCounter() 
+ 0xFFFF) - lastOutgoingCycleCounter;
                                 }
-                                if (difference > maxDelay) {
-                                    maxDelay = difference;
+
+                                if (lastOutgoingCycleTime != null) {
+                                    System.out.printf("<--          %3d 
%3d\n", lastCycles, (timestamp.getNanos() - lastOutgoingCycleTime.getNanos()) / 
1000000);
                                 }
-                                System.out.printf("<-- %10d %10d   
%10d-%10d\n", difference, pnDcpPdu1.getCycleCounter() - lastOutgoingCycleTime, 
minDelay, maxDelay);
                             }
-                            lastOutgoingCycleTime = 
pnDcpPdu1.getCycleCounter();
+                            lastOutgoingCycleCounter = 
pnDcpPdu1.getCycleCounter();
+                            lastOutgoingCycleTime = timestamp;
                         }
                     } else {
                         System.out.println("Other packet");

Reply via email to