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 2023/09/22 15:25:00 UTC

[plc4x] branch develop updated (688c85e54c -> 072d17981d)

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

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


    from 688c85e54c feat: Added some commented out code that dumps the decrypted parts of ETS6+ files (helps debug ETS parsing)
     new b57b9ad0f3 chore: Updated the KNX manufacturers
     new cad4fd5f82 fix: Fixed numerous issues when writing values to S7
     new 072d17981d fix: Fixed a package-visibility issue

The 3 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:
 .../templates/java/data-io-template.java.ftlh      |   2 +-
 plc4c/drivers/s7/src/driver_s7_encode_decode.c     |   3 -
 plc4c/drivers/s7/src/driver_s7_packets.c           |   1 -
 .../generated-sources/s7/include/transport_size.h  |   4 +-
 plc4c/generated-sources/s7/src/data_item.c         |  10 +-
 plc4c/generated-sources/s7/src/transport_size.c    |  91 ++---------------
 .../knxnetip/readwrite/model/KnxManufacturer.go    |  26 ++++-
 .../protocols/s7/readwrite/model/TransportSize.go  | 112 +--------------------
 .../java/knxnetip/readwrite/KnxManufacturer.java   |   5 +-
 .../apache/plc4x/java/s7/readwrite/DataItem.java   |   6 +-
 .../plc4x/java/s7/readwrite/TransportSize.java     |  34 +------
 .../java/s7/readwrite/utils/StaticHelper.java      |  48 ++++++---
 .../java/s7/readwrite/ManualS7DriverTest.java      |  13 ++-
 .../java/spi/generation/WriteBufferByteBased.java  |  21 ++--
 .../org/apache/plc4x/java/spi/values/PlcDATE.java  |   3 +-
 .../plc4x/java/spi/values/PlcTIME_OF_DAY.java      |   4 +-
 .../plc4x/java/spi/values/PlcValueHandler.java     |   8 ++
 .../java/utils/cache/LeasedPlcConnection.java      |   2 +-
 .../org/apache/plc4x/test/manual/ManualTest.java   |   2 +-
 .../knxnetip/readwrite/model/KnxManufacturer.cs    |  19 ++--
 .../s7/src/main/resources/protocols/s7/s7.mspec    |  18 ++--
 21 files changed, 137 insertions(+), 295 deletions(-)


[plc4x] 03/03: fix: Fixed a package-visibility issue

Posted by cd...@apache.org.
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

commit 072d17981d60dc0a4b7c80dd5bd13746246cfa99
Author: Christofer Dutz <cd...@apache.org>
AuthorDate: Fri Sep 22 17:24:48 2023 +0200

    fix: Fixed a package-visibility issue
---
 .../java/org/apache/plc4x/java/utils/cache/LeasedPlcConnection.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/LeasedPlcConnection.java b/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/LeasedPlcConnection.java
