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/08/25 12:01:55 UTC

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

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

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

commit a8e844501d79eb101aee6b1ad847c3949931557d
Merge: c7a058e 9033ff8
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Tue Aug 25 10:39:54 2020 +0200

    Merge branch 'develop' of https://gitbox.apache.org/repos/asf/plc4x into feature/plc4c
    
     Conflicts:
    	plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
    	plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java

 RELEASE_NOTES                                      |  16 +++++++++++
 .../plc4x/java/s7/readwrite/field/S7Field.java     |  31 +++++++++++++++++++++
 .../asciidoc/developers/infrastructure/vm.adoc     |   6 ++--
 .../asciidoc/developers/infrastructure/vpn.adoc    |   4 +--
 src/site/asciidoc/users/adopters.adoc              |  10 ++++---
 src/site/asciidoc/users/protocols/s7.adoc          |   9 ++++++
 .../images/users/companies/logo-pietrorimoldi.jpg  | Bin 0 -> 584330 bytes
 7 files changed, 67 insertions(+), 9 deletions(-)

diff --cc plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
index 20c30b9,6cdd590..c0d15b2
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
@@@ -182,17 -182,23 +182,43 @@@ public class S7Field implements PlcFiel
                  throw new PlcInvalidFieldException("Transfer size code '" + transferSizeCode +
                      "' doesn't match specified data type '" + dataType.name() + "'");
              }
+             if ((dataType != TransportSize.BOOL) && bitOffset != 0) {
+                 throw new PlcInvalidFieldException("A bit offset other than 0 is only supported for type BOOL");
+             }
+ 
+             return new S7Field(dataType, memoryArea, (short) 0, byteOffset, bitOffset, numElements);
+         } else if ((matcher = DATA_BLOCK_STRING_ADDRESS_PATTERN.matcher(fieldString)).matches()) {
+             TransportSize dataType = TransportSize.STRING;
+             int stringLength = Integer.parseInt(matcher.group(STRING_LENGTH));
 -            MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
++            MemoryArea memoryArea = getMemoryAreaForShortName(matcher.group(MEMORY_AREA));
+             Short transferSizeCode = getSizeCode(matcher.group(TRANSFER_SIZE_CODE));
 -            int blockNumber = checkDatablockNumber(Integer.parseInt(matcher.group(BLOCK_NUMBER)));
+             int byteOffset = checkByteOffset(Integer.parseInt(matcher.group(BYTE_OFFSET)));
+             byte bitOffset = 0;
+             if (matcher.group(BIT_OFFSET) != null) {
+                 bitOffset = Byte.parseByte(matcher.group(BIT_OFFSET));
++            } else if (dataType == TransportSize.BOOL) {
++                throw new PlcInvalidFieldException("Expected bit offset for BOOL parameters.");
+             }
+             int numElements = 1;
++            if (matcher.group(NUM_ELEMENTS) != null) {
++                numElements = Integer.parseInt(matcher.group(NUM_ELEMENTS));
++            }
++
++            if ((transferSizeCode != null) && (dataType.getSizeCode() != transferSizeCode)) {
++                throw new PlcInvalidFieldException("Transfer size code '" + transferSizeCode +
++                    "' doesn't match specified data type '" + dataType.name() + "'");
++            }
 +
 +            return new S7Field(dataType, memoryArea, (short) 0, byteOffset, bitOffset, numElements);
 +        } else if ((matcher = DATA_BLOCK_STRING_ADDRESS_PATTERN.matcher(fieldString)).matches()) {
 +            TransportSize dataType = TransportSize.STRING;
 +            int stringLength = Integer.parseInt(matcher.group(STRING_LENGTH));
 +            MemoryArea memoryArea = MemoryArea.DATA_BLOCKS;
 +            Short transferSizeCode = getSizeCode(matcher.group(TRANSFER_SIZE_CODE));
 +            int blockNumber = checkDatablockNumber(Integer.parseInt(matcher.group(BLOCK_NUMBER)));
 +            int byteOffset = checkByteOffset(Integer.parseInt(matcher.group(BYTE_OFFSET)));
 +            byte bitOffset = 0;
 +            int numElements = 1;
              if(matcher.group(NUM_ELEMENTS) != null) {
                  numElements = Integer.parseInt(matcher.group(NUM_ELEMENTS));
              }