You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/10/26 17:37:24 UTC

[plc4x] 01/01: Merge branch 'develop' of https://gitbox.apache.org/repos/asf/plc4x into feature/plc4go

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

cdutz pushed a commit to branch feature/plc4go
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit b741a8369a61d815aed60802723a342816a9d4ee
Merge: 8a46474 30e82f8
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Mon Oct 26 18:01:50 2020 +0100

    Merge branch 'develop' of https://gitbox.apache.org/repos/asf/plc4x into feature/plc4go
    
     Conflicts:
    	plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
    	plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusFieldDataTypeTest.java
    	sandbox/test-java-df1-driver/pom.xml

 .../plc4x/java/api/messages/PlcReadRequest.java    |   3 +
 .../plc4x/java/api/messages/PlcWriteRequest.java   |  16 +
 .../org/apache/plc4x/java/api/model/PlcField.java  |  13 +
 .../org/apache/plc4x/java/api/value/PlcBOOL.java   |   4 +-
 .../org/apache/plc4x/java/api/value/PlcBYTE.java   |   2 +-
 .../org/apache/plc4x/java/api/value/PlcCHAR.java   |   7 +-
 .../org/apache/plc4x/java/api/value/PlcDINT.java   |  16 +-
 .../org/apache/plc4x/java/api/value/PlcDWORD.java  |   2 +-
 .../org/apache/plc4x/java/api/value/PlcINT.java    |   2 +-
 .../org/apache/plc4x/java/api/value/PlcLINT.java   |   2 +-
 .../org/apache/plc4x/java/api/value/PlcLREAL.java  |   2 +-
 .../org/apache/plc4x/java/api/value/PlcLWORD.java  |   2 +-
 .../org/apache/plc4x/java/api/value/PlcREAL.java   |   2 +-
 .../org/apache/plc4x/java/api/value/PlcSINT.java   |   2 +-
 .../org/apache/plc4x/java/api/value/PlcUDINT.java  |   2 +-
 .../org/apache/plc4x/java/api/value/PlcUINT.java   |   2 +-
 .../org/apache/plc4x/java/api/value/PlcULINT.java  |   2 +-
 .../org/apache/plc4x/java/api/value/PlcUSINT.java  |   2 +-
 .../org/apache/plc4x/java/api/value/PlcWCHAR.java  |   7 +-
 .../org/apache/plc4x/java/api/value/PlcWORD.java   |   2 +-
 plc4j/drivers/ads/pom.xml                          |  14 +-
 .../org/apache/plc4x/java/ads/field/AdsField.java  |   2 -
 .../plc4x/java/ads/field/DirectAdsField.java       |   1 +
 .../plc4x/java/ads/field/SymbolicAdsField.java     |   1 +
 .../ads/AdsDiscoverySerializerParserTest.java      |  30 ++
 .../readwrite/context/FirmataDriverContext.java    |  12 +-
 .../java/firmata/readwrite/field/FirmataField.java |   2 +-
 .../readwrite/field/FirmataFieldDigital.java       |   2 +-
 .../readwrite/protocol/FirmataProtocolLogic.java   |   6 +-
 .../plc4x/java/modbus/field/ModbusField.java       |   2 +-
 .../java/modbus/protocol/ModbusProtocolLogic.java  |  17 +-
 .../plc4x/java/modbus/ModbusFieldDataTypeTest.java |  10 +-
 .../apache/plc4x/java/modbus/ModbusFieldTest.java  |  10 +-
 plc4j/drivers/opcua/pom.xml                        |   4 -
 .../opcua/connection/OpcuaTcpPlcConnection.java    |   2 +-
 .../plc4x/java/s7/readwrite/field/S7Field.java     |   2 +-
 .../java/s7/readwrite/optimizer/S7Optimizer.java   |   4 +-
 .../s7/readwrite/protocol/S7ProtocolLogic.java     |   6 +-
 .../plc4x/java/s7/readwrite/field/S7FieldTest.java |   2 +-
 .../plc4x/java/simulated/field/SimulatedField.java |   2 +-
 .../java/simulated/field/SimulatedFieldTest.java   |   2 +-
 .../java/spi/messages/DefaultPlcReadRequest.java   |  17 +-
 .../java/spi/messages/DefaultPlcWriteRequest.java  |  94 ++++-
 pom.xml                                            |  39 ++-
 .../plc4x/protocol/ads/ADSDiscoveryProtocol.java   |  49 +++
 ...e.plc4x.plugins.codegenerator.protocol.Protocol |   3 +-
 .../resources/protocols/ads/ads-discovery.mspec    |  89 +++--
 .../protocols/ads/AdsDiscoverySerializerTest.xml   | 377 +++++++++++++++++++++
 .../resources/protocols/ads/DriverTestsuite.xml    |   8 +-
 .../resources/protocols/s7/DriverTestsuite.xml     |   6 +-
 sandbox/code-gen/pom.xml                           |  28 +-
 sandbox/opcua-server/README.adoc                   | 121 +++++++
 sandbox/opcua-server/pom.xml                       | 244 +++++++++++++
 .../java/opcuaserver/AttributeLoggingFilter.java   |  73 ++++
 .../plc4x/java/opcuaserver/Configuration.java      |  82 +++++
 .../java/opcuaserver/DeviceConfiguration.java      |  35 +-
 .../plc4x/java/opcuaserver/KeyStoreLoader.java     | 170 ++++++++++
 .../apache/plc4x/java/opcuaserver/OPCUAServer.java | 357 +++++++++++++++++++
 .../java/opcuaserver/PasswordConfiguration.java    |  92 +++++
 .../java/opcuaserver/RestrictedAccessFilter.java   |  55 +++
 .../org/apache/plc4x/java/opcuaserver/Tag.java     |  28 +-
 .../org/apache/plc4x/java/opcuaserver/User.java    | 104 ++++++
 .../opcuaserver/backend/Plc4xCommunication.java    | 254 ++++++++++++++
 .../java/opcuaserver/backend/Plc4xNamespace.java   | 258 ++++++++++++++
 sandbox/opcua-server/src/main/resources/config.yml |  43 +++
 .../opcua-server/src/main/resources/logback.xml    |  34 ++
 .../org/apache/plc4x/java/opcuaserver/AppTest.java |  33 +-
 sandbox/pom.xml                                    |  29 +-
 sandbox/test-java-df1-driver/pom.xml               |  19 +-
 src/site/asciidoc/users/adopters.adoc              |   3 +
 .../logo_record_evolution_single_dark_bgfont.png   | Bin 0 -> 10498 bytes
 71 files changed, 2797 insertions(+), 172 deletions(-)

