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/20 14:59:24 UTC

[plc4x] branch develop updated: - Added documentation to the latest changes in the S7 driver

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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 00c5046  - Added documentation to the latest changes in the S7 driver
00c5046 is described below

commit 00c50460b4d811c17d38e34763b9596e403465e0
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Aug 20 16:59:18 2020 +0200

    - Added documentation to the latest changes in the S7 driver
---
 RELEASE_NOTES                                      |  16 +++
 .../generated-sources/s7/includes/transport_size.h |   7 +-
 .../generated-sources/s7/src/transport_size.c      | 120 +++++++++++++++++++++
 src/site/asciidoc/users/protocols/s7.adoc          |   9 ++
 4 files changed, 149 insertions(+), 3 deletions(-)

diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index b6b01fa..b0d08e6 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -17,6 +17,20 @@ Modbus addresses using a pure-numeric notation.
 Incompatible changes
 --------------------
 
+- The syntax of the S7 addresses changed slightly allowing to
+  provide a string length. Without this, a STRING datatype will
+  read 254 characters, by adding the size in round brackets to
+  the type name will use the specified number.
+
+  Examples:
+
+  Read one String which is max 10 chars long:
+  %DB2:30:STRING(10)
+
+  Read an array of 3 Strings where each is max 10 chars long:
+  %DB2:30:STRING(10)[3]
+
+
 Bug Fixes
 ---------
 
@@ -41,6 +55,8 @@ PLC4X-214   [Modbus] Holding register addresses have an offset
 PLC4X-218   [Scraper] After stopping the scraper still the
             statistics are logged and the application doesn't
             terminate
+PLC4X-239   Read DTL (Date and Time)
+PLC4X-240   Protocol error in reading string
 
 
 ==============================================================
diff --git a/sandbox/plc4c/generated-sources/s7/includes/transport_size.h b/sandbox/plc4c/generated-sources/s7/includes/transport_size.h
index 9601b8c..0991f54 100644
--- a/sandbox/plc4c/generated-sources/s7/includes/transport_size.h
+++ b/sandbox/plc4c/generated-sources/s7/includes/transport_size.h
@@ -50,10 +50,11 @@ enum plc4c_s7_read_write_transport_size {
   plc4c_s7_read_write_transport_size_STRING = 0x03,
   plc4c_s7_read_write_transport_size_WSTRING = 0x00,
   plc4c_s7_read_write_transport_size_TIME = 0x0B,
+  plc4c_s7_read_write_transport_size_S5TIME = 0x0C,
   plc4c_s7_read_write_transport_size_LTIME = 0x00,
-  plc4c_s7_read_write_transport_size_DATE = 0x02,
-  plc4c_s7_read_write_transport_size_TIME_OF_DAY = 0x02,
-  plc4c_s7_read_write_transport_size_DATE_AND_TIME = 0x02
+  plc4c_s7_read_write_transport_size_DATE = 0x09,
+  plc4c_s7_read_write_transport_size_TIME_OF_DAY = 0x0A,
+  plc4c_s7_read_write_transport_size_DATE_AND_TIME = 0x0F
 };
 typedef enum plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size;
 
