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.