You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2019/12/18 13:59:54 UTC

[plc4x] branch next-gen-core updated: Added Modbus

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

jfeinauer pushed a commit to branch next-gen-core
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/next-gen-core by this push:
     new 1f3763f  Added Modbus
1f3763f is described below

commit 1f3763ff2d2fa48af0a2da1e4df8d44f9adffcad
Author: Julian Feinauer <j....@pragmaticminds.de>
AuthorDate: Wed Dec 18 14:59:37 2019 +0100

    Added Modbus
---
 plc4j/drivers/modbus/pom.xml                       |  9 ++++-
 .../modbus/connection/BaseModbusPlcConnection.java |  9 +++++
 plc4j/drivers/pom.xml                              |  2 +-
 plc4j/protocols/modbus/pom.xml                     |  7 +++-
 .../java/modbus/netty/Plc4XModbusProtocol.java     | 45 +++++++++++++++++++---
 .../java/modbus/util/ModbusPlcFieldHandler.java    | 10 ++++-
 .../java/modbus/netty/Plc4XModbusProtocolTest.java | 40 +++++++++++++++++--
 plc4j/protocols/pom.xml                            |  2 +-
 .../apache/plc4x/java/spi/request/PlcRequest.java  | 28 ++++++++++++++
 9 files changed, 136 insertions(+), 16 deletions(-)

diff --git a/plc4j/drivers/modbus/pom.xml b/plc4j/drivers/modbus/pom.xml
index 43d4874..2746eb2 100644
--- a/plc4j/drivers/modbus/pom.xml
+++ b/plc4j/drivers/modbus/pom.xml
@@ -39,6 +39,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-spi</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
       <artifactId>plc4j-protocol-modbus</artifactId>
       <version>0.6.0-SNAPSHOT</version>
     </dependency>
@@ -50,7 +55,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base-serial</artifactId>
+      <artifactId>plc4j-trannsport-serial</artifactId>
       <version>0.6.0-SNAPSHOT</version>
     </dependency>
 
@@ -81,7 +86,7 @@
 
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base-test</artifactId>
+      <artifactId>plc4j-transport-test</artifactId>
       <version>0.6.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
index c222759..6c3b203 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
@@ -26,6 +26,15 @@ import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.spi.connection.ChannelFactory;
 import org.apache.plc4x.java.spi.connection.NettyPlcConnection;
 import org.apache.plc4x.java.modbus.util.ModbusPlcFieldHandler;
+import org.apache.plc4x.java.spi.messages.DefaultPlcReadRequest;
+import org.apache.plc4x.java.spi.messages.DefaultPlcWriteRequest;
+import org.apache.plc4x.java.spi.messages.InternalPlcReadRequest;
+import org.apache.plc4x.java.spi.messages.InternalPlcReadResponse;
+import org.apache.plc4x.java.spi.messages.InternalPlcWriteRequest;
+import org.apache.plc4x.java.spi.messages.InternalPlcWriteResponse;
+import org.apache.plc4x.java.spi.messages.PlcReader;
+import org.apache.plc4x.java.spi.messages.PlcRequestContainer;
+import org.apache.plc4x.java.spi.messages.PlcWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/plc4j/drivers/pom.xml b/plc4j/drivers/pom.xml
index ba166a3..15025ed 100644
--- a/plc4j/drivers/pom.xml
+++ b/plc4j/drivers/pom.xml
@@ -37,7 +37,7 @@
     <module>ab-eth</module>
     <module>ads</module>
 <!--    <module>ethernet-ip</module>-->
-<!--    <module>modbus</module>-->
+    <module>modbus</module>
 <!--    <module>s7</module>-->
     <module>simulated</module>
 	  <module>opcua</module>
diff --git a/plc4j/protocols/modbus/pom.xml b/plc4j/protocols/modbus/pom.xml
index a07bc73..e119f66 100644
--- a/plc4j/protocols/modbus/pom.xml
+++ b/plc4j/protocols/modbus/pom.xml
@@ -42,6 +42,11 @@
       <artifactId>plc4j-api</artifactId>
       <version>0.6.0-SNAPSHOT</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-spi</artifactId>
+      <version>0.6.0-SNAPSHOT</version>
+    </dependency>
 
 
     <dependency>
@@ -91,7 +96,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.plc4x</groupId>
-      <artifactId>plc4j-protocol-driver-base-test</artifactId>
+      <artifactId>plc4j-transport-test</artifactId>
       <version>0.6.0-SNAPSHOT</version>
       <scope>test</scope>
     </dependency>
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
index 12526bd..355b51b 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocol.java
@@ -20,8 +20,25 @@ package org.apache.plc4x.java.modbus.netty;
 
 import com.digitalpetri.modbus.ModbusPdu;
 import com.digitalpetri.modbus.codec.ModbusTcpPayload;