diff --cc plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
index 3580c04,202fdff..45ad0c9
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
@@@ -278,10 -275,9 +279,10 @@@ public class ModbusProtocolLogic extend
      private ModbusPDU getWriteRequestPdu(PlcField field, PlcValue plcValue) {
          if(field instanceof ModbusFieldCoil) {
              ModbusFieldCoil coil = (ModbusFieldCoil) field;
 -            ModbusPDUWriteMultipleCoilsRequest request = new ModbusPDUWriteMultipleCoilsRequest(coil.getAddress(), coil.getNumberOfElements(),
 +            ModbusPDUWriteMultipleCoilsRequest request =
-                 new ModbusPDUWriteMultipleCoilsRequest(coil.getAddress(), coil.getQuantity(),
++                new ModbusPDUWriteMultipleCoilsRequest(coil.getAddress(), coil.getNumberOfElements(),
                  fromPlcValue(field, plcValue));
-             if (request.getQuantity() == coil.getQuantity()) {
+             if (request.getQuantity() == coil.getNumberOfElements()) {
                  return request;
              } else {
                  throw new PlcRuntimeException("Number of requested bytes (" + request.getQuantity() +
@@@ -300,21 -295,17 +301,20 @@@
              }
          } else if(field instanceof ModbusExtendedRegister) {
              ModbusExtendedRegister extendedRegister = (ModbusExtendedRegister) field;
 -            int group1_address = extendedRegister.getAddress() % FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH;
 -            int group2_address = 0;
 -            int group1_quantity, group2_quantity;
 +            int group1Address = extendedRegister.getAddress() % FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH;
 +            int group2Address = 0;
 +            int group1Quantity;
 +            int group2Quantity;
              byte[] plcValue1, plcValue2;
 -            short group1_file_number = (short) (Math.floor(extendedRegister.getAddress() / FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH) + 1);
 -            short group2_file_number;
 +            short group1FileNumber = (short)
 +                (Math.floor(extendedRegister.getAddress() / FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH) + 1);
 +            short group2FileNumber;
              ModbusPDUWriteFileRecordRequestItem[] itemArray;
- 
 -            if ((group1_address + extendedRegister.getLengthWords()) <= FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH) {
 +            if ((group1Address + extendedRegister.getLengthWords()) <= FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH) {
                //If request doesn't span file records, use a single group
 -              group1_quantity = extendedRegister.getLengthWords();
 -              ModbusPDUWriteFileRecordRequestItem group1 = new ModbusPDUWriteFileRecordRequestItem((short) 6, group1_file_number, group1_address, fromPlcValue(field, plcValue));
 +              group1Quantity = extendedRegister.getLengthWords();
 +              ModbusPDUWriteFileRecordRequestItem group1 = new ModbusPDUWriteFileRecordRequestItem(
 +                  (short) 6, group1FileNumber, group1Address, fromPlcValue(field, plcValue));
                itemArray = new ModbusPDUWriteFileRecordRequestItem[] {group1};
              } else {
                //If it doesn span a file record. e.g. 609998[10] request 2 words in first group and 8 in second.
diff --cc plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusFieldDataTypeTest.java
index 125b0c4,09f049b..51e61d1
--- a/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusFieldDataTypeTest.java
+++ b/plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusFieldDataTypeTest.java
@@@ -36,8 -36,8 +36,8 @@@ public class ModbusFieldDataTypeTest 
                                  {"REAL","2"}};
          for(int i = 0; i< datatypes.length; i++){
              ModbusFieldHoldingRegister holdingregister = ModbusFieldHoldingRegister.of("holding-register:1:" + datatypes[i][0]);
 -            Assertions.assertEquals(datatypes[i][0], holdingregister.getDataType());
 +            Assertions.assertEquals("IEC61131_" + datatypes[i][0], holdingregister.getDataType());
-             Assertions.assertEquals(1, holdingregister.getQuantity());
+             Assertions.assertEquals(1, holdingregister.getNumberOfElements());
              Assertions.assertEquals(Integer.parseInt(datatypes[i][1]) * 2, holdingregister.getLengthBytes());
              Assertions.assertEquals(Integer.parseInt(datatypes[i][1]), holdingregister.getLengthWords());
          }
@@@ -51,8 -51,8 +51,8 @@@
                                  {"REAL","2"}};
          for(int i = 0; i< datatypes.length; i++){
              ModbusFieldInputRegister inputregister = ModbusFieldInputRegister.of("input-register:1:" + datatypes[i][0]);
 -            Assertions.assertEquals(datatypes[i][0], inputregister.getDataType());
 +            Assertions.assertEquals("IEC61131_" + datatypes[i][0], inputregister.getDataType());
-             Assertions.assertEquals(1, inputregister.getQuantity());
+             Assertions.assertEquals(1, inputregister.getNumberOfElements());
              Assertions.assertEquals(Integer.parseInt(datatypes[i][1]) * 2, inputregister.getLengthBytes());
              Assertions.assertEquals(Integer.parseInt(datatypes[i][1]), inputregister.getLengthWords());
          }
@@@ -67,8 -67,8 +67,8 @@@
                                  {"REAL","2"}};
          for(int i = 0; i< datatypes.length; i++){
              ModbusExtendedRegister extendedregister = ModbusExtendedRegister.of("extended-register:1:" + datatypes[i][0]);
 -            Assertions.assertEquals(datatypes[i][0], extendedregister.getDataType());
 +            Assertions.assertEquals("IEC61131_" + datatypes[i][0], extendedregister.getDataType());
-             Assertions.assertEquals(1, extendedregister.getQuantity());
+             Assertions.assertEquals(1, extendedregister.getNumberOfElements());
              Assertions.assertEquals(Integer.parseInt(datatypes[i][1]) * 2, extendedregister.getLengthBytes());
              Assertions.assertEquals(Integer.parseInt(datatypes[i][1]), extendedregister.getLengthWords());
          }
@@@ -80,8 -80,8 +80,8 @@@
          String[][] datatypes = {{"BOOL","1"}};
          for(int i = 0; i< datatypes.length; i++){
              ModbusFieldCoil coil = ModbusFieldCoil.of("coil:1:" + datatypes[i][0]);
 -            Assertions.assertEquals(datatypes[i][0], coil.getDataType());
 +            Assertions.assertEquals("IEC61131_" + datatypes[i][0], coil.getDataType());
-             Assertions.assertEquals(1, coil.getQuantity());
+             Assertions.assertEquals(1, coil.getNumberOfElements());
          }
      }
  
@@@ -91,8 -91,8 +91,8 @@@
          String[][] datatypes = {{"BOOL","1"}};
          for(int i = 0; i< datatypes.length; i++){
              ModbusFieldDiscreteInput discrete = ModbusFieldDiscreteInput.of("discrete-input:1:" + datatypes[i][0]);
 -            Assertions.assertEquals(datatypes[i][0], discrete.getDataType());
 +            Assertions.assertEquals("IEC61131_" + datatypes[i][0], discrete.getDataType());
-             Assertions.assertEquals(1, discrete.getQuantity());
+             Assertions.assertEquals(1, discrete.getNumberOfElements());
          }
      }
  }
diff --cc protocols/ads/src/test/resources/protocols/ads/AdsDiscoverySerializerTest.xml
index 0000000,7cde0e7..7cde0e7
mode 000000,100644..100644
--- a/protocols/ads/src/test/resources/protocols/ads/AdsDiscoverySerializerTest.xml
+++ b/protocols/ads/src/test/resources/protocols/ads/AdsDiscoverySerializerTest.xml
diff --cc sandbox/test-java-df1-driver/pom.xml
index 28c60db,f965298..f632529
--- a/sandbox/test-java-df1-driver/pom.xml
+++ b/sandbox/test-java-df1-driver/pom.xml
@@@ -132,29 -146,20 +131,45 @@@
        <artifactId>jackson-dataformat-xml</artifactId>
        <scope>test</scope>
      </dependency>
+ <!-- Testing Dependencies -->
+     <dependency>
+       <groupId>org.junit.jupiter</groupId>
+       <artifactId>junit-jupiter</artifactId>
+       <scope>test</scope>
+     </dependency>
+     <dependency>
+       <groupId>org.junit.jupiter</groupId>
+       <artifactId>junit-jupiter-api</artifactId>
+       <scope>test</scope>
+     </dependency>
+     <dependency>
+       <groupId>org.codehaus.groovy</groupId>
 -      <artifactId>groovy-test-junit5</artifactId>      
++      <artifactId>groovy-test-junit5</artifactId>
++      <scope>test</scope>
++    </dependency>
 +
 +    <dependency>
 +      <groupId>org.apache.plc4x</groupId>
 +      <artifactId>plc4x-build-utils-language-java</artifactId>
 +      <version>0.8.0-SNAPSHOT</version>
 +      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
 +      <scope>provided</scope>
 +    </dependency>
 +
 +    <dependency>
 +      <groupId>org.apache.plc4x</groupId>
 +      <artifactId>plc4x-protocols-df1</artifactId>
 +      <version>0.8.0-SNAPSHOT</version>
 +      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
 +      <scope>provided</scope>
 +    </dependency>
 +
 +    <dependency>
 +      <groupId>org.apache.plc4x</groupId>
 +      <artifactId>plc4x-protocols-df1</artifactId>
 +      <version>0.8.0-SNAPSHOT</version>
 +      <classifier>tests</classifier>
 +      <type>test-jar</type>
        <scope>test</scope>
      </dependency>
    </dependencies>