This is an automated email from the ASF dual-hosted git repository. sruehl pushed a commit to branch feature/TopLevelItemSpliting in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
The following commit(s) were added to refs/heads/feature/TopLevelItemSpliting by this push: new b2f0fa3 [MODBUS/ADS] Integrate SingleItemToSingleRequestProtocol for now b2f0fa3 is described below commit b2f0fa335caaaa832ed9385a4f1975857dce7e7b Author: Sebastian Rühl <sru...@apache.org> AuthorDate: Thu Sep 27 12:36:24 2018 +0200 [MODBUS/ADS] Integrate SingleItemToSingleRequestProtocol for now --- .../ads/connection/AdsSerialPlcConnection.java | 2 ++ .../java/ads/connection/AdsTcpPlcConnection.java | 2 ++ .../modbus/connection/ModbusTcpPlcConnection.java | 2 ++ .../plc4x/java/modbus/ManualPlc4XModbusTest.java | 32 ++++++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java index 03a0588..203ebad 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java @@ -29,6 +29,7 @@ import org.apache.plc4x.java.ads.protocol.Payload2SerialProtocol; import org.apache.plc4x.java.ads.protocol.Plc4x2AdsProtocol; import org.apache.plc4x.java.ads.protocol.util.SingleMessageRateLimiter; import org.apache.plc4x.java.base.connection.SerialChannelFactory; +import org.apache.plc4x.java.base.protocol.SingleItemToSingleRequestProtocol; import java.util.concurrent.CompletableFuture; @@ -61,6 +62,7 @@ public class AdsSerialPlcConnection extends AdsAbstractPlcConnection { pipeline.addLast(new SingleMessageRateLimiter()); pipeline.addLast(new Ads2PayloadProtocol()); pipeline.addLast(new Plc4x2AdsProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, fieldMapping)); + pipeline.addLast(new SingleItemToSingleRequestProtocol()); } }; } diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java index d498694..9483d22 100644 --- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java +++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java @@ -46,6 +46,7 @@ import org.apache.plc4x.java.base.messages.*; import org.apache.plc4x.java.base.model.DefaultPlcConsumerRegistration; import org.apache.plc4x.java.base.model.InternalPlcConsumerRegistration; import org.apache.plc4x.java.base.model.InternalPlcSubscriptionHandle; +import org.apache.plc4x.java.base.protocol.SingleItemToSingleRequestProtocol; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -113,6 +114,7 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc pipeline.addLast(new Payload2TcpProtocol()); pipeline.addLast(new Ads2PayloadProtocol()); pipeline.addLast(new Plc4x2AdsProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, fieldMapping)); + pipeline.addLast(new SingleItemToSingleRequestProtocol()); } }; } diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnection.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnection.java index 92f5337..15fe6dc 100644 --- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnection.java +++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnection.java @@ -26,6 +26,7 @@ import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelInitializer; import org.apache.plc4x.java.base.connection.ChannelFactory; import org.apache.plc4x.java.base.connection.TcpSocketChannelFactory; +import org.apache.plc4x.java.base.protocol.SingleItemToSingleRequestProtocol; import org.apache.plc4x.java.modbus.netty.Plc4XModbusProtocol; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,6 +69,7 @@ public class ModbusTcpPlcConnection extends BaseModbusPlcConnection { protected void initChannel(Channel channel) { channel.pipeline().addLast(new ModbusTcpCodec(new ModbusRequestEncoder(), new ModbusResponseDecoder())); channel.pipeline().addLast(new Plc4XModbusProtocol()); + channel.pipeline().addLast(new SingleItemToSingleRequestProtocol()); } }; } diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java index 21ef508..bfa1f2c 100644 --- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java +++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java @@ -31,6 +31,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays; import java.util.Collection; +import java.util.stream.IntStream; public class ManualPlc4XModbusTest { @@ -81,6 +82,37 @@ public class ManualPlc4XModbusTest { } { + // Read an int from 2 registers and multiple requests + PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found")); + + // Just dump the actual values + PlcReadResponse<?> readResponse = reader.read(builder -> builder + .addItem("randomRegister1", "register:1[2]") + .addItem("randomRegister2", "register:10[3]") + .addItem("randomRegister3", "register:20[4]") + .addItem("randomRegister4", "register:30[5]") + .addItem("randomRegister5", "register:40[6]") + ).get(); + System.out.println("Response " + readResponse); + IntStream.range(1, 6).forEach(i -> { + Collection<Byte[]> randomRegisters = readResponse.getAllByteArrays("randomRegister" + i); + randomRegisters.stream() + .map(HexUtil::toHex) + .map(hex -> "Register " + i + " Value: " + hex) + .forEach(System.out::println); + + // Read an actual int + Byte[] registerBytes = randomRegisters.stream() + .flatMap(Arrays::stream) + .toArray(Byte[]::new); + int readInt = ByteBuffer.wrap(ArrayUtils.toPrimitive(registerBytes)) + .order(ByteOrder.BIG_ENDIAN) + .getInt(); + System.out.println("Read int " + i + " " + readInt + " from register"); + }); + } + + { PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found")); PlcReadResponse<?> readResponse = reader.read(builder -> builder.addItem("randomCoil", "coil:1[9]")).get();