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

hutcheb pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 6203dc6b07861169d2971855cfd92bde92070a64
Author: Ben Hutcheson <[email protected]>
AuthorDate: Mon Feb 6 19:12:24 2023 +0100

    fix(plc4j/profinet): Fixed issue with Write Parameter Size
---
 .../java/profinet/device/ProfinetChannel.java      |  2 +-
 .../plc4x/java/profinet/device/ProfinetDevice.java | 32 +++++++++++++---------
 2 files changed, 20 insertions(+), 14 deletions(-)

diff --git 
a/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/device/ProfinetChannel.java
 
b/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/device/ProfinetChannel.java
index d3bcaf716b..deb608c1e0 100644
--- 
a/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/device/ProfinetChannel.java
+++ 
b/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/device/ProfinetChannel.java
@@ -103,7 +103,7 @@ public class ProfinetChannel {
                     } else if (ethernetPacket.getHeader().getType() == 
EtherType.IPV4 && ethernetPacket.getPayload().getPayload() instanceof 
UdpPacket) {
                         UdpPacket payload = (UdpPacket) 
ethernetPacket.getPayload().getPayload();
                         // Check if it's a PROFINET packet
-                        if (payload.getHeader().getDstPort().value() == -30572 
|| payload.getHeader().getSrcPort().value() == -30572) {
+                        if (payload.getHeader().getDstPort().value() == -30572 
|| payload.getHeader().getDstPort().value() == -15536) {
                             isPnPacket = true;
                         }
                     }
diff --git 
a/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/device/ProfinetDevice.java
 
b/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/device/ProfinetDevice.java
index fc1c6c8a3e..769c217c8a 100644
--- 
a/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/device/ProfinetDevice.java
+++ 
b/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/device/ProfinetDevice.java
@@ -605,20 +605,9 @@ public class ProfinetDevice implements PlcSubscriber{
 
             int seqNumber = 0;
             List<PnIoCm_Block> requests = new ArrayList<>();
-            requests.add(
-                new IODWriteRequestHeader(
-                    (short) 1,
-                    (short) 0,
-                    seqNumber,
-                    ProfinetDeviceContext.ARUUID,
-                    0x00000000,
-                    0x0000,
-                    0x0000,
-                    0xe040,
-                    180,
-                    null
 
-                ));
+            // This will be filled in later
+            requests.add(null);
             seqNumber += 1;
             for (ProfinetInterfaceSubmoduleItem interfaceModule : 
deviceContext.getInterfaceSubModules()) {
                 requests.add(
@@ -674,7 +663,24 @@ public class ProfinetDevice implements PlcSubscriber{
                 }
                 index += 1;
             }
+            long multiWriteRecordLength = 0;
+            // The first record isn't included in the overall length
+            for (int i = 1; i < requests.size(); i++) {
+                multiWriteRecordLength += requests.get(i).getLengthInBytes();
+            }
 
+            requests.set(0, new IODWriteRequestHeader(
+                (short) 1,
+                (short) 0,
+                seqNumber,
+                ProfinetDeviceContext.ARUUID,
+                0x00000000,
+                0x0000,
+                0x0000,
+                0xe040,
+                multiWriteRecordLength,
+                null
+            ));
             return new DceRpc_Packet(
                 DceRpc_PacketType.REQUEST, true, false, false,
                 IntegerEncoding.BIG_ENDIAN, CharacterEncoding.ASCII, 
FloatingPointEncoding.IEEE,

Reply via email to