index 2acab7f9e5..26758cbac7 100644
--- a/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/LeasedPlcConnection.java
+++ b/plc4j/tools/connection-cache/src/main/java/org/apache/plc4x/java/utils/cache/LeasedPlcConnection.java
@@ -43,7 +43,7 @@ public class LeasedPlcConnection implements PlcConnection {
     private boolean invalidateConnection;
     private final Timer usageTimer;
 
-    public LeasedPlcConnection(ConnectionContainer connectionContainer, PlcConnection connection, Duration maxUseTime) {
+    LeasedPlcConnection(ConnectionContainer connectionContainer, PlcConnection connection, Duration maxUseTime) {
         this.connectionContainer = connectionContainer;
         this.connection = connection;
         this.invalidateConnection = false;


[plc4x] 02/03: fix: Fixed numerous issues when writing values to S7

Posted by cd...@apache.org.
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

commit cad4fd5f82443804167f9e52a509db747b760d56
Author: Christofer Dutz <cd...@apache.org>
AuthorDate: Fri Sep 22 17:24:31 2023 +0200

    fix: Fixed numerous issues when writing values to S7
---
 .../templates/java/data-io-template.java.ftlh      |   2 +-
 plc4c/drivers/s7/src/driver_s7_encode_decode.c     |   3 -
 plc4c/drivers/s7/src/driver_s7_packets.c           |   1 -
 .../generated-sources/s7/include/transport_size.h  |   4 +-
 plc4c/generated-sources/s7/src/data_item.c         |  10 +-
 plc4c/generated-sources/s7/src/transport_size.c    |  91 ++---------------
 .../protocols/s7/readwrite/model/TransportSize.go  | 112 +--------------------
 .../apache/plc4x/java/s7/readwrite/DataItem.java   |   6 +-
 .../plc4x/java/s7/readwrite/TransportSize.java     |  34 +------
 .../java/s7/readwrite/utils/StaticHelper.java      |  48 ++++++---
 .../java/s7/readwrite/ManualS7DriverTest.java      |  13 ++-
 .../java/spi/generation/WriteBufferByteBased.java  |  21 ++--
 .../org/apache/plc4x/java/spi/values/PlcDATE.java  |   3 +-
 .../plc4x/java/spi/values/PlcTIME_OF_DAY.java      |   4 +-
 .../plc4x/java/spi/values/PlcValueHandler.java     |   8 ++
 .../org/apache/plc4x/test/manual/ManualTest.java   |   2 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |  18 ++--
 17 files changed, 99 insertions(+), 281 deletions(-)

diff --git a/code-generation/language-java/src/main/resources/templates/java/data-io-template.java.ftlh b/code-generation/language-java/src/main/resources/templates/java/data-io-template.java.ftlh
index a1fda21e90..fa472a86d6 100644
--- a/code-generation/language-java/src/main/resources/templates/java/data-io-template.java.ftlh
+++ b/code-generation/language-java/src/main/resources/templates/java/data-io-template.java.ftlh
@@ -445,7 +445,7 @@ public class ${type.name} {
                         <#elseif simpleField.name == "daysSinceEpoch">
             ${helper.getLanguageTypeNameForField(simpleField)} ${simpleField.name} = (${helper.getLanguageTypeNameForField(field)}) _value.get${helper.getLanguageTypeNameForField(simpleField)?cap_first}();
                         <#elseif simpleField.name == "daysSinceSiemensEpoch">
-            ${helper.getLanguageTypeNameForField(simpleField)} ${simpleField.name} = (${helper.getLanguageTypeNameForField(field)}) _value.get${helper.getLanguageTypeNameForField(simpleField)?cap_first}();
+            ${helper.getLanguageTypeNameForField(simpleField)} ${simpleField.name} = (${helper.getLanguageTypeNameForField(field)}) ((PlcDATE) _value).getDaysSinceSiemensEpoch();
                         <#elseif simpleField.name == "year">
             ${helper.getLanguageTypeNameForField(simpleField)} ${simpleField.name} = (${helper.getLanguageTypeNameForField(field)}) _value.get${helper.getLanguageTypeNameForField(simpleField)?cap_first}();
                         <#elseif simpleField.name == "month">
diff --git a/plc4c/drivers/s7/src/driver_s7_encode_decode.c b/plc4c/drivers/s7/src/driver_s7_encode_decode.c
index af2bf2765e..5ae625e6ba 100644
--- a/plc4c/drivers/s7/src/driver_s7_encode_decode.c
+++ b/plc4c/drivers/s7/src/driver_s7_encode_decode.c
@@ -330,9 +330,6 @@ plc4c_return_code plc4c_driver_s7_encode_address(char* address, void** item) {
         any_address->s7_address_any_number_of_elements =
             254 * any_address->s7_address_any_number_of_elements;
       }
-    } else if (any_address->s7_address_any_transport_size ==
-               plc4c_s7_read_write_transport_size_TOD) {
-      any_address->s7_address_any_transport_size = plc4c_s7_read_write_transport_size_TIME_OF_DAY;
     }
     free(string_length);
 
diff --git a/plc4c/drivers/s7/src/driver_s7_packets.c b/plc4c/drivers/s7/src/driver_s7_packets.c
index c355213934..3c679190a7 100644
--- a/plc4c/drivers/s7/src/driver_s7_packets.c
+++ b/plc4c/drivers/s7/src/driver_s7_packets.c
@@ -975,7 +975,6 @@ void plc4c_driver_s7_time_transport_size(plc4c_s7_read_write_transport_size *tra
       *transport_size = plc4c_s7_read_write_transport_size_UINT;
       break;
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY:
-    case plc4c_s7_read_write_transport_size_TOD:
       *transport_size = plc4c_s7_read_write_transport_size_UDINT;
       break;
   }
diff --git a/plc4c/generated-sources/s7/include/transport_size.h b/plc4c/generated-sources/s7/include/transport_size.h
index 636bdfe63c..4dcd59f71a 100644
--- a/plc4c/generated-sources/s7/include/transport_size.h
+++ b/plc4c/generated-sources/s7/include/transport_size.h
@@ -54,9 +54,7 @@ enum plc4c_s7_read_write_transport_size {
   plc4c_s7_read_write_transport_size_LTIME = 0x16,
   plc4c_s7_read_write_transport_size_DATE = 0x17,
   plc4c_s7_read_write_transport_size_TIME_OF_DAY = 0x18,
-  plc4c_s7_read_write_transport_size_TOD = 0x19,
-  plc4c_s7_read_write_transport_size_DATE_AND_TIME = 0x1A,
-  plc4c_s7_read_write_transport_size_DT = 0x1B
+  plc4c_s7_read_write_transport_size_DATE_AND_TIME = 0x1A
 };
 typedef enum plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size;
 
diff --git a/plc4c/generated-sources/s7/src/data_item.c b/plc4c/generated-sources/s7/src/data_item.c
index c0e09c4108..b02d7f210c 100644
--- a/plc4c/generated-sources/s7/src/data_item.c
+++ b/plc4c/generated-sources/s7/src/data_item.c
@@ -687,17 +687,11 @@ uint16_t plc4c_s7_read_write_data_item_length_in_bits(plc4x_spi_context ctx, plc
     } else     if(strcmp(dataProtocolId, "IEC61131_STRING") == 0) { /* STRING */
 
         // Manual Field (value)
-        {
-            char* _value = data_item->data.string_value;
-            lengthInBits += (plc4c_spi_evaluation_helper_str_len(_value)) + (2);
-        }
+        lengthInBits += (((stringLength) * (8))) + (16);
     } else     if(strcmp(dataProtocolId, "IEC61131_WSTRING") == 0) { /* STRING */
 
         // Manual Field (value)
-        {
-            char* _value = data_item->data.string_value;
-            lengthInBits += (((plc4c_spi_evaluation_helper_str_len(_value)) * (2))) + (2);
-        }
+        lengthInBits += (((stringLength) * (16))) + (32);
     } else     if(strcmp(dataProtocolId, "IEC61131_TIME") == 0) { /* TIME */
 
         // Simple field (milliseconds)
diff --git a/plc4c/generated-sources/s7/src/transport_size.c b/plc4c/generated-sources/s7/src/transport_size.c
index b681e48047..9284a3c7c4 100644
--- a/plc4c/generated-sources/s7/src/transport_size.c
+++ b/plc4c/generated-sources/s7/src/transport_size.c
@@ -131,20 +131,14 @@ plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_value_of(c
     if(strcmp(value_string, "TIME_OF_DAY") == 0) {
         return plc4c_s7_read_write_transport_size_TIME_OF_DAY;
     }
-    if(strcmp(value_string, "TOD") == 0) {
-        return plc4c_s7_read_write_transport_size_TOD;
-    }
     if(strcmp(value_string, "DATE_AND_TIME") == 0) {
         return plc4c_s7_read_write_transport_size_DATE_AND_TIME;
     }
-    if(strcmp(value_string, "DT") == 0) {
-        return plc4c_s7_read_write_transport_size_DT;
-    }
     return -1;
 }
 
 int plc4c_s7_read_write_transport_size_num_values() {
-  return 26;
+  return 24;
 }
 
 plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_value_for_index(int index) {
@@ -219,14 +213,8 @@ plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_value_for_
         return plc4c_s7_read_write_transport_size_TIME_OF_DAY;
       }
       case 23: {
-        return plc4c_s7_read_write_transport_size_TOD;
-      }
-      case 24: {
         return plc4c_s7_read_write_transport_size_DATE_AND_TIME;
       }
-      case 25: {
-        return plc4c_s7_read_write_transport_size_DT;
-      }
       default: {
         return -1;
       }
@@ -304,15 +292,9 @@ bool plc4c_s7_read_write_transport_size_get_supported__s7_300(plc4c_s7_read_writ
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return true;
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return true;
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return true;
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return true;
-    }
     default: {
       return 0;
     }
@@ -398,15 +380,9 @@ bool plc4c_s7_read_write_transport_size_get_supported__logo(plc4c_s7_read_write_
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return true;
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return true;
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return false;
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return false;
-    }
     default: {
       return 0;
     }
@@ -492,15 +468,9 @@ uint8_t plc4c_s7_read_write_transport_size_get_code(plc4c_s7_read_write_transpor
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return 6;
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return 6;
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return 15;
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return 15;
-    }
     default: {
       return 0;
     }
@@ -628,15 +598,9 @@ uint8_t plc4c_s7_read_write_transport_size_get_size_in_bytes(plc4c_s7_read_write
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return 4;
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return 4;
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return 12;
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return 12;
-    }
     default: {
       return 0;
     }
@@ -740,15 +704,9 @@ bool plc4c_s7_read_write_transport_size_get_supported__s7_400(plc4c_s7_read_writ
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return true;
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return true;
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return true;
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return true;
-    }
     default: {
       return 0;
     }
@@ -834,15 +792,9 @@ bool plc4c_s7_read_write_transport_size_get_supported__s7_1200(plc4c_s7_read_wri
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return true;
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return true;
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return false;
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return false;
-    }
     default: {
       return 0;
     }
@@ -928,15 +880,9 @@ uint8_t plc4c_s7_read_write_transport_size_get_short_name(plc4c_s7_read_write_tr
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return 'X';
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return 'X';
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return 'X';
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return 'X';
-    }
     default: {
       return 0;
     }
@@ -1034,15 +980,9 @@ bool plc4c_s7_read_write_transport_size_get_supported__s7_1500(plc4c_s7_read_wri
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return true;
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return true;
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return true;
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return true;
-    }
     default: {
       return 0;
     }
@@ -1105,16 +1045,16 @@ plc4c_s7_read_write_data_transport_size plc4c_s7_read_write_transport_size_get_d
       return -1;
     }
     case plc4c_s7_read_write_transport_size_CHAR: { /* '0x10' */
-      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
+      return plc4c_s7_read_write_data_transport_size_OCTET_STRING;
     }
     case plc4c_s7_read_write_transport_size_WCHAR: { /* '0x11' */
-      return -1;
+      return plc4c_s7_read_write_data_transport_size_OCTET_STRING;
     }
     case plc4c_s7_read_write_transport_size_STRING: { /* '0x12' */
-      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
+      return plc4c_s7_read_write_data_transport_size_OCTET_STRING;
     }
     case plc4c_s7_read_write_transport_size_WSTRING: { /* '0x13' */
-      return -1;
+      return plc4c_s7_read_write_data_transport_size_OCTET_STRING;
     }
     case plc4c_s7_read_write_transport_size_TIME: { /* '0x14' */
       return -1;
@@ -1128,15 +1068,9 @@ plc4c_s7_read_write_data_transport_size plc4c_s7_read_write_transport_size_get_d
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return plc4c_s7_read_write_data_transport_size_BYTE_WORD_DWORD;
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return -1;
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return -1;
-    }
     default: {
       return 0;
     }
@@ -1154,6 +1088,9 @@ plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_get_first_
         case plc4c_s7_read_write_transport_size_INT: /* '0x06' */{
             return plc4c_s7_read_write_transport_size_INT;
         }
+        case plc4c_s7_read_write_transport_size_CHAR: /* '0x10' */{
+            return plc4c_s7_read_write_transport_size_CHAR;
+        }
         case plc4c_s7_read_write_transport_size_REAL: /* '0x0E' */{
             return plc4c_s7_read_write_transport_size_REAL;
         }
@@ -1237,15 +1174,9 @@ char* plc4c_s7_read_write_transport_size_get_data_protocol_id(plc4c_s7_read_writ
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return "IEC61131_TIME_OF_DAY";
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return "IEC61131_TIME_OF_DAY";
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return "IEC61131_DATE_AND_TIME";
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return "IEC61131_DATE_AND_TIME";
-    }
     default: {
       return 0;
     }
@@ -1398,15 +1329,9 @@ plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_get_base_t
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x18' */
       return -1;
     }
-    case plc4c_s7_read_write_transport_size_TOD: { /* '0x19' */
-      return -1;
-    }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x1A' */
       return -1;
     }
-    case plc4c_s7_read_write_transport_size_DT: { /* '0x1B' */
-      return -1;
-    }
     default: {
       return 0;
     }
diff --git a/plc4go/protocols/s7/readwrite/model/TransportSize.go b/plc4go/protocols/s7/readwrite/model/TransportSize.go
index bae8674263..4aafa352b6 100644
--- a/plc4go/protocols/s7/readwrite/model/TransportSize.go
+++ b/plc4go/protocols/s7/readwrite/model/TransportSize.go
@@ -75,9 +75,7 @@ const (
 	TransportSize_LTIME         TransportSize = 0x16
 	TransportSize_DATE          TransportSize = 0x17
 	TransportSize_TIME_OF_DAY   TransportSize = 0x18
-	TransportSize_TOD           TransportSize = 0x19
 	TransportSize_DATE_AND_TIME TransportSize = 0x1A
-	TransportSize_DT            TransportSize = 0x1B
 )
 
 var TransportSizeValues []TransportSize
@@ -108,9 +106,7 @@ func init() {
 		TransportSize_LTIME,
 		TransportSize_DATE,
 		TransportSize_TIME_OF_DAY,
-		TransportSize_TOD,
 		TransportSize_DATE_AND_TIME,
-		TransportSize_DT,
 	}
 }
 
