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/08/29 13:12:12 UTC

[plc4x] branch develop updated (294a6ad -> 99a1353)

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

jfeinauer pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git.


    from 294a6ad  - Updated the configuration to not require an external artifact, but use an internal one.
     new f4aaeca  Addition of single bit read from Integer files
     new 99a1353  Addition of single bit read from Integer files

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../apache/plc4x/java/abeth/model/AbEthField.java  | 21 +++++++++++---------
 .../plc4x/java/abeth/model/types/FileType.java     |  3 ++-
 .../java/abeth/protocol/Plc4xAbEthProtocol.java    | 23 ++++++++++++++++++++--
 3 files changed, 35 insertions(+), 12 deletions(-)


[plc4x] 02/02: Addition of single bit read from Integer files

Posted by jf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jfeinauer pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 99a13534a6917dd189b0072ad8dcff4b31586f4a
Author: v.emmert <v....@pragmaticminds.de>
AuthorDate: Wed Aug 28 16:19:39 2019 +0200

    Addition of single bit read from Integer files
---
 .../apache/plc4x/java/abeth/model/AbEthField.java   | 21 ++++++++++++---------
 .../plc4x/java/abeth/model/types/FileType.java      |  2 +-
 .../java/abeth/protocol/Plc4xAbEthProtocol.java     | 20 ++++++++++++++++----
 3 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/AbEthField.java b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/AbEthField.java
