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,
