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/10/29 21:47:06 UTC

[plc4x] branch feature/plc4go updated: - Changed the datatype names in s7 from integer values to the IEC names

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

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


The following commit(s) were added to refs/heads/feature/plc4go by this push:
     new ea94a9d  - Changed the datatype names in s7 from integer values to the IEC names
ea94a9d is described below

commit ea94a9d7ce665fc4fb0397933b0c8755a046182a
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Oct 29 22:46:59 2020 +0100

    - Changed the datatype names in s7 from integer values to the IEC names
---
 .../s7/readwrite/protocol/S7ProtocolLogic.java     |    6 +-
 .../apache/plc4x/java/s7/utils/StaticHelper.java   |    2 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |  104 +-
 .../plc4c/generated-sources/s7/include/data_item.h |    2 +-
 .../generated-sources/s7/include/transport_size.h  |    2 +-
 sandbox/plc4c/generated-sources/s7/src/data_item.c |   52 +-
 .../generated-sources/s7/src/transport_size.c      |   34 +-
 .../internal/plc4go/s7/readwrite/model/DataItem.go |  455 ++++---
 .../plc4go/s7/readwrite/model/TransportSize.go     | 1409 +++++++++++---------
 9 files changed, 1119 insertions(+), 947 deletions(-)

diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
index 403d325..d0c4683 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7ProtocolLogic.java
@@ -415,7 +415,11 @@ public class S7ProtocolLogic extends Plc4xProtocolBase<TPKTPacket> {
             PlcValue plcValue = null;
             ByteBuf data = Unpooled.wrappedBuffer(payloadItem.getData());
             if (responseCode == PlcResponseCode.OK) {
-                plcValue = parsePlcValue(field, data);
+                try {
+                    plcValue = parsePlcValue(field, data);
+                } catch(Exception e) {
+                    throw new PlcProtocolException("Error decoding PlcValue", e);
+                }
             }
             ResponseItem<PlcValue> result = new ResponseItem<>(responseCode, plcValue);
             values.put(fieldName, result);
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/utils/StaticHelper.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/utils/StaticHelper.java
index a489955..8db29a5 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/utils/StaticHelper.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/utils/StaticHelper.java
@@ -129,7 +129,7 @@ public class StaticHelper {
             // This is the maximum number of bytes a string can be long.
             short maxLength = io.readUnsignedShort(8);
             // This is the total length of the string on the PLC (Not necessarily the number of characters read)
-            short totalStringLength = io.readShort(8);
+            short totalStringLength = io.readUnsignedShort(8);
             // Read the full size of the string.
             String str = io.readString(stringLength * 8, (String) encoding);
             // Cut off the parts that don't belong to it.
diff --git a/protocols/s7/src/main/resources/protocols/s7/s7.mspec b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
index 5e1d329..ff31da4 100644
--- a/protocols/s7/src/main/resources/protocols/s7/s7.mspec
+++ b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
@@ -258,12 +258,12 @@
     ]
 ]
 