diff --git a/sandbox/plc4c/generated-sources/s7/src/transport_size.c b/sandbox/plc4c/generated-sources/s7/src/transport_size.c
index 026a73f..e8cd2a9 100644
--- a/sandbox/plc4c/generated-sources/s7/src/transport_size.c
+++ b/sandbox/plc4c/generated-sources/s7/src/transport_size.c
@@ -59,9 +59,21 @@ bool plc4c_s7_read_write_transport_size_get_supported__s7_300(plc4c_s7_read_writ
     case 8: { /* '0x08' */
       return true;
     }
+    case 9: { /* '0x09' */
+      return true;
+    }
+    case 10: { /* '0x0A' */
+      return true;
+    }
     case 11: { /* '0x0B' */
       return true;
     }
+    case 12: { /* '0x0C' */
+      return true;
+    }
+    case 15: { /* '0x0F' */
+      return true;
+    }
     case 19: { /* '0x13' */
       return false;
     }
@@ -103,9 +115,21 @@ bool plc4c_s7_read_write_transport_size_get_supported__logo(plc4c_s7_read_write_
     case 8: { /* '0x08' */
       return true;
     }
+    case 9: { /* '0x09' */
+      return true;
+    }
+    case 10: { /* '0x0A' */
+      return true;
+    }
     case 11: { /* '0x0B' */
       return true;
     }
+    case 12: { /* '0x0C' */
+      return true;
+    }
+    case 15: { /* '0x0F' */
+      return false;
+    }
     case 19: { /* '0x13' */
       return true;
     }
@@ -147,9 +171,21 @@ uint8_t plc4c_s7_read_write_transport_size_get_size_in_bytes(plc4c_s7_read_write
     case 8: { /* '0x08' */
       return 4;
     }
+    case 9: { /* '0x09' */
+      return 2;
+    }
+    case 10: { /* '0x0A' */
+      return 4;
+    }
     case 11: { /* '0x0B' */
       return 4;
     }
+    case 12: { /* '0x0C' */
+      return 4;
+    }
+    case 15: { /* '0x0F' */
+      return 12;
+    }
     case 19: { /* '0x13' */
       return 2;
     }
@@ -191,9 +227,21 @@ bool plc4c_s7_read_write_transport_size_get_supported__s7_400(plc4c_s7_read_writ
     case 8: { /* '0x08' */
       return true;
     }
+    case 9: { /* '0x09' */
+      return true;
+    }
+    case 10: { /* '0x0A' */
+      return true;
+    }
     case 11: { /* '0x0B' */
       return true;
     }
+    case 12: { /* '0x0C' */
+      return true;
+    }
+    case 15: { /* '0x0F' */
+      return true;
+    }
     case 19: { /* '0x13' */
       return false;
     }
@@ -235,9 +283,21 @@ bool plc4c_s7_read_write_transport_size_get_supported__s7_1200(plc4c_s7_read_wri
     case 8: { /* '0x08' */
       return true;
     }
+    case 9: { /* '0x09' */
+      return true;
+    }
+    case 10: { /* '0x0A' */
+      return true;
+    }
     case 11: { /* '0x0B' */
       return true;
     }
+    case 12: { /* '0x0C' */
+      return true;
+    }
+    case 15: { /* '0x0F' */
+      return false;
+    }
     case 19: { /* '0x13' */
       return true;
     }
@@ -279,9 +339,21 @@ uint8_t plc4c_s7_read_write_transport_size_get_size_code(plc4c_s7_read_write_tra
     case 8: { /* '0x08' */
       return 'D';
     }
+    case 9: { /* '0x09' */
+      return 'X';
+    }
+    case 10: { /* '0x0A' */
+      return 'X';
+    }
     case 11: { /* '0x0B' */
       return 'X';
     }
+    case 12: { /* '0x0C' */
+      return 'X';
+    }
+    case 15: { /* '0x0F' */
+      return 'X';
+    }
     case 19: { /* '0x13' */
       return 'X';
     }
@@ -323,9 +395,21 @@ bool plc4c_s7_read_write_transport_size_get_supported__s7_1500(plc4c_s7_read_wri
     case 8: { /* '0x08' */
       return true;
     }
+    case 9: { /* '0x09' */
+      return true;
+    }
+    case 10: { /* '0x0A' */
+      return true;
+    }
     case 11: { /* '0x0B' */
       return true;
     }
+    case 12: { /* '0x0C' */
+      return true;
+    }
+    case 15: { /* '0x0F' */
+      return true;
+    }
     case 19: { /* '0x13' */
       return true;
     }
@@ -367,9 +451,21 @@ plc4c_s7_read_write_data_transport_size plc4c_s7_read_write_transport_size_get_d
     case 8: { /* '0x08' */
       return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
+    case 9: { /* '0x09' */
+      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
+    }
+    case 10: { /* '0x0A' */
+      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
+    }
     case 11: { /* '0x0B' */
       return -1;
     }
+    case 12: { /* '0x0C' */
+      return -1;
+    }
+    case 15: { /* '0x0F' */
+      return -1;
+    }
     case 19: { /* '0x13' */
       return -1;
     }
@@ -411,9 +507,21 @@ plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_get_base_t
     case 8: { /* '0x08' */
       return -1;
     }
+    case 9: { /* '0x09' */
+      return -1;
+    }
+    case 10: { /* '0x0A' */
+      return -1;
+    }
     case 11: { /* '0x0B' */
       return -1;
     }
+    case 12: { /* '0x0C' */
+      return -1;
+    }
+    case 15: { /* '0x0F' */
+      return -1;
+    }
     case 19: { /* '0x13' */
       return -1;
     }
@@ -455,9 +563,21 @@ uint8_t plc4c_s7_read_write_transport_size_get_data_protocol_id(plc4c_s7_read_wr
     case 8: { /* '0x08' */
       return 31;
     }
+    case 9: { /* '0x09' */
+      return 54;
+    }
+    case 10: { /* '0x0A' */
+      return 55;
+    }
     case 11: { /* '0x0B' */
       return 51;
     }
+    case 12: { /* '0x0C' */
+      return 52;
+    }
+    case 15: { /* '0x0F' */
+      return 56;
+    }
     case 19: { /* '0x13' */
       return 42;
     }
diff --git a/src/site/asciidoc/users/protocols/s7.adoc b/src/site/asciidoc/users/protocols/s7.adoc
index 6b3604f..1d8e78b 100644
--- a/src/site/asciidoc/users/protocols/s7.adoc
+++ b/src/site/asciidoc/users/protocols/s7.adoc
@@ -147,6 +147,14 @@ In case of accessing data in the `data block` memory area, the syntax is quite a
 - DB{Data-Block-Number}.DB{Short-Data-Type-Code}{Start-Byte-Address}.{Bit-Offset}:BOOL[{Count}]
 - DB{Data-Block-Number}.DB{Short-Data-Type-Code}{Start-Byte-Address}:{Data-Type-Code}[{Count}]
 
+When reading a `STRING` datatype, currently 254 characters would automatically be fetched from the PLC.
+
+In order to limit the amount of data, we extended the `STRING` type declaration syntax to allow limiting this.
+
+With the following format less than 254 characters can be read:
+
+- DB{Data-Block-Number}.DB{Short-Data-Type-Code}{Start-Byte-Address}:STRING({string-length})[{Count}]
+
 These addresses can usually be copied directly out of TIA portal.
 However we also implemented a shorter version, as above version does have some unnecesary boilerplate parts (The `.DB` in the middle as well as the `Short-Data-Type-Code`)
 
@@ -154,6 +162,7 @@ The shorter syntax looks like this:
 
 - DB{Data-Block-Number}.{Start-Byte-Address}.{Bit-Offset}:BOOL[{Count}]
 - DB{Data-Block-Number}.{Start-Byte-Address}:{Data-Type-Code}[{Count}]
+- DB{Data-Block-Number}.{Start-Byte-Address}:STRING({string-length})[{Count}]
 
 The S7 driver will handle both types of notation equally.