-import com.digitalpetri.modbus.requests.*;
-import com.digitalpetri.modbus.responses.*;
+import com.digitalpetri.modbus.requests.MaskWriteRegisterRequest;
+import com.digitalpetri.modbus.requests.ReadCoilsRequest;
+import com.digitalpetri.modbus.requests.ReadDiscreteInputsRequest;
+import com.digitalpetri.modbus.requests.ReadHoldingRegistersRequest;
+import com.digitalpetri.modbus.requests.ReadInputRegistersRequest;
+import com.digitalpetri.modbus.requests.WriteMultipleCoilsRequest;
+import com.digitalpetri.modbus.requests.WriteMultipleRegistersRequest;
+import com.digitalpetri.modbus.requests.WriteSingleCoilRequest;
+import com.digitalpetri.modbus.requests.WriteSingleRegisterRequest;
+import com.digitalpetri.modbus.responses.ExceptionResponse;
+import com.digitalpetri.modbus.responses.MaskWriteRegisterResponse;
+import com.digitalpetri.modbus.responses.ReadCoilsResponse;
+import com.digitalpetri.modbus.responses.ReadDiscreteInputsResponse;
+import com.digitalpetri.modbus.responses.ReadHoldingRegistersResponse;
+import com.digitalpetri.modbus.responses.ReadInputRegistersResponse;
+import com.digitalpetri.modbus.responses.WriteMultipleCoilsResponse;
+import com.digitalpetri.modbus.responses.WriteMultipleRegistersResponse;
+import com.digitalpetri.modbus.responses.WriteSingleCoilResponse;
+import com.digitalpetri.modbus.responses.WriteSingleRegisterResponse;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
@@ -37,15 +54,33 @@ import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.modbus.messages.items.DefaultModbusByteArrayFieldItem;
+import org.apache.plc4x.java.modbus.model.CoilModbusField;
+import org.apache.plc4x.java.modbus.model.MaskWriteRegisterModbusField;
+import org.apache.plc4x.java.modbus.model.ModbusField;
+import org.apache.plc4x.java.modbus.model.ReadDiscreteInputsModbusField;
+import org.apache.plc4x.java.modbus.model.ReadHoldingRegistersModbusField;
+import org.apache.plc4x.java.modbus.model.ReadInputRegistersModbusField;
+import org.apache.plc4x.java.modbus.model.RegisterModbusField;
+import org.apache.plc4x.java.spi.messages.DefaultPlcReadResponse;
+import org.apache.plc4x.java.spi.messages.DefaultPlcWriteResponse;
+import org.apache.plc4x.java.spi.messages.InternalPlcFieldRequest;
+import org.apache.plc4x.java.spi.messages.InternalPlcReadRequest;
+import org.apache.plc4x.java.spi.messages.InternalPlcRequest;
+import org.apache.plc4x.java.spi.messages.InternalPlcResponse;
+import org.apache.plc4x.java.spi.messages.InternalPlcWriteRequest;
+import org.apache.plc4x.java.spi.messages.PlcRequestContainer;
 import org.apache.plc4x.java.spi.messages.items.BaseDefaultFieldItem;
 import org.apache.plc4x.java.spi.messages.items.DefaultBooleanFieldItem;
-import org.apache.plc4x.java.modbus.messages.items.DefaultModbusByteArrayFieldItem;
-import org.apache.plc4x.java.modbus.model.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.math.BigInteger;
-import java.util.*;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.atomic.AtomicInteger;
diff --git a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/util/ModbusPlcFieldHandler.java b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/util/ModbusPlcFieldHandler.java
index 3097ada..b571b77 100644
--- a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/util/ModbusPlcFieldHandler.java
+++ b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/util/ModbusPlcFieldHandler.java
@@ -21,11 +21,17 @@ package org.apache.plc4x.java.modbus.util;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.modbus.messages.items.DefaultModbusByteArrayFieldItem;
+import org.apache.plc4x.java.modbus.model.CoilModbusField;
+import org.apache.plc4x.java.modbus.model.MaskWriteRegisterModbusField;
+import org.apache.plc4x.java.modbus.model.ModbusField;
+import org.apache.plc4x.java.modbus.model.ReadDiscreteInputsModbusField;
+import org.apache.plc4x.java.modbus.model.ReadHoldingRegistersModbusField;
+import org.apache.plc4x.java.modbus.model.ReadInputRegistersModbusField;
+import org.apache.plc4x.java.modbus.model.RegisterModbusField;
 import org.apache.plc4x.java.spi.connection.DefaultPlcFieldHandler;
 import org.apache.plc4x.java.spi.messages.items.BaseDefaultFieldItem;
 import org.apache.plc4x.java.spi.messages.items.DefaultBooleanFieldItem;