index 82d7844..7c592a2 100644
--- a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/AbEthField.java
+++ b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/AbEthField.java
@@ -28,11 +28,14 @@ import java.util.regex.Pattern;
 public class AbEthField implements PlcField {
 
     private static final Pattern ADDRESS_PATTERN =
-        Pattern.compile("^N(?<fileNumber>\\d{1,7}):(?<elementNumber>\\d{1,7})/(?<subElementNumber>\\d{1,7}):(?<dataType>[a-zA-Z_]+)(\\[(?<size>\\d+)])?");
+//        Pattern.compile("^N(?<fileNumber>\\d{1,7}):(?<elementNumber>\\d{1,7})/(?<bitNumber>\\d{1,7}):(?<dataType>[a-zA-Z_]+)(\\[(?<size>\\d+)])?");
+        Pattern.compile("^N(?<fileNumber>\\d{1,7}):(?<elementNumber>\\d{1,7})(/(?<bitNumber>\\d{1,7}))?:(?<dataType>[a-zA-Z_]+)(\\[(?<size>\\d+)])?");
+
 
     private static final String FILE_NUMBER = "fileNumber";
     private static final String ELEMENT_NUMBER = "elementNumber";
-    private static final String SUB_ELEMENT_NUMBER = "subElementNumber";
+//    private static final String SUB_ELEMENT_NUMBER = "subElementNumber";
+    private static final String BIT_NUMBER = "bitNumber";
     private static final String DATA_TYPE = "dataType";
     private static final String SIZE = "size";
 
@@ -40,14 +43,14 @@ public class AbEthField implements PlcField {
     private final short fileNumber;
     private final FileType fileType;
     private final short elementNumber;
-    private final short subElementNumber;
+    private final short bitNumber;
 
-    public AbEthField(short byteSize, short fileNumber, FileType fileType, short elementNumber, short subElementNumber) {
+    public AbEthField(short byteSize, short fileNumber, FileType fileType, short elementNumber, short bitNumber) {
         this.byteSize = byteSize;
         this.fileNumber = fileNumber;
         this.fileType = fileType;
         this.elementNumber = elementNumber;
-        this.subElementNumber = subElementNumber;
+        this.bitNumber = bitNumber;
     }
 
     public short getByteSize() {
@@ -66,8 +69,8 @@ public class AbEthField implements PlcField {
         return elementNumber;
     }
 
-    public short getSubElementNumber() {
-        return subElementNumber;
+    public short getBitNumber() {
+        return bitNumber;
     }
 
     public static boolean matches(String fieldString) {
@@ -79,10 +82,10 @@ public class AbEthField implements PlcField {
         if(matcher.matches()) {
             short fileNumber = Short.parseShort(matcher.group(FILE_NUMBER));
             short elementNumber = Short.parseShort(matcher.group(ELEMENT_NUMBER));
-            short subElementNumber = Short.parseShort(matcher.group(SUB_ELEMENT_NUMBER));
+            short bitNumber = (matcher.group(BIT_NUMBER) != null) ? Short.parseShort(matcher.group(BIT_NUMBER)) : 0;  //Short.parseShort(matcher.group(BIT_NUMBER));
             FileType fileType = FileType.valueOf(matcher.group(DATA_TYPE).toUpperCase());
             short byteSize = Short.parseShort(matcher.group(SIZE));
-            return new AbEthField(byteSize, fileNumber, fileType,elementNumber, subElementNumber);
+            return new AbEthField(byteSize, fileNumber, fileType,elementNumber, bitNumber);
         }
         throw new PlcInvalidFieldException("Unable to parse address: " + fieldString);
     }
diff --git a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/types/FileType.java b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/types/FileType.java
index 22f41f6..45728f8 100644
--- a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/types/FileType.java
+++ b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/types/FileType.java
@@ -36,7 +36,7 @@ public enum FileType {
     STRING((short) 0x8D),
     ASCII((short) 0x8E),
     BCD((short) 0x8F),
-    INTBIT((short) 0x89); // reads single bit from Integer file, no official AB type
+    SINGLEBIT((short) 0x89); // reads single bit from Integer file, no official AB type
 
     private final short typeCode;
 
diff --git a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
index 4096fa5..85eee25 100644
--- a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
+++ b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
@@ -39,6 +39,7 @@ import org.apache.plc4x.java.base.messages.DefaultPlcReadResponse;
 import org.apache.plc4x.java.base.messages.InternalPlcReadRequest;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
 import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
+import org.apache.plc4x.java.base.messages.items.DefaultBooleanFieldItem;
 import org.apache.plc4x.java.base.messages.items.DefaultShortFieldItem;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -85,6 +86,12 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
     @Override
     protected void encode(ChannelHandlerContext ctx, PlcRequestContainer msg, List<Object> out) throws Exception {
         PlcRequest request = msg.getRequest();
+
+        // reset counter since two byte values are possible in DF1
+        if (transactionCounterGenerator.get() > 65000) {
+            transactionCounterGenerator.set(10);
+        }
+
         if (request instanceof PlcReadRequest) {
             PlcReadRequest readRequest = (PlcReadRequest) msg.getRequest();
 
@@ -97,7 +104,8 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
 
                 DF1RequestProtectedTypedLogicalRead logicalRead = new DF1RequestProtectedTypedLogicalRead(
                     abEthField.getByteSize(), abEthField.getFileNumber(), abEthField.getFileType().getTypeCode(),
-                    abEthField.getElementNumber(), abEthField.getSubElementNumber());
+                    abEthField.getElementNumber(), (short) 0); // Subelementnumber default to zero
+                // TODO: make target and origin address changeable
                 DF1RequestMessage requestMessage = new DF1CommandRequestMessage(
                     (short) 8, (short) 5, (short) 0, transactionCounterGenerator.incrementAndGet(), logicalRead);
                 CIPEncapsulationReadRequest read = new CIPEncapsulationReadRequest(
@@ -167,7 +175,7 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
             if (responseCode == PlcResponseCode.OK) {
                 try {
                     switch (field.getFileType()) {
-                        case INTEGER: //HURZ
+                        case INTEGER: // output as single bytes
                             if(plcReadResponse.getResponse() instanceof DF1CommandResponseMessageProtectedTypedLogicalRead) {
                                 DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
                                 short[] data = df1PTLR.getData();
@@ -178,11 +186,15 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
                                 fieldItem = new DefaultShortFieldItem(convData);
                             }
                             break;
-                        case INTBIT:
+                        case SINGLEBIT:
                             if(plcReadResponse.getResponse() instanceof DF1CommandResponseMessageProtectedTypedLogicalRead) {
                                 DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
                                 short[] data = df1PTLR.getData();
-
+                                if (field.getBitNumber() < 8) {
+                                    fieldItem = new DefaultBooleanFieldItem((data[0] & (1 <<  field.getBitNumber())) != 0);          // read from first byte
+                                } else {
+                                    fieldItem = new DefaultBooleanFieldItem((data[1] & (1 << (field.getBitNumber() - 8) )) != 0);   // read from second byte
+                                }
                             }
                             break;
                         default:


[plc4x] 01/02: Addition of single bit read from Integer files

Posted by jf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jfeinauer pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit f4aaecae53a34779628238bafa85b4c0233c5c73
Author: v.emmert <v....@pragmaticminds.de>
AuthorDate: Wed Aug 28 11:16:08 2019 +0200

    Addition of single bit read from Integer files
---
 .../java/org/apache/plc4x/java/abeth/model/types/FileType.java   | 3 ++-
 .../org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java | 9 ++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/types/FileType.java b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/types/FileType.java
index ebc02ef..22f41f6 100644
--- a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/types/FileType.java
+++ b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/model/types/FileType.java
@@ -35,7 +35,8 @@ public enum FileType {
     INPUT((short) 0x8C),
     STRING((short) 0x8D),
     ASCII((short) 0x8E),
-    BCD((short) 0x8F);
+    BCD((short) 0x8F),
+    INTBIT((short) 0x89); // reads single bit from Integer file, no official AB type
 
     private final short typeCode;
 
diff --git a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
index 6c3965d..4096fa5 100644
--- a/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
+++ b/sandbox/test-java-ab-eth-driver/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
@@ -167,7 +167,7 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
             if (responseCode == PlcResponseCode.OK) {
                 try {
                     switch (field.getFileType()) {
-                        case HURZ:
+                        case INTEGER: //HURZ
                             if(plcReadResponse.getResponse() instanceof DF1CommandResponseMessageProtectedTypedLogicalRead) {
                                 DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
                                 short[] data = df1PTLR.getData();
@@ -178,6 +178,13 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
                                 fieldItem = new DefaultShortFieldItem(convData);
                             }
                             break;
+                        case INTBIT:
+                            if(plcReadResponse.getResponse() instanceof DF1CommandResponseMessageProtectedTypedLogicalRead) {
+                                DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
+                                short[] data = df1PTLR.getData();
+
+                            }
+                            break;
                         default:
                             logger.warn("Problem during decoding of field {}: Decoding of file type not implemented; " +
                                 "FieldInformation: {}", fieldName, field);