You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/09/27 10:36:28 UTC
[incubator-plc4x] branch feature/TopLevelItemSpliting updated:
[MODBUS/ADS] Integrate SingleItemToSingleRequestProtocol for now
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 <sr...@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();