-import org.apache.plc4x.java.modbus.messages.items.DefaultModbusByteArrayFieldItem;
-import org.apache.plc4x.java.modbus.model.*;
 
 import java.util.BitSet;
 import java.util.LinkedList;
diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
index 10d245b..d2313be 100644
--- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
+++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
@@ -20,8 +20,24 @@ package org.apache.plc4x.java.modbus.netty;
 
 import com.digitalpetri.modbus.ModbusPdu;
 import com.digitalpetri.modbus.codec.ModbusTcpPayload;
-import com.digitalpetri.modbus.requests.*;
-import com.digitalpetri.modbus.responses.*;
+import com.digitalpetri.modbus.requests.MaskWriteRegisterRequest;
+import com.digitalpetri.modbus.requests.ReadCoilsRequest;
+import com.digitalpetri.modbus.requests.ReadDiscreteInputsRequest;
+import com.digitalpetri.modbus.requests.ReadHoldingRegistersRequest;
+import com.digitalpetri.modbus.requests.ReadInputRegistersRequest;
+import com.digitalpetri.modbus.requests.WriteMultipleCoilsRequest;
+import com.digitalpetri.modbus.requests.WriteMultipleRegistersRequest;
+import com.digitalpetri.modbus.requests.WriteSingleCoilRequest;
+import com.digitalpetri.modbus.requests.WriteSingleRegisterRequest;
+import com.digitalpetri.modbus.responses.MaskWriteRegisterResponse;
+import com.digitalpetri.modbus.responses.ReadCoilsResponse;
+import com.digitalpetri.modbus.responses.ReadDiscreteInputsResponse;
+import com.digitalpetri.modbus.responses.ReadHoldingRegistersResponse;
+import com.digitalpetri.modbus.responses.ReadInputRegistersResponse;
+import com.digitalpetri.modbus.responses.WriteMultipleCoilsResponse;
+import com.digitalpetri.modbus.responses.WriteMultipleRegistersResponse;
+import com.digitalpetri.modbus.responses.WriteSingleCoilResponse;
+import com.digitalpetri.modbus.responses.WriteSingleRegisterResponse;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import org.apache.commons.lang3.RandomStringUtils;
@@ -29,6 +45,13 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.plc4x.java.api.messages.PlcResponse;
 import org.apache.plc4x.java.mock.protocol.Plc4XSupportedDataTypes;
 import org.apache.plc4x.java.modbus.util.ModbusPlcFieldHandler;
+import org.apache.plc4x.java.spi.messages.DefaultPlcReadRequest;
+import org.apache.plc4x.java.spi.messages.DefaultPlcWriteRequest;
+import org.apache.plc4x.java.spi.messages.InternalPlcReadRequest;
+import org.apache.plc4x.java.spi.messages.InternalPlcRequest;
+import org.apache.plc4x.java.spi.messages.InternalPlcResponse;
+import org.apache.plc4x.java.spi.messages.InternalPlcWriteRequest;
+import org.apache.plc4x.java.spi.messages.PlcRequestContainer;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -39,14 +62,23 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.math.BigInteger;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.GregorianCalendar;
+import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import static org.apache.plc4x.java.mock.protocol.Plc4XSupportedDataTypes.streamOfBigEndianDataTypePairs;
 import static org.apache.plc4x.java.mock.util.Assert.assertByteEquals;
-import static org.hamcrest.Matchers.*;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assume.assumeThat;
 
diff --git a/plc4j/protocols/pom.xml b/plc4j/protocols/pom.xml
index 8e5f3d6..7863bd5 100644
--- a/plc4j/protocols/pom.xml
+++ b/plc4j/protocols/pom.xml
@@ -39,7 +39,7 @@
 <!--    <module>ethernet-ip</module>-->
 <!--    <module>iso-on-tcp</module>-->
 <!--    <module>iso-tp</module>-->
-<!--    <module>modbus</module>-->
+    <module>modbus</module>
 <!--    <module>s7</module>-->
 <!--    <module>benchmarks</module>-->
   </modules>
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/request/PlcRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/request/PlcRequest.java
new file mode 100644
index 0000000..5c36894
--- /dev/null
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/request/PlcRequest.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Handle to a Request sent via Transport Layer (usually Netty).
+ */
+package org.apache.plc4x.java.spi.request;
+
+public class PlcRequest {
+
+    // void expectResponse();
+}