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/08 09:04:43 UTC

[plc4x] branch feature/plc4go updated: - Made the Parse-functions return Message types - Implemented parsing of const, reserved and complex typed simple fields

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 65f34e3  - Made the Parse-functions return Message types - Implemented parsing of const, reserved and complex typed simple fields
65f34e3 is described below

commit 65f34e37c68db7eabd4b7d06b1b31289f2859bb9
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Oct 8 11:04:35 2020 +0200

    - Made the Parse-functions return Message types
    - Implemented parsing of const, reserved and complex typed simple fields
---
 .../language/go/GoLanguageTemplateHelper.java      |  6 +--
 .../resources/templates/go/model-template.ftlh     | 45 +++++++++++++++++-----
 pom.xml                                            |  5 ++-
 .../plc4go/go/modbus/readwrite/ModbusConstants.go  | 12 ++++--
 .../plc4go/go/modbus/readwrite/ModbusPDU.go        |  5 ++-
 .../modbus/readwrite/ModbusPDUDiagnosticRequest.go |  5 ++-
 .../plc4go/go/modbus/readwrite/ModbusPDUError.go   |  5 ++-
 .../readwrite/ModbusPDUGetComEventLogRequest.go    |  5 ++-
 .../readwrite/ModbusPDUGetComEventLogResponse.go   |  5 ++-
 .../ModbusPDUMaskWriteHoldingRegisterRequest.go    |  5 ++-
 .../ModbusPDUMaskWriteHoldingRegisterResponse.go   |  5 ++-
 .../modbus/readwrite/ModbusPDUReadCoilsRequest.go  |  5 ++-
 .../modbus/readwrite/ModbusPDUReadCoilsResponse.go |  5 ++-
 .../ModbusPDUReadDeviceIdentificationRequest.go    |  5 ++-
 .../ModbusPDUReadDeviceIdentificationResponse.go   |  5 ++-
 .../ModbusPDUReadDiscreteInputsRequest.go          |  5 ++-
 .../ModbusPDUReadDiscreteInputsResponse.go         |  5 ++-
 .../ModbusPDUReadExceptionStatusRequest.go         |  5 ++-
 .../ModbusPDUReadExceptionStatusResponse.go        |  5 ++-
 .../readwrite/ModbusPDUReadFifoQueueRequest.go     |  5 ++-
 .../readwrite/ModbusPDUReadFifoQueueResponse.go    |  5 ++-
 .../readwrite/ModbusPDUReadFileRecordRequest.go    |  5 ++-
 .../ModbusPDUReadFileRecordRequestItem.go          |  5 ++-
 .../readwrite/ModbusPDUReadFileRecordResponse.go   |  5 ++-
 .../ModbusPDUReadFileRecordResponseItem.go         |  5 ++-
 .../ModbusPDUReadHoldingRegistersRequest.go        |  5 ++-
 .../ModbusPDUReadHoldingRegistersResponse.go       |  5 ++-
 .../ModbusPDUReadInputRegistersRequest.go          |  5 ++-
 .../ModbusPDUReadInputRegistersResponse.go         |  5 ++-
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |  5 ++-
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |  5 ++-
 .../readwrite/ModbusPDUReportServerIdRequest.go    |  5 ++-
 .../readwrite/ModbusPDUReportServerIdResponse.go   |  5 ++-
 .../readwrite/ModbusPDUWriteFileRecordRequest.go   |  5 ++-
 .../ModbusPDUWriteFileRecordRequestItem.go         |  5 ++-
 .../readwrite/ModbusPDUWriteFileRecordResponse.go  |  5 ++-
 .../ModbusPDUWriteFileRecordResponseItem.go        |  5 ++-
 .../ModbusPDUWriteMultipleCoilsRequest.go          |  5 ++-
 .../ModbusPDUWriteMultipleCoilsResponse.go         |  5 ++-
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |  5 ++-
 ...dbusPDUWriteMultipleHoldingRegistersResponse.go |  5 ++-
 .../readwrite/ModbusPDUWriteSingleCoilRequest.go   |  5 ++-
 .../readwrite/ModbusPDUWriteSingleCoilResponse.go  |  5 ++-
 .../ModbusPDUWriteSingleRegisterRequest.go         |  5 ++-
 .../ModbusPDUWriteSingleRegisterResponse.go        |  5 ++-
 .../plc4go/go/modbus/readwrite/ModbusSerialADU.go  | 24 +++++++++---
 .../plc4go/go/modbus/readwrite/ModbusTcpADU.go     | 23 ++++++++---
 sandbox/plc4go/go.mod                              |  2 +
 sandbox/plc4go/src/plc4go/spi/Message.go           |  4 +-
 49 files changed, 213 insertions(+), 113 deletions(-)