@@ -208,18 +204,10 @@ func (e TransportSize) Supported_S7_300() bool {
 		{ /* '0x18' */
 			return true
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return true
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return true
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return true
-		}
 	default:
 		{
 			return false
@@ -330,18 +318,10 @@ func (e TransportSize) Supported_LOGO() bool {
 		{ /* '0x18' */
 			return true
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return true
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return false
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return false
-		}
 	default:
 		{
 			return false
@@ -452,18 +432,10 @@ func (e TransportSize) Code() uint8 {
 		{ /* '0x18' */
 			return 0x06
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return 0x06
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return 0x0F
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return 0x0F
-		}
 	default:
 		{
 			return 0
@@ -574,18 +546,10 @@ func (e TransportSize) SizeInBytes() uint8 {
 		{ /* '0x18' */
 			return 4
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return 4
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return 12
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return 12
-		}
 	default:
 		{
 			return 0
@@ -696,18 +660,10 @@ func (e TransportSize) Supported_S7_400() bool {
 		{ /* '0x18' */
 			return true
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return true
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return true
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return true
-		}
 	default:
 		{
 			return false
@@ -818,18 +774,10 @@ func (e TransportSize) Supported_S7_1200() bool {
 		{ /* '0x18' */
 			return true
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return true
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return false
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return false
-		}
 	default:
 		{
 			return false
@@ -940,18 +888,10 @@ func (e TransportSize) ShortName() uint8 {
 		{ /* '0x18' */
 			return 'X'
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return 'X'
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return 'X'
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return 'X'
-		}
 	default:
 		{
 			return 0
@@ -1062,18 +1002,10 @@ func (e TransportSize) Supported_S7_1500() bool {
 		{ /* '0x18' */
 			return true
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return true
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return true
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return true
-		}
 	default:
 		{
 			return false
@@ -1154,19 +1086,19 @@ func (e TransportSize) DataTransportSize() DataTransportSize {
 		}
 	case 0x10:
 		{ /* '0x10' */
-			return DataTransportSize_BYTE_WORD_DWORD
+			return DataTransportSize_OCTET_STRING
 		}
 	case 0x11:
 		{ /* '0x11' */
-			return 0
+			return DataTransportSize_OCTET_STRING
 		}
 	case 0x12:
 		{ /* '0x12' */
-			return DataTransportSize_BYTE_WORD_DWORD
+			return DataTransportSize_OCTET_STRING
 		}
 	case 0x13:
 		{ /* '0x13' */
-			return 0
+			return DataTransportSize_OCTET_STRING
 		}
 	case 0x14:
 		{ /* '0x14' */
@@ -1184,18 +1116,10 @@ func (e TransportSize) DataTransportSize() DataTransportSize {
 		{ /* '0x18' */
 			return DataTransportSize_BYTE_WORD_DWORD
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return DataTransportSize_BYTE_WORD_DWORD
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return 0
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return 0
-		}
 	default:
 		{
 			return 0
@@ -1306,18 +1230,10 @@ func (e TransportSize) DataProtocolId() string {
 		{ /* '0x18' */
 			return "IEC61131_TIME_OF_DAY"
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return "IEC61131_TIME_OF_DAY"
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return "IEC61131_DATE_AND_TIME"
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return "IEC61131_DATE_AND_TIME"
-		}
 	default:
 		{
 			return ""
@@ -1428,18 +1344,10 @@ func (e TransportSize) BaseType() TransportSize {
 		{ /* '0x18' */
 			return 0
 		}
-	case 0x19:
-		{ /* '0x19' */
-			return 0
-		}
 	case 0x1A:
 		{ /* '0x1A' */
 			return 0
 		}
-	case 0x1B:
-		{ /* '0x1B' */
-			return 0
-		}
 	default:
 		{
 			return 0
@@ -1503,12 +1411,8 @@ func TransportSizeByValue(value uint8) (enum TransportSize, ok bool) {
 		return TransportSize_DATE, true
 	case 0x18:
 		return TransportSize_TIME_OF_DAY, true
-	case 0x19:
-		return TransportSize_TOD, true
 	case 0x1A:
 		return TransportSize_DATE_AND_TIME, true
-	case 0x1B:
-		return TransportSize_DT, true
 	}
 	return 0, false
 }
@@ -1561,12 +1465,8 @@ func TransportSizeByName(value string) (enum TransportSize, ok bool) {
 		return TransportSize_DATE, true
 	case "TIME_OF_DAY":
 		return TransportSize_TIME_OF_DAY, true
-	case "TOD":
-		return TransportSize_TOD, true
 	case "DATE_AND_TIME":
 		return TransportSize_DATE_AND_TIME, true
-	case "DT":
-		return TransportSize_DT, true
 	}
 	return 0, false
 }
@@ -1680,12 +1580,8 @@ func (e TransportSize) PLC4XEnumName() string {
 		return "DATE"
 	case TransportSize_TIME_OF_DAY:
 		return "TIME_OF_DAY"
-	case TransportSize_TOD:
-		return "TOD"
 	case TransportSize_DATE_AND_TIME:
 		return "DATE_AND_TIME"
-	case TransportSize_DT:
-		return "DT"
 	}
 	return fmt.Sprintf("Unknown(%v)", uint8(e))
 }
diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java
index fb5aaf564e..40dfd1d4d6 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java
@@ -376,7 +376,7 @@ public class DataItem {
       /*TODO: migrate me*/ writeBuffer.writeUnsignedBigInteger("", 64, (BigInteger) (nanoseconds));
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_DATE")) { // DATE
       // Simple Field (daysSinceSiemensEpoch)
-      int daysSinceSiemensEpoch = (int) _value.getInt();
+      int daysSinceSiemensEpoch = (int) ((PlcDATE) _value).getDaysSinceSiemensEpoch();
       /*TODO: migrate me*/
       /*TODO: migrate me*/ writeBuffer.writeUnsignedInt(
           "", 16, ((Number) (daysSinceSiemensEpoch)).intValue());
@@ -491,10 +491,10 @@ public class DataItem {
       sizeInBits += 16;
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_STRING")) { // STRING
       // Manual Field (value)
-      sizeInBits += (STR_LEN(_value)) + (2);
+      sizeInBits += (((stringLength) * (8))) + (16);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_WSTRING")) { // STRING
       // Manual Field (value)
-      sizeInBits += (((STR_LEN(_value)) * (2))) + (2);
+      sizeInBits += (((stringLength) * (16))) + (32);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_TIME")) { // TIME
       // Simple Field (milliseconds)
       sizeInBits += 32;
diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/TransportSize.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/TransportSize.java
index d99705e754..b15a9817d8 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/TransportSize.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/TransportSize.java
@@ -231,7 +231,7 @@ public enum TransportSize {
       (boolean) true,
       (short) 'B',
       (boolean) true,
-      DataTransportSize.BYTE_WORD_DWORD,
+      DataTransportSize.OCTET_STRING,
       (String) "IEC61131_CHAR",
       null),
   WCHAR(
@@ -244,7 +244,7 @@ public enum TransportSize {
       (boolean) true,
       (short) 'X',
       (boolean) true,
-      null,
+      DataTransportSize.OCTET_STRING,
       (String) "IEC61131_WCHAR",
       null),
   STRING(
@@ -257,7 +257,7 @@ public enum TransportSize {
       (boolean) true,
       (short) 'X',
       (boolean) true,
-      DataTransportSize.BYTE_WORD_DWORD,
+      DataTransportSize.OCTET_STRING,
       (String) "IEC61131_STRING",
       null),
   WSTRING(
@@ -270,7 +270,7 @@ public enum TransportSize {
       (boolean) true,
       (short) 'X',
       (boolean) true,
-      null,
+      DataTransportSize.OCTET_STRING,
       (String) "IEC61131_WSTRING",
       null),
   TIME(
@@ -325,19 +325,6 @@ public enum TransportSize {
       DataTransportSize.BYTE_WORD_DWORD,
       (String) "IEC61131_TIME_OF_DAY",
       null),
-  TOD(
-      (short) 0x19,
-      (boolean) true,
-      (boolean) true,
-      (short) 0x06,
-      (short) 4,
-      (boolean) true,
-      (boolean) true,
-      (short) 'X',
-      (boolean) true,
-      DataTransportSize.BYTE_WORD_DWORD,
-      (String) "IEC61131_TIME_OF_DAY",
-      null),
   DATE_AND_TIME(
       (short) 0x1A,
       (boolean) true,
@@ -350,19 +337,6 @@ public enum TransportSize {
       (boolean) true,
       null,
       (String) "IEC61131_DATE_AND_TIME",
-      null),
-  DT(
-      (short) 0x1B,
-      (boolean) true,
-      (boolean) false,
-      (short) 0x0F,
-      (short) 12,
-      (boolean) true,
-      (boolean) false,
-      (short) 'X',
-      (boolean) true,
-      null,
-      (String) "IEC61131_DATE_AND_TIME",
       null);
   private static final Map<Short, TransportSize> map;
 
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/StaticHelper.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/StaticHelper.java
index 2cf170530d..b4de5f24d1 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/StaticHelper.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/utils/StaticHelper.java
@@ -37,6 +37,7 @@ import org.apache.plc4x.java.spi.generation.ReadBuffer;
 import org.apache.plc4x.java.spi.generation.SerializationException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 
+import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.time.Duration;
@@ -2745,23 +2746,46 @@ public class StaticHelper {
      * If your application does not handle S7string, you can handle
      * the String as char arrays from your application.
      */
-    public static void serializeS7String(WriteBuffer io, PlcValue value, int stringLength, String encoding) {
+    public static void serializeS7String(WriteBuffer io, PlcValue value, int stringLength, String encoding) throws SerializationException {
         int k = 0xFF & ((stringLength > 250) ? 250 : stringLength);
         int m = 0xFF & value.getString().length();
         m = (m > k) ? k : m;
-        byte[] chars = new byte[m];
-        for (int i = 0; i < m; ++i) {
-            char c = value.getString().charAt(i);
-            chars[i] = (byte) c;
+        byte[] chars;
+        if("UTF-8".equals(encoding)) {
+            chars = new byte[k];
+            for (int i = 0; i < m; ++i) {
+                char c = value.getString().charAt(i);
+                chars[i] = (byte) c;
+            }
+            try {
+                io.writeByte((byte)(k & 0xFF));
+                io.writeByte((byte)(m & 0xFF));
+                io.writeByteArray(chars);
+            } catch (SerializationException ex) {
+                Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        } else if ("UTF-16".equals(encoding)) {
+            chars = new byte[k*2];
+            try {
+                byte[] rawBytes = value.getString().getBytes("UTF-16");
+                for (int i = 0; i < m * 2; ++i) {
+                    // For some reason the first two bytes are "-2" and "-1".
+                    chars[i] = rawBytes[i + 2];
+                }
+            } catch (UnsupportedEncodingException e) {
+                throw new SerializationException("Unsupported string encoding '%s'" + encoding, e);
+            }
+            try {
+                io.writeUnsignedInt(16, (short)(k & 0xFFFF));
+                io.writeUnsignedInt(16, (short)(m & 0xFFFF));
+                io.writeByteArray(chars);
+            } catch (SerializationException ex) {
+                Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
+            }
+        } else {
+            throw new SerializationException("Unsupported string encoding '%s'" + encoding);
         }
 
-        try {
-            io.writeByte((byte)(k & 0xFF));
-            io.writeByte((byte)(m & 0xFF));
-            io.writeByteArray(chars);
-        } catch (SerializationException ex) {
-            Logger.getLogger(StaticHelper.class.getName()).log(Level.SEVERE, null, ex);
-        }
     }
 
 }
diff --git a/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS7DriverTest.java b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS7DriverTest.java
index 5632798e97..71ff6197a1 100644
--- a/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS7DriverTest.java
+++ b/plc4j/drivers/s7/src/test/java/org/apache/plc4x/java/s7/readwrite/ManualS7DriverTest.java
@@ -23,6 +23,7 @@ import org.apache.plc4x.test.manual.ManualTest;
 
 import java.time.LocalDate;
 import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 
 public class ManualS7DriverTest extends ManualTest {
 
@@ -66,7 +67,7 @@ public class ManualS7DriverTest extends ManualTest {
      */
 
     public ManualS7DriverTest(String connectionString) {
-        super(connectionString);
+        super(connectionString, true);
     }
 
     public static void main(String[] args) throws Exception {
@@ -88,7 +89,7 @@ public class ManualS7DriverTest extends ManualTest {
         test.addTestCase("%DB4:46:REAL", new PlcREAL(3.141593F));
         // Not supported in S7 1200
         //test.addTestCase("%DB4:50:LREAL", new PlcLREAL(2.71828182846D));
-        test.addTestCase("%DB4:58:TIME", "PT1.234S");
+//        test.addTestCase("%DB4:58:TIME", "PT1.234S");
         test.addTestCase("%DB4:136:CHAR", new PlcCHAR("H"));
         test.addTestCase("%DB4:138:WCHAR", new PlcWCHAR("w"));
         test.addTestCase("%DB4:140:STRING(10)", new PlcSTRING("hurz"));
@@ -97,8 +98,8 @@ public class ManualS7DriverTest extends ManualTest {
         // Not supported in S7 1200
         //test.addTestCase("%DB4:62:LTIME", new PlcLTIME(Duration.parse("PT24015H23M12.034002044S"));
         test.addTestCase("%DB4:70:DATE", new PlcDATE(LocalDate.parse("1998-03-28")));
-        test.addTestCase("%DB4:72:TIME_OF_DAY", new PlcTIME_OF_DAY(LocalTime.parse("15:36:30.123")));
-        test.addTestCase("%DB4:76:TOD", new PlcTIME_OF_DAY(LocalTime.parse("16:17:18.123")));
+        test.addTestCase("%DB4:72:TIME_OF_DAY", new PlcTIME_OF_DAY(LocalTime.parse("15:36:30.123", DateTimeFormatter.ofPattern("HH:mm:ss.SSS"))));
+        //test.addTestCase("%DB4:76:TOD", new PlcTIME_OF_DAY(LocalTime.parse("16:17:18.123")));
         // Not supported in S7 1200
         //test.addTestCase("%DB4:96:DATE_AND_TIME", new PlcDATE_AND_TIME(LocalDateTime.parse("1996-05-06T15:36:30")));
         // Not supported in S7 1200
@@ -110,4 +111,8 @@ public class ManualS7DriverTest extends ManualTest {
         test.run();
     }
 
+    static void testRead() {
+
+    }
+
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java
index 848934d8f6..b9a8621b2e 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java
@@ -22,7 +22,6 @@ import com.github.jinahya.bit.io.BufferByteOutput;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.plc4x.java.spi.generation.io.MyDefaultBitOutput;
 
-import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.nio.ByteBuffer;
@@ -83,7 +82,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
     public void writeBit(String logicalName, boolean value, WithWriterArgs... writerArgs) throws SerializationException {
         try {
             bo.writeBoolean(value);
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing bit", e);
         }
     }
@@ -110,7 +109,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
         }
         try {
             bo.writeByte(true, bitLength, value);
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing unsigned byte", e);
         }
     }
@@ -147,7 +146,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
                 default:
                     throw new SerializationException("unsupported encoding '" + encoding + "'");
             }
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing unsigned short", e);
         }
     }
@@ -187,7 +186,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
                 default:
                     throw new SerializationException("unsupported encoding '" + encoding + "'");
             }
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing unsigned int", e);
         }
     }
@@ -227,7 +226,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
                 default:
                     throw new SerializationException("unsupported encoding '" + encoding + "'");
             }
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing unsigned long", e);
         }
     }
@@ -271,7 +270,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
         }
         try {
             bo.writeByte(false, bitLength, value);
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing signed byte", e);
         }
     }
@@ -289,7 +288,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
                 value = Short.reverseBytes(value);
             }
             bo.writeShort(false, bitLength, value);
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing signed short", e);
         }
     }
@@ -307,7 +306,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
                 value = Integer.reverseBytes(value);
             }
             bo.writeInt(false, bitLength, value);
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing signed int", e);
         }
     }
@@ -325,7 +324,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
                 value = Long.reverseBytes(value);
             }
             bo.writeLong(false, bitLength, value);
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing signed long", e);
         }
     }
@@ -415,7 +414,7 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
             for (int i = 0; i < numZeroBytes; i++) {
                 bo.writeByte(false, 8, (byte) 0x00);
             }
-        } catch (IOException e) {
+        } catch (Exception e) {
             throw new SerializationException("Error writing string", e);
         }
     }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
index fb67037498..4e87e2fc4d 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
@@ -87,7 +87,8 @@ public class PlcDATE extends PlcSimpleValue<LocalDate> {
     }
 
     public int getDaysSinceSiemensEpoch() {
-        return ((int) (value.atStartOfDay(ZoneId.systemDefault()).toEpochSecond() / 86400)) - 7305;
+        // For some reason we need to subtract one day less (guess because of the "start of day").
+        return ((int) (value.atStartOfDay(ZoneId.systemDefault()).toEpochSecond() / 86400)) - 7304;
     }
 
     @Override
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
index d7841f6fe4..da75f58d6f 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
@@ -56,7 +56,7 @@ public class PlcTIME_OF_DAY extends PlcSimpleValue<LocalTime> {
     }
 
     public long getMillisecondsSinceMidnight() {
-        return ((long) value.toSecondOfDay() * 1000) + (value.getNano() / 1000_000);
+        return (value.toNanoOfDay() / 1000_000);
     }
 
     @Override
@@ -66,7 +66,7 @@ public class PlcTIME_OF_DAY extends PlcSimpleValue<LocalTime> {
 
     @Override
     public long getLong() {
-        return ((long) value.toSecondOfDay()) * 1000;
+        return getMillisecondsSinceMidnight();
     }
 
     @Override
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueHandler.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueHandler.java
index 18b903d2d9..60c493c609 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueHandler.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueHandler.java
@@ -130,6 +130,14 @@ public class PlcValueHandler implements org.apache.plc4x.java.api.value.PlcValue
                 }
                 return new PlcNull();
             }
+            if (value instanceof PlcValue) {
+                PlcValue plcValue = (PlcValue) value;
+                if (plcValue.getPlcValueType() == tag.getPlcValueType()) {
+                    return (PlcValue) value;
+                } else {
+                    throw new PlcRuntimeException("Expected PlcValue of type " + tag.getPlcValueType().name() + " but got " + plcValue.getPlcValueType().name());
+                }
+            }
             switch (tag.getPlcValueType()) {
                 case BOOL:
                     return PlcBOOL.of(value);
diff --git a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/manual/ManualTest.java b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/manual/ManualTest.java
index a3162624a6..924e614ae9 100644
--- a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/manual/ManualTest.java
+++ b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/manual/ManualTest.java
@@ -120,7 +120,7 @@ public abstract class ManualTest {
                     PlcWriteResponse writeResponse = writeRequest.execute().get();
 
                     // Check the result
-                    Assertions.assertEquals(PlcResponseCode.OK, writeResponse.getResponseCode(tagName));
+                    Assertions.assertEquals(PlcResponseCode.OK, writeResponse.getResponseCode(tagName), String.format("Got status %s for %s", writeResponse.getResponseCode(tagName).name(), testCase.address));
                 }
             }
             System.out.println("Success");
diff --git a/protocols/s7/src/main/resources/protocols/s7/s7.mspec b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
index 0dcb81b3de..98cf4a6919 100644
--- a/protocols/s7/src/main/resources/protocols/s7/s7.mspec
+++ b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
@@ -734,12 +734,10 @@
             [simple string 16 value encoding='"UTF-16"']
         ]
         ['"IEC61131_STRING"' STRING
-            // TODO: Fix this length
-            [manual vstring value  'STATIC_CALL("parseS7String", readBuffer, stringLength, _type.encoding)' 'STATIC_CALL("serializeS7String", writeBuffer, _value, stringLength, _type.encoding)' 'STR_LEN(_value) + 2' encoding='"UTF-8"']
+            [manual vstring value  'STATIC_CALL("parseS7String", readBuffer, stringLength, _type.encoding)' 'STATIC_CALL("serializeS7String", writeBuffer, _value, stringLength, _type.encoding)' '(stringLength * 8) + 16' encoding='"UTF-8"']
         ]
         ['"IEC61131_WSTRING"' STRING
-            // TODO: Fix this length
-            [manual vstring value 'STATIC_CALL("parseS7String", readBuffer, stringLength, _type.encoding)' 'STATIC_CALL("serializeS7String", writeBuffer, _value, stringLength, _type.encoding)' '(STR_LEN(_value) * 2) + 2' encoding='"UTF-16"']
+            [manual vstring value 'STATIC_CALL("parseS7String", readBuffer, stringLength, _type.encoding)' 'STATIC_CALL("serializeS7String", writeBuffer, _value, stringLength, _type.encoding)' '(stringLength * 16) + 32' encoding='"UTF-16"']
         ]
 
         // -----------------------------------------
@@ -854,10 +852,10 @@
     ['0x0F' LREAL         ['0x30'     , 'X'             , '8'               , 'REAL'                , 'null'                             , 'IEC61131_LREAL'        , 'false'             , 'false'             , 'true'               , 'true'               , 'false'             ]]
 
     // Characters and Strings
-    ['0x10' CHAR          ['0x03'     , 'B'             , '1'               , 'null'                , 'BYTE_WORD_DWORD'                  , 'IEC61131_CHAR'         , 'true'              , 'true'              , 'true'               , 'true'               , 'true'              ]]
-    ['0x11' WCHAR         ['0x13'     , 'X'             , '2'               , 'null'                , 'null'                             , 'IEC61131_WCHAR'        , 'false'             , 'false'             , 'true'               , 'true'               , 'true'              ]]
-    ['0x12' STRING        ['0x03'     , 'X'             , '1'               , 'null'                , 'BYTE_WORD_DWORD'                  , 'IEC61131_STRING'       , 'true'              , 'true'              , 'true'               , 'true'               , 'true'              ]]
-    ['0x13' WSTRING       ['0x00'     , 'X'             , '2'               , 'null'                , 'null'                             , 'IEC61131_WSTRING'      , 'false'             , 'false'             , 'true'               , 'true'               , 'true'              ]]
+    ['0x10' CHAR          ['0x03'     , 'B'             , '1'               , 'null'                , 'OCTET_STRING'                     , 'IEC61131_CHAR'         , 'true'              , 'true'              , 'true'               , 'true'               , 'true'              ]]
+    ['0x11' WCHAR         ['0x13'     , 'X'             , '2'               , 'null'                , 'OCTET_STRING'                     , 'IEC61131_WCHAR'        , 'false'             , 'false'             , 'true'               , 'true'               , 'true'              ]]
+    ['0x12' STRING        ['0x03'     , 'X'             , '1'               , 'null'                , 'OCTET_STRING'                     , 'IEC61131_STRING'       , 'true'              , 'true'              , 'true'               , 'true'               , 'true'              ]]
+    ['0x13' WSTRING       ['0x00'     , 'X'             , '2'               , 'null'                , 'OCTET_STRING'                     , 'IEC61131_WSTRING'      , 'false'             , 'false'             , 'true'               , 'true'               , 'true'              ]]
 
     // Dates and time values (Please note that we seem to have to rewrite queries for these types to reading bytes or we'll get "Data type not supported" errors)
     ['0x14' TIME          ['0x0B'     , 'X'             , '4'                 , 'null'                  , 'null'                         , 'IEC61131_TIME'         , 'true'              , 'true'              , 'true'               , 'true'               , 'true'              ]]
@@ -865,9 +863,9 @@
     ['0x16' LTIME         ['0x00'     , 'X'             , '8'                 , 'TIME'                  , 'null'                         , 'IEC61131_LTIME'        , 'false'             , 'false'             , 'false'              , 'true'               , 'false'             ]]
     ['0x17' DATE          ['0x09'     , 'X'             , '2'                 , 'null'                  , 'BYTE_WORD_DWORD'              , 'IEC61131_DATE'         , 'true'              , 'true'              , 'true'               , 'true'               , 'true'              ]]
     ['0x18' TIME_OF_DAY   ['0x06'     , 'X'             , '4'                 , 'null'                  , 'BYTE_WORD_DWORD'              , 'IEC61131_TIME_OF_DAY'  , 'true'              , 'true'              , 'true'               , 'true'               , 'true'              ]]
-    ['0x19' TOD           ['0x06'     , 'X'             , '4'                 , 'null'                  , 'BYTE_WORD_DWORD'              , 'IEC61131_TIME_OF_DAY'  , 'true'              , 'true'              , 'true'               , 'true'               , 'true'              ]]
+    //['0x19' TOD           ['0x06'     , 'X'             , '4'                 , 'null'                  , 'BYTE_WORD_DWORD'              , 'IEC61131_TIME_OF_DAY'  , 'true'              , 'true'              , 'true'               , 'true'               , 'true'              ]]
     ['0x1A' DATE_AND_TIME ['0x0F'     , 'X'             , '12'                , 'null'                  , 'null'                         , 'IEC61131_DATE_AND_TIME', 'true'              , 'true'              , 'false'              , 'true'               , 'false'             ]]
-    ['0x1B' DT            ['0x0F'     , 'X'             , '12'                , 'null'                  , 'null'                         , 'IEC61131_DATE_AND_TIME', 'true'              , 'true'              , 'false'              , 'true'               , 'false'             ]]
+    //['0x1B' DT            ['0x0F'     , 'X'             , '12'                , 'null'                  , 'null'                         , 'IEC61131_DATE_AND_TIME', 'true'              , 'true'              , 'false'              , 'true'               , 'false'             ]]
 ]
 
 [enum uint 8 MemoryArea(string 24 shortName)


[plc4x] 01/03: chore: Updated the KNX manufacturers

Posted by cd...@apache.org.
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

commit b57b9ad0f3e636ab5594856ec685146ea7738d56
Author: Christofer Dutz <cd...@apache.org>
AuthorDate: Fri Sep 22 17:21:51 2023 +0200

    chore: Updated the KNX manufacturers
---
 .../knxnetip/readwrite/model/KnxManufacturer.go    | 26 +++++++++++++++++-----
 .../java/knxnetip/readwrite/KnxManufacturer.java   |  5 +++--
 .../knxnetip/readwrite/model/KnxManufacturer.cs    | 19 +++++++++++-----
 3 files changed, 37 insertions(+), 13 deletions(-)

diff --git a/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go b/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go
index f2c13df5ec..1536774635 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/KnxManufacturer.go
@@ -687,8 +687,9 @@ const (
 	KnxManufacturer_M_ILITE_KNX                                          KnxManufacturer = 641
 	KnxManufacturer_M_LAZZEN                                             KnxManufacturer = 642
 	KnxManufacturer_M_MOX_CONTROL_IT_CHINA_LIMITED                       KnxManufacturer = 643
-	KnxManufacturer_M_ABB___RESERVED                                     KnxManufacturer = 644
-	KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED                    KnxManufacturer = 645
+	KnxManufacturer_M_CLOWIRE                                            KnxManufacturer = 644
+	KnxManufacturer_M_ABB___RESERVED                                     KnxManufacturer = 645
+	KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED                    KnxManufacturer = 646
 )
 
 var KnxManufacturerValues []KnxManufacturer
@@ -1340,6 +1341,7 @@ func init() {
 		KnxManufacturer_M_ILITE_KNX,
 		KnxManufacturer_M_LAZZEN,
 		KnxManufacturer_M_MOX_CONTROL_IT_CHINA_LIMITED,
+		KnxManufacturer_M_CLOWIRE,
 		KnxManufacturer_M_ABB___RESERVED,
 		KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED,
 	}
@@ -3773,10 +3775,14 @@ func (e KnxManufacturer) Number() uint16 {
 		}
 	case 644:
 		{ /* '644' */
-			return 43954
+			return 702
 		}
 	case 645:
 		{ /* '645' */
+			return 43954
+		}
+	case 646:
+		{ /* '646' */
 			return 43959
 		}
 	case 65:
@@ -6375,10 +6381,14 @@ func (e KnxManufacturer) Name() string {
 		}
 	case 644:
 		{ /* '644' */
-			return "ABB - reserved"
+			return "CLOWIRE"
 		}
 	case 645:
 		{ /* '645' */
+			return "ABB - reserved"
+		}
+	case 646:
+		{ /* '646' */
 			return "Busch-Jaeger Elektro - reserved"
 		}
 	case 65:
@@ -7763,8 +7773,10 @@ func KnxManufacturerByValue(value uint16) (enum KnxManufacturer, ok bool) {
 	case 643:
 		return KnxManufacturer_M_MOX_CONTROL_IT_CHINA_LIMITED, true
 	case 644:
-		return KnxManufacturer_M_ABB___RESERVED, true
+		return KnxManufacturer_M_CLOWIRE, true
 	case 645:
+		return KnxManufacturer_M_ABB___RESERVED, true
+	case 646:
 		return KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED, true
 	case 65:
 		return KnxManufacturer_M_JEPAZ, true
@@ -9060,6 +9072,8 @@ func KnxManufacturerByName(value string) (enum KnxManufacturer, ok bool) {
 		return KnxManufacturer_M_LAZZEN, true
 	case "M_MOX_CONTROL_IT_CHINA_LIMITED":
 		return KnxManufacturer_M_MOX_CONTROL_IT_CHINA_LIMITED, true
+	case "M_CLOWIRE":
+		return KnxManufacturer_M_CLOWIRE, true
 	case "M_ABB___RESERVED":
 		return KnxManufacturer_M_ABB___RESERVED, true
 	case "M_BUSCH_JAEGER_ELEKTRO___RESERVED":
@@ -10419,6 +10433,8 @@ func (e KnxManufacturer) PLC4XEnumName() string {
 		return "M_LAZZEN"
 	case KnxManufacturer_M_MOX_CONTROL_IT_CHINA_LIMITED:
 		return "M_MOX_CONTROL_IT_CHINA_LIMITED"
+	case KnxManufacturer_M_CLOWIRE:
+		return "M_CLOWIRE"
 	case KnxManufacturer_M_ABB___RESERVED:
 		return "M_ABB___RESERVED"
 	case KnxManufacturer_M_BUSCH_JAEGER_ELEKTRO___RESERVED:
diff --git a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
index 753491d4d0..16b14b9af5 100644
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
@@ -739,9 +739,10 @@ public enum KnxManufacturer {
   M_ILITE_KNX((int) 641, (int) 699, (String) "ILite-Knx"),
   M_LAZZEN((int) 642, (int) 700, (String) "LAZZEN"),
   M_MOX_CONTROL_IT_CHINA_LIMITED((int) 643, (int) 701, (String) "MOX CONTROL IT (CHINA) LIMITED"),
-  M_ABB___RESERVED((int) 644, (int) 43954, (String) "ABB - reserved"),
+  M_CLOWIRE((int) 644, (int) 702, (String) "CLOWIRE"),
+  M_ABB___RESERVED((int) 645, (int) 43954, (String) "ABB - reserved"),
   M_BUSCH_JAEGER_ELEKTRO___RESERVED(
-      (int) 645, (int) 43959, (String) "Busch-Jaeger Elektro - reserved");
+      (int) 646, (int) 43959, (String) "Busch-Jaeger Elektro - reserved");
   private static final Map<Integer, KnxManufacturer> map;
 
   static {
diff --git a/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxManufacturer.cs b/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxManufacturer.cs
index a020940b25..0ab33ee91d 100644
--- a/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxManufacturer.cs
+++ b/plc4net/drivers/knxnetip/src/drivers/knxnetip/readwrite/model/KnxManufacturer.cs
@@ -668,8 +668,9 @@ namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
         M_ILITE_KNX = 641,
         M_LAZZEN = 642,
         M_MOX_CONTROL_IT_CHINA_LIMITED = 643,
-        M_ABB___RESERVED = 644,
-        M_BUSCH_JAEGER_ELEKTRO___RESERVED = 645,
+        M_CLOWIRE = 644,
+        M_ABB___RESERVED = 645,
+        M_BUSCH_JAEGER_ELEKTRO___RESERVED = 646,
     }
 
     public static class KnxManufacturerInfo
@@ -2497,10 +2498,13 @@ namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
                 case KnxManufacturer.M_MOX_CONTROL_IT_CHINA_LIMITED: { /* '643' */
                     return 701;
                 }
-                case KnxManufacturer.M_ABB___RESERVED: { /* '644' */
+                case KnxManufacturer.M_CLOWIRE: { /* '644' */
+                    return 702;
+                }
+                case KnxManufacturer.M_ABB___RESERVED: { /* '645' */
                     return 43954;
                 }
-                case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO___RESERVED: { /* '645' */
+                case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO___RESERVED: { /* '646' */
                     return 43959;
                 }
                 case KnxManufacturer.M_JEPAZ: { /* '65' */
@@ -4445,10 +4449,13 @@ namespace org.apache.plc4net.drivers.knxnetip.readwrite.model
                 case KnxManufacturer.M_MOX_CONTROL_IT_CHINA_LIMITED: { /* '643' */
                     return "MOX CONTROL IT (CHINA) LIMITED";
                 }
-                case KnxManufacturer.M_ABB___RESERVED: { /* '644' */
+                case KnxManufacturer.M_CLOWIRE: { /* '644' */
+                    return "CLOWIRE";
+                }
+                case KnxManufacturer.M_ABB___RESERVED: { /* '645' */
                     return "ABB - reserved";
                 }
-                case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO___RESERVED: { /* '645' */
+                case KnxManufacturer.M_BUSCH_JAEGER_ELEKTRO___RESERVED: { /* '646' */
                     return "Busch-Jaeger Elektro - reserved";
                 }
                 case KnxManufacturer.M_JEPAZ: { /* '65' */