-[dataIo 'DataItem' [uint 8 'dataProtocolId', int 32 'stringLength']
+[dataIo 'DataItem' [string 'dataProtocolId', int 32 'stringLength']
     [typeSwitch 'dataProtocolId'
         // -----------------------------------------
         // Bit
         // -----------------------------------------
-        ['01' BOOL
+        ['IEC61131_BOOL' BOOL
             [reserved uint 7 '0x00']
             [simple   bit    'value']
         ]
@@ -272,19 +272,19 @@
         // Bit-strings
         // -----------------------------------------
         // 1 byte
-        ['11' BOOL
+        ['IEC61131_BYTE' BOOL
             [array bit 'value' count '8']
         ]
         // 2 byte (16 bit)
-        ['12' BOOL
+        ['IEC61131_WORD' BOOL
             [array bit 'value' count '16']
         ]
         // 4 byte (32 bit)
-        ['13' BOOL
+        ['IEC61131_DWORD' BOOL
             [array bit 'value' count '32']
         ]
         // 8 byte (64 bit)
-        ['14' BOOL
+        ['IEC61131_LWORD' BOOL
             [array bit 'value' count '64']
         ]
 
@@ -292,80 +292,80 @@
         // Integers
         // -----------------------------------------
         // 8 bit:
-        ['21' SINT
+        ['IEC61131_SINT' SINT
             [simple int 8 'value']
         ]
-        ['22' USINT
+        ['IEC61131_USINT' USINT
             [simple uint 8 'value']
         ]
         // 16 bit:
-        ['23' INT
+        ['IEC61131_INT' INT
             [simple int 16 'value']
         ]
-        ['24' UINT
+        ['IEC61131_UINT' UINT
             [simple uint 16 'value']
         ]
         // 32 bit:
-        ['25' DINT
+        ['IEC61131_DINT' DINT
             [simple int 32 'value']
         ]
-        ['26' UDINT
+        ['IEC61131_UDINT' UDINT
             [simple uint 32 'value']
         ]
         // 64 bit:
-        ['27' LINT
+        ['IEC61131_LINT' LINT
             [simple int 64 'value']
         ]
-        ['28' ULINT
+        ['IEC61131_ULINT' ULINT
             [simple uint 64 'value']
         ]
 
         // -----------------------------------------
         // Floating point values
         // -----------------------------------------
-        ['31' REAL
+        ['IEC61131_REAL' REAL
             [simple float 8.23  'value']
         ]
-        ['32' LREAL
+        ['IEC61131_LREAL' LREAL
             [simple float 11.52 'value']
         ]
 
         // -----------------------------------------
         // Characters & Strings
         // -----------------------------------------
-        ['41' CHAR
+        ['IEC61131_CHAR' CHAR
             [manual string 'UTF-8' 'value' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseS7Char", io, _type.encoding)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeS7Char", io, _value, _type.encoding)' '1']
         ]
-        ['42' CHAR
+        ['IEC61131_WCHAR' CHAR
             [manual string 'UTF-16' 'value' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseS7Char", io, _type.encoding)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeS7Char", io, _value, _type.encoding)' '2']
         ]
-        ['43' STRING
+        ['IEC61131_STRING' STRING
             [manual string 'UTF-8' 'value' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseS7String", io, stringLength, _type.encoding)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeS7String", io, _value, stringLength, _type.encoding)' '_value.length + 2']
         ]
-        ['44' STRING
+        ['IEC61131_WSTRING' STRING
             [manual string 'UTF-16' 'value''STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseS7String", io, stringLength, _type.encoding)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeS7String", io, _value, stringLength, _type.encoding)' '(_value.length * 2) + 2']
         ]
 
         // -----------------------------------------
         // TIA Date-Formats
         // -----------------------------------------
-        ['51' Time
+        ['IEC61131_TIME' Time
             [manual time 'value' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseTiaTime", io)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeTiaTime", io, _value)' '4']
         ]
-        ['52' Time
+        ['S7_S5TIME' Time
             [manual time 'value' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseS5Time", io)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeS5Time", io, _value)' '4']
         ]
         // TODO: Check if this is really 8 bytes
-        ['53' Time
+        ['IEC61131_LTIME' Time
             [manual time 'value' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseTiaLTime", io)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeTiaLTime", io, _value)' '8']
         ]
-        ['54' Date
+        ['IEC61131_DATE' Date
             [manual date 'value' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseTiaDate", io)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeTiaDate", io, _value)' '2']
         ]
-        ['55' Time
+        ['IEC61131_TIME_OF_DAY' Time
             [manual time 'value' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseTiaTimeOfDay", io)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeTiaTimeOfDay", io, _value)' '4']
         ]
-        ['56' DateTime
+        ['IEC61131_DATE_AND_TIME' DateTime
             [manual dateTime 'value' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.parseTiaDateTime", io)' 'STATIC_CALL("org.apache.plc4x.java.s7.utils.StaticHelper.serializeTiaDateTime", io, _value)' '8']
         ]
     ]
@@ -405,43 +405,43 @@
     ['0x03' OTHERS  ]
 ]
 
-[enum int 8 'TransportSize'  [uint 8 'sizeCode', uint 8 'sizeInBytes', TransportSize 'baseType', DataTransportSize 'dataTransportSize', uint 8 'dataProtocolId', bit 'supported_S7_300', bit 'supported_S7_400', bit 'supported_S7_1200', bit 'supported_S7_1500', bit 'supported_LOGO']
+[enum int 8 'TransportSize'  [uint 8 'sizeCode', uint 8 'sizeInBytes', TransportSize 'baseType', DataTransportSize 'dataTransportSize', string 'dataProtocolId' , bit 'supported_S7_300', bit 'supported_S7_400', bit 'supported_S7_1200', bit 'supported_S7_1500', bit 'supported_LOGO']
     // Bit Strings
-    ['0x01' BOOL             ['X'              , '1'                 , 'null'                  , 'DataTransportSize.BIT'              , '01'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x02' BYTE             ['B'              , '1'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , '11'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x04' WORD             ['W'              , '2'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , '12'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x06' DWORD            ['D'              , '4'                 , 'TransportSize.WORD'    , 'DataTransportSize.BYTE_WORD_DWORD'  , '13'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x00' LWORD            ['X'              , '8'                 , 'null'                  , 'null'                               , '14'                   , 'false'               , 'false'               , 'false'                , 'true'                 , 'false'             ]]
+    ['0x01' BOOL             ['X'              , '1'                 , 'null'                  , 'DataTransportSize.BIT'              , 'IEC61131_BOOL'         , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x02' BYTE             ['B'              , '1'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_BYTE'         , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x04' WORD             ['W'              , '2'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_WORD'         , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x06' DWORD            ['D'              , '4'                 , 'TransportSize.WORD'    , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_DWORD'        , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x00' LWORD            ['X'              , '8'                 , 'null'                  , 'null'                               , 'IEC61131_LWORD'        , 'false'               , 'false'               , 'false'                , 'true'                 , 'false'             ]]
 
     // Integer values
     // INT and UINT moved out of order as the enum constant INT needs to be generated before it's used in java
-    ['0x05' INT              ['W'              , '2'                 , 'null'                  , 'DataTransportSize.INTEGER'          , '23'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x05' UINT             ['W'              , '2'                 , 'TransportSize.INT'     , 'DataTransportSize.INTEGER'          , '24'                   , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x05' INT              ['W'              , '2'                 , 'null'                  , 'DataTransportSize.INTEGER'          , 'IEC61131_INT'          , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x05' UINT             ['W'              , '2'                 , 'TransportSize.INT'     , 'DataTransportSize.INTEGER'          , 'IEC61131_UINT'         , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
     // ...
-    ['0x02' SINT             ['B'              , '1'                 , 'TransportSize.INT'     , 'DataTransportSize.BYTE_WORD_DWORD'  , '21'                   , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x02' USINT            ['B'              , '1'                 , 'TransportSize.INT'     , 'DataTransportSize.BYTE_WORD_DWORD'  , '22'                   , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x07' DINT             ['D'              , '4'                 , 'TransportSize.INT'     , 'DataTransportSize.INTEGER'          , '25'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x07' UDINT            ['D'              , '4'                 , 'TransportSize.INT'     , 'DataTransportSize.INTEGER'          , '26'                   , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x00' LINT             ['X'              , '8'                 , 'TransportSize.INT'     , 'null'                               , '27'                   , 'false'               , 'false'               , 'false'                , 'true'                 , 'false'             ]]
-    ['0x00' ULINT            ['X'              , '16'                , 'TransportSize.INT'     , 'null'                               , '28'                   , 'false'               , 'false'               , 'false'                , 'true'                 , 'false'             ]]
+    ['0x02' SINT             ['B'              , '1'                 , 'TransportSize.INT'     , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_SINT'         , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x02' USINT            ['B'              , '1'                 , 'TransportSize.INT'     , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_USINT'        , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x07' DINT             ['D'              , '4'                 , 'TransportSize.INT'     , 'DataTransportSize.INTEGER'          , 'IEC61131_DINT'         , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x07' UDINT            ['D'              , '4'                 , 'TransportSize.INT'     , 'DataTransportSize.INTEGER'          , 'IEC61131_UDINT'        , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x00' LINT             ['X'              , '8'                 , 'TransportSize.INT'     , 'null'                               , 'IEC61131_LINT'         , 'false'               , 'false'               , 'false'                , 'true'                 , 'false'             ]]
+    ['0x00' ULINT            ['X'              , '16'                , 'TransportSize.INT'     , 'null'                               , 'IEC61131_ULINT'        , 'false'               , 'false'               , 'false'                , 'true'                 , 'false'             ]]
 
     // Floating point values
-    ['0x08' REAL             ['D'              , '4'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , '31'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x30' LREAL            ['X'              , '8'                 , 'TransportSize.REAL'    , 'null'                               , '32'                   , 'false'               , 'false'               , 'true'                 , 'true'                 , 'false'             ]]
+    ['0x08' REAL             ['D'              , '4'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_REAL'         , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x30' LREAL            ['X'              , '8'                 , 'TransportSize.REAL'    , 'null'                               , 'IEC61131_LREAL'        , 'false'               , 'false'               , 'true'                 , 'true'                 , 'false'             ]]
 
     // Characters and Strings
-    ['0x03' CHAR             ['B'              , '1'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , '41'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x13' WCHAR            ['X'              , '2'                 , 'null'                  , 'null'                               , '42'                   , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x03' STRING           ['X'              , '1'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , '43'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x00' WSTRING          ['X'              , '2'                 , 'null'                  , 'null'                               , '44'                   , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x03' CHAR             ['B'              , '1'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_CHAR'         , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x13' WCHAR            ['X'              , '2'                 , 'null'                  , 'null'                               , 'IEC61131_WCHAR'        , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x03' STRING           ['X'              , '1'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_STRING'       , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x00' WSTRING          ['X'              , '2'                 , 'null'                  , 'null'                               , 'IEC61131_WSTRING'      , 'false'               , 'false'               , 'true'                 , 'true'                 , 'true'              ]]
 
     // Dates and time values (Please note that we seem to have to reqite queries for these types to reading bytes or we'll get "Data type not supported" errors)
-    ['0x0B' TIME             ['X'              , '4'                 , 'null'                  , 'null'                               , '51'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x0C' S5TIME           ['X'              , '4'                 , 'null'                  , 'null'                               , '52'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x00' LTIME            ['X'              , '8'                 , 'TransportSize.TIME'    , 'null'                               , '53'                   , 'false'               , 'false'               , 'false'                , 'true'                 , 'false'             ]]
-    ['0x09' DATE             ['X'              , '2'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , '54'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x0A' TIME_OF_DAY      ['X'              , '4'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , '55'                   , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
-    ['0x0F' DATE_AND_TIME    ['X'              , '12'                , 'null'                  , 'null'                               , '56'                   , 'true'                , 'true'                , 'false'                , 'true'                 , 'false'             ]]
+    ['0x0B' TIME             ['X'              , '4'                 , 'null'                  , 'null'                               , 'IEC61131_TIME'         , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x0C' S5TIME           ['X'              , '4'                 , 'null'                  , 'null'                               , 'S7_S5TIME'             , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x00' LTIME            ['X'              , '8'                 , 'TransportSize.TIME'    , 'null'                               , 'IEC61131_LTIME'        , 'false'               , 'false'               , 'false'                , 'true'                 , 'false'             ]]
+    ['0x09' DATE             ['X'              , '2'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_DATE'         , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x0A' TIME_OF_DAY      ['X'              , '4'                 , 'null'                  , 'DataTransportSize.BYTE_WORD_DWORD'  , 'IEC61131_TIME_OF_DAY'  , 'true'                , 'true'                , 'true'                 , 'true'                 , 'true'              ]]
+    ['0x0F' DATE_AND_TIME    ['X'              , '12'                , 'null'                  , 'null'                               , 'IEC61131_DATE_AND_TIME', 'true'                , 'true'                , 'false'                , 'true'                 , 'false'             ]]
 ]
 
 [enum uint 8 'MemoryArea'             [string 24 'shortName']
diff --git a/sandbox/plc4c/generated-sources/s7/include/data_item.h b/sandbox/plc4c/generated-sources/s7/include/data_item.h
index a0a5fa6..f32340e 100644
--- a/sandbox/plc4c/generated-sources/s7/include/data_item.h
+++ b/sandbox/plc4c/generated-sources/s7/include/data_item.h
@@ -29,7 +29,7 @@
 extern "C" {
 #endif
 
-plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* buf, uint8_t dataProtocolId, int32_t stringLength, plc4c_data** data_item);
+plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* buf, char* dataProtocolId, int32_t stringLength, plc4c_data** data_item);
 
 plc4c_return_code plc4c_s7_read_write_data_item_serialize(plc4c_spi_write_buffer* buf, plc4c_data** data_item);
 
diff --git a/sandbox/plc4c/generated-sources/s7/include/transport_size.h b/sandbox/plc4c/generated-sources/s7/include/transport_size.h
index 9679277..344501c 100644
--- a/sandbox/plc4c/generated-sources/s7/include/transport_size.h
+++ b/sandbox/plc4c/generated-sources/s7/include/transport_size.h
@@ -85,7 +85,7 @@ plc4c_s7_read_write_data_transport_size plc4c_s7_read_write_transport_size_get_d
 
 plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_get_base_type(plc4c_s7_read_write_transport_size value);
 
-uint8_t plc4c_s7_read_write_transport_size_get_data_protocol_id(plc4c_s7_read_write_transport_size value);
+char* plc4c_s7_read_write_transport_size_get_data_protocol_id(plc4c_s7_read_write_transport_size value);
 
 #ifdef __cplusplus
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/data_item.c b/sandbox/plc4c/generated-sources/s7/src/data_item.c
index db44784..534194e 100644
--- a/sandbox/plc4c/generated-sources/s7/src/data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/data_item.c
@@ -26,12 +26,12 @@
 #include "data_item.h"
 
 // Parse function.
-plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io, uint8_t dataProtocolId, int32_t stringLength, plc4c_data** data_item) {
+plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io, char* dataProtocolId, int32_t stringLength, plc4c_data** data_item) {
     uint16_t startPos = plc4c_spi_read_get_pos(io);
     uint16_t curPos;
     plc4c_return_code _res = OK;
 
-        if(dataProtocolId == 01) { /* BOOL */
+        if(strcmp(dataProtocolId, "IEC61131_BOOL") == 0) { /* BOOL */
 
                 // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
                 {
@@ -55,23 +55,23 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_bool_data(value);
 
         } else 
-        if(dataProtocolId == 11) { /* BOOL */
+        if(strcmp(dataProtocolId, "IEC61131_BYTE") == 0) { /* BOOL */
 
                     // Array field (value)
         } else 
-        if(dataProtocolId == 12) { /* BOOL */
+        if(strcmp(dataProtocolId, "IEC61131_WORD") == 0) { /* BOOL */
 
                     // Array field (value)
         } else 
-        if(dataProtocolId == 13) { /* BOOL */
+        if(strcmp(dataProtocolId, "IEC61131_DWORD") == 0) { /* BOOL */
 
                     // Array field (value)
         } else 
-        if(dataProtocolId == 14) { /* BOOL */
+        if(strcmp(dataProtocolId, "IEC61131_LWORD") == 0) { /* BOOL */
 
                     // Array field (value)
         } else 
-        if(dataProtocolId == 21) { /* SINT */
+        if(strcmp(dataProtocolId, "IEC61131_SINT") == 0) { /* SINT */
 
                 // Simple Field (value)
                 int8_t value = 0;
@@ -83,7 +83,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_int8_t_data(value);
 
         } else 
-        if(dataProtocolId == 22) { /* USINT */
+        if(strcmp(dataProtocolId, "IEC61131_USINT") == 0) { /* USINT */
 
                 // Simple Field (value)
                 uint8_t value = 0;
@@ -95,7 +95,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_uint8_t_data(value);
 
         } else 
-        if(dataProtocolId == 23) { /* INT */
+        if(strcmp(dataProtocolId, "IEC61131_INT") == 0) { /* INT */
 
                 // Simple Field (value)
                 int16_t value = 0;
@@ -107,7 +107,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_int16_t_data(value);
 
         } else 
-        if(dataProtocolId == 24) { /* UINT */
+        if(strcmp(dataProtocolId, "IEC61131_UINT") == 0) { /* UINT */
 
                 // Simple Field (value)
                 uint16_t value = 0;
@@ -119,7 +119,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_uint16_t_data(value);
 
         } else 
-        if(dataProtocolId == 25) { /* DINT */
+        if(strcmp(dataProtocolId, "IEC61131_DINT") == 0) { /* DINT */
 
                 // Simple Field (value)
                 int32_t value = 0;
@@ -131,7 +131,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_int32_t_data(value);
 
         } else 
-        if(dataProtocolId == 26) { /* UDINT */
+        if(strcmp(dataProtocolId, "IEC61131_UDINT") == 0) { /* UDINT */
 
                 // Simple Field (value)
                 uint32_t value = 0;
@@ -143,7 +143,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_uint32_t_data(value);
 
         } else 
-        if(dataProtocolId == 27) { /* LINT */
+        if(strcmp(dataProtocolId, "IEC61131_LINT") == 0) { /* LINT */
 
                 // Simple Field (value)
                 int64_t value = 0;
@@ -155,7 +155,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_int64_t_data(value);
 
         } else 
-        if(dataProtocolId == 28) { /* ULINT */
+        if(strcmp(dataProtocolId, "IEC61131_ULINT") == 0) { /* ULINT */
 
                 // Simple Field (value)
                 uint64_t value = 0;
@@ -167,7 +167,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_uint64_t_data(value);
 
         } else 
-        if(dataProtocolId == 31) { /* REAL */
+        if(strcmp(dataProtocolId, "IEC61131_REAL") == 0) { /* REAL */
 
                 // Simple Field (value)
                 float value = 0.0;
@@ -179,7 +179,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_float_data(value);
 
         } else 
-        if(dataProtocolId == 32) { /* LREAL */
+        if(strcmp(dataProtocolId, "IEC61131_LREAL") == 0) { /* LREAL */
 
                 // Simple Field (value)
                 double value = 0.0;
@@ -191,52 +191,52 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_double_data(value);
 
         } else 
-        if(dataProtocolId == 41) { /* CHAR */
+        if(strcmp(dataProtocolId, "IEC61131_CHAR") == 0) { /* CHAR */
 
                     // Manual Field (value)
                     char* value = (char*) (plc4c_s7_read_write_parse_s7_char(io, "UTF-8"));
         } else 
-        if(dataProtocolId == 42) { /* CHAR */
+        if(strcmp(dataProtocolId, "IEC61131_WCHAR") == 0) { /* CHAR */
 
                     // Manual Field (value)
                     char* value = (char*) (plc4c_s7_read_write_parse_s7_char(io, "UTF-16"));
         } else 
-        if(dataProtocolId == 43) { /* STRING */
+        if(strcmp(dataProtocolId, "IEC61131_STRING") == 0) { /* STRING */
 
                     // Manual Field (value)
                     char* value = (char*) (plc4c_s7_read_write_parse_s7_string(io, stringLength, "UTF-8"));
         } else 
-        if(dataProtocolId == 44) { /* STRING */
+        if(strcmp(dataProtocolId, "IEC61131_WSTRING") == 0) { /* STRING */
 
                     // Manual Field (value)
                     char* value = (char*) (plc4c_s7_read_write_parse_s7_string(io, stringLength, "UTF-16"));
         } else 
-        if(dataProtocolId == 51) { /* Time */
+        if(strcmp(dataProtocolId, "IEC61131_TIME") == 0) { /* Time */
 
                     // Manual Field (value)
                     time_t value = (time_t) (plc4c_s7_read_write_parse_tia_time(io));
         } else 
-        if(dataProtocolId == 52) { /* Time */
+        if(strcmp(dataProtocolId, "S7_S5TIME") == 0) { /* Time */
 
                     // Manual Field (value)
                     time_t value = (time_t) (plc4c_s7_read_write_parse_s5_time(io));
         } else 
-        if(dataProtocolId == 53) { /* Time */
+        if(strcmp(dataProtocolId, "IEC61131_LTIME") == 0) { /* Time */
 
                     // Manual Field (value)
                     time_t value = (time_t) (plc4c_s7_read_write_parse_tia_l_time(io));
         } else 
-        if(dataProtocolId == 54) { /* Date */
+        if(strcmp(dataProtocolId, "IEC61131_DATE") == 0) { /* Date */
 
                     // Manual Field (value)
                     time_t value = (time_t) (plc4c_s7_read_write_parse_tia_date(io));
         } else 
-        if(dataProtocolId == 55) { /* Time */
+        if(strcmp(dataProtocolId, "IEC61131_TIME_OF_DAY") == 0) { /* Time */
 
                     // Manual Field (value)
                     time_t value = (time_t) (plc4c_s7_read_write_parse_tia_time_of_day(io));
         } else 
-        if(dataProtocolId == 56) { /* DateTime */
+        if(strcmp(dataProtocolId, "IEC61131_DATE_AND_TIME") == 0) { /* DateTime */
 
                     // Manual Field (value)
                     time_t value = (time_t) (plc4c_s7_read_write_parse_tia_date_time(io));
diff --git a/sandbox/plc4c/generated-sources/s7/src/transport_size.c b/sandbox/plc4c/generated-sources/s7/src/transport_size.c
index c2e1039..a7d8e17 100644
--- a/sandbox/plc4c/generated-sources/s7/src/transport_size.c
+++ b/sandbox/plc4c/generated-sources/s7/src/transport_size.c
@@ -646,55 +646,55 @@ plc4c_s7_read_write_transport_size plc4c_s7_read_write_transport_size_get_base_t
   }
 }
 
-uint8_t plc4c_s7_read_write_transport_size_get_data_protocol_id(plc4c_s7_read_write_transport_size value) {
+char* plc4c_s7_read_write_transport_size_get_data_protocol_id(plc4c_s7_read_write_transport_size value) {
   switch(value) {
     case plc4c_s7_read_write_transport_size_LWORD: { /* '0x00' */
-      return 14;
+      return "IEC61131_LWORD";
     }
     case plc4c_s7_read_write_transport_size_BOOL: { /* '0x01' */
-      return 01;
+      return "IEC61131_BOOL";
     }
     case plc4c_s7_read_write_transport_size_BYTE: { /* '0x02' */
-      return 11;
+      return "IEC61131_BYTE";
     }
     case plc4c_s7_read_write_transport_size_CHAR: { /* '0x03' */
-      return 41;
+      return "IEC61131_CHAR";
     }
     case plc4c_s7_read_write_transport_size_WORD: { /* '0x04' */
-      return 12;
+      return "IEC61131_WORD";
     }
     case plc4c_s7_read_write_transport_size_INT: { /* '0x05' */
-      return 23;
+      return "IEC61131_INT";
     }
     case plc4c_s7_read_write_transport_size_DWORD: { /* '0x06' */
-      return 13;
+      return "IEC61131_DWORD";
     }
     case plc4c_s7_read_write_transport_size_DINT: { /* '0x07' */
-      return 25;
+      return "IEC61131_DINT";
     }
     case plc4c_s7_read_write_transport_size_REAL: { /* '0x08' */
-      return 31;
+      return "IEC61131_REAL";
     }
     case plc4c_s7_read_write_transport_size_DATE: { /* '0x09' */
-      return 54;
+      return "IEC61131_DATE";
     }
     case plc4c_s7_read_write_transport_size_TIME_OF_DAY: { /* '0x0A' */
-      return 55;
+      return "IEC61131_TIME_OF_DAY";
     }
     case plc4c_s7_read_write_transport_size_TIME: { /* '0x0B' */
-      return 51;
+      return "IEC61131_TIME";
     }
     case plc4c_s7_read_write_transport_size_S5TIME: { /* '0x0C' */
-      return 52;
+      return "S7_S5TIME";
     }
     case plc4c_s7_read_write_transport_size_DATE_AND_TIME: { /* '0x0F' */
-      return 56;
+      return "IEC61131_DATE_AND_TIME";
     }
     case plc4c_s7_read_write_transport_size_WCHAR: { /* '0x13' */
-      return 42;
+      return "IEC61131_WCHAR";
     }
     case plc4c_s7_read_write_transport_size_LREAL: { /* '0x30' */
-      return 32;
+      return "IEC61131_LREAL";
     }
     default: {
       return 0;
diff --git a/sandbox/plc4go/internal/plc4go/s7/readwrite/model/DataItem.go b/sandbox/plc4go/internal/plc4go/s7/readwrite/model/DataItem.go
index 8f80b6e..41e7ffe 100644
--- a/sandbox/plc4go/internal/plc4go/s7/readwrite/model/DataItem.go
+++ b/sandbox/plc4go/internal/plc4go/s7/readwrite/model/DataItem.go
@@ -19,234 +19,233 @@
 package model
 
 import (
-    "errors"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/model/values"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
-    api "plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go/values"
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/model/values"
+	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+	api "plc4x.apache.org/plc4go-modbus-driver/v0/pkg/plc4go/values"
 )
 
-func DataItemParse(io *utils.ReadBuffer, dataProtocolId uint8, stringLength int32) (api.PlcValue, error) {
-    switch {
-        case dataProtocolId == 01: // BOOL
-
-            // Reserved Field (Just skip the bytes)
-            io.ReadUint8(7)
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadBit()
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcBOOL(value), nil
-        case dataProtocolId == 11: // BOOL
-
-            // Array Field (value)
-            var value []api.PlcValue
-            for i := 0; i < int((8)); i++ {
-                _item, _itemErr := DataItemParse(io, dataProtocolId, int32(1))
-                if _itemErr != nil {
-                    return nil, errors.New("Error parsing 'value' field " + _itemErr.Error())
-                }
-                value = append(value, _item)
-            }
-            return values.NewPlcList(value), nil
-        case dataProtocolId == 12: // BOOL
-
-            // Array Field (value)
-            var value []api.PlcValue
-            for i := 0; i < int((16)); i++ {
-                _item, _itemErr := DataItemParse(io, dataProtocolId, int32(1))
-                if _itemErr != nil {
-                    return nil, errors.New("Error parsing 'value' field " + _itemErr.Error())
-                }
-                value = append(value, _item)
-            }
-            return values.NewPlcList(value), nil
-        case dataProtocolId == 13: // BOOL
-
-            // Array Field (value)
-            var value []api.PlcValue
-            for i := 0; i < int((32)); i++ {
-                _item, _itemErr := DataItemParse(io, dataProtocolId, int32(1))
-                if _itemErr != nil {
-                    return nil, errors.New("Error parsing 'value' field " + _itemErr.Error())
-                }
-                value = append(value, _item)
-            }
-            return values.NewPlcList(value), nil
-        case dataProtocolId == 14: // BOOL
-
-            // Array Field (value)
-            var value []api.PlcValue
-            for i := 0; i < int((64)); i++ {
-                _item, _itemErr := DataItemParse(io, dataProtocolId, int32(1))
-                if _itemErr != nil {
-                    return nil, errors.New("Error parsing 'value' field " + _itemErr.Error())
-                }
-                value = append(value, _item)
-            }
-            return values.NewPlcList(value), nil
-        case dataProtocolId == 21: // SINT
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadInt8(8)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcSINT(value), nil
-        case dataProtocolId == 22: // USINT
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadUint8(8)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcUSINT(value), nil
-        case dataProtocolId == 23: // INT
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadInt16(16)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcINT(value), nil
-        case dataProtocolId == 24: // UINT
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadUint16(16)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcUINT(value), nil
-        case dataProtocolId == 25: // DINT
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadInt32(32)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcDINT(value), nil
-        case dataProtocolId == 26: // UDINT
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadUint32(32)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcUDINT(value), nil
-        case dataProtocolId == 27: // LINT
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadInt64(64)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcLINT(value), nil
-        case dataProtocolId == 28: // ULINT
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadUint64(64)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcULINT(value), nil
-        case dataProtocolId == 31: // REAL
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadFloat32(32)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcREAL(value), nil
-        case dataProtocolId == 32: // LREAL
-
-            // Simple Field (value)
-            value, _valueErr := io.ReadFloat64(64)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcLREAL(value), nil
-        case dataProtocolId == 41: // CHAR
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseS7Char(io, "UTF-8")
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcCHAR(value), nil
-        case dataProtocolId == 42: // CHAR
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseS7Char(io, "UTF-16")
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcCHAR(value), nil
-        case dataProtocolId == 43: // STRING
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseS7String(io, stringLength, "UTF-8")
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcSTRING(value), nil
-        case dataProtocolId == 44: // STRING
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseS7String(io, stringLength, "UTF-16")
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcSTRING(value), nil
-        case dataProtocolId == 51: // Time
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseTiaTime(io)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcTIME(value), nil
-        case dataProtocolId == 52: // Time
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseS5Time(io)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcTIME(value), nil
-        case dataProtocolId == 53: // Time
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseTiaLTime(io)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcTIME(value), nil
-        case dataProtocolId == 54: // Date
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseTiaDate(io)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcTIME(value), nil
-        case dataProtocolId == 55: // Time
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseTiaTimeOfDay(io)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcTIME(value), nil
-        case dataProtocolId == 56: // DateTime
-
-            // Manual Field (value)
-            value, _valueErr := StaticHelperParseTiaDateTime(io)
-            if _valueErr != nil {
-                return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
-            }
-            return values.NewPlcTIME(value), nil
-    }
-    return nil, errors.New("unsupported type")
+func DataItemParse(io *utils.ReadBuffer, dataProtocolId string, stringLength int32) (api.PlcValue, error) {
+	switch {
+	case dataProtocolId == "IEC61131_BOOL": // BOOL
+
+		// Reserved Field (Just skip the bytes)
+		io.ReadUint8(7)
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadBit()
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcBOOL(value), nil
+	case dataProtocolId == "IEC61131_BYTE": // BOOL
+
+		// Array Field (value)
+		var value []api.PlcValue
+		for i := 0; i < int((8)); i++ {
+			_item, _itemErr := DataItemParse(io, dataProtocolId, int32(1))
+			if _itemErr != nil {
+				return nil, errors.New("Error parsing 'value' field " + _itemErr.Error())
+			}
+			value = append(value, _item)
+		}
+		return values.NewPlcList(value), nil
+	case dataProtocolId == "IEC61131_WORD": // BOOL
+
+		// Array Field (value)
+		var value []api.PlcValue
+		for i := 0; i < int((16)); i++ {
+			_item, _itemErr := DataItemParse(io, dataProtocolId, int32(1))
+			if _itemErr != nil {
+				return nil, errors.New("Error parsing 'value' field " + _itemErr.Error())
+			}
+			value = append(value, _item)
+		}
+		return values.NewPlcList(value), nil
+	case dataProtocolId == "IEC61131_DWORD": // BOOL
+
+		// Array Field (value)
+		var value []api.PlcValue
+		for i := 0; i < int((32)); i++ {
+			_item, _itemErr := DataItemParse(io, dataProtocolId, int32(1))
+			if _itemErr != nil {
+				return nil, errors.New("Error parsing 'value' field " + _itemErr.Error())
+			}
+			value = append(value, _item)
+		}
+		return values.NewPlcList(value), nil
+	case dataProtocolId == "IEC61131_LWORD": // BOOL
+
+		// Array Field (value)
+		var value []api.PlcValue
+		for i := 0; i < int((64)); i++ {
+			_item, _itemErr := DataItemParse(io, dataProtocolId, int32(1))
+			if _itemErr != nil {
+				return nil, errors.New("Error parsing 'value' field " + _itemErr.Error())
+			}
+			value = append(value, _item)
+		}
+		return values.NewPlcList(value), nil
+	case dataProtocolId == "IEC61131_SINT": // SINT
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadInt8(8)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcSINT(value), nil
+	case dataProtocolId == "IEC61131_USINT": // USINT
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadUint8(8)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcUSINT(value), nil
+	case dataProtocolId == "IEC61131_INT": // INT
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadInt16(16)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcINT(value), nil
+	case dataProtocolId == "IEC61131_UINT": // UINT
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadUint16(16)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcUINT(value), nil
+	case dataProtocolId == "IEC61131_DINT": // DINT
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadInt32(32)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcDINT(value), nil
+	case dataProtocolId == "IEC61131_UDINT": // UDINT
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadUint32(32)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcUDINT(value), nil
+	case dataProtocolId == "IEC61131_LINT": // LINT
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadInt64(64)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcLINT(value), nil
+	case dataProtocolId == "IEC61131_ULINT": // ULINT
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadUint64(64)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcULINT(value), nil
+	case dataProtocolId == "IEC61131_REAL": // REAL
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadFloat32(32)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcREAL(value), nil
+	case dataProtocolId == "IEC61131_LREAL": // LREAL
+
+		// Simple Field (value)
+		value, _valueErr := io.ReadFloat64(64)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcLREAL(value), nil
+	case dataProtocolId == "IEC61131_CHAR": // CHAR
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseS7Char(io, "UTF-8")
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcCHAR(value), nil
+	case dataProtocolId == "IEC61131_WCHAR": // CHAR
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseS7Char(io, "UTF-16")
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcCHAR(value), nil
+	case dataProtocolId == "IEC61131_STRING": // STRING
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseS7String(io, stringLength, "UTF-8")
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcSTRING(value), nil
+	case dataProtocolId == "IEC61131_WSTRING": // STRING
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseS7String(io, stringLength, "UTF-16")
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcSTRING(value), nil
+	case dataProtocolId == "IEC61131_TIME": // Time
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseTiaTime(io)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcTIME(value), nil
+	case dataProtocolId == "S7_S5TIME": // Time
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseS5Time(io)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcTIME(value), nil
+	case dataProtocolId == "IEC61131_LTIME": // Time
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseTiaLTime(io)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcTIME(value), nil
+	case dataProtocolId == "IEC61131_DATE": // Date
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseTiaDate(io)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcTIME(value), nil
+	case dataProtocolId == "IEC61131_TIME_OF_DAY": // Time
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseTiaTimeOfDay(io)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcTIME(value), nil
+	case dataProtocolId == "IEC61131_DATE_AND_TIME": // DateTime
+
+		// Manual Field (value)
+		value, _valueErr := StaticHelperParseTiaDateTime(io)
+		if _valueErr != nil {
+			return nil, errors.New("Error parsing 'value' field " + _valueErr.Error())
+		}
+		return values.NewPlcTIME(value), nil
+	}
+	return nil, errors.New("unsupported type")
 }
-
diff --git a/sandbox/plc4go/internal/plc4go/s7/readwrite/model/TransportSize.go b/sandbox/plc4go/internal/plc4go/s7/readwrite/model/TransportSize.go
index e37341f..ca624b5 100644
--- a/sandbox/plc4go/internal/plc4go/s7/readwrite/model/TransportSize.go
+++ b/sandbox/plc4go/internal/plc4go/s7/readwrite/model/TransportSize.go
@@ -19,677 +19,846 @@
 package model
 
 import (
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
-    "plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
+	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/spi"
+	"plc4x.apache.org/plc4go-modbus-driver/v0/internal/plc4go/utils"
 )
 
 type TransportSize int8
 
 type ITransportSize interface {
-    spi.Message
-    Supported_S7_300() bool
-    Supported_LOGO() bool
-    SizeInBytes() uint8
-    Supported_S7_400() bool
-    Supported_S7_1200() bool
-    SizeCode() uint8
-    Supported_S7_1500() bool
-    DataTransportSize() DataTransportSize
-    BaseType() TransportSize
-    DataProtocolId() uint8
-    Serialize(io utils.WriteBuffer) error
+	spi.Message
+	Supported_S7_300() bool
+	Supported_LOGO() bool
+	SizeInBytes() uint8
+	Supported_S7_400() bool
+	Supported_S7_1200() bool
+	SizeCode() uint8
+	Supported_S7_1500() bool
+	DataTransportSize() DataTransportSize
+	BaseType() TransportSize
+	DataProtocolId() string
+	Serialize(io utils.WriteBuffer) error
 }
 
-const(
-    TransportSize_BOOL TransportSize = 0x01
-    TransportSize_BYTE TransportSize = 0x02
-    TransportSize_WORD TransportSize = 0x04
-    TransportSize_DWORD TransportSize = 0x06
-    TransportSize_LWORD TransportSize = 0x00
-    TransportSize_INT TransportSize = 0x05
-    TransportSize_UINT TransportSize = 0x05
-    TransportSize_SINT TransportSize = 0x02
-    TransportSize_USINT TransportSize = 0x02
-    TransportSize_DINT TransportSize = 0x07
-    TransportSize_UDINT TransportSize = 0x07
-    TransportSize_LINT TransportSize = 0x00
-    TransportSize_ULINT TransportSize = 0x00
-    TransportSize_REAL TransportSize = 0x08
-    TransportSize_LREAL TransportSize = 0x30
-    TransportSize_CHAR TransportSize = 0x03
-    TransportSize_WCHAR TransportSize = 0x13
-    TransportSize_STRING TransportSize = 0x03
-    TransportSize_WSTRING TransportSize = 0x00
-    TransportSize_TIME TransportSize = 0x0B
-    TransportSize_S5TIME TransportSize = 0x0C
-    TransportSize_LTIME TransportSize = 0x00
-    TransportSize_DATE TransportSize = 0x09
-    TransportSize_TIME_OF_DAY TransportSize = 0x0A
-    TransportSize_DATE_AND_TIME TransportSize = 0x0F
+const (
+	TransportSize_BOOL          TransportSize = 0x01
+	TransportSize_BYTE          TransportSize = 0x02
+	TransportSize_WORD          TransportSize = 0x04
+	TransportSize_DWORD         TransportSize = 0x06
+	TransportSize_LWORD         TransportSize = 0x00
+	TransportSize_INT           TransportSize = 0x05
+	TransportSize_UINT          TransportSize = 0x05
+	TransportSize_SINT          TransportSize = 0x02
+	TransportSize_USINT         TransportSize = 0x02
+	TransportSize_DINT          TransportSize = 0x07
+	TransportSize_UDINT         TransportSize = 0x07
+	TransportSize_LINT          TransportSize = 0x00
+	TransportSize_ULINT         TransportSize = 0x00
+	TransportSize_REAL          TransportSize = 0x08
+	TransportSize_LREAL         TransportSize = 0x30
+	TransportSize_CHAR          TransportSize = 0x03
+	TransportSize_WCHAR         TransportSize = 0x13
+	TransportSize_STRING        TransportSize = 0x03
+	TransportSize_WSTRING       TransportSize = 0x00
+	TransportSize_TIME          TransportSize = 0x0B
+	TransportSize_S5TIME        TransportSize = 0x0C
+	TransportSize_LTIME         TransportSize = 0x00
+	TransportSize_DATE          TransportSize = 0x09
+	TransportSize_TIME_OF_DAY   TransportSize = 0x0A
+	TransportSize_DATE_AND_TIME TransportSize = 0x0F
 )
 
-
 func (e TransportSize) Supported_S7_300() bool {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return false
-        }
-        case 0x01: { /* '0x01' */
-            return true
-        }
-        case 0x02: { /* '0x02' */
-            return true
-        }
-        case 0x03: { /* '0x03' */
-            return true
-        }
-        case 0x04: { /* '0x04' */
-            return true
-        }
-        case 0x05: { /* '0x05' */
-            return true
-        }
-        case 0x06: { /* '0x06' */
-            return true
-        }
-        case 0x07: { /* '0x07' */
-            return true
-        }
-        case 0x08: { /* '0x08' */
-            return true
-        }
-        case 0x09: { /* '0x09' */
-            return true
-        }
-        case 0x0A: { /* '0x0A' */
-            return true
-        }
-        case 0x0B: { /* '0x0B' */
-            return true
-        }
-        case 0x0C: { /* '0x0C' */
-            return true
-        }
-        case 0x0F: { /* '0x0F' */
-            return true
-        }
-        case 0x13: { /* '0x13' */
-            return false
-        }
-        case 0x30: { /* '0x30' */
-            return false
-        }
-        default: {
-            return false
-        }
-    }
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return false
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return true
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return true
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return true
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return true
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return true
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return true
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return true
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return true
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return true
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return true
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return true
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return true
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return true
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return false
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return false
+		}
+	default:
+		{
+			return false
+		}
+	}
 }
 
 func (e TransportSize) Supported_LOGO() bool {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return false
-        }
-        case 0x01: { /* '0x01' */
-            return true
-        }
-        case 0x02: { /* '0x02' */
-            return true
-        }
-        case 0x03: { /* '0x03' */
-            return true
-        }
-        case 0x04: { /* '0x04' */
-            return true
-        }
-        case 0x05: { /* '0x05' */
-            return true
-        }
-        case 0x06: { /* '0x06' */
-            return true
-        }
-        case 0x07: { /* '0x07' */
-            return true
-        }
-        case 0x08: { /* '0x08' */
-            return true
-        }
-        case 0x09: { /* '0x09' */
-            return true
-        }
-        case 0x0A: { /* '0x0A' */
-            return true
-        }
-        case 0x0B: { /* '0x0B' */
-            return true
-        }
-        case 0x0C: { /* '0x0C' */
-            return true
-        }
-        case 0x0F: { /* '0x0F' */
-            return false
-        }
-        case 0x13: { /* '0x13' */
-            return true
-        }
-        case 0x30: { /* '0x30' */
-            return false
-        }
-        default: {
-            return false
-        }
-    }
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return false
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return true
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return true
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return true
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return true
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return true
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return true
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return true
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return true
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return true
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return true
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return true
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return true
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return false
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return true
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return false
+		}
+	default:
+		{
+			return false
+		}
+	}
 }
 
 func (e TransportSize) SizeInBytes() uint8 {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return 8
-        }
-        case 0x01: { /* '0x01' */
-            return 1
-        }
-        case 0x02: { /* '0x02' */
-            return 1
-        }
-        case 0x03: { /* '0x03' */
-            return 1
-        }
-        case 0x04: { /* '0x04' */
-            return 2
-        }
-        case 0x05: { /* '0x05' */
-            return 2
-        }
-        case 0x06: { /* '0x06' */
-            return 4
-        }
-        case 0x07: { /* '0x07' */
-            return 4
-        }
-        case 0x08: { /* '0x08' */
-            return 4
-        }
-        case 0x09: { /* '0x09' */
-            return 2
-        }
-        case 0x0A: { /* '0x0A' */
-            return 4
-        }
-        case 0x0B: { /* '0x0B' */
-            return 4
-        }
-        case 0x0C: { /* '0x0C' */
-            return 4
-        }
-        case 0x0F: { /* '0x0F' */
-            return 12
-        }
-        case 0x13: { /* '0x13' */
-            return 2
-        }
-        case 0x30: { /* '0x30' */
-            return 8
-        }
-        default: {
-            return 0
-        }
-    }
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return 8
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return 1
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return 1
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return 1
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return 2
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return 2
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return 4
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return 4
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return 4
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return 2
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return 4
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return 4
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return 4
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return 12
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return 2
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return 8
+		}
+	default:
+		{
+			return 0
+		}
+	}
 }
 
 func (e TransportSize) Supported_S7_400() bool {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return false
-        }
-        case 0x01: { /* '0x01' */
-            return true
-        }
-        case 0x02: { /* '0x02' */
-            return true
-        }
-        case 0x03: { /* '0x03' */
-            return true
-        }
-        case 0x04: { /* '0x04' */
-            return true
-        }
-        case 0x05: { /* '0x05' */
-            return true
-        }
-        case 0x06: { /* '0x06' */
-            return true
-        }
-        case 0x07: { /* '0x07' */
-            return true
-        }
-        case 0x08: { /* '0x08' */
-            return true
-        }
-        case 0x09: { /* '0x09' */
-            return true
-        }
-        case 0x0A: { /* '0x0A' */
-            return true
-        }
-        case 0x0B: { /* '0x0B' */
-            return true
-        }
-        case 0x0C: { /* '0x0C' */
-            return true
-        }
-        case 0x0F: { /* '0x0F' */
-            return true
-        }
-        case 0x13: { /* '0x13' */
-            return false
-        }
-        case 0x30: { /* '0x30' */
-            return false
-        }
-        default: {
-            return false
-        }
-    }
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return false
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return true
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return true
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return true
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return true
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return true
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return true
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return true
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return true
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return true
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return true
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return true
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return true
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return true
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return false
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return false
+		}
+	default:
+		{
+			return false
+		}
+	}
 }
 
 func (e TransportSize) Supported_S7_1200() bool {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return false
-        }
-        case 0x01: { /* '0x01' */
-            return true
-        }
-        case 0x02: { /* '0x02' */
-            return true
-        }
-        case 0x03: { /* '0x03' */
-            return true
-        }
-        case 0x04: { /* '0x04' */
-            return true
-        }
-        case 0x05: { /* '0x05' */
-            return true
-        }
-        case 0x06: { /* '0x06' */
-            return true
-        }
-        case 0x07: { /* '0x07' */
-            return true
-        }
-        case 0x08: { /* '0x08' */
-            return true
-        }
-        case 0x09: { /* '0x09' */
-            return true
-        }
-        case 0x0A: { /* '0x0A' */
-            return true
-        }
-        case 0x0B: { /* '0x0B' */
-            return true
-        }
-        case 0x0C: { /* '0x0C' */
-            return true
-        }
-        case 0x0F: { /* '0x0F' */
-            return false
-        }
-        case 0x13: { /* '0x13' */
-            return true
-        }
-        case 0x30: { /* '0x30' */
-            return true
-        }
-        default: {
-            return false
-        }
-    }
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return false
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return true
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return true
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return true
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return true
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return true
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return true
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return true
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return true
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return true
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return true
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return true
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return true
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return false
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return true
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return true
+		}
+	default:
+		{
+			return false
+		}
+	}
 }
 
 func (e TransportSize) SizeCode() uint8 {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return 'X'
-        }
-        case 0x01: { /* '0x01' */
-            return 'X'
-        }
-        case 0x02: { /* '0x02' */
-            return 'B'
-        }
-        case 0x03: { /* '0x03' */
-            return 'B'
-        }
-        case 0x04: { /* '0x04' */
-            return 'W'
-        }
-        case 0x05: { /* '0x05' */
-            return 'W'
-        }
-        case 0x06: { /* '0x06' */
-            return 'D'
-        }
-        case 0x07: { /* '0x07' */
-            return 'D'
-        }
-        case 0x08: { /* '0x08' */
-            return 'D'
-        }
-        case 0x09: { /* '0x09' */
-            return 'X'
-        }
-        case 0x0A: { /* '0x0A' */
-            return 'X'
-        }
-        case 0x0B: { /* '0x0B' */
-            return 'X'
-        }
-        case 0x0C: { /* '0x0C' */
-            return 'X'
-        }
-        case 0x0F: { /* '0x0F' */
-            return 'X'
-        }
-        case 0x13: { /* '0x13' */
-            return 'X'
-        }
-        case 0x30: { /* '0x30' */
-            return 'X'
-        }
-        default: {
-            return 0
-        }
-    }
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return 'X'
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return 'X'
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return 'B'
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return 'B'
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return 'W'
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return 'W'
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return 'D'
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return 'D'
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return 'D'
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return 'X'
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return 'X'
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return 'X'
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return 'X'
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return 'X'
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return 'X'
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return 'X'
+		}
+	default:
+		{
+			return 0
+		}
+	}
 }
 
 func (e TransportSize) Supported_S7_1500() bool {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return true
-        }
-        case 0x01: { /* '0x01' */
-            return true
-        }
-        case 0x02: { /* '0x02' */
-            return true
-        }
-        case 0x03: { /* '0x03' */
-            return true
-        }
-        case 0x04: { /* '0x04' */
-            return true
-        }
-        case 0x05: { /* '0x05' */
-            return true
-        }
-        case 0x06: { /* '0x06' */
-            return true
-        }
-        case 0x07: { /* '0x07' */
-            return true
-        }
-        case 0x08: { /* '0x08' */
-            return true
-        }
-        case 0x09: { /* '0x09' */
-            return true
-        }
-        case 0x0A: { /* '0x0A' */
-            return true
-        }
-        case 0x0B: { /* '0x0B' */
-            return true
-        }
-        case 0x0C: { /* '0x0C' */
-            return true
-        }
-        case 0x0F: { /* '0x0F' */
-            return true
-        }
-        case 0x13: { /* '0x13' */
-            return true
-        }
-        case 0x30: { /* '0x30' */
-            return true
-        }
-        default: {
-            return false
-        }
-    }
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return true
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return true
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return true
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return true
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return true
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return true
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return true
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return true
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return true
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return true
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return true
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return true
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return true
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return true
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return true
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return true
+		}
+	default:
+		{
+			return false
+		}
+	}
 }
 
 func (e TransportSize) DataTransportSize() DataTransportSize {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return 0
-        }
-        case 0x01: { /* '0x01' */
-            return DataTransportSize_BIT
-        }
-        case 0x02: { /* '0x02' */
-            return DataTransportSize_BYTE_WORD_DWORD
-        }
-        case 0x03: { /* '0x03' */
-            return DataTransportSize_BYTE_WORD_DWORD
-        }
-        case 0x04: { /* '0x04' */
-            return DataTransportSize_BYTE_WORD_DWORD
-        }
-        case 0x05: { /* '0x05' */
-            return DataTransportSize_INTEGER
-        }
-        case 0x06: { /* '0x06' */
-            return DataTransportSize_BYTE_WORD_DWORD
-        }
-        case 0x07: { /* '0x07' */
-            return DataTransportSize_INTEGER
-        }
-        case 0x08: { /* '0x08' */
-            return DataTransportSize_BYTE_WORD_DWORD
-        }
-        case 0x09: { /* '0x09' */
-            return DataTransportSize_BYTE_WORD_DWORD
-        }
-        case 0x0A: { /* '0x0A' */
-            return DataTransportSize_BYTE_WORD_DWORD
-        }
-        case 0x0B: { /* '0x0B' */
-            return 0
-        }
-        case 0x0C: { /* '0x0C' */
-            return 0
-        }
-        case 0x0F: { /* '0x0F' */
-            return 0
-        }
-        case 0x13: { /* '0x13' */
-            return 0
-        }
-        case 0x30: { /* '0x30' */
-            return 0
-        }
-        default: {
-            return 0
-        }
-    }
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return 0
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return DataTransportSize_BIT
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return DataTransportSize_BYTE_WORD_DWORD
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return DataTransportSize_BYTE_WORD_DWORD
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return DataTransportSize_BYTE_WORD_DWORD
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return DataTransportSize_INTEGER
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return DataTransportSize_BYTE_WORD_DWORD
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return DataTransportSize_INTEGER
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return DataTransportSize_BYTE_WORD_DWORD
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return DataTransportSize_BYTE_WORD_DWORD
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return DataTransportSize_BYTE_WORD_DWORD
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return 0
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return 0
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return 0
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return 0
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return 0
+		}
+	default:
+		{
+			return 0
+		}
+	}
 }
 
 func (e TransportSize) BaseType() TransportSize {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return 0
-        }
-        case 0x01: { /* '0x01' */
-            return 0
-        }
-        case 0x02: { /* '0x02' */
-            return 0
-        }
-        case 0x03: { /* '0x03' */
-            return 0
-        }
-        case 0x04: { /* '0x04' */
-            return 0
-        }
-        case 0x05: { /* '0x05' */
-            return 0
-        }
-        case 0x06: { /* '0x06' */
-            return TransportSize_WORD
-        }
-        case 0x07: { /* '0x07' */
-            return TransportSize_INT
-        }
-        case 0x08: { /* '0x08' */
-            return 0
-        }
-        case 0x09: { /* '0x09' */
-            return 0
-        }
-        case 0x0A: { /* '0x0A' */
-            return 0
-        }
-        case 0x0B: { /* '0x0B' */
-            return 0
-        }
-        case 0x0C: { /* '0x0C' */
-            return 0
-        }
-        case 0x0F: { /* '0x0F' */
-            return 0
-        }
-        case 0x13: { /* '0x13' */
-            return 0
-        }
-        case 0x30: { /* '0x30' */
-            return TransportSize_REAL
-        }
-        default: {
-            return 0
-        }
-    }
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return 0
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return 0
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return 0
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return 0
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return 0
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return 0
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return TransportSize_WORD
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return TransportSize_INT
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return 0
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return 0
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return 0
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return 0
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return 0
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return 0
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return 0
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return TransportSize_REAL
+		}
+	default:
+		{
+			return 0
+		}
+	}
 }
 
-func (e TransportSize) DataProtocolId() uint8 {
-    switch e  {
-        case 0x00: { /* '0x00' */
-            return 14
-        }
-        case 0x01: { /* '0x01' */
-            return 01
-        }
-        case 0x02: { /* '0x02' */
-            return 11
-        }
-        case 0x03: { /* '0x03' */
-            return 41
-        }
-        case 0x04: { /* '0x04' */
-            return 12
-        }
-        case 0x05: { /* '0x05' */
-            return 23
-        }
-        case 0x06: { /* '0x06' */
-            return 13
-        }
-        case 0x07: { /* '0x07' */
-            return 25
-        }
-        case 0x08: { /* '0x08' */
-            return 31
-        }
-        case 0x09: { /* '0x09' */
-            return 54
-        }
-        case 0x0A: { /* '0x0A' */
-            return 55
-        }
-        case 0x0B: { /* '0x0B' */
-            return 51
-        }
-        case 0x0C: { /* '0x0C' */
-            return 52
-        }
-        case 0x0F: { /* '0x0F' */
-            return 56
-        }
-        case 0x13: { /* '0x13' */
-            return 42
-        }
-        case 0x30: { /* '0x30' */
-            return 32
-        }
-        default: {
-            return 0
-        }
-    }
+func (e TransportSize) DataProtocolId() string {
+	switch e {
+	case 0x00:
+		{ /* '0x00' */
+			return "IEC61131_LWORD"
+		}
+	case 0x01:
+		{ /* '0x01' */
+			return "IEC61131_BOOL"
+		}
+	case 0x02:
+		{ /* '0x02' */
+			return "IEC61131_BYTE"
+		}
+	case 0x03:
+		{ /* '0x03' */
+			return "IEC61131_CHAR"
+		}
+	case 0x04:
+		{ /* '0x04' */
+			return "IEC61131_WORD"
+		}
+	case 0x05:
+		{ /* '0x05' */
+			return "IEC61131_INT"
+		}
+	case 0x06:
+		{ /* '0x06' */
+			return "IEC61131_DWORD"
+		}
+	case 0x07:
+		{ /* '0x07' */
+			return "IEC61131_DINT"
+		}
+	case 0x08:
+		{ /* '0x08' */
+			return "IEC61131_REAL"
+		}
+	case 0x09:
+		{ /* '0x09' */
+			return "IEC61131_DATE"
+		}
+	case 0x0A:
+		{ /* '0x0A' */
+			return "IEC61131_TIME_OF_DAY"
+		}
+	case 0x0B:
+		{ /* '0x0B' */
+			return "IEC61131_TIME"
+		}
+	case 0x0C:
+		{ /* '0x0C' */
+			return "S7_S5TIME"
+		}
+	case 0x0F:
+		{ /* '0x0F' */
+			return "IEC61131_DATE_AND_TIME"
+		}
+	case 0x13:
+		{ /* '0x13' */
+			return "IEC61131_WCHAR"
+		}
+	case 0x30:
+		{ /* '0x30' */
+			return "IEC61131_LREAL"
+		}
+	default:
+		{
+			return ""
+		}
+	}
 }
 func TransportSizeValueOf(value int8) TransportSize {
-    switch value {
-        case 0x00:
-            return TransportSize_LWORD
-        case 0x01:
-            return TransportSize_BOOL
-        case 0x02:
-            return TransportSize_BYTE
-        case 0x03:
-            return TransportSize_CHAR
-        case 0x04:
-            return TransportSize_WORD
-        case 0x05:
-            return TransportSize_INT
-        case 0x06:
-            return TransportSize_DWORD
-        case 0x07:
-            return TransportSize_DINT
-        case 0x08:
-            return TransportSize_REAL
-        case 0x09:
-            return TransportSize_DATE
-        case 0x0A:
-            return TransportSize_TIME_OF_DAY
-        case 0x0B:
-            return TransportSize_TIME
-        case 0x0C:
-            return TransportSize_S5TIME
-        case 0x0F:
-            return TransportSize_DATE_AND_TIME
-        case 0x13:
-            return TransportSize_WCHAR
-        case 0x30:
-            return TransportSize_LREAL
-    }
-    return 0
+	switch value {
+	case 0x00:
+		return TransportSize_LWORD
+	case 0x01:
+		return TransportSize_BOOL
+	case 0x02:
+		return TransportSize_BYTE
+	case 0x03:
+		return TransportSize_CHAR
+	case 0x04:
+		return TransportSize_WORD
+	case 0x05:
+		return TransportSize_INT
+	case 0x06:
+		return TransportSize_DWORD
+	case 0x07:
+		return TransportSize_DINT
+	case 0x08:
+		return TransportSize_REAL
+	case 0x09:
+		return TransportSize_DATE
+	case 0x0A:
+		return TransportSize_TIME_OF_DAY
+	case 0x0B:
+		return TransportSize_TIME
+	case 0x0C:
+		return TransportSize_S5TIME
+	case 0x0F:
+		return TransportSize_DATE_AND_TIME
+	case 0x13:
+		return TransportSize_WCHAR
+	case 0x30:
+		return TransportSize_LREAL
+	}
+	return 0
 }
 
 func CastTransportSize(structType interface{}) TransportSize {
-    castFunc := func(typ interface{}) TransportSize {
-        if sTransportSize, ok := typ.(TransportSize); ok {
-            return sTransportSize
-        }
-        return 0
-    }
-    return castFunc(structType)
+	castFunc := func(typ interface{}) TransportSize {
+		if sTransportSize, ok := typ.(TransportSize); ok {
+			return sTransportSize
+		}
+		return 0
+	}
+	return castFunc(structType)
 }
 
 func (m TransportSize) LengthInBits() uint16 {
-    return 8
+	return 8
 }
 
 func (m TransportSize) LengthInBytes() uint16 {
-    return m.LengthInBits() / 8
+	return m.LengthInBits() / 8
 }
 
 func TransportSizeParse(io *utils.ReadBuffer) (TransportSize, error) {
-    // TODO: Implement ...
-    return 0, nil
+	// TODO: Implement ...
+	return 0, nil
 }
 
 func (e TransportSize) Serialize(io utils.WriteBuffer) error {
-    // TODO: Implement ...
-    return nil
+	// TODO: Implement ...
+	return nil
 }