diff --git a/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java b/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
index eae61b6..26de96b 100644
--- a/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
+++ b/build-utils/language-go/src/main/java/org/apache/plc4x/language/go/GoLanguageTemplateHelper.java
@@ -331,11 +331,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
 
     public String getReservedValue(ReservedField reservedField) {
         final String languageTypeName = getLanguageTypeNameForTypeReference(reservedField.getType());
-        if("BigInteger".equals(languageTypeName)) {
-            return "BigInteger.valueOf(" + reservedField.getReferenceValue() + ")";
-        } else {
-            return "(" + languageTypeName + ") " + reservedField.getReferenceValue();
-        }
+        return languageTypeName + "(" + reservedField.getReferenceValue() + ")";
     }
 
     public String toParseExpression(TypedField field, Term term, Argument[] parserArguments) {
diff --git a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
index dd7c5d8..bb0f2c9 100644
--- a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
@@ -65,7 +65,15 @@ package ${helper.packageName(outputFlavor)}
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
+<#if type.constFields?has_content>
+
+// Constant values.
+    <#list type.constFields as field>
+const ${field.name?upper_case} ${helper.getLanguageTypeNameForField(field)} = ${field.referenceValue};
+    </#list>
+</#if>
 
 type ${type.name} struct {
 <#-- Prpoerty fields are fields that require a property in the pojo -->
@@ -83,15 +91,15 @@ type ${type.name} struct {
 
 <#if helper.isDiscriminatedParentTypeDefinition()>
 type ${type.name}Initializer interface {
-    initialize(<#list type.getAllPropertyFields() as field>${field.name}: ${field.name}<#sep>, </#sep></#list>) ${type.name}
+    initialize(<#list type.getAllPropertyFields() as field>${field.name}: ${field.name}<#sep>, </#sep></#list>) spi.Message
 }
 <#else>
-<#if type.parentType??>func (m ${type.name}) initialize(<#list type.parentType.getAllPropertyFields() as field>${field.name}: ${field.name}<#sep>, </#sep></#list>) ${type.parentType.name} {
-    return m.${type.parentType.name}
+<#if type.parentType??>func (m ${type.name}) initialize(<#list type.parentType.getAllPropertyFields() as field>${field.name}: ${field.name}<#sep>, </#sep></#list>) spi.Message {
+    return spi.Message(m)
 }
 </#if>
 
-func New${type.name}(<#list type.getAllPropertyFields() as field>${field.name} <#if field.loopType??>[]</#if>${helper.getLanguageTypeNameForField(field)}<#sep>, </#sep></#list>) <#if type.parentType??>${type.parentType.name}Initializer<#else>${type.name}</#if> {
+func New${type.name}(<#list type.getAllPropertyFields() as field>${field.name} <#if field.loopType??>[]</#if>${helper.getLanguageTypeNameForField(field)}<#sep>, </#sep></#list>) <#if type.parentType??>${type.parentType.name}Initializer<#else>spi.Message</#if> {
     return &${type.name}{<#list type.getAllPropertyFields() as field>${field.name}: ${field.name}<#sep>, </#sep></#list>}
 }
 </#if>
@@ -223,7 +231,7 @@ func (m ${type.name}) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func ${type.name}Parse(io spi.ReadBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) <#if type.parentType??>${type.parentType.name}Initializer<#else>${type.name}</#if> {
+func ${type.name}Parse(io spi.ReadBuffer<#if type.parserArguments?has_content>, <#list type.parserArguments as parserArgument>${parserArgument.name} ${helper.getLanguageTypeNameForTypeReference(parserArgument.type)}<#sep>, </#sep></#list></#if>) <#if type.parentType??>${type.parentType.name}Initializer<#else>spi.Message</#if> {
     var startPos = io.GetPos()
     var curPos uint16
     <#list type.fields as field>
@@ -316,8 +324,8 @@ func ${type.name}Parse(io spi.ReadBuffer<#if type.parserArguments?has_content>,
                 <#assign simpleTypeReference = constField.type>
 
     // Const Field (${constField.name})
-    ${helper.getLanguageTypeNameForField(field)} ${constField.name} = ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
-    if ${constField.name} != ${type.name}.${constField.name?upper_case} {
+    var ${constField.name} ${helper.getLanguageTypeNameForField(field)} = ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+    if ${constField.name} != ${constField.name?upper_case} {
         throw new ParseException("Expected constant value " + ${type.name}.${constField.name?upper_case} + " but got " + ${constField.name})
     }
                 <#break>
@@ -439,7 +447,10 @@ func ${type.name}Parse(io spi.ReadBuffer<#if type.parserArguments?has_content>,
     {
         var reserved ${helper.getLanguageTypeNameForField(field)} = ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
         if reserved != ${helper.getReservedValue(reservedField)} {
-            LOGGER.info("Expected constant value " + ${reservedField.referenceValue} + " but got " + reserved + " for reserved field.")
+            log.WithFields(log.Fields{
+                "expected value": ${helper.getReservedValue(reservedField)},
+                "got value": reserved,
+            }).Info("Got unexpected response.")
         }
     }
                 <#break>
@@ -447,8 +458,24 @@ func ${type.name}Parse(io spi.ReadBuffer<#if type.parserArguments?has_content>,
                 <#assign simpleField = field>
 
     // Simple Field (${simpleField.name})
-    var ${simpleField.name} ${helper.getLanguageTypeNameForField(field)} = <#if helper.isSimpleTypeReference(simpleField.type)><#assign simpleTypeReference = simpleField.type>${helper.getReadBufferReadMethodCall(simpleTypeReference)}<#else><#assign complexTypeReference = simpleField.type>${complexTypeReference.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(simpleField.type, p [...]
+                <#if helper.isSimpleTypeReference(simpleField.type)>
+                    <#assign simpleTypeReference = simpleField.type>
+    var ${simpleField.name} ${helper.getLanguageTypeNameForField(field)} = ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+                <#else>
+                    <#assign complexTypeReference = simpleField.type>
+    var _${simpleField.name}Message spi.Message = ${complexTypeReference.name}Parse(io<#if field.params?has_content>, <#list field.params as parserArgument>${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(simpleField.type, parserArgument?index))}(${helper.toParseExpression(simpleField, parserArgument, type.parserArguments)})<#sep>, </#sep></#list></#if>)
+    var ${simpleField.name} ${helper.getLanguageTypeNameForField(field)}
+    ${simpleField.name}, _${simpleField.name}Ok := _${simpleField.name}Message.(${helper.getLanguageTypeNameForField(field)})
+    if !_${simpleField.name}Ok {
+        log.WithFields(log.Fields{
+            "expected type": "${helper.getLanguageTypeNameForField(field)}",
+            "got type": reflect.TypeOf(_${simpleField.name}Message),
+        }).Error("Couldn't cast message")
+        throw new RuntimeException()
+    }
+                </#if>
                 <#break>
+
             <#case "switch">
                 <#assign switchField = field>
 
diff --git a/pom.xml b/pom.xml
index bab40a8..df66a7f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -913,7 +913,10 @@
             <!-- Exclude a temp file needed by Docker -->
             <exclude>project_version</exclude>
 
-            <exclude>plc4go/**</exclude>
+            <!-- Exclude files generated by the go build system -->
+            <exclude>go.sum</exclude>
+
+            <!--exclude>plc4go/**</exclude-->
           </excludes>
         </configuration>
       </plugin>
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusConstants.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusConstants.go
index 43594ac..ac6c3e2 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusConstants.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusConstants.go
@@ -21,14 +21,18 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
+// Constant values.
+const MODBUSTCPDEFAULTPORT uint16 = 502;
+
 type ModbusConstants struct {
 
 }
 
 
-func NewModbusConstants() ModbusConstants {
+func NewModbusConstants() spi.Message {
     return &ModbusConstants{}
 }
 
@@ -45,13 +49,13 @@ func (m ModbusConstants) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func ModbusConstantsParse(io spi.ReadBuffer) ModbusConstants {
+func ModbusConstantsParse(io spi.ReadBuffer) spi.Message {
     var startPos = io.GetPos()
     var curPos uint16
 
     // Const Field (modbusTcpDefaultPort)
-    uint16 modbusTcpDefaultPort = io.ReadUint16(16)
-    if modbusTcpDefaultPort != ModbusConstants.MODBUSTCPDEFAULTPORT {
+    var modbusTcpDefaultPort uint16 = io.ReadUint16(16)
+    if modbusTcpDefaultPort != MODBUSTCPDEFAULTPORT {
         throw new ParseException("Expected constant value " + ModbusConstants.MODBUSTCPDEFAULTPORT + " but got " + modbusTcpDefaultPort)
     }
 
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDU.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDU.go
index 3006f4c..f651e3f 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDU.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDU.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -27,7 +28,7 @@ type ModbusPDU struct {
 }
 
 type ModbusPDUInitializer interface {
-	initialize() ModbusPDU
+	initialize() spi.Message
 }
 
 func (m ModbusPDU) LengthInBits() uint16 {
@@ -48,7 +49,7 @@ func (m ModbusPDU) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUParse(io spi.ReadBuffer, response bool) ModbusPDU {
+func ModbusPDUParse(io spi.ReadBuffer, response bool) spi.Message {
 	var startPos = io.GetPos()
 	var curPos uint16
 
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUDiagnosticRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUDiagnosticRequest.go
index d76b222..6a32f40 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUDiagnosticRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUDiagnosticRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUDiagnosticRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUDiagnosticRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUDiagnosticRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUDiagnosticRequest(status uint16, eventCount uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUError.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUError.go
index 24c00a0..a8edf1d 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUError.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUError.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -28,8 +29,8 @@ type ModbusPDUError struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUError) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUError) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUError(exceptionCode uint8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUGetComEventLogRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUGetComEventLogRequest.go
index 29c0fff..d7ac13b 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUGetComEventLogRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUGetComEventLogRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -27,8 +28,8 @@ type ModbusPDUGetComEventLogRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUGetComEventLogRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUGetComEventLogRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUGetComEventLogRequest() ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUGetComEventLogResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUGetComEventLogResponse.go
index a04cc85..71e1016 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUGetComEventLogResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUGetComEventLogResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUGetComEventLogResponse struct {
@@ -31,8 +32,8 @@ type ModbusPDUGetComEventLogResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUGetComEventLogResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUGetComEventLogResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUGetComEventLogResponse(status uint16, eventCount uint16, messageCount uint16, events []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterRequest.go
index 4a8b2e3..0e17dbb 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -30,8 +31,8 @@ type ModbusPDUMaskWriteHoldingRegisterRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUMaskWriteHoldingRegisterRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUMaskWriteHoldingRegisterRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUMaskWriteHoldingRegisterRequest(referenceAddress uint16, andMask uint16, orMask uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterResponse.go
index d8d7932..3e3b8f4 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUMaskWriteHoldingRegisterResponse.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -30,8 +31,8 @@ type ModbusPDUMaskWriteHoldingRegisterResponse struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUMaskWriteHoldingRegisterResponse) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUMaskWriteHoldingRegisterResponse) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUMaskWriteHoldingRegisterResponse(referenceAddress uint16, andMask uint16, orMask uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadCoilsRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadCoilsRequest.go
index eb6ddff..6d92d32 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadCoilsRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadCoilsRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUReadCoilsRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReadCoilsRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReadCoilsRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReadCoilsRequest(startingAddress uint16, quantity uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadCoilsResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadCoilsResponse.go
index a6ac41e..f805fa6 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadCoilsResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadCoilsResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadCoilsResponse struct {
@@ -28,8 +29,8 @@ type ModbusPDUReadCoilsResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReadCoilsResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReadCoilsResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReadCoilsResponse(value []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDeviceIdentificationRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDeviceIdentificationRequest.go
index 9ea38e2..974dca9 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDeviceIdentificationRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDeviceIdentificationRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -27,8 +28,8 @@ type ModbusPDUReadDeviceIdentificationRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReadDeviceIdentificationRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReadDeviceIdentificationRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReadDeviceIdentificationRequest() ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDeviceIdentificationResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDeviceIdentificationResponse.go
index 4b3b7be..00e999e 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDeviceIdentificationResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDeviceIdentificationResponse.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -27,8 +28,8 @@ type ModbusPDUReadDeviceIdentificationResponse struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReadDeviceIdentificationResponse) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReadDeviceIdentificationResponse) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReadDeviceIdentificationResponse() ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDiscreteInputsRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDiscreteInputsRequest.go
index 5755d2a..00f24a0 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDiscreteInputsRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDiscreteInputsRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUReadDiscreteInputsRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReadDiscreteInputsRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReadDiscreteInputsRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReadDiscreteInputsRequest(startingAddress uint16, quantity uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDiscreteInputsResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDiscreteInputsResponse.go
index 8b3eb97..b0b3a78 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDiscreteInputsResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadDiscreteInputsResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadDiscreteInputsResponse struct {
@@ -28,8 +29,8 @@ type ModbusPDUReadDiscreteInputsResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReadDiscreteInputsResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReadDiscreteInputsResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReadDiscreteInputsResponse(value []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadExceptionStatusRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadExceptionStatusRequest.go
index 6533e2f..2151094 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadExceptionStatusRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadExceptionStatusRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -27,8 +28,8 @@ type ModbusPDUReadExceptionStatusRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReadExceptionStatusRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReadExceptionStatusRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReadExceptionStatusRequest() ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadExceptionStatusResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadExceptionStatusResponse.go
index 4bebf92..ea6477f 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadExceptionStatusResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadExceptionStatusResponse.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -28,8 +29,8 @@ type ModbusPDUReadExceptionStatusResponse struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReadExceptionStatusResponse) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReadExceptionStatusResponse) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReadExceptionStatusResponse(value uint8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFifoQueueRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFifoQueueRequest.go
index 7c42a40..e033a96 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFifoQueueRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFifoQueueRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -28,8 +29,8 @@ type ModbusPDUReadFifoQueueRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReadFifoQueueRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReadFifoQueueRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReadFifoQueueRequest(fifoPointerAddress uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFifoQueueResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFifoQueueResponse.go
index 5906ffe..c79a244 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFifoQueueResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFifoQueueResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadFifoQueueResponse struct {
@@ -28,8 +29,8 @@ type ModbusPDUReadFifoQueueResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReadFifoQueueResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReadFifoQueueResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReadFifoQueueResponse(fifoValue []uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordRequest.go
index 439758d..8517314 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordRequest.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadFileRecordRequest struct {
@@ -28,8 +29,8 @@ type ModbusPDUReadFileRecordRequest struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReadFileRecordRequest) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReadFileRecordRequest) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReadFileRecordRequest(items []ModbusPDUReadFileRecordRequestItem) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordRequestItem.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordRequestItem.go
index 5765574..7440503 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordRequestItem.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordRequestItem.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -30,7 +31,7 @@ type ModbusPDUReadFileRecordRequestItem struct {
 	recordLength  uint16
 }
 
-func NewModbusPDUReadFileRecordRequestItem(referenceType uint8, fileNumber uint16, recordNumber uint16, recordLength uint16) ModbusPDUReadFileRecordRequestItem {
+func NewModbusPDUReadFileRecordRequestItem(referenceType uint8, fileNumber uint16, recordNumber uint16, recordLength uint16) spi.Message {
 	return &ModbusPDUReadFileRecordRequestItem{referenceType: referenceType, fileNumber: fileNumber, recordNumber: recordNumber, recordLength: recordLength}
 }
 
@@ -56,7 +57,7 @@ func (m ModbusPDUReadFileRecordRequestItem) LengthInBytes() uint16 {
 	return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadFileRecordRequestItemParse(io spi.ReadBuffer) ModbusPDUReadFileRecordRequestItem {
+func ModbusPDUReadFileRecordRequestItemParse(io spi.ReadBuffer) spi.Message {
 	var startPos = io.GetPos()
 	var curPos uint16
 
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordResponse.go
index 3c69968..a0b522e 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadFileRecordResponse struct {
@@ -28,8 +29,8 @@ type ModbusPDUReadFileRecordResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReadFileRecordResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReadFileRecordResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReadFileRecordResponse(items []ModbusPDUReadFileRecordResponseItem) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordResponseItem.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordResponseItem.go
index 2b571a9..7ebc23f 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordResponseItem.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadFileRecordResponseItem.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadFileRecordResponseItem struct {
@@ -30,7 +31,7 @@ type ModbusPDUReadFileRecordResponseItem struct {
 }
 
 
-func NewModbusPDUReadFileRecordResponseItem(referenceType uint8, data []int8) ModbusPDUReadFileRecordResponseItem {
+func NewModbusPDUReadFileRecordResponseItem(referenceType uint8, data []int8) spi.Message {
     return &ModbusPDUReadFileRecordResponseItem{referenceType: referenceType, data: data}
 }
 
@@ -55,7 +56,7 @@ func (m ModbusPDUReadFileRecordResponseItem) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func ModbusPDUReadFileRecordResponseItemParse(io spi.ReadBuffer) ModbusPDUReadFileRecordResponseItem {
+func ModbusPDUReadFileRecordResponseItemParse(io spi.ReadBuffer) spi.Message {
     var startPos = io.GetPos()
     var curPos uint16
 
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadHoldingRegistersRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadHoldingRegistersRequest.go
index 88ab0b5..910cb2b 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadHoldingRegistersRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadHoldingRegistersRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUReadHoldingRegistersRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReadHoldingRegistersRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReadHoldingRegistersRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReadHoldingRegistersRequest(startingAddress uint16, quantity uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadHoldingRegistersResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadHoldingRegistersResponse.go
index f5702b4..de21e38 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadHoldingRegistersResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadHoldingRegistersResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadHoldingRegistersResponse struct {
@@ -28,8 +29,8 @@ type ModbusPDUReadHoldingRegistersResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReadHoldingRegistersResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReadHoldingRegistersResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReadHoldingRegistersResponse(value []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadInputRegistersRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadInputRegistersRequest.go
index 15d271b..fb1af49 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadInputRegistersRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadInputRegistersRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUReadInputRegistersRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReadInputRegistersRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReadInputRegistersRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReadInputRegistersRequest(startingAddress uint16, quantity uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadInputRegistersResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadInputRegistersResponse.go
index 7d5d418..67596f5 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadInputRegistersResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadInputRegistersResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadInputRegistersResponse struct {
@@ -28,8 +29,8 @@ type ModbusPDUReadInputRegistersResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReadInputRegistersResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReadInputRegistersResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReadInputRegistersResponse(value []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
index 0dff68b..585f002 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadWriteMultipleHoldingRegistersRequest struct {
@@ -32,8 +33,8 @@ type ModbusPDUReadWriteMultipleHoldingRegistersRequest struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReadWriteMultipleHoldingRegistersRequest) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReadWriteMultipleHoldingRegistersRequest) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReadWriteMultipleHoldingRegistersRequest(readStartingAddress uint16, readQuantity uint16, writeStartingAddress uint16, writeQuantity uint16, value []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
index 4280e09..2be4f5a 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReadWriteMultipleHoldingRegistersResponse struct {
@@ -28,8 +29,8 @@ type ModbusPDUReadWriteMultipleHoldingRegistersResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReadWriteMultipleHoldingRegistersResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReadWriteMultipleHoldingRegistersResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReadWriteMultipleHoldingRegistersResponse(value []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReportServerIdRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReportServerIdRequest.go
index 60b0687..ada56de 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReportServerIdRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReportServerIdRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -27,8 +28,8 @@ type ModbusPDUReportServerIdRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUReportServerIdRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUReportServerIdRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUReportServerIdRequest() ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReportServerIdResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReportServerIdResponse.go
index a4525da..22e2ece 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReportServerIdResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUReportServerIdResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUReportServerIdResponse struct {
@@ -28,8 +29,8 @@ type ModbusPDUReportServerIdResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUReportServerIdResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUReportServerIdResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUReportServerIdResponse(value []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordRequest.go
index 360e4d3..484d933 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordRequest.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUWriteFileRecordRequest struct {
@@ -28,8 +29,8 @@ type ModbusPDUWriteFileRecordRequest struct {
     ModbusPDU
 }
 
-func (m ModbusPDUWriteFileRecordRequest) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUWriteFileRecordRequest) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUWriteFileRecordRequest(items []ModbusPDUWriteFileRecordRequestItem) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordRequestItem.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordRequestItem.go
index dc9b300..c134a14 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordRequestItem.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordRequestItem.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUWriteFileRecordRequestItem struct {
@@ -32,7 +33,7 @@ type ModbusPDUWriteFileRecordRequestItem struct {
 }
 
 
-func NewModbusPDUWriteFileRecordRequestItem(referenceType uint8, fileNumber uint16, recordNumber uint16, recordData []int8) ModbusPDUWriteFileRecordRequestItem {
+func NewModbusPDUWriteFileRecordRequestItem(referenceType uint8, fileNumber uint16, recordNumber uint16, recordData []int8) spi.Message {
     return &ModbusPDUWriteFileRecordRequestItem{referenceType: referenceType, fileNumber: fileNumber, recordNumber: recordNumber, recordData: recordData}
 }
 
@@ -63,7 +64,7 @@ func (m ModbusPDUWriteFileRecordRequestItem) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteFileRecordRequestItemParse(io spi.ReadBuffer) ModbusPDUWriteFileRecordRequestItem {
+func ModbusPDUWriteFileRecordRequestItemParse(io spi.ReadBuffer) spi.Message {
     var startPos = io.GetPos()
     var curPos uint16
 
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordResponse.go
index 77f1bf3..f25b5ec 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordResponse.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUWriteFileRecordResponse struct {
@@ -28,8 +29,8 @@ type ModbusPDUWriteFileRecordResponse struct {
     ModbusPDU
 }
 
-func (m ModbusPDUWriteFileRecordResponse) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUWriteFileRecordResponse) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUWriteFileRecordResponse(items []ModbusPDUWriteFileRecordResponseItem) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordResponseItem.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordResponseItem.go
index d0a3035..7c4848b 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordResponseItem.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteFileRecordResponseItem.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUWriteFileRecordResponseItem struct {
@@ -32,7 +33,7 @@ type ModbusPDUWriteFileRecordResponseItem struct {
 }
 
 
-func NewModbusPDUWriteFileRecordResponseItem(referenceType uint8, fileNumber uint16, recordNumber uint16, recordData []int8) ModbusPDUWriteFileRecordResponseItem {
+func NewModbusPDUWriteFileRecordResponseItem(referenceType uint8, fileNumber uint16, recordNumber uint16, recordData []int8) spi.Message {
     return &ModbusPDUWriteFileRecordResponseItem{referenceType: referenceType, fileNumber: fileNumber, recordNumber: recordNumber, recordData: recordData}
 }
 
@@ -63,7 +64,7 @@ func (m ModbusPDUWriteFileRecordResponseItem) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func ModbusPDUWriteFileRecordResponseItemParse(io spi.ReadBuffer) ModbusPDUWriteFileRecordResponseItem {
+func ModbusPDUWriteFileRecordResponseItemParse(io spi.ReadBuffer) spi.Message {
     var startPos = io.GetPos()
     var curPos uint16
 
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleCoilsRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleCoilsRequest.go
index d7b9579..25bf05a 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleCoilsRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleCoilsRequest.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUWriteMultipleCoilsRequest struct {
@@ -30,8 +31,8 @@ type ModbusPDUWriteMultipleCoilsRequest struct {
     ModbusPDU
 }
 
-func (m ModbusPDUWriteMultipleCoilsRequest) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUWriteMultipleCoilsRequest) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUWriteMultipleCoilsRequest(startingAddress uint16, quantity uint16, value []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleCoilsResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleCoilsResponse.go
index 5609a77..c4e48a5 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleCoilsResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleCoilsResponse.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUWriteMultipleCoilsResponse struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUWriteMultipleCoilsResponse) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUWriteMultipleCoilsResponse) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUWriteMultipleCoilsResponse(startingAddress uint16, quantity uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersRequest.go
index 8e8aed1..ba8010a 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersRequest.go
@@ -21,6 +21,7 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
 type ModbusPDUWriteMultipleHoldingRegistersRequest struct {
@@ -30,8 +31,8 @@ type ModbusPDUWriteMultipleHoldingRegistersRequest struct {
     ModbusPDU
 }
 
-func (m ModbusPDUWriteMultipleHoldingRegistersRequest) initialize() ModbusPDU {
-    return m.ModbusPDU
+func (m ModbusPDUWriteMultipleHoldingRegistersRequest) initialize() spi.Message {
+    return spi.Message(m)
 }
 
 func NewModbusPDUWriteMultipleHoldingRegistersRequest(startingAddress uint16, quantity uint16, value []int8) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersResponse.go
index 6184cbd..9de42c6 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteMultipleHoldingRegistersResponse.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUWriteMultipleHoldingRegistersResponse struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUWriteMultipleHoldingRegistersResponse) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUWriteMultipleHoldingRegistersResponse) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUWriteMultipleHoldingRegistersResponse(startingAddress uint16, quantity uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleCoilRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleCoilRequest.go
index ef56415..868d22a 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleCoilRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleCoilRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUWriteSingleCoilRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUWriteSingleCoilRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUWriteSingleCoilRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUWriteSingleCoilRequest(address uint16, value uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleCoilResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleCoilResponse.go
index 7c5a877..83ad56f 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleCoilResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleCoilResponse.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUWriteSingleCoilResponse struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUWriteSingleCoilResponse) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUWriteSingleCoilResponse) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUWriteSingleCoilResponse(address uint16, value uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleRegisterRequest.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleRegisterRequest.go
index f1ee827..6ca3bf0 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleRegisterRequest.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleRegisterRequest.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUWriteSingleRegisterRequest struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUWriteSingleRegisterRequest) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUWriteSingleRegisterRequest) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUWriteSingleRegisterRequest(address uint16, value uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleRegisterResponse.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleRegisterResponse.go
index c8642ac..086187f 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleRegisterResponse.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusPDUWriteSingleRegisterResponse.go
@@ -19,6 +19,7 @@
 package readwrite
 
 import (
+	log "github.com/sirupsen/logrus"
 	"math"
 	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
 )
@@ -29,8 +30,8 @@ type ModbusPDUWriteSingleRegisterResponse struct {
 	ModbusPDU
 }
 
-func (m ModbusPDUWriteSingleRegisterResponse) initialize() ModbusPDU {
-	return m.ModbusPDU
+func (m ModbusPDUWriteSingleRegisterResponse) initialize() spi.Message {
+	return spi.Message(m)
 }
 
 func NewModbusPDUWriteSingleRegisterResponse(address uint16, value uint16) ModbusPDUInitializer {
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusSerialADU.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusSerialADU.go
index 7009210..d9ef8c0 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusSerialADU.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusSerialADU.go
@@ -21,6 +21,8 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
+    "reflect"
 )
 
 type ModbusSerialADU struct {
@@ -32,7 +34,7 @@ type ModbusSerialADU struct {
 }
 
 
-func NewModbusSerialADU(transactionId uint16, length uint16, address uint8, pdu ModbusPDU) ModbusSerialADU {
+func NewModbusSerialADU(transactionId uint16, length uint16, address uint8, pdu ModbusPDU) spi.Message {
     return &ModbusSerialADU{transactionId: transactionId, length: length, address: address, pdu: pdu}
 }
 
@@ -61,7 +63,7 @@ func (m ModbusSerialADU) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func ModbusSerialADUParse(io spi.ReadBuffer, response bool) ModbusSerialADU {
+func ModbusSerialADUParse(io spi.ReadBuffer, response bool) spi.Message {
     var startPos = io.GetPos()
     var curPos uint16
 
@@ -71,8 +73,11 @@ func ModbusSerialADUParse(io spi.ReadBuffer, response bool) ModbusSerialADU {
     // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
     {
         var reserved uint16 = io.ReadUint16(16)
-        if reserved != (uint16) 0x0000 {
-            LOGGER.info("Expected constant value " + 0x0000 + " but got " + reserved + " for reserved field.")
+        if reserved != uint16(0x0000) {
+            log.WithFields(log.Fields{
+                "expected value": uint16(0x0000),
+                "got value": reserved,
+            }).Info("Got unexpected response.")
         }
     }
 
@@ -83,7 +88,16 @@ func ModbusSerialADUParse(io spi.ReadBuffer, response bool) ModbusSerialADU {
     var address uint8 = io.ReadUint8(8)
 
     // Simple Field (pdu)
-    var pdu ModbusPDU = ModbusPDUIO.staticParse(io, (bool) (response))
+    var _pduMessage spi.Message = ModbusPDUParse(io, bool(response))
+    var pdu ModbusPDU
+    pdu, _pduOk := _pduMessage.(ModbusPDU)
+    if !_pduOk {
+        log.WithFields(log.Fields{
+            "expected type": "ModbusPDU",
+            "got type": reflect.TypeOf(_pduMessage),
+        }).Error("Couldn't cast message")
+        throw new RuntimeException()
+    }
 
     // Create the instance
     return NewModbusSerialADU(transactionId, length, address, pdu)
diff --git a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusTcpADU.go b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusTcpADU.go
index fd7e5d7..55f212d 100644
--- a/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusTcpADU.go
+++ b/sandbox/plc4go/generated-sources/plc4go/go/modbus/readwrite/ModbusTcpADU.go
@@ -21,8 +21,12 @@ package readwrite
 import (
     "math"
     "plc4x.apache.org/plc4go-modbus-driver/0.8.0/src/plc4go/spi"
+    log "github.com/sirupsen/logrus"
 )
 
+// Constant values.
+const PROTOCOLIDENTIFIER uint16 = 0x0000;
+
 type ModbusTcpADU struct {
     transactionIdentifier uint16
     unitIdentifier uint8
@@ -31,7 +35,7 @@ type ModbusTcpADU struct {
 }
 
 
-func NewModbusTcpADU(transactionIdentifier uint16, unitIdentifier uint8, pdu ModbusPDU) ModbusTcpADU {
+func NewModbusTcpADU(transactionIdentifier uint16, unitIdentifier uint8, pdu ModbusPDU) spi.Message {
     return &ModbusTcpADU{transactionIdentifier: transactionIdentifier, unitIdentifier: unitIdentifier, pdu: pdu}
 }
 
@@ -60,7 +64,7 @@ func (m ModbusTcpADU) LengthInBytes() uint16 {
     return m.LengthInBits() / 8
 }
 
-func ModbusTcpADUParse(io spi.ReadBuffer, response bool) ModbusTcpADU {
+func ModbusTcpADUParse(io spi.ReadBuffer, response bool) spi.Message {
     var startPos = io.GetPos()
     var curPos uint16
 
@@ -68,8 +72,8 @@ func ModbusTcpADUParse(io spi.ReadBuffer, response bool) ModbusTcpADU {
     var transactionIdentifier uint16 = io.ReadUint16(16)
 
     // Const Field (protocolIdentifier)
-    uint16 protocolIdentifier = io.ReadUint16(16)
-    if protocolIdentifier != ModbusTcpADU.PROTOCOLIDENTIFIER {
+    var protocolIdentifier uint16 = io.ReadUint16(16)
+    if protocolIdentifier != PROTOCOLIDENTIFIER {
         throw new ParseException("Expected constant value " + ModbusTcpADU.PROTOCOLIDENTIFIER + " but got " + protocolIdentifier)
     }
 
@@ -80,7 +84,16 @@ func ModbusTcpADUParse(io spi.ReadBuffer, response bool) ModbusTcpADU {
     var unitIdentifier uint8 = io.ReadUint8(8)
 
     // Simple Field (pdu)
-    var pdu ModbusPDU = ModbusPDUIO.staticParse(io, (bool) (response))
+    var _pduMessage spi.Message = ModbusPDUParse(io, bool(response))
+    var pdu ModbusPDU
+    pdu, _pduOk := _pduMessage.(ModbusPDU)
+    if !_pduOk {
+        log.WithFields(log.Fields{
+            "expected type": "ModbusPDU",
+            "got type": reflect.TypeOf(_pduMessage),
+        }).Error("Couldn't cast message")
+        throw new RuntimeException()
+    }
 
     // Create the instance
     return NewModbusTcpADU(transactionIdentifier, unitIdentifier, pdu)
diff --git a/sandbox/plc4go/go.mod b/sandbox/plc4go/go.mod
index 44b7ec5..1b383e7 100644
--- a/sandbox/plc4go/go.mod
+++ b/sandbox/plc4go/go.mod
@@ -16,3 +16,5 @@
 module plc4x.apache.org/plc4go-modbus-driver/0.8.0
 
 go 1.14
+
+require github.com/sirupsen/logrus v1.7.0
diff --git a/sandbox/plc4go/src/plc4go/spi/Message.go b/sandbox/plc4go/src/plc4go/spi/Message.go
index 83a1075..9ce8813 100644
--- a/sandbox/plc4go/src/plc4go/spi/Message.go
+++ b/sandbox/plc4go/src/plc4go/spi/Message.go
@@ -19,6 +19,6 @@
 package spi
 
 type Message interface {
-	lengthInBytes() uint16
-	lengthInBits() uint16
+	LengthInBytes() uint16
+	LengthInBits() uint16
 }