This is an automated email from the ASF dual-hosted git repository. hutcheb pushed a commit to branch plc4j/profinet in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit b55c5d22550f970cbd34a73fdf0c3292ad674ecd Author: Ben Hutcheson <[email protected]> AuthorDate: Thu Sep 8 07:03:32 2022 -0600 fix(plc4j(profinet): Connections are working for my setup --- .../profinet/protocol/ProfinetProtocolLogic.java | 46 ++++++---------------- .../apache/plc4x/java/profinet/ProfinetPoc.java | 2 +- .../resources/protocols/profinet/profinet.mspec | 2 +- 3 files changed, 13 insertions(+), 37 deletions(-) diff --git a/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/protocol/ProfinetProtocolLogic.java b/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/protocol/ProfinetProtocolLogic.java index 62b209c10..836732954 100644 --- a/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/protocol/ProfinetProtocolLogic.java +++ b/plc4j/drivers/profinet/src/main/java/org/apache/plc4x/java/profinet/protocol/ProfinetProtocolLogic.java @@ -40,10 +40,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.net.*; import java.time.Duration; -import java.util.Arrays; -import java.util.Collections; -import java.util.Optional; -import java.util.UUID; +import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; @@ -133,6 +130,7 @@ public class ProfinetProtocolLogic extends Plc4xProtocolBase<Ethernet_Frame> { connectRequestPacket.setAddress(remoteAddress.getAddress()); connectRequestPacket.setPort(remoteAddress.getPort()); // Send it. + udpSocket.send(connectRequestPacket); // Receive the response. @@ -221,14 +219,14 @@ public class ProfinetProtocolLogic extends Plc4xProtocolBase<Ethernet_Frame> { new DceRpc_InterfaceUuid_DeviceInterface(), profinetDriverContext.getDceRpcActivityUuid(), 0, 0, DceRpc_Operation.CONNECT, - new PnIoCm_Packet_Req(404, 404, 404, 0, 404, + new PnIoCm_Packet_Req(16696, 16696, 0, 0, Arrays.asList( new PnIoCm_Block_ArReq((short) 1, (short) 0, PnIoCm_ArType.IO_CONTROLLER, new Uuid(Hex.decodeHex("654519352df3b6428f874371217c2b51")), profinetDriverContext.getSessionKey(), profinetDriverContext.getLocalMacAddress(), new Uuid(Hex.decodeHex("dea000006c9711d1827100640008002a")), - false, false, false, + false, true, false, false, PnIoCm_CompanionArType.SINGLE_AR, false, true, false, PnIoCm_State.ACTIVE, 600, @@ -249,31 +247,23 @@ public class ProfinetProtocolLogic extends Plc4xProtocolBase<Ethernet_Frame> { Arrays.asList( new PnIoCm_IoDataObject(0, 0x0001, 0), new PnIoCm_IoDataObject(0, 0x8000, 1), - new PnIoCm_IoDataObject(0, 0x8001, 2), - new PnIoCm_IoDataObject(0, 0x8002, 3), - new PnIoCm_IoDataObject(1, 0x0001, 4) + new PnIoCm_IoDataObject(0, 0x8001, 2) ), - Collections.singletonList( - new PnIoCm_IoCs(0x0001, 0x0001, 0x0019) - )) + new ArrayList<PnIoCm_IoCs>(0)) )), new PnIoCm_Block_IoCrReq((short) 1, (short) 0, PnIoCm_IoCrType.OUTPUT_CR, 0x0002, 0x8892, false, false, false, false, PnIoCm_RtClass.RT_CLASS_2, 40, - 0x8000, 128, 8, 1, 0, 0xffffffff, + 0xFFFF, 128, 8, 1, 0, 0xffffffff, 3, 3, 0xC000, new MacAddress(Hex.decodeHex("000000000000")), Collections.singletonList( new PnIoCm_IoCrBlockReqApi( - Collections.singletonList( - new PnIoCm_IoDataObject(0x0001, 0x0001, 0x0005) - ), + new ArrayList<PnIoCm_IoDataObject>(0), Arrays.asList( new PnIoCm_IoCs(0, 0x0001, 0), new PnIoCm_IoCs(0, 0x8000, 1), - new PnIoCm_IoCs(0, 0x8001, 2), - new PnIoCm_IoCs(0, 0x8002, 3), - new PnIoCm_IoCs(1, 0x0001, 4) + new PnIoCm_IoCs(0, 0x8001, 2) ) ) ) @@ -287,29 +277,15 @@ public class ProfinetProtocolLogic extends Plc4xProtocolBase<Ethernet_Frame> { 0x00000001, false, false, false, false), new PnIoCm_Submodule_NoInputNoOutputData(0x8000, - 0x00000002, false, false, + 0x00008000, false, false, false, false), new PnIoCm_Submodule_NoInputNoOutputData(0x8001, - 0x00000003, false, false, - false, false), - new PnIoCm_Submodule_NoInputNoOutputData(0x8002, - 0x00000003, false, false, + 0x00008001, false, false, false, false) ) ) ) ), - new PnIoCm_Block_ExpectedSubmoduleReq((short) 1, (short) 0, - Collections.singletonList( - new PnIoCm_ExpectedSubmoduleBlockReqApi(1, - 0x00000022, 0x00000000, Collections.singletonList( - new PnIoCm_Submodule_InputAndOutputData(0x0001, 0x00000010, - false, false, false, - false, 20, (short) 1, (short) 1, - 6, (short) 1, (short) 1)) - ) - ) - ), new PnIoCm_Block_AlarmCrReq((short) 1, (short) 0, PnIoCm_AlarmCrType.ALARM_CR, 0x8892, false, false, 1, 3, 0x0000, 200, 0xC000, 0xA000) diff --git a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetPoc.java b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetPoc.java index 401258f04..90ccefbc3 100644 --- a/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetPoc.java +++ b/plc4j/drivers/profinet/src/test/java/org/apache/plc4x/java/profinet/ProfinetPoc.java @@ -40,7 +40,7 @@ public class ProfinetPoc { new DceRpc_ObjectUuid((byte) 0x00, 0x0001, 0x0904, 0x002A), new DceRpc_InterfaceUuid_DeviceInterface(), generateActivityUuid(), 0, 0, DceRpc_Operation.CONNECT, - new PnIoCm_Packet_Req(404, 404, 404, 0, 404, + new PnIoCm_Packet_Req(404, 404, 0, 404, Arrays.asList( new PnIoCm_Block_ArReq((short) 1, (short) 0, PnIoCm_ArType.IO_CONTROLLER, new Uuid(Hex.decodeHex("654519352df3b6428f874371217c2b51")), 2, diff --git a/protocols/profinet/src/main/resources/protocols/profinet/profinet.mspec b/protocols/profinet/src/main/resources/protocols/profinet/profinet.mspec index b6d05a84a..35bdaf24c 100644 --- a/protocols/profinet/src/main/resources/protocols/profinet/profinet.mspec +++ b/protocols/profinet/src/main/resources/protocols/profinet/profinet.mspec @@ -651,7 +651,7 @@ [typeSwitch packetType ['REQUEST' PnIoCm_Packet_Req [simple uint 32 argsMaximum ] - [simple uint 32 argsLength ] + [implicit uint 32 argsLength 'lengthInBytes - 20'] [simple uint 32 arrayMaximumCount ] [simple uint 32 arrayOffset ] [simple uint 32 arrayActualCount ]
