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/10 15:55:55 UTC

[plc4x] branch feature/plc4go updated: - Added some first BACnet/IP and KNXNet/IP driver code ...

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 7d953dd  - Added some first BACnet/IP and KNXNet/IP driver code ...
7d953dd is described below

commit 7d953ddd76837da95749dd0e3cb3df3bd75252d6
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sat Oct 10 17:55:47 2020 +0200

    - Added some first BACnet/IP and KNXNet/IP driver code ...
---
 .../language/go/GoLanguageTemplateHelper.java      |  39 ++-
 .../test/resources/testsuite/KNXNetIPTestsuite.xml |   6 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |   4 +-
 .../cmd/main/{main.go => drivers/bacnetip.go}      |  27 +-
 .../cmd/main/{main.go => drivers/knxnetip.go}      |  23 +-
 sandbox/plc4go/cmd/main/main.go                    |   2 +
 .../plc4go/bacnetip/readwrite/model/APDU.go        | 107 ++++++
 .../plc4go/bacnetip/readwrite/model/APDUAbort.go   | 122 +++++++
 .../bacnetip/readwrite/model/APDUComplexAck.go     | 183 ++++++++++
 .../readwrite/model/APDUConfirmedRequest.go        | 216 ++++++++++++
 .../plc4go/bacnetip/readwrite/model/APDUError.go   | 121 +++++++
 .../plc4go/bacnetip/readwrite/model/APDUReject.go  | 111 +++++++
 .../bacnetip/readwrite/model/APDUSegmentAck.go     | 144 ++++++++
 .../bacnetip/readwrite/model/APDUSimpleAck.go      | 111 +++++++
 .../readwrite/model/APDUUnconfirmedRequest.go      | 110 ++++++
 .../bacnetip/readwrite/model/ApplicationTag.go     |  48 +++
 .../bacnetip/readwrite/model/BACnetAddress.go      |  96 ++++++
 .../readwrite/model/BACnetConfirmedServiceACK.go   | 119 +++++++
 .../BACnetConfirmedServiceACKAtomicReadFile.go     |  71 ++++
 .../BACnetConfirmedServiceACKAtomicWriteFile.go    |  71 ++++
 ...tConfirmedServiceACKConfirmedPrivateTransfer.go |  71 ++++
 .../model/BACnetConfirmedServiceACKCreateObject.go |  71 ++++
 .../BACnetConfirmedServiceACKGetAlarmSummary.go    |  71 ++++
 ...ACnetConfirmedServiceACKGetEnrollmentSummary.go |  71 ++++
 ...BACnetConfirmedServiceACKGetEventInformation.go |  71 ++++
 .../model/BACnetConfirmedServiceACKReadProperty.go |  71 ++++
 ...ACnetConfirmedServiceACKReadPropertyMultiple.go |  71 ++++
 .../model/BACnetConfirmedServiceACKReadRange.go    |  71 ++++
 ...BACnetConfirmedServiceACKRemovedAuthenticate.go |  71 ++++
 ...rmedServiceACKRemovedReadPropertyConditional.go |  71 ++++
 .../model/BACnetConfirmedServiceACKVTData.go       |  71 ++++
 .../model/BACnetConfirmedServiceACKVTOpen.go       |  71 ++++
 .../model/BACnetConfirmedServiceRequest.go         | 165 +++++++++
 ...ACnetConfirmedServiceRequestAcknowledgeAlarm.go |  71 ++++
 .../BACnetConfirmedServiceRequestAddListElement.go |  71 ++++
 .../BACnetConfirmedServiceRequestAtomicReadFile.go |  71 ++++
 ...BACnetConfirmedServiceRequestAtomicWriteFile.go |  71 ++++
 ...firmedServiceRequestConfirmedCOVNotification.go | 277 ++++++++++++++++
 ...rviceRequestConfirmedCOVNotificationMultiple.go |  71 ++++
 ...rmedServiceRequestConfirmedEventNotification.go |  71 ++++
 ...firmedServiceRequestConfirmedPrivateTransfer.go |  71 ++++
 ...tConfirmedServiceRequestConfirmedTextMessage.go |  71 ++++
 .../BACnetConfirmedServiceRequestCreateObject.go   |  71 ++++
 .../BACnetConfirmedServiceRequestDeleteObject.go   |  71 ++++
 ...rmedServiceRequestDeviceCommunicationControl.go |  71 ++++
 ...tConfirmedServiceRequestGetEnrollmentSummary.go |  71 ++++
 ...etConfirmedServiceRequestGetEventInformation.go |  71 ++++
 ...etConfirmedServiceRequestLifeSafetyOperation.go |  71 ++++
 .../BACnetConfirmedServiceRequestReadProperty.go   | 158 +++++++++
 ...tConfirmedServiceRequestReadPropertyMultiple.go |  71 ++++
 .../BACnetConfirmedServiceRequestReadRange.go      |  71 ++++
 ...netConfirmedServiceRequestReinitializeDevice.go |  71 ++++
 ...CnetConfirmedServiceRequestRemoveListElement.go |  71 ++++
 ...etConfirmedServiceRequestRemovedAuthenticate.go |  71 ++++
 ...ServiceRequestRemovedReadPropertyConditional.go |  71 ++++
 ...CnetConfirmedServiceRequestRemovedRequestKey.go |  71 ++++
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   | 219 ++++++++++++
 ...tConfirmedServiceRequestSubscribeCOVProperty.go |  71 ++++
 ...edServiceRequestSubscribeCOVPropertyMultiple.go |  71 ++++
 .../model/BACnetConfirmedServiceRequestVTClose.go  |  71 ++++
 .../model/BACnetConfirmedServiceRequestVTData.go   |  71 ++++
 .../model/BACnetConfirmedServiceRequestVTOpen.go   |  71 ++++
 .../BACnetConfirmedServiceRequestWriteProperty.go  | 235 +++++++++++++
 ...ConfirmedServiceRequestWritePropertyMultiple.go |  71 ++++
 .../plc4go/bacnetip/readwrite/model/BACnetError.go | 119 +++++++
 .../readwrite/model/BACnetErrorAtomicReadFile.go   |  71 ++++
 .../readwrite/model/BACnetErrorAtomicWriteFile.go  |  71 ++++
 .../model/BACnetErrorConfirmedPrivateTransfer.go   |  71 ++++
 .../readwrite/model/BACnetErrorCreateObject.go     |  71 ++++
 .../readwrite/model/BACnetErrorGetAlarmSummary.go  |  71 ++++
 .../model/BACnetErrorGetEnrollmentSummary.go       |  71 ++++
 .../model/BACnetErrorGetEventInformation.go        |  71 ++++
 .../readwrite/model/BACnetErrorReadProperty.go     | 171 ++++++++++
 .../model/BACnetErrorReadPropertyMultiple.go       |  71 ++++
 .../readwrite/model/BACnetErrorReadRange.go        |  71 ++++
 .../model/BACnetErrorRemovedAuthenticate.go        |  71 ++++
 .../BACnetErrorRemovedReadPropertyConditional.go   |  71 ++++
 .../bacnetip/readwrite/model/BACnetErrorVTData.go  |  71 ++++
 .../bacnetip/readwrite/model/BACnetErrorVTOpen.go  |  71 ++++
 .../bacnetip/readwrite/model/BACnetNetworkType.go  |  46 +++
 .../bacnetip/readwrite/model/BACnetNodeType.go     |  57 ++++
 .../bacnetip/readwrite/model/BACnetNotifyType.go}  |  25 +-
 .../bacnetip/readwrite/model/BACnetObjectType.go   |  94 ++++++
 .../bacnetip/readwrite/model/BACnetServiceAck.go   | 119 +++++++
 .../model/BACnetServiceAckAtomicReadFile.go        |  71 ++++
 .../model/BACnetServiceAckAtomicWriteFile.go       |  71 ++++
 .../BACnetServiceAckConfirmedPrivateTransfer.go    |  71 ++++
 .../model/BACnetServiceAckCreateObject.go          |  71 ++++
 .../model/BACnetServiceAckGetAlarmSummary.go       |  71 ++++
 .../model/BACnetServiceAckGetEnrollmentSummary.go  |  71 ++++
 .../model/BACnetServiceAckGetEventInformation.go   |  71 ++++
 .../model/BACnetServiceAckReadProperty.go          | 204 ++++++++++++
 .../model/BACnetServiceAckReadPropertyMultiple.go  |  71 ++++
 .../readwrite/model/BACnetServiceAckReadRange.go   |  71 ++++
 .../model/BACnetServiceAckRemovedAuthenticate.go   |  71 ++++
 ...CnetServiceAckRemovedReadPropertyConditional.go |  71 ++++
 .../readwrite/model/BACnetServiceAckVTData.go      |  71 ++++
 .../readwrite/model/BACnetServiceAckVTOpen.go      |  71 ++++
 .../plc4go/bacnetip/readwrite/model/BACnetTag.go   | 181 ++++++++++
 .../model/BACnetTagApplicationBitString.go         | 108 ++++++
 .../readwrite/model/BACnetTagApplicationBoolean.go |  75 +++++
 .../model/BACnetTagApplicationCharacterString.go   |  75 +++++
 .../readwrite/model/BACnetTagApplicationDate.go    |  75 +++++
 .../readwrite/model/BACnetTagApplicationDouble.go  |  86 +++++
 .../model/BACnetTagApplicationEnumerated.go        |  97 ++++++
 .../readwrite/model/BACnetTagApplicationNull.go    |  75 +++++
 .../model/BACnetTagApplicationObjectIdentifier.go  |  75 +++++
 .../model/BACnetTagApplicationOctetString.go       |  75 +++++
 .../readwrite/model/BACnetTagApplicationReal.go    |  86 +++++
 .../model/BACnetTagApplicationSignedInteger.go     |  97 ++++++
 .../readwrite/model/BACnetTagApplicationTime.go    |  75 +++++
 .../model/BACnetTagApplicationUnsignedInteger.go   |  97 ++++++
 .../bacnetip/readwrite/model/BACnetTagContext.go   |  97 ++++++
 .../readwrite/model/BACnetTagWithContent.go        | 206 ++++++++++++
 .../model/BACnetUnconfirmedServiceRequest.go       | 115 +++++++
 .../model/BACnetUnconfirmedServiceRequestIAm.go    | 206 ++++++++++++
 .../model/BACnetUnconfirmedServiceRequestIHave.go  |  71 ++++
 ...UnconfirmedServiceRequestTimeSynchronization.go |  71 ++++
 ...onfirmedServiceRequestUTCTimeSynchronization.go |  71 ++++
 ...rmedServiceRequestUnconfirmedCOVNotification.go |  71 ++++
 ...iceRequestUnconfirmedCOVNotificationMultiple.go |  71 ++++
 ...edServiceRequestUnconfirmedEventNotification.go |  71 ++++
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go | 171 ++++++++++
 ...onfirmedServiceRequestUnconfirmedTextMessage.go |  71 ++++
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go | 179 ++++++++++
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  | 171 ++++++++++
 .../BACnetUnconfirmedServiceRequestWriteGroup.go   |  71 ++++
 .../plc4go/bacnetip/readwrite/model/BVLC.go        | 143 ++++++++
 .../model/BVLCDeleteForeignDeviceTableEntry.go     |  71 ++++
 .../model/BVLCDistributeBroadcastToNetwork.go      |  71 ++++
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  | 127 +++++++
 .../readwrite/model/BVLCOriginalBroadcastNPDU.go   |  92 ++++++
 .../readwrite/model/BVLCOriginalUnicastNPDU.go     |  92 ++++++
 .../model/BVLCReadBroadcastDistributionTable.go    |  71 ++++
 .../model/BVLCReadBroadcastDistributionTableAck.go |  71 ++++
 .../readwrite/model/BVLCReadForeignDeviceTable.go  |  71 ++++
 .../model/BVLCReadForeignDeviceTableAck.go         |  71 ++++
 .../readwrite/model/BVLCRegisterForeignDevice.go   |  71 ++++
 .../plc4go/bacnetip/readwrite/model/BVLCResult.go  |  71 ++++
 .../bacnetip/readwrite/model/BVLCSecureBVLL.go     |  71 ++++
 .../model/BVLCWideBroadcastDistributionTable.go    |  71 ++++
 .../plc4go/bacnetip/readwrite/model/NLM.go         | 115 +++++++
 .../readwrite/model/NLMIAmRouterToNetwork.go       |  94 ++++++
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |  94 ++++++
 .../plc4go/bacnetip/readwrite/model/NPDU.go        | 368 +++++++++++++++++++++
 .../plc4go/knxnetip/readwrite/model/APCI.go        |  51 +++
 .../plc4go/knxnetip/readwrite/model/CEMI.go        | 113 +++++++
 .../readwrite/model/CEMIAdditionalInformation.go   |  95 ++++++
 .../CEMIAdditionalInformationBusmonitorInfo.go     | 154 +++++++++
 .../CEMIAdditionalInformationRelativeTimestamp.go  | 108 ++++++
 .../knxnetip/readwrite/model/CEMIBusmonInd.go      | 136 ++++++++
 .../plc4go/knxnetip/readwrite/model/CEMIDataCon.go | 136 ++++++++
 .../knxnetip/readwrite/model/CEMIDataFrame.go      | 304 +++++++++++++++++
 .../plc4go/knxnetip/readwrite/model/CEMIDataInd.go | 136 ++++++++
 .../plc4go/knxnetip/readwrite/model/CEMIDataReq.go | 136 ++++++++
 .../plc4go/knxnetip/readwrite/model/CEMIFrame.go   | 178 ++++++++++
 .../knxnetip/readwrite/model/CEMIFrameAck.go       |  83 +++++
 .../knxnetip/readwrite/model/CEMIFrameData.go      | 246 ++++++++++++++
 .../knxnetip/readwrite/model/CEMIFrameDataExt.go   | 257 ++++++++++++++
 .../readwrite/model/CEMIFramePollingData.go        |  83 +++++
 .../readwrite/model/CEMIFramePollingDataExt.go     |  83 +++++
 .../knxnetip/readwrite/model/CEMIMPropReadCon.go   | 137 ++++++++
 .../knxnetip/readwrite/model/CEMIMPropReadReq.go   | 126 +++++++
 .../knxnetip/readwrite/model/CEMIPollDataCon.go    |  71 ++++
 .../knxnetip/readwrite/model/CEMIPollDataReq.go    |  71 ++++
 .../knxnetip/readwrite/model/CEMIPriority.go}      |  26 +-
 .../plc4go/knxnetip/readwrite/model/CEMIRawCon.go  |  71 ++++
 .../plc4go/knxnetip/readwrite/model/CEMIRawInd.go  |  71 ++++
 .../plc4go/knxnetip/readwrite/model/CEMIRawReq.go  |  71 ++++
 .../knxnetip/readwrite/model/ConnectionRequest.go  | 130 ++++++++
 .../model/ConnectionRequestInformation.go          | 105 ++++++
 ...ConnectionRequestInformationDeviceManagement.go |  71 ++++
 ...ConnectionRequestInformationTunnelConnection.go | 104 ++++++
 .../knxnetip/readwrite/model/ConnectionResponse.go | 154 +++++++++
 .../readwrite/model/ConnectionResponseDataBlock.go | 105 ++++++
 .../ConnectionResponseDataBlockDeviceManagement.go |  71 ++++
 .../ConnectionResponseDataBlockTunnelConnection.go |  92 ++++++
 .../readwrite/model/ConnectionStateRequest.go      | 121 +++++++
 .../readwrite/model/ConnectionStateResponse.go     |  97 ++++++
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      | 238 +++++++++++++
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go | 119 +++++++
 .../knxnetip/readwrite/model/DescriptionRequest.go |  92 ++++++
 .../readwrite/model/DescriptionResponse.go         | 111 +++++++
 .../readwrite/model/DeviceConfigurationAck.go      |  92 ++++++
 .../model/DeviceConfigurationAckDataBlock.go       | 108 ++++++
 .../readwrite/model/DeviceConfigurationRequest.go  | 111 +++++++
 .../model/DeviceConfigurationRequestDataBlock.go   | 111 +++++++
 .../knxnetip/readwrite/model/DeviceStatus.go       |  90 +++++
 .../knxnetip/readwrite/model/DisconnectRequest.go  | 121 +++++++
 .../knxnetip/readwrite/model/DisconnectResponse.go |  97 ++++++
 .../readwrite/model/HPAIControlEndpoint.go         | 117 +++++++
 .../knxnetip/readwrite/model/HPAIDataEndpoint.go   | 117 +++++++
 .../readwrite/model/HPAIDiscoveryEndpoint.go       | 117 +++++++
 .../knxnetip/readwrite/model/HostProtocolCode.go}  |  24 +-
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |  85 +++++
 .../plc4go/knxnetip/readwrite/model/KNXAddress.go  |  94 ++++++
 .../knxnetip/readwrite/model/KNXGroupAddress.go    |  87 +++++
 .../readwrite/model/KNXGroupAddress2Level.go       |  93 ++++++
 .../readwrite/model/KNXGroupAddress3Level.go       | 104 ++++++
 .../readwrite/model/KNXGroupAddressFreeLevel.go    |  82 +++++
 .../knxnetip/readwrite/model/KNXNetIPMessage.go    | 159 +++++++++
 .../plc4go/knxnetip/readwrite/model/KnxLayer.go}   |  25 +-
 .../knxnetip/readwrite/model/KnxNetIpCore.go       |  82 +++++
 .../readwrite/model/KnxNetIpDeviceManagement.go    |  82 +++++
 .../knxnetip/readwrite/model/KnxNetIpTunneling.go  |  82 +++++
 .../knxnetip/readwrite/model/KnxNetObjectServer.go |  82 +++++
 .../model/KnxNetRemoteConfigurationAndDiagnosis.go |  82 +++++
 .../readwrite/model/KnxNetRemoteLogging.go         |  82 +++++
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |  85 +++++
 .../model/ProjectInstallationIdentifier.go         |  83 +++++
 .../knxnetip/readwrite/model/RelativeTimestamp.go  |  72 ++++
 .../knxnetip/readwrite/model/RoutingIndication.go  |  71 ++++
 .../knxnetip/readwrite/model/SearchRequest.go      |  92 ++++++
 .../knxnetip/readwrite/model/SearchResponse.go     | 130 ++++++++
 .../plc4go/knxnetip/readwrite/model/ServiceId.go   | 103 ++++++
 .../plc4go/knxnetip/readwrite/model/Status.go      |  47 +++
 .../plc4go/knxnetip/readwrite/model/TPCI.go}       |  26 +-
 .../knxnetip/readwrite/model/TunnelingRequest.go   | 111 +++++++
 .../readwrite/model/TunnelingRequestDataBlock.go   | 111 +++++++
 .../knxnetip/readwrite/model/TunnelingResponse.go  |  92 ++++++
 .../readwrite/model/TunnelingResponseDataBlock.go  | 108 ++++++
 .../knxnetip/readwrite/model/UnknownMessage.go     |  95 ++++++
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |   2 +-
 sandbox/plc4go/pom.xml                             |  42 ++-
 224 files changed, 21140 insertions(+), 69 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 2374e61..9df5569 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
@@ -221,16 +221,12 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
             }
             case FLOAT: {
                 FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
-                String type = (floatTypeReference.getSizeInBits() <= 32)? "ReadFloat32" : "ReadFloat64";
-                String typeCast = (floatTypeReference.getSizeInBits() <= 32) ? "float32" : "float64";
-                String defaultNull = (floatTypeReference.getSizeInBits() <= 32) ? "0.0f" : "0.0";
-                StringBuilder sb = new StringBuilder("((Supplier<").append(type).append(">) (() -> {");
-                sb.append("\n            return (").append(typeCast).append(") toFloat(io, ").append(
-                    (floatTypeReference.getBaseType() == SimpleTypeReference.SimpleBaseType.FLOAT) ? "true" : "false")
-                    .append(", ").append(floatTypeReference.getExponent()).append(", ")
-                    .append(floatTypeReference.getMantissa()).append(");");
-                sb.append("\n        })).get()");
-                return sb.toString();
+                if (floatTypeReference.getSizeInBits() <= 32) {
+                    return "io.ReadFloat32(" + floatTypeReference.getSizeInBits() + ")";
+                }
+                if (floatTypeReference.getSizeInBits() <= 64) {
+                    return "io.ReadFloat64(" + floatTypeReference.getSizeInBits() + ")";
+                }
             }
             case STRING: {
                 StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
@@ -280,16 +276,12 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
             case FLOAT:
             case UFLOAT: {
                 FloatTypeReference floatTypeReference = (FloatTypeReference) simpleTypeReference;
-                StringBuilder sb = new StringBuilder();
-                if(simpleTypeReference.getBaseType() == SimpleTypeReference.SimpleBaseType.FLOAT) {
-                    sb.append("\n        boolean negative = value < 0;");
-                    sb.append("\n        io.writeBit(negative);");
+                if (floatTypeReference.getSizeInBits() <= 32) {
+                    return "io.WriteFloat32(" + floatTypeReference.getSizeInBits() + ", " + fieldName + ")";
+                }
+                if (floatTypeReference.getSizeInBits() <= 64) {
+                    return "io.WriteFloat64(" + floatTypeReference.getSizeInBits() + ", " + fieldName + ")";
                 }
-                sb.append("\n        final int exponent = Math.getExponent(value);");
-                sb.append("\n        final double mantissa = value / Math.pow(2, exponent);");
-                sb.append("\n        io.writeInt(").append(floatTypeReference.getExponent()).append(", exponent);");
-                sb.append("\n        io.writeDouble(").append(floatTypeReference.getMantissa()).append(", mantissa)");
-                return sb.toString().substring(9);
             }
             case STRING: {
                 StringTypeReference stringTypeReference = (StringTypeReference) simpleTypeReference;
@@ -330,7 +322,7 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                 VariableLiteral variableLiteral = (VariableLiteral) term;
                 // If this literal references an Enum type, then we have to output it differently.
                 if(getTypeDefinitions().get(variableLiteral.getName()) instanceof EnumTypeDefinition) {
-                    return variableLiteral.getName() + "." + variableLiteral.getChild().getName() +
+                    return variableLiteral.getName() + "_" + variableLiteral.getChild().getName() +
                         ((variableLiteral.getChild().getChild() != null) ?
                             "." + toVariableExpressionRest(variableLiteral.getChild().getChild()) : "");
                 } else {
@@ -789,6 +781,13 @@ public class GoLanguageTemplateHelper extends BaseFreemarkerLanguageTemplateHelp
                             return name;
                         }
                     }
+                    for (DiscriminatedComplexTypeDefinition curCase : switchField.getCases()) {
+                        for (Argument parserArgument : curCase.getParserArguments()) {
+                            if(parserArgument.getName().equals(name)) {
+                                return name;
+                            }
+                        }
+                    }
                 } else if(curField instanceof VirtualField) {
                     VirtualField virtualField = (VirtualField) curField;
                     if(virtualField.getValueExpression().contains(name)) {
diff --git a/plc4j/drivers/knxnetip/src/test/resources/testsuite/KNXNetIPTestsuite.xml b/plc4j/drivers/knxnetip/src/test/resources/testsuite/KNXNetIPTestsuite.xml
index 13ed46f..939c1b9 100644
--- a/plc4j/drivers/knxnetip/src/test/resources/testsuite/KNXNetIPTestsuite.xml
+++ b/plc4j/drivers/knxnetip/src/test/resources/testsuite/KNXNetIPTestsuite.xml
@@ -67,7 +67,7 @@
           <cemiFrame className="org.apache.plc4x.java.knxnetip.readwrite.CEMIFramePollingData">
             <doNotRepeat>false</doNotRepeat>
             <priority>LOW</priority>
-            <error>true</error>
+            <errorFlag>true</errorFlag>
           </cemiFrame>
         </cemi>
       </TunnelingRequest>
@@ -107,7 +107,7 @@
           <cemiFrame className="org.apache.plc4x.java.knxnetip.readwrite.CEMIFramePollingData">
             <doNotRepeat>true</doNotRepeat>
             <priority>URGENT</priority>
-            <error>false</error>
+            <errorFlag>false</errorFlag>
           </cemiFrame>
         </cemi>
       </TunnelingRequest>
@@ -435,7 +435,7 @@
             <repeated>true</repeated>
             <priority>LOW</priority>
             <acknowledgeRequested>false</acknowledgeRequested>
-            <error>false</error>
+            <errorFlag>false</errorFlag>
             <sourceAddress className="org.apache.plc4x.java.knxnetip.readwrite.KNXAddress">
               <mainGroup>3</mainGroup>
               <middleGroup>6</middleGroup>
diff --git a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
index 220a8db..f55fffc 100644
--- a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -312,7 +312,7 @@
     [simple        bit          'notAckFrame']
     [enum          CEMIPriority 'priority']
     [simple        bit          'acknowledgeRequested']
-    [simple        bit          'error']
+    [simple        bit          'errorFlag']
     [simple        bit          'groupDestinationAddress']
     [simple        uint 3       'hopCount']
     [simple        uint 4       'extendedFrameFormat']
@@ -335,7 +335,7 @@
     [discriminator bit          'notAckFrame']
     [enum          CEMIPriority 'priority']
     [simple        bit          'acknowledgeRequested']
-    [simple        bit          'error']
+    [simple        bit          'errorFlag']
     [typeSwitch 'notAckFrame','standardFrame','polling'
         ['false' CEMIFrameAck
         ]
diff --git a/sandbox/plc4go/cmd/main/main.go b/sandbox/plc4go/cmd/main/drivers/bacnetip.go
similarity index 58%
copy from sandbox/plc4go/cmd/main/main.go
copy to sandbox/plc4go/cmd/main/drivers/bacnetip.go
index 40d865a..3622bda 100644
--- a/sandbox/plc4go/cmd/main/main.go
+++ b/sandbox/plc4go/cmd/main/drivers/bacnetip.go
@@ -13,13 +13,26 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-package main
+package drivers
 
-import (
-	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/cmd/main/drivers"
+/*import (
+	"encoding/hex"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/bacnetip/readwrite/model"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
 )
 
-func main() {
-	drivers.Modbus()
-	//drivers.S7()
-}
+func BacnetIp() {
+	request, err := hex.DecodeString("000a00000006010300000004")
+	if err != nil {
+		// Output an error ...
+	}
+	rb := spi.ReadBufferNew(request)
+	adu, err := model.BVLCParse(*rb)
+	if err != nil {
+		// Output an error ...
+	}
+	if adu != nil {
+		// Output success ...
+	}
+
+}*/
diff --git a/sandbox/plc4go/cmd/main/main.go b/sandbox/plc4go/cmd/main/drivers/knxnetip.go
similarity index 59%
copy from sandbox/plc4go/cmd/main/main.go
copy to sandbox/plc4go/cmd/main/drivers/knxnetip.go
index 40d865a..8d045dc 100644
--- a/sandbox/plc4go/cmd/main/main.go
+++ b/sandbox/plc4go/cmd/main/drivers/knxnetip.go
@@ -13,13 +13,26 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-package main
+package drivers
 
 import (
-	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/cmd/main/drivers"
+	"encoding/hex"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/knxnetip/readwrite/model"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
 )
 
-func main() {
-	drivers.Modbus()
-	//drivers.S7()
+func KnxNetIp() {
+	request, err := hex.DecodeString("000a00000006010300000004")
+	if err != nil {
+		// Output an error ...
+	}
+	rb := spi.ReadBufferNew(request)
+	adu, err := model.KNXNetIPMessageParse(*rb)
+	if err != nil {
+		// Output an error ...
+	}
+	if adu != nil {
+		// Output success ...
+	}
+
 }
diff --git a/sandbox/plc4go/cmd/main/main.go b/sandbox/plc4go/cmd/main/main.go
index 40d865a..2ac93e8 100644
--- a/sandbox/plc4go/cmd/main/main.go
+++ b/sandbox/plc4go/cmd/main/main.go
@@ -20,6 +20,8 @@ import (
 )
 
 func main() {
+	//drivers.BacnetIp()
+	drivers.KnxNetIp()
 	drivers.Modbus()
 	//drivers.S7()
 }
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
new file mode 100644
index 0000000..9773078
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDU.go
@@ -0,0 +1,107 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type APDU struct {
+}
+
+// The corresponding interface
+type IAPDU interface {
+	spi.Message
+	ApduType() uint8
+	Serialize(io spi.WriteBuffer)
+}
+
+type APDUInitializer interface {
+	initialize() spi.Message
+}
+
+func APDUApduType(m IAPDU) uint8 {
+	return m.ApduType()
+}
+
+func (m APDU) LengthInBits() uint16 {
+	var lengthInBits uint16 = 0
+
+	// Discriminator Field (apduType)
+	lengthInBits += 4
+
+	// Length of sub-type elements will be added by sub-type...
+
+	return lengthInBits
+}
+
+func (m APDU) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func APDUParse(io spi.ReadBuffer, apduLength uint16) (spi.Message, error) {
+
+	// Discriminator Field (apduType) (Used as input to a switch field)
+	var apduType uint8 = io.ReadUint8(4)
+
+	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+	var initializer APDUInitializer
+	var typeSwitchError error
+	switch {
+	case apduType == 0x0:
+		initializer, typeSwitchError = APDUConfirmedRequestParse(io, apduLength)
+	case apduType == 0x1:
+		initializer, typeSwitchError = APDUUnconfirmedRequestParse(io, apduLength)
+	case apduType == 0x2:
+		initializer, typeSwitchError = APDUSimpleAckParse(io)
+	case apduType == 0x3:
+		initializer, typeSwitchError = APDUComplexAckParse(io)
+	case apduType == 0x4:
+		initializer, typeSwitchError = APDUSegmentAckParse(io)
+	case apduType == 0x5:
+		initializer, typeSwitchError = APDUErrorParse(io)
+	case apduType == 0x6:
+		initializer, typeSwitchError = APDURejectParse(io)
+	case apduType == 0x7:
+		initializer, typeSwitchError = APDUAbortParse(io)
+	}
+	if typeSwitchError != nil {
+		return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+	}
+
+	// Create the instance
+	return initializer.initialize(), nil
+}
+
+func (m APDU) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if iAPDU, ok := typ.(IAPDU); ok {
+
+			// Discriminator Field (apduType) (Used as input to a switch field)
+			apduType := APDUApduType(iAPDU)
+			io.WriteUint8(4, (apduType))
+
+			// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+			iAPDU.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
new file mode 100644
index 0000000..b2a0695
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUAbort.go
@@ -0,0 +1,122 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	log "github.com/sirupsen/logrus"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type APDUAbort struct {
+	server           bool
+	originalInvokeId uint8
+	abortReason      uint8
+	APDU
+}
+
+// The corresponding interface
+type IAPDUAbort interface {
+	IAPDU
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m APDUAbort) ApduType() uint8 {
+	return 0x7
+}
+
+func (m APDUAbort) initialize() spi.Message {
+	return m
+}
+
+func NewAPDUAbort(server bool, originalInvokeId uint8, abortReason uint8) APDUInitializer {
+	return &APDUAbort{server: server, originalInvokeId: originalInvokeId, abortReason: abortReason}
+}
+
+func (m APDUAbort) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.APDU.LengthInBits()
+
+	// Reserved Field (reserved)
+	lengthInBits += 3
+
+	// Simple field (server)
+	lengthInBits += 1
+
+	// Simple field (originalInvokeId)
+	lengthInBits += 8
+
+	// Simple field (abortReason)
+	lengthInBits += 8
+
+	return lengthInBits
+}
+
+func (m APDUAbort) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func APDUAbortParse(io spi.ReadBuffer) (APDUInitializer, error) {
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		var reserved uint8 = io.ReadUint8(3)
+		if reserved != uint8(0x00) {
+			log.WithFields(log.Fields{
+				"expected value": uint8(0x00),
+				"got value":      reserved,
+			}).Info("Got unexpected response.")
+		}
+	}
+
+	// Simple Field (server)
+	var server bool = io.ReadBit()
+
+	// Simple Field (originalInvokeId)
+	var originalInvokeId uint8 = io.ReadUint8(8)
+
+	// Simple Field (abortReason)
+	var abortReason uint8 = io.ReadUint8(8)
+
+	// Create the instance
+	return NewAPDUAbort(server, originalInvokeId, abortReason), nil
+}
+
+func (m APDUAbort) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IAPDUAbort); ok {
+
+			// Reserved Field (reserved)
+			io.WriteUint8(3, uint8(0x00))
+
+			// Simple Field (server)
+			var server bool = m.server
+			io.WriteBit((bool)(server))
+
+			// Simple Field (originalInvokeId)
+			var originalInvokeId uint8 = m.originalInvokeId
+			io.WriteUint8(8, (originalInvokeId))
+
+			// Simple Field (abortReason)
+			var abortReason uint8 = m.abortReason
+			io.WriteUint8(8, (abortReason))
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
new file mode 100644
index 0000000..39294fc
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUComplexAck.go
@@ -0,0 +1,183 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	log "github.com/sirupsen/logrus"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"reflect"
+)
+
+// The data-structure of this message
+type APDUComplexAck struct {
+	segmentedMessage   bool
+	moreFollows        bool
+	originalInvokeId   uint8
+	sequenceNumber     *uint8
+	proposedWindowSize *uint8
+	serviceAck         BACnetServiceAck
+	APDU
+}
+
+// The corresponding interface
+type IAPDUComplexAck interface {
+	IAPDU
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m APDUComplexAck) ApduType() uint8 {
+	return 0x3
+}
+
+func (m APDUComplexAck) initialize() spi.Message {
+	return m
+}
+
+func NewAPDUComplexAck(segmentedMessage bool, moreFollows bool, originalInvokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceAck BACnetServiceAck) APDUInitializer {
+	return &APDUComplexAck{segmentedMessage: segmentedMessage, moreFollows: moreFollows, originalInvokeId: originalInvokeId, sequenceNumber: sequenceNumber, proposedWindowSize: proposedWindowSize, serviceAck: serviceAck}
+}
+
+func (m APDUComplexAck) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.APDU.LengthInBits()
+
+	// Simple field (segmentedMessage)
+	lengthInBits += 1
+
+	// Simple field (moreFollows)
+	lengthInBits += 1
+
+	// Reserved Field (reserved)
+	lengthInBits += 2
+
+	// Simple field (originalInvokeId)
+	lengthInBits += 8
+
+	// Optional Field (sequenceNumber)
+	if m.sequenceNumber != nil {
+		lengthInBits += 8
+	}
+
+	// Optional Field (proposedWindowSize)
+	if m.proposedWindowSize != nil {
+		lengthInBits += 8
+	}
+
+	// Simple field (serviceAck)
+	lengthInBits += m.serviceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m APDUComplexAck) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func APDUComplexAckParse(io spi.ReadBuffer) (APDUInitializer, error) {
+
+	// Simple Field (segmentedMessage)
+	var segmentedMessage bool = io.ReadBit()
+
+	// Simple Field (moreFollows)
+	var moreFollows bool = io.ReadBit()
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		var reserved uint8 = io.ReadUint8(2)
+		if reserved != uint8(0) {
+			log.WithFields(log.Fields{
+				"expected value": uint8(0),
+				"got value":      reserved,
+			}).Info("Got unexpected response.")
+		}
+	}
+
+	// Simple Field (originalInvokeId)
+	var originalInvokeId uint8 = io.ReadUint8(8)
+
+	// Optional Field (sequenceNumber) (Can be skipped, if a given expression evaluates to false)
+	var sequenceNumber *uint8 = nil
+	if segmentedMessage {
+		_val := io.ReadUint8(8)
+		sequenceNumber = &_val
+	}
+
+	// Optional Field (proposedWindowSize) (Can be skipped, if a given expression evaluates to false)
+	var proposedWindowSize *uint8 = nil
+	if segmentedMessage {
+		_val := io.ReadUint8(8)
+		proposedWindowSize = &_val
+	}
+
+	// Simple Field (serviceAck)
+	_serviceAckMessage, _err := BACnetServiceAckParse(io)
+	if _err != nil {
+		return nil, errors.New("Error parsing simple field 'serviceAck'. " + _err.Error())
+	}
+	var serviceAck BACnetServiceAck
+	serviceAck, _serviceAckOk := _serviceAckMessage.(BACnetServiceAck)
+	if !_serviceAckOk {
+		return nil, errors.New("Couldn't cast message of type " + reflect.TypeOf(_serviceAckMessage).Name() + " to BACnetServiceAck")
+	}
+
+	// Create the instance
+	return NewAPDUComplexAck(segmentedMessage, moreFollows, originalInvokeId, sequenceNumber, proposedWindowSize, serviceAck), nil
+}
+
+func (m APDUComplexAck) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IAPDUComplexAck); ok {
+
+			// Simple Field (segmentedMessage)
+			var segmentedMessage bool = m.segmentedMessage
+			io.WriteBit((bool)(segmentedMessage))
+
+			// Simple Field (moreFollows)
+			var moreFollows bool = m.moreFollows
+			io.WriteBit((bool)(moreFollows))
+
+			// Reserved Field (reserved)
+			io.WriteUint8(2, uint8(0))
+
+			// Simple Field (originalInvokeId)
+			var originalInvokeId uint8 = m.originalInvokeId
+			io.WriteUint8(8, (originalInvokeId))
+
+			// Optional Field (sequenceNumber) (Can be skipped, if the value is null)
+			var sequenceNumber *uint8 = nil
+			if m.sequenceNumber != nil {
+				sequenceNumber = m.sequenceNumber
+				io.WriteUint8(8, *(sequenceNumber))
+			}
+
+			// Optional Field (proposedWindowSize) (Can be skipped, if the value is null)
+			var proposedWindowSize *uint8 = nil
+			if m.proposedWindowSize != nil {
+				proposedWindowSize = m.proposedWindowSize
+				io.WriteUint8(8, *(proposedWindowSize))
+			}
+
+			// Simple Field (serviceAck)
+			var serviceAck BACnetServiceAck = m.serviceAck
+			serviceAck.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
new file mode 100644
index 0000000..4dca969
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUConfirmedRequest.go
@@ -0,0 +1,216 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	log "github.com/sirupsen/logrus"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"reflect"
+)
+
+// The data-structure of this message
+type APDUConfirmedRequest struct {
+	segmentedMessage          bool
+	moreFollows               bool
+	segmentedResponseAccepted bool
+	maxSegmentsAccepted       uint8
+	maxApduLengthAccepted     uint8
+	invokeId                  uint8
+	sequenceNumber            *uint8
+	proposedWindowSize        *uint8
+	serviceRequest            BACnetConfirmedServiceRequest
+	APDU
+}
+
+// The corresponding interface
+type IAPDUConfirmedRequest interface {
+	IAPDU
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m APDUConfirmedRequest) ApduType() uint8 {
+	return 0x0
+}
+
+func (m APDUConfirmedRequest) initialize() spi.Message {
+	return m
+}
+
+func NewAPDUConfirmedRequest(segmentedMessage bool, moreFollows bool, segmentedResponseAccepted bool, maxSegmentsAccepted uint8, maxApduLengthAccepted uint8, invokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceRequest BACnetConfirmedServiceRequest) APDUInitializer {
+	return &APDUConfirmedRequest{segmentedMessage: segmentedMessage, moreFollows: moreFollows, segmentedResponseAccepted: segmentedResponseAccepted, maxSegmentsAccepted: maxSegmentsAccepted, maxApduLengthAccepted: maxApduLengthAccepted, invokeId: invokeId, sequenceNumber: sequenceNumber, proposedWindowSize: proposedWindowSize, serviceRequest: serviceRequest}
+}
+
+func (m APDUConfirmedRequest) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.APDU.LengthInBits()
+
+	// Simple field (segmentedMessage)
+	lengthInBits += 1
+
+	// Simple field (moreFollows)
+	lengthInBits += 1
+
+	// Simple field (segmentedResponseAccepted)
+	lengthInBits += 1
+
+	// Reserved Field (reserved)
+	lengthInBits += 2
+
+	// Simple field (maxSegmentsAccepted)
+	lengthInBits += 3
+
+	// Simple field (maxApduLengthAccepted)
+	lengthInBits += 4
+
+	// Simple field (invokeId)
+	lengthInBits += 8
+
+	// Optional Field (sequenceNumber)
+	if m.sequenceNumber != nil {
+		lengthInBits += 8
+	}
+
+	// Optional Field (proposedWindowSize)
+	if m.proposedWindowSize != nil {
+		lengthInBits += 8
+	}
+
+	// Simple field (serviceRequest)
+	lengthInBits += m.serviceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m APDUConfirmedRequest) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func APDUConfirmedRequestParse(io spi.ReadBuffer, apduLength uint16) (APDUInitializer, error) {
+
+	// Simple Field (segmentedMessage)
+	var segmentedMessage bool = io.ReadBit()
+
+	// Simple Field (moreFollows)
+	var moreFollows bool = io.ReadBit()
+
+	// Simple Field (segmentedResponseAccepted)
+	var segmentedResponseAccepted bool = io.ReadBit()
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		var reserved uint8 = io.ReadUint8(2)
+		if reserved != uint8(0) {
+			log.WithFields(log.Fields{
+				"expected value": uint8(0),
+				"got value":      reserved,
+			}).Info("Got unexpected response.")
+		}
+	}
+
+	// Simple Field (maxSegmentsAccepted)
+	var maxSegmentsAccepted uint8 = io.ReadUint8(3)
+
+	// Simple Field (maxApduLengthAccepted)
+	var maxApduLengthAccepted uint8 = io.ReadUint8(4)
+
+	// Simple Field (invokeId)
+	var invokeId uint8 = io.ReadUint8(8)
+
+	// Optional Field (sequenceNumber) (Can be skipped, if a given expression evaluates to false)
+	var sequenceNumber *uint8 = nil
+	if segmentedMessage {
+		_val := io.ReadUint8(8)
+		sequenceNumber = &_val
+	}
+
+	// Optional Field (proposedWindowSize) (Can be skipped, if a given expression evaluates to false)
+	var proposedWindowSize *uint8 = nil
+	if segmentedMessage {
+		_val := io.ReadUint8(8)
+		proposedWindowSize = &_val
+	}
+
+	// Simple Field (serviceRequest)
+	_serviceRequestMessage, _err := BACnetConfirmedServiceRequestParse(io, uint16((apduLength)-((3)+(spi.InlineIf((segmentedMessage), uint16(2), uint16(0))))))
+	if _err != nil {
+		return nil, errors.New("Error parsing simple field 'serviceRequest'. " + _err.Error())
+	}
+	var serviceRequest BACnetConfirmedServiceRequest
+	serviceRequest, _serviceRequestOk := _serviceRequestMessage.(BACnetConfirmedServiceRequest)
+	if !_serviceRequestOk {
+		return nil, errors.New("Couldn't cast message of type " + reflect.TypeOf(_serviceRequestMessage).Name() + " to BACnetConfirmedServiceRequest")
+	}
+
+	// Create the instance
+	return NewAPDUConfirmedRequest(segmentedMessage, moreFollows, segmentedResponseAccepted, maxSegmentsAccepted, maxApduLengthAccepted, invokeId, sequenceNumber, proposedWindowSize, serviceRequest), nil
+}
+
+func (m APDUConfirmedRequest) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IAPDUConfirmedRequest); ok {
+
+			// Simple Field (segmentedMessage)
+			var segmentedMessage bool = m.segmentedMessage
+			io.WriteBit((bool)(segmentedMessage))
+
+			// Simple Field (moreFollows)
+			var moreFollows bool = m.moreFollows
+			io.WriteBit((bool)(moreFollows))
+
+			// Simple Field (segmentedResponseAccepted)
+			var segmentedResponseAccepted bool = m.segmentedResponseAccepted
+			io.WriteBit((bool)(segmentedResponseAccepted))
+
+			// Reserved Field (reserved)
+			io.WriteUint8(2, uint8(0))
+
+			// Simple Field (maxSegmentsAccepted)
+			var maxSegmentsAccepted uint8 = m.maxSegmentsAccepted
+			io.WriteUint8(3, (maxSegmentsAccepted))
+
+			// Simple Field (maxApduLengthAccepted)
+			var maxApduLengthAccepted uint8 = m.maxApduLengthAccepted
+			io.WriteUint8(4, (maxApduLengthAccepted))
+
+			// Simple Field (invokeId)
+			var invokeId uint8 = m.invokeId
+			io.WriteUint8(8, (invokeId))
+
+			// Optional Field (sequenceNumber) (Can be skipped, if the value is null)
+			var sequenceNumber *uint8 = nil
+			if m.sequenceNumber != nil {
+				sequenceNumber = m.sequenceNumber
+				io.WriteUint8(8, *(sequenceNumber))
+			}
+
+			// Optional Field (proposedWindowSize) (Can be skipped, if the value is null)
+			var proposedWindowSize *uint8 = nil
+			if m.proposedWindowSize != nil {
+				proposedWindowSize = m.proposedWindowSize
+				io.WriteUint8(8, *(proposedWindowSize))
+			}
+
+			// Simple Field (serviceRequest)
+			var serviceRequest BACnetConfirmedServiceRequest = m.serviceRequest
+			serviceRequest.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
new file mode 100644
index 0000000..f9b8b0d
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUError.go
@@ -0,0 +1,121 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	log "github.com/sirupsen/logrus"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"reflect"
+)
+
+// The data-structure of this message
+type APDUError struct {
+	originalInvokeId uint8
+	error            BACnetError
+	APDU
+}
+
+// The corresponding interface
+type IAPDUError interface {
+	IAPDU
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m APDUError) ApduType() uint8 {
+	return 0x5
+}
+
+func (m APDUError) initialize() spi.Message {
+	return m
+}
+
+func NewAPDUError(originalInvokeId uint8, error BACnetError) APDUInitializer {
+	return &APDUError{originalInvokeId: originalInvokeId, error: error}
+}
+
+func (m APDUError) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.APDU.LengthInBits()
+
+	// Reserved Field (reserved)
+	lengthInBits += 4
+
+	// Simple field (originalInvokeId)
+	lengthInBits += 8
+
+	// Simple field (error)
+	lengthInBits += m.error.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m APDUError) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func APDUErrorParse(io spi.ReadBuffer) (APDUInitializer, error) {
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		var reserved uint8 = io.ReadUint8(4)
+		if reserved != uint8(0x00) {
+			log.WithFields(log.Fields{
+				"expected value": uint8(0x00),
+				"got value":      reserved,
+			}).Info("Got unexpected response.")
+		}
+	}
+
+	// Simple Field (originalInvokeId)
+	var originalInvokeId uint8 = io.ReadUint8(8)
+
+	// Simple Field (error)
+	_errorMessage, _err := BACnetErrorParse(io)
+	if _err != nil {
+		return nil, errors.New("Error parsing simple field 'error'. " + _err.Error())
+	}
+	var error BACnetError
+	error, _errorOk := _errorMessage.(BACnetError)
+	if !_errorOk {
+		return nil, errors.New("Couldn't cast message of type " + reflect.TypeOf(_errorMessage).Name() + " to BACnetError")
+	}
+
+	// Create the instance
+	return NewAPDUError(originalInvokeId, error), nil
+}
+
+func (m APDUError) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IAPDUError); ok {
+
+			// Reserved Field (reserved)
+			io.WriteUint8(4, uint8(0x00))
+
+			// Simple Field (originalInvokeId)
+			var originalInvokeId uint8 = m.originalInvokeId
+			io.WriteUint8(8, (originalInvokeId))
+
+			// Simple Field (error)
+			var error BACnetError = m.error
+			error.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
new file mode 100644
index 0000000..b74c654
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUReject.go
@@ -0,0 +1,111 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	log "github.com/sirupsen/logrus"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type APDUReject struct {
+	originalInvokeId uint8
+	rejectReason     uint8
+	APDU
+}
+
+// The corresponding interface
+type IAPDUReject interface {
+	IAPDU
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m APDUReject) ApduType() uint8 {
+	return 0x6
+}
+
+func (m APDUReject) initialize() spi.Message {
+	return m
+}
+
+func NewAPDUReject(originalInvokeId uint8, rejectReason uint8) APDUInitializer {
+	return &APDUReject{originalInvokeId: originalInvokeId, rejectReason: rejectReason}
+}
+
+func (m APDUReject) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.APDU.LengthInBits()
+
+	// Reserved Field (reserved)
+	lengthInBits += 4
+
+	// Simple field (originalInvokeId)
+	lengthInBits += 8
+
+	// Simple field (rejectReason)
+	lengthInBits += 8
+
+	return lengthInBits
+}
+
+func (m APDUReject) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func APDURejectParse(io spi.ReadBuffer) (APDUInitializer, error) {
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		var reserved uint8 = io.ReadUint8(4)
+		if reserved != uint8(0x00) {
+			log.WithFields(log.Fields{
+				"expected value": uint8(0x00),
+				"got value":      reserved,
+			}).Info("Got unexpected response.")
+		}
+	}
+
+	// Simple Field (originalInvokeId)
+	var originalInvokeId uint8 = io.ReadUint8(8)
+
+	// Simple Field (rejectReason)
+	var rejectReason uint8 = io.ReadUint8(8)
+
+	// Create the instance
+	return NewAPDUReject(originalInvokeId, rejectReason), nil
+}
+
+func (m APDUReject) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IAPDUReject); ok {
+
+			// Reserved Field (reserved)
+			io.WriteUint8(4, uint8(0x00))
+
+			// Simple Field (originalInvokeId)
+			var originalInvokeId uint8 = m.originalInvokeId
+			io.WriteUint8(8, (originalInvokeId))
+
+			// Simple Field (rejectReason)
+			var rejectReason uint8 = m.rejectReason
+			io.WriteUint8(8, (rejectReason))
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
new file mode 100644
index 0000000..9fc723e
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSegmentAck.go
@@ -0,0 +1,144 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	log "github.com/sirupsen/logrus"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type APDUSegmentAck struct {
+	negativeAck        bool
+	server             bool
+	originalInvokeId   uint8
+	sequenceNumber     uint8
+	proposedWindowSize uint8
+	APDU
+}
+
+// The corresponding interface
+type IAPDUSegmentAck interface {
+	IAPDU
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m APDUSegmentAck) ApduType() uint8 {
+	return 0x4
+}
+
+func (m APDUSegmentAck) initialize() spi.Message {
+	return m
+}
+
+func NewAPDUSegmentAck(negativeAck bool, server bool, originalInvokeId uint8, sequenceNumber uint8, proposedWindowSize uint8) APDUInitializer {
+	return &APDUSegmentAck{negativeAck: negativeAck, server: server, originalInvokeId: originalInvokeId, sequenceNumber: sequenceNumber, proposedWindowSize: proposedWindowSize}
+}
+
+func (m APDUSegmentAck) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.APDU.LengthInBits()
+
+	// Reserved Field (reserved)
+	lengthInBits += 2
+
+	// Simple field (negativeAck)
+	lengthInBits += 1
+
+	// Simple field (server)
+	lengthInBits += 1
+
+	// Simple field (originalInvokeId)
+	lengthInBits += 8
+
+	// Simple field (sequenceNumber)
+	lengthInBits += 8
+
+	// Simple field (proposedWindowSize)
+	lengthInBits += 8
+
+	return lengthInBits
+}
+
+func (m APDUSegmentAck) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func APDUSegmentAckParse(io spi.ReadBuffer) (APDUInitializer, error) {
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		var reserved uint8 = io.ReadUint8(2)
+		if reserved != uint8(0x00) {
+			log.WithFields(log.Fields{
+				"expected value": uint8(0x00),
+				"got value":      reserved,
+			}).Info("Got unexpected response.")
+		}
+	}
+
+	// Simple Field (negativeAck)
+	var negativeAck bool = io.ReadBit()
+
+	// Simple Field (server)
+	var server bool = io.ReadBit()
+
+	// Simple Field (originalInvokeId)
+	var originalInvokeId uint8 = io.ReadUint8(8)
+
+	// Simple Field (sequenceNumber)
+	var sequenceNumber uint8 = io.ReadUint8(8)
+
+	// Simple Field (proposedWindowSize)
+	var proposedWindowSize uint8 = io.ReadUint8(8)
+
+	// Create the instance
+	return NewAPDUSegmentAck(negativeAck, server, originalInvokeId, sequenceNumber, proposedWindowSize), nil
+}
+
+func (m APDUSegmentAck) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IAPDUSegmentAck); ok {
+
+			// Reserved Field (reserved)
+			io.WriteUint8(2, uint8(0x00))
+
+			// Simple Field (negativeAck)
+			var negativeAck bool = m.negativeAck
+			io.WriteBit((bool)(negativeAck))
+
+			// Simple Field (server)
+			var server bool = m.server
+			io.WriteBit((bool)(server))
+
+			// Simple Field (originalInvokeId)
+			var originalInvokeId uint8 = m.originalInvokeId
+			io.WriteUint8(8, (originalInvokeId))
+
+			// Simple Field (sequenceNumber)
+			var sequenceNumber uint8 = m.sequenceNumber
+			io.WriteUint8(8, (sequenceNumber))
+
+			// Simple Field (proposedWindowSize)
+			var proposedWindowSize uint8 = m.proposedWindowSize
+			io.WriteUint8(8, (proposedWindowSize))
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
new file mode 100644
index 0000000..6d00d8f
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUSimpleAck.go
@@ -0,0 +1,111 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	log "github.com/sirupsen/logrus"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type APDUSimpleAck struct {
+	originalInvokeId uint8
+	serviceChoice    uint8
+	APDU
+}
+
+// The corresponding interface
+type IAPDUSimpleAck interface {
+	IAPDU
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m APDUSimpleAck) ApduType() uint8 {
+	return 0x2
+}
+
+func (m APDUSimpleAck) initialize() spi.Message {
+	return m
+}
+
+func NewAPDUSimpleAck(originalInvokeId uint8, serviceChoice uint8) APDUInitializer {
+	return &APDUSimpleAck{originalInvokeId: originalInvokeId, serviceChoice: serviceChoice}
+}
+
+func (m APDUSimpleAck) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.APDU.LengthInBits()
+
+	// Reserved Field (reserved)
+	lengthInBits += 4
+
+	// Simple field (originalInvokeId)
+	lengthInBits += 8
+
+	// Simple field (serviceChoice)
+	lengthInBits += 8
+
+	return lengthInBits
+}
+
+func (m APDUSimpleAck) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func APDUSimpleAckParse(io spi.ReadBuffer) (APDUInitializer, error) {
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		var reserved uint8 = io.ReadUint8(4)
+		if reserved != uint8(0) {
+			log.WithFields(log.Fields{
+				"expected value": uint8(0),
+				"got value":      reserved,
+			}).Info("Got unexpected response.")
+		}
+	}
+
+	// Simple Field (originalInvokeId)
+	var originalInvokeId uint8 = io.ReadUint8(8)
+
+	// Simple Field (serviceChoice)
+	var serviceChoice uint8 = io.ReadUint8(8)
+
+	// Create the instance
+	return NewAPDUSimpleAck(originalInvokeId, serviceChoice), nil
+}
+
+func (m APDUSimpleAck) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IAPDUSimpleAck); ok {
+
+			// Reserved Field (reserved)
+			io.WriteUint8(4, uint8(0))
+
+			// Simple Field (originalInvokeId)
+			var originalInvokeId uint8 = m.originalInvokeId
+			io.WriteUint8(8, (originalInvokeId))
+
+			// Simple Field (serviceChoice)
+			var serviceChoice uint8 = m.serviceChoice
+			io.WriteUint8(8, (serviceChoice))
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
new file mode 100644
index 0000000..598351e
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/APDUUnconfirmedRequest.go
@@ -0,0 +1,110 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	log "github.com/sirupsen/logrus"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"reflect"
+)
+
+// The data-structure of this message
+type APDUUnconfirmedRequest struct {
+	serviceRequest BACnetUnconfirmedServiceRequest
+	APDU
+}
+
+// The corresponding interface
+type IAPDUUnconfirmedRequest interface {
+	IAPDU
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m APDUUnconfirmedRequest) ApduType() uint8 {
+	return 0x1
+}
+
+func (m APDUUnconfirmedRequest) initialize() spi.Message {
+	return m
+}
+
+func NewAPDUUnconfirmedRequest(serviceRequest BACnetUnconfirmedServiceRequest) APDUInitializer {
+	return &APDUUnconfirmedRequest{serviceRequest: serviceRequest}
+}
+
+func (m APDUUnconfirmedRequest) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.APDU.LengthInBits()
+
+	// Reserved Field (reserved)
+	lengthInBits += 4
+
+	// Simple field (serviceRequest)
+	lengthInBits += m.serviceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m APDUUnconfirmedRequest) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func APDUUnconfirmedRequestParse(io spi.ReadBuffer, apduLength uint16) (APDUInitializer, error) {
+
+	// Reserved Field (Compartmentalized so the "reserved" variable can't leak)
+	{
+		var reserved uint8 = io.ReadUint8(4)
+		if reserved != uint8(0) {
+			log.WithFields(log.Fields{
+				"expected value": uint8(0),
+				"got value":      reserved,
+			}).Info("Got unexpected response.")
+		}
+	}
+
+	// Simple Field (serviceRequest)
+	_serviceRequestMessage, _err := BACnetUnconfirmedServiceRequestParse(io, uint16((apduLength)-(1)))
+	if _err != nil {
+		return nil, errors.New("Error parsing simple field 'serviceRequest'. " + _err.Error())
+	}
+	var serviceRequest BACnetUnconfirmedServiceRequest
+	serviceRequest, _serviceRequestOk := _serviceRequestMessage.(BACnetUnconfirmedServiceRequest)
+	if !_serviceRequestOk {
+		return nil, errors.New("Couldn't cast message of type " + reflect.TypeOf(_serviceRequestMessage).Name() + " to BACnetUnconfirmedServiceRequest")
+	}
+
+	// Create the instance
+	return NewAPDUUnconfirmedRequest(serviceRequest), nil
+}
+
+func (m APDUUnconfirmedRequest) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IAPDUUnconfirmedRequest); ok {
+
+			// Reserved Field (reserved)
+			io.WriteUint8(4, uint8(0))
+
+			// Simple Field (serviceRequest)
+			var serviceRequest BACnetUnconfirmedServiceRequest = m.serviceRequest
+			serviceRequest.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
new file mode 100644
index 0000000..8d11ead
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/ApplicationTag.go
@@ -0,0 +1,48 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import "plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+
+type ApplicationTag int8
+
+const (
+	ApplicationTag_NULL                     ApplicationTag = 0x0
+	ApplicationTag_BOOLEAN                  ApplicationTag = 0x1
+	ApplicationTag_UNSIGNED_INTEGER         ApplicationTag = 0x2
+	ApplicationTag_SIGNED_INTEGER           ApplicationTag = 0x3
+	ApplicationTag_REAL                     ApplicationTag = 0x4
+	ApplicationTag_DOUBLE                   ApplicationTag = 0x5
+	ApplicationTag_OCTET_STRING             ApplicationTag = 0x6
+	ApplicationTag_CHARACTER_STRING         ApplicationTag = 0x7
+	ApplicationTag_BIT_STRING               ApplicationTag = 0x8
+	ApplicationTag_ENUMERATED               ApplicationTag = 0x9
+	ApplicationTag_DATE                     ApplicationTag = 0xA
+	ApplicationTag_TIME                     ApplicationTag = 0xB
+	ApplicationTag_BACNET_OBJECT_IDENTIFIER ApplicationTag = 0xC
+)
+
+func ApplicationTagParse(io spi.ReadBuffer) (ApplicationTag, error) {
+	// TODO: Implement ...
+	return 0, nil
+}
+
+func (e ApplicationTag) Serialize(io spi.WriteBuffer) {
+	// TODO: Implement ...
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
new file mode 100644
index 0000000..7249127
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
@@ -0,0 +1,96 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetAddress struct {
+	address []uint8
+	port    uint16
+}
+
+// The corresponding interface
+type IBACnetAddress interface {
+	spi.Message
+	Serialize(io spi.WriteBuffer)
+}
+
+func NewBACnetAddress(address []uint8, port uint16) spi.Message {
+	return &BACnetAddress{address: address, port: port}
+}
+
+func (m BACnetAddress) LengthInBits() uint16 {
+	var lengthInBits uint16 = 0
+
+	// Array field
+	if len(m.address) > 0 {
+		lengthInBits += 8 * uint16(len(m.address))
+	}
+
+	// Simple field (port)
+	lengthInBits += 16
+
+	return lengthInBits
+}
+
+func (m BACnetAddress) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetAddressParse(io spi.ReadBuffer) (spi.Message, error) {
+
+	// Array field (address)
+	var address []uint8
+	// Count array
+	{
+		address := make([]uint8, 4)
+		for curItem := uint16(0); curItem < uint16(4); curItem++ {
+
+			address = append(address, io.ReadUint8(8))
+		}
+	}
+
+	// Simple Field (port)
+	var port uint16 = io.ReadUint16(16)
+
+	// Create the instance
+	return NewBACnetAddress(address, port), nil
+}
+
+func (m BACnetAddress) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetAddress); ok {
+
+			// Array Field (address)
+			if m.address != nil {
+				for _, _element := range m.address {
+					io.WriteUint8(8, _element)
+				}
+			}
+
+			// Simple Field (port)
+			var port uint16 = m.port
+			io.WriteUint16(16, (port))
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
new file mode 100644
index 0000000..4d28627
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACK.go
@@ -0,0 +1,119 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACK struct {
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACK interface {
+	spi.Message
+	ServiceChoice() uint8
+	Serialize(io spi.WriteBuffer)
+}
+
+type BACnetConfirmedServiceACKInitializer interface {
+	initialize() spi.Message
+}
+
+func BACnetConfirmedServiceACKServiceChoice(m IBACnetConfirmedServiceACK) uint8 {
+	return m.ServiceChoice()
+}
+
+func (m BACnetConfirmedServiceACK) LengthInBits() uint16 {
+	var lengthInBits uint16 = 0
+
+	// Discriminator Field (serviceChoice)
+	lengthInBits += 8
+
+	// Length of sub-type elements will be added by sub-type...
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACK) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKParse(io spi.ReadBuffer) (spi.Message, error) {
+
+	// Discriminator Field (serviceChoice) (Used as input to a switch field)
+	var serviceChoice uint8 = io.ReadUint8(8)
+
+	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+	var initializer BACnetConfirmedServiceACKInitializer
+	var typeSwitchError error
+	switch {
+	case serviceChoice == 0x03:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKGetAlarmSummaryParse(io)
+	case serviceChoice == 0x04:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKGetEnrollmentSummaryParse(io)
+	case serviceChoice == 0x1D:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKGetEventInformationParse(io)
+	case serviceChoice == 0x06:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKAtomicReadFileParse(io)
+	case serviceChoice == 0x07:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKAtomicWriteFileParse(io)
+	case serviceChoice == 0x0A:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKCreateObjectParse(io)
+	case serviceChoice == 0x0C:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKReadPropertyParse(io)
+	case serviceChoice == 0x0E:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKReadPropertyMultipleParse(io)
+	case serviceChoice == 0x1A:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKReadRangeParse(io)
+	case serviceChoice == 0x12:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKConfirmedPrivateTransferParse(io)
+	case serviceChoice == 0x15:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKVTOpenParse(io)
+	case serviceChoice == 0x17:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKVTDataParse(io)
+	case serviceChoice == 0x18:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKRemovedAuthenticateParse(io)
+	case serviceChoice == 0x0D:
+		initializer, typeSwitchError = BACnetConfirmedServiceACKRemovedReadPropertyConditionalParse(io)
+	}
+	if typeSwitchError != nil {
+		return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+	}
+
+	// Create the instance
+	return initializer.initialize(), nil
+}
+
+func (m BACnetConfirmedServiceACK) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if iBACnetConfirmedServiceACK, ok := typ.(IBACnetConfirmedServiceACK); ok {
+
+			// Discriminator Field (serviceChoice) (Used as input to a switch field)
+			serviceChoice := BACnetConfirmedServiceACKServiceChoice(iBACnetConfirmedServiceACK)
+			io.WriteUint8(8, (serviceChoice))
+
+			// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+			iBACnetConfirmedServiceACK.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
new file mode 100644
index 0000000..b604f4a
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicReadFile.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKAtomicReadFile struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKAtomicReadFile interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKAtomicReadFile) ServiceChoice() uint8 {
+	return 0x06
+}
+
+func (m BACnetConfirmedServiceACKAtomicReadFile) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKAtomicReadFile() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKAtomicReadFile{}
+}
+
+func (m BACnetConfirmedServiceACKAtomicReadFile) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKAtomicReadFile) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKAtomicReadFileParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKAtomicReadFile(), nil
+}
+
+func (m BACnetConfirmedServiceACKAtomicReadFile) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKAtomicReadFile); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
new file mode 100644
index 0000000..ccc2e6c
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKAtomicWriteFile.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKAtomicWriteFile struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKAtomicWriteFile interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKAtomicWriteFile) ServiceChoice() uint8 {
+	return 0x07
+}
+
+func (m BACnetConfirmedServiceACKAtomicWriteFile) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKAtomicWriteFile() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKAtomicWriteFile{}
+}
+
+func (m BACnetConfirmedServiceACKAtomicWriteFile) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKAtomicWriteFile) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKAtomicWriteFileParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKAtomicWriteFile(), nil
+}
+
+func (m BACnetConfirmedServiceACKAtomicWriteFile) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKAtomicWriteFile); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
new file mode 100644
index 0000000..d3c30a4
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKConfirmedPrivateTransfer.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKConfirmedPrivateTransfer struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKConfirmedPrivateTransfer interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKConfirmedPrivateTransfer) ServiceChoice() uint8 {
+	return 0x12
+}
+
+func (m BACnetConfirmedServiceACKConfirmedPrivateTransfer) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKConfirmedPrivateTransfer() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKConfirmedPrivateTransfer{}
+}
+
+func (m BACnetConfirmedServiceACKConfirmedPrivateTransfer) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKConfirmedPrivateTransfer) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKConfirmedPrivateTransferParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKConfirmedPrivateTransfer(), nil
+}
+
+func (m BACnetConfirmedServiceACKConfirmedPrivateTransfer) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKConfirmedPrivateTransfer); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
new file mode 100644
index 0000000..e9d53a9
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKCreateObject.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKCreateObject struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKCreateObject interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKCreateObject) ServiceChoice() uint8 {
+	return 0x0A
+}
+
+func (m BACnetConfirmedServiceACKCreateObject) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKCreateObject() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKCreateObject{}
+}
+
+func (m BACnetConfirmedServiceACKCreateObject) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKCreateObject) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKCreateObjectParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKCreateObject(), nil
+}
+
+func (m BACnetConfirmedServiceACKCreateObject) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKCreateObject); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
new file mode 100644
index 0000000..44b39f2
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetAlarmSummary.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKGetAlarmSummary struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKGetAlarmSummary interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKGetAlarmSummary) ServiceChoice() uint8 {
+	return 0x03
+}
+
+func (m BACnetConfirmedServiceACKGetAlarmSummary) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKGetAlarmSummary() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKGetAlarmSummary{}
+}
+
+func (m BACnetConfirmedServiceACKGetAlarmSummary) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKGetAlarmSummary) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKGetAlarmSummaryParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKGetAlarmSummary(), nil
+}
+
+func (m BACnetConfirmedServiceACKGetAlarmSummary) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKGetAlarmSummary); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
new file mode 100644
index 0000000..47f3ef5
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEnrollmentSummary.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKGetEnrollmentSummary struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKGetEnrollmentSummary interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKGetEnrollmentSummary) ServiceChoice() uint8 {
+	return 0x04
+}
+
+func (m BACnetConfirmedServiceACKGetEnrollmentSummary) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKGetEnrollmentSummary() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKGetEnrollmentSummary{}
+}
+
+func (m BACnetConfirmedServiceACKGetEnrollmentSummary) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKGetEnrollmentSummary) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKGetEnrollmentSummaryParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKGetEnrollmentSummary(), nil
+}
+
+func (m BACnetConfirmedServiceACKGetEnrollmentSummary) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKGetEnrollmentSummary); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
new file mode 100644
index 0000000..2cbbf66
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKGetEventInformation.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKGetEventInformation struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKGetEventInformation interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKGetEventInformation) ServiceChoice() uint8 {
+	return 0x1D
+}
+
+func (m BACnetConfirmedServiceACKGetEventInformation) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKGetEventInformation() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKGetEventInformation{}
+}
+
+func (m BACnetConfirmedServiceACKGetEventInformation) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKGetEventInformation) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKGetEventInformationParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKGetEventInformation(), nil
+}
+
+func (m BACnetConfirmedServiceACKGetEventInformation) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKGetEventInformation); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
new file mode 100644
index 0000000..6640b6d
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadProperty.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKReadProperty struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKReadProperty interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKReadProperty) ServiceChoice() uint8 {
+	return 0x0C
+}
+
+func (m BACnetConfirmedServiceACKReadProperty) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKReadProperty() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKReadProperty{}
+}
+
+func (m BACnetConfirmedServiceACKReadProperty) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKReadProperty) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKReadPropertyParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKReadProperty(), nil
+}
+
+func (m BACnetConfirmedServiceACKReadProperty) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKReadProperty); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
new file mode 100644
index 0000000..c3a41ab
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadPropertyMultiple.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKReadPropertyMultiple struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKReadPropertyMultiple interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKReadPropertyMultiple) ServiceChoice() uint8 {
+	return 0x0E
+}
+
+func (m BACnetConfirmedServiceACKReadPropertyMultiple) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKReadPropertyMultiple() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKReadPropertyMultiple{}
+}
+
+func (m BACnetConfirmedServiceACKReadPropertyMultiple) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKReadPropertyMultiple) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKReadPropertyMultipleParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKReadPropertyMultiple(), nil
+}
+
+func (m BACnetConfirmedServiceACKReadPropertyMultiple) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKReadPropertyMultiple); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
new file mode 100644
index 0000000..445191b
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKReadRange.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKReadRange struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKReadRange interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKReadRange) ServiceChoice() uint8 {
+	return 0x1A
+}
+
+func (m BACnetConfirmedServiceACKReadRange) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKReadRange() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKReadRange{}
+}
+
+func (m BACnetConfirmedServiceACKReadRange) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKReadRange) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKReadRangeParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKReadRange(), nil
+}
+
+func (m BACnetConfirmedServiceACKReadRange) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKReadRange); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
new file mode 100644
index 0000000..c78ecdc
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedAuthenticate.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKRemovedAuthenticate struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKRemovedAuthenticate interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKRemovedAuthenticate) ServiceChoice() uint8 {
+	return 0x18
+}
+
+func (m BACnetConfirmedServiceACKRemovedAuthenticate) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKRemovedAuthenticate() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKRemovedAuthenticate{}
+}
+
+func (m BACnetConfirmedServiceACKRemovedAuthenticate) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKRemovedAuthenticate) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKRemovedAuthenticateParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKRemovedAuthenticate(), nil
+}
+
+func (m BACnetConfirmedServiceACKRemovedAuthenticate) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKRemovedAuthenticate); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
new file mode 100644
index 0000000..b5e021b
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKRemovedReadPropertyConditional.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKRemovedReadPropertyConditional struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKRemovedReadPropertyConditional interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKRemovedReadPropertyConditional) ServiceChoice() uint8 {
+	return 0x0D
+}
+
+func (m BACnetConfirmedServiceACKRemovedReadPropertyConditional) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKRemovedReadPropertyConditional() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKRemovedReadPropertyConditional{}
+}
+
+func (m BACnetConfirmedServiceACKRemovedReadPropertyConditional) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKRemovedReadPropertyConditional) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKRemovedReadPropertyConditionalParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKRemovedReadPropertyConditional(), nil
+}
+
+func (m BACnetConfirmedServiceACKRemovedReadPropertyConditional) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKRemovedReadPropertyConditional); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
new file mode 100644
index 0000000..0dca7fd
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTData.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKVTData struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKVTData interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKVTData) ServiceChoice() uint8 {
+	return 0x17
+}
+
+func (m BACnetConfirmedServiceACKVTData) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKVTData() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKVTData{}
+}
+
+func (m BACnetConfirmedServiceACKVTData) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKVTData) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKVTDataParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKVTData(), nil
+}
+
+func (m BACnetConfirmedServiceACKVTData) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKVTData); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
new file mode 100644
index 0000000..64b4683
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceACKVTOpen.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceACKVTOpen struct {
+	BACnetConfirmedServiceACK
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceACKVTOpen interface {
+	IBACnetConfirmedServiceACK
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceACKVTOpen) ServiceChoice() uint8 {
+	return 0x15
+}
+
+func (m BACnetConfirmedServiceACKVTOpen) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceACKVTOpen() BACnetConfirmedServiceACKInitializer {
+	return &BACnetConfirmedServiceACKVTOpen{}
+}
+
+func (m BACnetConfirmedServiceACKVTOpen) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceACK.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceACKVTOpen) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceACKVTOpenParse(io spi.ReadBuffer) (BACnetConfirmedServiceACKInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceACKVTOpen(), nil
+}
+
+func (m BACnetConfirmedServiceACKVTOpen) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceACKVTOpen); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
new file mode 100644
index 0000000..ea7e49e
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -0,0 +1,165 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequest struct {
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequest interface {
+	spi.Message
+	ServiceChoice() uint8
+	Serialize(io spi.WriteBuffer)
+}
+
+type BACnetConfirmedServiceRequestInitializer interface {
+	initialize() spi.Message
+}
+
+func BACnetConfirmedServiceRequestServiceChoice(m IBACnetConfirmedServiceRequest) uint8 {
+	return m.ServiceChoice()
+}
+
+func (m BACnetConfirmedServiceRequest) LengthInBits() uint16 {
+	var lengthInBits uint16 = 0
+
+	// Discriminator Field (serviceChoice)
+	lengthInBits += 8
+
+	// Length of sub-type elements will be added by sub-type...
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequest) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestParse(io spi.ReadBuffer, len uint16) (spi.Message, error) {
+
+	// Discriminator Field (serviceChoice) (Used as input to a switch field)
+	var serviceChoice uint8 = io.ReadUint8(8)
+
+	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+	var initializer BACnetConfirmedServiceRequestInitializer
+	var typeSwitchError error
+	switch {
+	case serviceChoice == 0x00:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestAcknowledgeAlarmParse(io)
+	case serviceChoice == 0x01:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(io, len)
+	case serviceChoice == 0x1F:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(io)
+	case serviceChoice == 0x02:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestConfirmedEventNotificationParse(io)
+	case serviceChoice == 0x04:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(io)
+	case serviceChoice == 0x1D:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestGetEventInformationParse(io)
+	case serviceChoice == 0x1B:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestLifeSafetyOperationParse(io)
+	case serviceChoice == 0x05:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVParse(io)
+	case serviceChoice == 0x1C:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(io)
+	case serviceChoice == 0x1E:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(io)
+	case serviceChoice == 0x06:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileParse(io)
+	case serviceChoice == 0x07:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestAtomicWriteFileParse(io)
+	case serviceChoice == 0x08:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestAddListElementParse(io)
+	case serviceChoice == 0x09:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestRemoveListElementParse(io)
+	case serviceChoice == 0x0A:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestCreateObjectParse(io)
+	case serviceChoice == 0x0B:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestDeleteObjectParse(io)
+	case serviceChoice == 0x0C:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyParse(io)
+	case serviceChoice == 0x0E:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestReadPropertyMultipleParse(io)
+	case serviceChoice == 0x1A:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestReadRangeParse(io)
+	case serviceChoice == 0x0F:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestWritePropertyParse(io, len)
+	case serviceChoice == 0x10:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestWritePropertyMultipleParse(io)
+	case serviceChoice == 0x11:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestDeviceCommunicationControlParse(io)
+	case serviceChoice == 0x12:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(io)
+	case serviceChoice == 0x13:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestConfirmedTextMessageParse(io)
+	case serviceChoice == 0x14:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestReinitializeDeviceParse(io)
+	case serviceChoice == 0x15:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestVTOpenParse(io)
+	case serviceChoice == 0x16:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestVTCloseParse(io)
+	case serviceChoice == 0x17:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestVTDataParse(io)
+	case serviceChoice == 0x18:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestRemovedAuthenticateParse(io)
+	case serviceChoice == 0x19:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestRemovedRequestKeyParse(io)
+	case serviceChoice == 0x0D:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(io)
+	case serviceChoice == 0x1A:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestReadRangeParse(io)
+	case serviceChoice == 0x1B:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestLifeSafetyOperationParse(io)
+	case serviceChoice == 0x1C:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(io)
+	case serviceChoice == 0x1D:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestGetEventInformationParse(io)
+	case serviceChoice == 0x1E:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(io)
+	case serviceChoice == 0x1F:
+		initializer, typeSwitchError = BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(io)
+	}
+	if typeSwitchError != nil {
+		return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+	}
+
+	// Create the instance
+	return initializer.initialize(), nil
+}
+
+func (m BACnetConfirmedServiceRequest) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if iBACnetConfirmedServiceRequest, ok := typ.(IBACnetConfirmedServiceRequest); ok {
+
+			// Discriminator Field (serviceChoice) (Used as input to a switch field)
+			serviceChoice := BACnetConfirmedServiceRequestServiceChoice(iBACnetConfirmedServiceRequest)
+			io.WriteUint8(8, (serviceChoice))
+
+			// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+			iBACnetConfirmedServiceRequest.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
new file mode 100644
index 0000000..2faaed5
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAcknowledgeAlarm.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestAcknowledgeAlarm struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestAcknowledgeAlarm interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestAcknowledgeAlarm) ServiceChoice() uint8 {
+	return 0x00
+}
+
+func (m BACnetConfirmedServiceRequestAcknowledgeAlarm) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestAcknowledgeAlarm() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestAcknowledgeAlarm{}
+}
+
+func (m BACnetConfirmedServiceRequestAcknowledgeAlarm) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestAcknowledgeAlarm) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestAcknowledgeAlarmParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestAcknowledgeAlarm(), nil
+}
+
+func (m BACnetConfirmedServiceRequestAcknowledgeAlarm) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestAcknowledgeAlarm); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
new file mode 100644
index 0000000..2243e39
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAddListElement.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestAddListElement struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestAddListElement interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestAddListElement) ServiceChoice() uint8 {
+	return 0x08
+}
+
+func (m BACnetConfirmedServiceRequestAddListElement) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestAddListElement() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestAddListElement{}
+}
+
+func (m BACnetConfirmedServiceRequestAddListElement) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestAddListElement) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestAddListElementParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestAddListElement(), nil
+}
+
+func (m BACnetConfirmedServiceRequestAddListElement) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestAddListElement); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
new file mode 100644
index 0000000..1159819
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFile.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestAtomicReadFile struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestAtomicReadFile interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestAtomicReadFile) ServiceChoice() uint8 {
+	return 0x06
+}
+
+func (m BACnetConfirmedServiceRequestAtomicReadFile) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestAtomicReadFile() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestAtomicReadFile{}
+}
+
+func (m BACnetConfirmedServiceRequestAtomicReadFile) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestAtomicReadFile) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestAtomicReadFileParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestAtomicReadFile(), nil
+}
+
+func (m BACnetConfirmedServiceRequestAtomicReadFile) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestAtomicReadFile); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
new file mode 100644
index 0000000..2812f4d
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicWriteFile.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestAtomicWriteFile struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestAtomicWriteFile interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestAtomicWriteFile) ServiceChoice() uint8 {
+	return 0x07
+}
+
+func (m BACnetConfirmedServiceRequestAtomicWriteFile) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestAtomicWriteFile() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestAtomicWriteFile{}
+}
+
+func (m BACnetConfirmedServiceRequestAtomicWriteFile) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestAtomicWriteFile) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestAtomicWriteFileParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestAtomicWriteFile(), nil
+}
+
+func (m BACnetConfirmedServiceRequestAtomicWriteFile) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestAtomicWriteFile); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
new file mode 100644
index 0000000..54d4d1f
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
@@ -0,0 +1,277 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"reflect"
+	"strconv"
+)
+
+// Constant values.
+const BACnetConfirmedServiceRequestConfirmedCOVNotification_SUBSCRIBERPROCESSIDENTIFIERHEADER uint8 = 0x09
+const BACnetConfirmedServiceRequestConfirmedCOVNotification_MONITOREDOBJECTIDENTIFIERHEADER uint8 = 0x1C
+const BACnetConfirmedServiceRequestConfirmedCOVNotification_ISSUECONFIRMEDNOTIFICATIONSHEADER uint8 = 0x2C
+const BACnetConfirmedServiceRequestConfirmedCOVNotification_LIFETIMEHEADER uint8 = 0x07
+const BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESOPENINGTAG uint8 = 0x4E
+const BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESCLOSINGTAG uint8 = 0x4F
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestConfirmedCOVNotification struct {
+	subscriberProcessIdentifier               uint8
+	monitoredObjectType                       uint16
+	monitoredObjectInstanceNumber             uint32
+	issueConfirmedNotificationsType           uint16
+	issueConfirmedNotificationsInstanceNumber uint32
+	lifetimeLength                            uint8
+	lifetimeSeconds                           []int8
+	notifications                             []BACnetTagWithContent
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestConfirmedCOVNotification interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotification) ServiceChoice() uint8 {
+	return 0x01
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotification) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotification(subscriberProcessIdentifier uint8, monitoredObjectType uint16, monitoredObjectInstanceNumber uint32, issueConfirmedNotificationsType uint16, issueConfirmedNotificationsInstanceNumber uint32, lifetimeLength uint8, lifetimeSeconds []int8, notifications []BACnetTagWithContent) BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestConfirmedCOVNotification{subscriberProcessIdentifier: subscriberProcessIdentifier, monitoredObjectType: monitoredObjectType, monitoredObjectInstanceNumber: monitoredObjectInstanceNumber, issueConfirmedNotificationsType: issueConfirmedNotificationsType, issueConfirmedNotificationsInstanceNumber: issueConfirmedNotificationsInstanceNumber, lifetimeLength: lifetimeLength, lifetimeSeconds: lifetimeSeconds, notifications: notifications}
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotification) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	// Const Field (subscriberProcessIdentifierHeader)
+	lengthInBits += 8
+
+	// Simple field (subscriberProcessIdentifier)
+	lengthInBits += 8
+
+	// Const Field (monitoredObjectIdentifierHeader)
+	lengthInBits += 8
+
+	// Simple field (monitoredObjectType)
+	lengthInBits += 10
+
+	// Simple field (monitoredObjectInstanceNumber)
+	lengthInBits += 22
+
+	// Const Field (issueConfirmedNotificationsHeader)
+	lengthInBits += 8
+
+	// Simple field (issueConfirmedNotificationsType)
+	lengthInBits += 10
+
+	// Simple field (issueConfirmedNotificationsInstanceNumber)
+	lengthInBits += 22
+
+	// Const Field (lifetimeHeader)
+	lengthInBits += 5
+
+	// Simple field (lifetimeLength)
+	lengthInBits += 3
+
+	// Array field
+	if len(m.lifetimeSeconds) > 0 {
+		lengthInBits += 8 * uint16(len(m.lifetimeSeconds))
+	}
+
+	// Const Field (listOfValuesOpeningTag)
+	lengthInBits += 8
+
+	// Array field
+	if len(m.notifications) > 0 {
+		for _, element := range m.notifications {
+			lengthInBits += element.LengthInBits()
+		}
+	}
+
+	// Const Field (listOfValuesClosingTag)
+	lengthInBits += 8
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotification) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestConfirmedCOVNotificationParse(io spi.ReadBuffer, len uint16) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Const Field (subscriberProcessIdentifierHeader)
+	var subscriberProcessIdentifierHeader uint8 = io.ReadUint8(8)
+	if subscriberProcessIdentifierHeader != BACnetConfirmedServiceRequestConfirmedCOVNotification_SUBSCRIBERPROCESSIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestConfirmedCOVNotification_SUBSCRIBERPROCESSIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(subscriberProcessIdentifierHeader)))
+	}
+
+	// Simple Field (subscriberProcessIdentifier)
+	var subscriberProcessIdentifier uint8 = io.ReadUint8(8)
+
+	// Const Field (monitoredObjectIdentifierHeader)
+	var monitoredObjectIdentifierHeader uint8 = io.ReadUint8(8)
+	if monitoredObjectIdentifierHeader != BACnetConfirmedServiceRequestConfirmedCOVNotification_MONITOREDOBJECTIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestConfirmedCOVNotification_MONITOREDOBJECTIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(monitoredObjectIdentifierHeader)))
+	}
+
+	// Simple Field (monitoredObjectType)
+	var monitoredObjectType uint16 = io.ReadUint16(10)
+
+	// Simple Field (monitoredObjectInstanceNumber)
+	var monitoredObjectInstanceNumber uint32 = io.ReadUint32(22)
+
+	// Const Field (issueConfirmedNotificationsHeader)
+	var issueConfirmedNotificationsHeader uint8 = io.ReadUint8(8)
+	if issueConfirmedNotificationsHeader != BACnetConfirmedServiceRequestConfirmedCOVNotification_ISSUECONFIRMEDNOTIFICATIONSHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestConfirmedCOVNotification_ISSUECONFIRMEDNOTIFICATIONSHEADER)) + " but got " + strconv.Itoa(int(issueConfirmedNotificationsHeader)))
+	}
+
+	// Simple Field (issueConfirmedNotificationsType)
+	var issueConfirmedNotificationsType uint16 = io.ReadUint16(10)
+
+	// Simple Field (issueConfirmedNotificationsInstanceNumber)
+	var issueConfirmedNotificationsInstanceNumber uint32 = io.ReadUint32(22)
+
+	// Const Field (lifetimeHeader)
+	var lifetimeHeader uint8 = io.ReadUint8(5)
+	if lifetimeHeader != BACnetConfirmedServiceRequestConfirmedCOVNotification_LIFETIMEHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestConfirmedCOVNotification_LIFETIMEHEADER)) + " but got " + strconv.Itoa(int(lifetimeHeader)))
+	}
+
+	// Simple Field (lifetimeLength)
+	var lifetimeLength uint8 = io.ReadUint8(3)
+
+	// Array field (lifetimeSeconds)
+	var lifetimeSeconds []int8
+	// Count array
+	{
+		lifetimeSeconds := make([]int8, lifetimeLength)
+		for curItem := uint16(0); curItem < uint16(lifetimeLength); curItem++ {
+
+			lifetimeSeconds = append(lifetimeSeconds, io.ReadInt8(8))
+		}
+	}
+
+	// Const Field (listOfValuesOpeningTag)
+	var listOfValuesOpeningTag uint8 = io.ReadUint8(8)
+	if listOfValuesOpeningTag != BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESOPENINGTAG {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESOPENINGTAG)) + " but got " + strconv.Itoa(int(listOfValuesOpeningTag)))
+	}
+
+	// Array field (notifications)
+	var notifications []BACnetTagWithContent
+	// Length array
+	_notificationsLength := uint16((len) - (18))
+	_notificationsEndPos := io.GetPos() + _notificationsLength
+	for io.GetPos() < _notificationsEndPos {
+		_message, _err := BACnetTagWithContentParse(io)
+		if _err != nil {
+			return nil, errors.New("Error parsing 'notifications' field " + _err.Error())
+		}
+		var _item BACnetTagWithContent
+		_item, _ok := _message.(BACnetTagWithContent)
+		if !_ok {
+			return nil, errors.New("Couldn't cast message of type " + reflect.TypeOf(_item).Name() + " to BACnetTagWithContent")
+		}
+		notifications = append(notifications, _item)
+	}
+
+	// Const Field (listOfValuesClosingTag)
+	var listOfValuesClosingTag uint8 = io.ReadUint8(8)
+	if listOfValuesClosingTag != BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESCLOSINGTAG {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestConfirmedCOVNotification_LISTOFVALUESCLOSINGTAG)) + " but got " + strconv.Itoa(int(listOfValuesClosingTag)))
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestConfirmedCOVNotification(subscriberProcessIdentifier, monitoredObjectType, monitoredObjectInstanceNumber, issueConfirmedNotificationsType, issueConfirmedNotificationsInstanceNumber, lifetimeLength, lifetimeSeconds, notifications), nil
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotification) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestConfirmedCOVNotification); ok {
+
+			// Const Field (subscriberProcessIdentifierHeader)
+			io.WriteUint8(8, 0x09)
+
+			// Simple Field (subscriberProcessIdentifier)
+			var subscriberProcessIdentifier uint8 = m.subscriberProcessIdentifier
+			io.WriteUint8(8, (subscriberProcessIdentifier))
+
+			// Const Field (monitoredObjectIdentifierHeader)
+			io.WriteUint8(8, 0x1C)
+
+			// Simple Field (monitoredObjectType)
+			var monitoredObjectType uint16 = m.monitoredObjectType
+			io.WriteUint16(10, (monitoredObjectType))
+
+			// Simple Field (monitoredObjectInstanceNumber)
+			var monitoredObjectInstanceNumber uint32 = m.monitoredObjectInstanceNumber
+			io.WriteUint32(22, (monitoredObjectInstanceNumber))
+
+			// Const Field (issueConfirmedNotificationsHeader)
+			io.WriteUint8(8, 0x2C)
+
+			// Simple Field (issueConfirmedNotificationsType)
+			var issueConfirmedNotificationsType uint16 = m.issueConfirmedNotificationsType
+			io.WriteUint16(10, (issueConfirmedNotificationsType))
+
+			// Simple Field (issueConfirmedNotificationsInstanceNumber)
+			var issueConfirmedNotificationsInstanceNumber uint32 = m.issueConfirmedNotificationsInstanceNumber
+			io.WriteUint32(22, (issueConfirmedNotificationsInstanceNumber))
+
+			// Const Field (lifetimeHeader)
+			io.WriteUint8(5, 0x07)
+
+			// Simple Field (lifetimeLength)
+			var lifetimeLength uint8 = m.lifetimeLength
+			io.WriteUint8(3, (lifetimeLength))
+
+			// Array Field (lifetimeSeconds)
+			if m.lifetimeSeconds != nil {
+				for _, _element := range m.lifetimeSeconds {
+					io.WriteInt8(8, _element)
+				}
+			}
+
+			// Const Field (listOfValuesOpeningTag)
+			io.WriteUint8(8, 0x4E)
+
+			// Array Field (notifications)
+			if m.notifications != nil {
+				for _, _element := range m.notifications {
+					_element.Serialize(io)
+				}
+			}
+
+			// Const Field (listOfValuesClosingTag)
+			io.WriteUint8(8, 0x4F)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
new file mode 100644
index 0000000..8e6622a
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) ServiceChoice() uint8 {
+	return 0x1F
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple{}
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestConfirmedCOVNotificationMultipleParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple(), nil
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestConfirmedCOVNotificationMultiple); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
new file mode 100644
index 0000000..ff12f85
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedEventNotification.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestConfirmedEventNotification struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestConfirmedEventNotification interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestConfirmedEventNotification) ServiceChoice() uint8 {
+	return 0x02
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedEventNotification) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestConfirmedEventNotification() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestConfirmedEventNotification{}
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedEventNotification) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedEventNotification) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestConfirmedEventNotificationParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestConfirmedEventNotification(), nil
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedEventNotification) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestConfirmedEventNotification); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
new file mode 100644
index 0000000..e9be82b
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedPrivateTransfer.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestConfirmedPrivateTransfer struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestConfirmedPrivateTransfer interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestConfirmedPrivateTransfer) ServiceChoice() uint8 {
+	return 0x12
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedPrivateTransfer) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestConfirmedPrivateTransfer() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestConfirmedPrivateTransfer{}
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedPrivateTransfer) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedPrivateTransfer) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestConfirmedPrivateTransferParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestConfirmedPrivateTransfer(), nil
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedPrivateTransfer) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestConfirmedPrivateTransfer); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
new file mode 100644
index 0000000..f9e8a6e
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessage.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestConfirmedTextMessage struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestConfirmedTextMessage interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestConfirmedTextMessage) ServiceChoice() uint8 {
+	return 0x13
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedTextMessage) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestConfirmedTextMessage() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestConfirmedTextMessage{}
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedTextMessage) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedTextMessage) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestConfirmedTextMessageParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestConfirmedTextMessage(), nil
+}
+
+func (m BACnetConfirmedServiceRequestConfirmedTextMessage) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestConfirmedTextMessage); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
new file mode 100644
index 0000000..6c8dffe
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestCreateObject.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestCreateObject struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestCreateObject interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestCreateObject) ServiceChoice() uint8 {
+	return 0x0A
+}
+
+func (m BACnetConfirmedServiceRequestCreateObject) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestCreateObject() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestCreateObject{}
+}
+
+func (m BACnetConfirmedServiceRequestCreateObject) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestCreateObject) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestCreateObjectParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestCreateObject(), nil
+}
+
+func (m BACnetConfirmedServiceRequestCreateObject) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestCreateObject); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
new file mode 100644
index 0000000..7a7f91b
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeleteObject.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestDeleteObject struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestDeleteObject interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestDeleteObject) ServiceChoice() uint8 {
+	return 0x0B
+}
+
+func (m BACnetConfirmedServiceRequestDeleteObject) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestDeleteObject() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestDeleteObject{}
+}
+
+func (m BACnetConfirmedServiceRequestDeleteObject) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestDeleteObject) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestDeleteObjectParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestDeleteObject(), nil
+}
+
+func (m BACnetConfirmedServiceRequestDeleteObject) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestDeleteObject); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
new file mode 100644
index 0000000..514be4b
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestDeviceCommunicationControl.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestDeviceCommunicationControl struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestDeviceCommunicationControl interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestDeviceCommunicationControl) ServiceChoice() uint8 {
+	return 0x11
+}
+
+func (m BACnetConfirmedServiceRequestDeviceCommunicationControl) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestDeviceCommunicationControl() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestDeviceCommunicationControl{}
+}
+
+func (m BACnetConfirmedServiceRequestDeviceCommunicationControl) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestDeviceCommunicationControl) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestDeviceCommunicationControlParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestDeviceCommunicationControl(), nil
+}
+
+func (m BACnetConfirmedServiceRequestDeviceCommunicationControl) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestDeviceCommunicationControl); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
new file mode 100644
index 0000000..4edd699
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEnrollmentSummary.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestGetEnrollmentSummary struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestGetEnrollmentSummary interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestGetEnrollmentSummary) ServiceChoice() uint8 {
+	return 0x04
+}
+
+func (m BACnetConfirmedServiceRequestGetEnrollmentSummary) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestGetEnrollmentSummary() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestGetEnrollmentSummary{}
+}
+
+func (m BACnetConfirmedServiceRequestGetEnrollmentSummary) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestGetEnrollmentSummary) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestGetEnrollmentSummaryParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestGetEnrollmentSummary(), nil
+}
+
+func (m BACnetConfirmedServiceRequestGetEnrollmentSummary) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestGetEnrollmentSummary); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
new file mode 100644
index 0000000..0c94b3c
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestGetEventInformation.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestGetEventInformation struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestGetEventInformation interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestGetEventInformation) ServiceChoice() uint8 {
+	return 0x1D
+}
+
+func (m BACnetConfirmedServiceRequestGetEventInformation) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestGetEventInformation() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestGetEventInformation{}
+}
+
+func (m BACnetConfirmedServiceRequestGetEventInformation) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestGetEventInformation) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestGetEventInformationParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestGetEventInformation(), nil
+}
+
+func (m BACnetConfirmedServiceRequestGetEventInformation) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestGetEventInformation); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
new file mode 100644
index 0000000..7d4694d
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestLifeSafetyOperation.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestLifeSafetyOperation struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestLifeSafetyOperation interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestLifeSafetyOperation) ServiceChoice() uint8 {
+	return 0x1B
+}
+
+func (m BACnetConfirmedServiceRequestLifeSafetyOperation) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestLifeSafetyOperation() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestLifeSafetyOperation{}
+}
+
+func (m BACnetConfirmedServiceRequestLifeSafetyOperation) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestLifeSafetyOperation) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestLifeSafetyOperationParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestLifeSafetyOperation(), nil
+}
+
+func (m BACnetConfirmedServiceRequestLifeSafetyOperation) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestLifeSafetyOperation); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
new file mode 100644
index 0000000..7051978
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
@@ -0,0 +1,158 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"strconv"
+)
+
+// Constant values.
+const BACnetConfirmedServiceRequestReadProperty_OBJECTIDENTIFIERHEADER uint8 = 0x0C
+const BACnetConfirmedServiceRequestReadProperty_PROPERTYIDENTIFIERHEADER uint8 = 0x03
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestReadProperty struct {
+	objectType               uint16
+	objectInstanceNumber     uint32
+	propertyIdentifierLength uint8
+	propertyIdentifier       []int8
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestReadProperty interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestReadProperty) ServiceChoice() uint8 {
+	return 0x0C
+}
+
+func (m BACnetConfirmedServiceRequestReadProperty) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestReadProperty(objectType uint16, objectInstanceNumber uint32, propertyIdentifierLength uint8, propertyIdentifier []int8) BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestReadProperty{objectType: objectType, objectInstanceNumber: objectInstanceNumber, propertyIdentifierLength: propertyIdentifierLength, propertyIdentifier: propertyIdentifier}
+}
+
+func (m BACnetConfirmedServiceRequestReadProperty) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	// Const Field (objectIdentifierHeader)
+	lengthInBits += 8
+
+	// Simple field (objectType)
+	lengthInBits += 10
+
+	// Simple field (objectInstanceNumber)
+	lengthInBits += 22
+
+	// Const Field (propertyIdentifierHeader)
+	lengthInBits += 5
+
+	// Simple field (propertyIdentifierLength)
+	lengthInBits += 3
+
+	// Array field
+	if len(m.propertyIdentifier) > 0 {
+		lengthInBits += 8 * uint16(len(m.propertyIdentifier))
+	}
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestReadProperty) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestReadPropertyParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Const Field (objectIdentifierHeader)
+	var objectIdentifierHeader uint8 = io.ReadUint8(8)
+	if objectIdentifierHeader != BACnetConfirmedServiceRequestReadProperty_OBJECTIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestReadProperty_OBJECTIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(objectIdentifierHeader)))
+	}
+
+	// Simple Field (objectType)
+	var objectType uint16 = io.ReadUint16(10)
+
+	// Simple Field (objectInstanceNumber)
+	var objectInstanceNumber uint32 = io.ReadUint32(22)
+
+	// Const Field (propertyIdentifierHeader)
+	var propertyIdentifierHeader uint8 = io.ReadUint8(5)
+	if propertyIdentifierHeader != BACnetConfirmedServiceRequestReadProperty_PROPERTYIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestReadProperty_PROPERTYIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(propertyIdentifierHeader)))
+	}
+
+	// Simple Field (propertyIdentifierLength)
+	var propertyIdentifierLength uint8 = io.ReadUint8(3)
+
+	// Array field (propertyIdentifier)
+	var propertyIdentifier []int8
+	// Count array
+	{
+		propertyIdentifier := make([]int8, propertyIdentifierLength)
+		for curItem := uint16(0); curItem < uint16(propertyIdentifierLength); curItem++ {
+
+			propertyIdentifier = append(propertyIdentifier, io.ReadInt8(8))
+		}
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestReadProperty(objectType, objectInstanceNumber, propertyIdentifierLength, propertyIdentifier), nil
+}
+
+func (m BACnetConfirmedServiceRequestReadProperty) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestReadProperty); ok {
+
+			// Const Field (objectIdentifierHeader)
+			io.WriteUint8(8, 0x0C)
+
+			// Simple Field (objectType)
+			var objectType uint16 = m.objectType
+			io.WriteUint16(10, (objectType))
+
+			// Simple Field (objectInstanceNumber)
+			var objectInstanceNumber uint32 = m.objectInstanceNumber
+			io.WriteUint32(22, (objectInstanceNumber))
+
+			// Const Field (propertyIdentifierHeader)
+			io.WriteUint8(5, 0x03)
+
+			// Simple Field (propertyIdentifierLength)
+			var propertyIdentifierLength uint8 = m.propertyIdentifierLength
+			io.WriteUint8(3, (propertyIdentifierLength))
+
+			// Array Field (propertyIdentifier)
+			if m.propertyIdentifier != nil {
+				for _, _element := range m.propertyIdentifier {
+					io.WriteInt8(8, _element)
+				}
+			}
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
new file mode 100644
index 0000000..3f1aaaf
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadPropertyMultiple.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestReadPropertyMultiple struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestReadPropertyMultiple interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestReadPropertyMultiple) ServiceChoice() uint8 {
+	return 0x0E
+}
+
+func (m BACnetConfirmedServiceRequestReadPropertyMultiple) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestReadPropertyMultiple() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestReadPropertyMultiple{}
+}
+
+func (m BACnetConfirmedServiceRequestReadPropertyMultiple) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestReadPropertyMultiple) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestReadPropertyMultipleParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestReadPropertyMultiple(), nil
+}
+
+func (m BACnetConfirmedServiceRequestReadPropertyMultiple) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestReadPropertyMultiple); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
new file mode 100644
index 0000000..a1deb56
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRange.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestReadRange struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestReadRange interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestReadRange) ServiceChoice() uint8 {
+	return 0x1A
+}
+
+func (m BACnetConfirmedServiceRequestReadRange) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestReadRange() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestReadRange{}
+}
+
+func (m BACnetConfirmedServiceRequestReadRange) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestReadRange) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestReadRangeParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestReadRange(), nil
+}
+
+func (m BACnetConfirmedServiceRequestReadRange) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestReadRange); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
new file mode 100644
index 0000000..e4ceb8d
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReinitializeDevice.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestReinitializeDevice struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestReinitializeDevice interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestReinitializeDevice) ServiceChoice() uint8 {
+	return 0x14
+}
+
+func (m BACnetConfirmedServiceRequestReinitializeDevice) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestReinitializeDevice() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestReinitializeDevice{}
+}
+
+func (m BACnetConfirmedServiceRequestReinitializeDevice) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestReinitializeDevice) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestReinitializeDeviceParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestReinitializeDevice(), nil
+}
+
+func (m BACnetConfirmedServiceRequestReinitializeDevice) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestReinitializeDevice); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
new file mode 100644
index 0000000..d4adccb
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemoveListElement.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestRemoveListElement struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestRemoveListElement interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestRemoveListElement) ServiceChoice() uint8 {
+	return 0x09
+}
+
+func (m BACnetConfirmedServiceRequestRemoveListElement) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestRemoveListElement() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestRemoveListElement{}
+}
+
+func (m BACnetConfirmedServiceRequestRemoveListElement) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestRemoveListElement) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestRemoveListElementParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestRemoveListElement(), nil
+}
+
+func (m BACnetConfirmedServiceRequestRemoveListElement) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestRemoveListElement); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
new file mode 100644
index 0000000..bd6657a
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedAuthenticate.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestRemovedAuthenticate struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestRemovedAuthenticate interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestRemovedAuthenticate) ServiceChoice() uint8 {
+	return 0x18
+}
+
+func (m BACnetConfirmedServiceRequestRemovedAuthenticate) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestRemovedAuthenticate() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestRemovedAuthenticate{}
+}
+
+func (m BACnetConfirmedServiceRequestRemovedAuthenticate) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestRemovedAuthenticate) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestRemovedAuthenticateParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestRemovedAuthenticate(), nil
+}
+
+func (m BACnetConfirmedServiceRequestRemovedAuthenticate) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestRemovedAuthenticate); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
new file mode 100644
index 0000000..4ab3c76
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedReadPropertyConditional.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestRemovedReadPropertyConditional struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestRemovedReadPropertyConditional interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestRemovedReadPropertyConditional) ServiceChoice() uint8 {
+	return 0x0D
+}
+
+func (m BACnetConfirmedServiceRequestRemovedReadPropertyConditional) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestRemovedReadPropertyConditional() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestRemovedReadPropertyConditional{}
+}
+
+func (m BACnetConfirmedServiceRequestRemovedReadPropertyConditional) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestRemovedReadPropertyConditional) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestRemovedReadPropertyConditionalParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestRemovedReadPropertyConditional(), nil
+}
+
+func (m BACnetConfirmedServiceRequestRemovedReadPropertyConditional) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestRemovedReadPropertyConditional); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
new file mode 100644
index 0000000..074433e
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestRemovedRequestKey.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestRemovedRequestKey struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestRemovedRequestKey interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestRemovedRequestKey) ServiceChoice() uint8 {
+	return 0x19
+}
+
+func (m BACnetConfirmedServiceRequestRemovedRequestKey) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestRemovedRequestKey() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestRemovedRequestKey{}
+}
+
+func (m BACnetConfirmedServiceRequestRemovedRequestKey) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestRemovedRequestKey) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestRemovedRequestKeyParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestRemovedRequestKey(), nil
+}
+
+func (m BACnetConfirmedServiceRequestRemovedRequestKey) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestRemovedRequestKey); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
new file mode 100644
index 0000000..a9858cf
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -0,0 +1,219 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"strconv"
+)
+
+// Constant values.
+const BACnetConfirmedServiceRequestSubscribeCOV_SUBSCRIBERPROCESSIDENTIFIERHEADER uint8 = 0x09
+const BACnetConfirmedServiceRequestSubscribeCOV_MONITOREDOBJECTIDENTIFIERHEADER uint8 = 0x1C
+const BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSHEADER uint8 = 0x29
+const BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSSKIPBITS uint8 = 0x00
+const BACnetConfirmedServiceRequestSubscribeCOV_LIFETIMEHEADER uint8 = 0x07
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestSubscribeCOV struct {
+	subscriberProcessIdentifier   uint8
+	monitoredObjectType           uint16
+	monitoredObjectInstanceNumber uint32
+	issueConfirmedNotifications   bool
+	lifetimeLength                uint8
+	lifetimeSeconds               []int8
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestSubscribeCOV interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestSubscribeCOV) ServiceChoice() uint8 {
+	return 0x05
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOV) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestSubscribeCOV(subscriberProcessIdentifier uint8, monitoredObjectType uint16, monitoredObjectInstanceNumber uint32, issueConfirmedNotifications bool, lifetimeLength uint8, lifetimeSeconds []int8) BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestSubscribeCOV{subscriberProcessIdentifier: subscriberProcessIdentifier, monitoredObjectType: monitoredObjectType, monitoredObjectInstanceNumber: monitoredObjectInstanceNumber, issueConfirmedNotifications: issueConfirmedNotifications, lifetimeLength: lifetimeLength, lifetimeSeconds: lifetimeSeconds}
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOV) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	// Const Field (subscriberProcessIdentifierHeader)
+	lengthInBits += 8
+
+	// Simple field (subscriberProcessIdentifier)
+	lengthInBits += 8
+
+	// Const Field (monitoredObjectIdentifierHeader)
+	lengthInBits += 8
+
+	// Simple field (monitoredObjectType)
+	lengthInBits += 10
+
+	// Simple field (monitoredObjectInstanceNumber)
+	lengthInBits += 22
+
+	// Const Field (issueConfirmedNotificationsHeader)
+	lengthInBits += 8
+
+	// Const Field (issueConfirmedNotificationsSkipBits)
+	lengthInBits += 7
+
+	// Simple field (issueConfirmedNotifications)
+	lengthInBits += 1
+
+	// Const Field (lifetimeHeader)
+	lengthInBits += 5
+
+	// Simple field (lifetimeLength)
+	lengthInBits += 3
+
+	// Array field
+	if len(m.lifetimeSeconds) > 0 {
+		lengthInBits += 8 * uint16(len(m.lifetimeSeconds))
+	}
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOV) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestSubscribeCOVParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Const Field (subscriberProcessIdentifierHeader)
+	var subscriberProcessIdentifierHeader uint8 = io.ReadUint8(8)
+	if subscriberProcessIdentifierHeader != BACnetConfirmedServiceRequestSubscribeCOV_SUBSCRIBERPROCESSIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestSubscribeCOV_SUBSCRIBERPROCESSIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(subscriberProcessIdentifierHeader)))
+	}
+
+	// Simple Field (subscriberProcessIdentifier)
+	var subscriberProcessIdentifier uint8 = io.ReadUint8(8)
+
+	// Const Field (monitoredObjectIdentifierHeader)
+	var monitoredObjectIdentifierHeader uint8 = io.ReadUint8(8)
+	if monitoredObjectIdentifierHeader != BACnetConfirmedServiceRequestSubscribeCOV_MONITOREDOBJECTIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestSubscribeCOV_MONITOREDOBJECTIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(monitoredObjectIdentifierHeader)))
+	}
+
+	// Simple Field (monitoredObjectType)
+	var monitoredObjectType uint16 = io.ReadUint16(10)
+
+	// Simple Field (monitoredObjectInstanceNumber)
+	var monitoredObjectInstanceNumber uint32 = io.ReadUint32(22)
+
+	// Const Field (issueConfirmedNotificationsHeader)
+	var issueConfirmedNotificationsHeader uint8 = io.ReadUint8(8)
+	if issueConfirmedNotificationsHeader != BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSHEADER)) + " but got " + strconv.Itoa(int(issueConfirmedNotificationsHeader)))
+	}
+
+	// Const Field (issueConfirmedNotificationsSkipBits)
+	var issueConfirmedNotificationsSkipBits uint8 = io.ReadUint8(7)
+	if issueConfirmedNotificationsSkipBits != BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSSKIPBITS {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestSubscribeCOV_ISSUECONFIRMEDNOTIFICATIONSSKIPBITS)) + " but got " + strconv.Itoa(int(issueConfirmedNotificationsSkipBits)))
+	}
+
+	// Simple Field (issueConfirmedNotifications)
+	var issueConfirmedNotifications bool = io.ReadBit()
+
+	// Const Field (lifetimeHeader)
+	var lifetimeHeader uint8 = io.ReadUint8(5)
+	if lifetimeHeader != BACnetConfirmedServiceRequestSubscribeCOV_LIFETIMEHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestSubscribeCOV_LIFETIMEHEADER)) + " but got " + strconv.Itoa(int(lifetimeHeader)))
+	}
+
+	// Simple Field (lifetimeLength)
+	var lifetimeLength uint8 = io.ReadUint8(3)
+
+	// Array field (lifetimeSeconds)
+	var lifetimeSeconds []int8
+	// Count array
+	{
+		lifetimeSeconds := make([]int8, lifetimeLength)
+		for curItem := uint16(0); curItem < uint16(lifetimeLength); curItem++ {
+
+			lifetimeSeconds = append(lifetimeSeconds, io.ReadInt8(8))
+		}
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestSubscribeCOV(subscriberProcessIdentifier, monitoredObjectType, monitoredObjectInstanceNumber, issueConfirmedNotifications, lifetimeLength, lifetimeSeconds), nil
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOV) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestSubscribeCOV); ok {
+
+			// Const Field (subscriberProcessIdentifierHeader)
+			io.WriteUint8(8, 0x09)
+
+			// Simple Field (subscriberProcessIdentifier)
+			var subscriberProcessIdentifier uint8 = m.subscriberProcessIdentifier
+			io.WriteUint8(8, (subscriberProcessIdentifier))
+
+			// Const Field (monitoredObjectIdentifierHeader)
+			io.WriteUint8(8, 0x1C)
+
+			// Simple Field (monitoredObjectType)
+			var monitoredObjectType uint16 = m.monitoredObjectType
+			io.WriteUint16(10, (monitoredObjectType))
+
+			// Simple Field (monitoredObjectInstanceNumber)
+			var monitoredObjectInstanceNumber uint32 = m.monitoredObjectInstanceNumber
+			io.WriteUint32(22, (monitoredObjectInstanceNumber))
+
+			// Const Field (issueConfirmedNotificationsHeader)
+			io.WriteUint8(8, 0x29)
+
+			// Const Field (issueConfirmedNotificationsSkipBits)
+			io.WriteUint8(7, 0x00)
+
+			// Simple Field (issueConfirmedNotifications)
+			var issueConfirmedNotifications bool = m.issueConfirmedNotifications
+			io.WriteBit((bool)(issueConfirmedNotifications))
+
+			// Const Field (lifetimeHeader)
+			io.WriteUint8(5, 0x07)
+
+			// Simple Field (lifetimeLength)
+			var lifetimeLength uint8 = m.lifetimeLength
+			io.WriteUint8(3, (lifetimeLength))
+
+			// Array Field (lifetimeSeconds)
+			if m.lifetimeSeconds != nil {
+				for _, _element := range m.lifetimeSeconds {
+					io.WriteInt8(8, _element)
+				}
+			}
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
new file mode 100644
index 0000000..f2a75e2
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVProperty.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestSubscribeCOVProperty struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestSubscribeCOVProperty interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestSubscribeCOVProperty) ServiceChoice() uint8 {
+	return 0x1C
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOVProperty) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestSubscribeCOVProperty() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestSubscribeCOVProperty{}
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOVProperty) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOVProperty) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestSubscribeCOVProperty(), nil
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOVProperty) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestSubscribeCOVProperty); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
new file mode 100644
index 0000000..1e22e85
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) ServiceChoice() uint8 {
+	return 0x1E
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple{}
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestSubscribeCOVPropertyMultipleParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple(), nil
+}
+
+func (m BACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestSubscribeCOVPropertyMultiple); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
new file mode 100644
index 0000000..8b6c3dc
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTClose.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestVTClose struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestVTClose interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestVTClose) ServiceChoice() uint8 {
+	return 0x16
+}
+
+func (m BACnetConfirmedServiceRequestVTClose) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestVTClose() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestVTClose{}
+}
+
+func (m BACnetConfirmedServiceRequestVTClose) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestVTClose) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestVTCloseParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestVTClose(), nil
+}
+
+func (m BACnetConfirmedServiceRequestVTClose) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestVTClose); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
new file mode 100644
index 0000000..c9591c7
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTData.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestVTData struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestVTData interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestVTData) ServiceChoice() uint8 {
+	return 0x17
+}
+
+func (m BACnetConfirmedServiceRequestVTData) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestVTData() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestVTData{}
+}
+
+func (m BACnetConfirmedServiceRequestVTData) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestVTData) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestVTDataParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestVTData(), nil
+}
+
+func (m BACnetConfirmedServiceRequestVTData) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestVTData); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
new file mode 100644
index 0000000..c50df56
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestVTOpen.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestVTOpen struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestVTOpen interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestVTOpen) ServiceChoice() uint8 {
+	return 0x15
+}
+
+func (m BACnetConfirmedServiceRequestVTOpen) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestVTOpen() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestVTOpen{}
+}
+
+func (m BACnetConfirmedServiceRequestVTOpen) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestVTOpen) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestVTOpenParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestVTOpen(), nil
+}
+
+func (m BACnetConfirmedServiceRequestVTOpen) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestVTOpen); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
new file mode 100644
index 0000000..5e7fa90
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -0,0 +1,235 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"reflect"
+	"strconv"
+)
+
+// Constant values.
+const BACnetConfirmedServiceRequestWriteProperty_OBJECTIDENTIFIERHEADER uint8 = 0x0C
+const BACnetConfirmedServiceRequestWriteProperty_PROPERTYIDENTIFIERHEADER uint8 = 0x03
+const BACnetConfirmedServiceRequestWriteProperty_OPENINGTAG uint8 = 0x3E
+const BACnetConfirmedServiceRequestWriteProperty_CLOSINGTAG uint8 = 0x3F
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestWriteProperty struct {
+	objectType               uint16
+	objectInstanceNumber     uint32
+	propertyIdentifierLength uint8
+	propertyIdentifier       []int8
+	value                    BACnetTag
+	priority                 *BACnetTag
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestWriteProperty interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestWriteProperty) ServiceChoice() uint8 {
+	return 0x0F
+}
+
+func (m BACnetConfirmedServiceRequestWriteProperty) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestWriteProperty(objectType uint16, objectInstanceNumber uint32, propertyIdentifierLength uint8, propertyIdentifier []int8, value BACnetTag, priority *BACnetTag) BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestWriteProperty{objectType: objectType, objectInstanceNumber: objectInstanceNumber, propertyIdentifierLength: propertyIdentifierLength, propertyIdentifier: propertyIdentifier, value: value, priority: priority}
+}
+
+func (m BACnetConfirmedServiceRequestWriteProperty) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	// Const Field (objectIdentifierHeader)
+	lengthInBits += 8
+
+	// Simple field (objectType)
+	lengthInBits += 10
+
+	// Simple field (objectInstanceNumber)
+	lengthInBits += 22
+
+	// Const Field (propertyIdentifierHeader)
+	lengthInBits += 5
+
+	// Simple field (propertyIdentifierLength)
+	lengthInBits += 3
+
+	// Array field
+	if len(m.propertyIdentifier) > 0 {
+		lengthInBits += 8 * uint16(len(m.propertyIdentifier))
+	}
+
+	// Const Field (openingTag)
+	lengthInBits += 8
+
+	// Simple field (value)
+	lengthInBits += m.value.LengthInBits()
+
+	// Const Field (closingTag)
+	lengthInBits += 8
+
+	// Optional Field (priority)
+	if m.priority != nil {
+		lengthInBits += m.priority.LengthInBits()
+	}
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestWriteProperty) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestWritePropertyParse(io spi.ReadBuffer, len uint16) (BACnetConfirmedServiceRequestInitializer, error) {
+	var startPos = io.GetPos()
+	var curPos uint16
+
+	// Const Field (objectIdentifierHeader)
+	var objectIdentifierHeader uint8 = io.ReadUint8(8)
+	if objectIdentifierHeader != BACnetConfirmedServiceRequestWriteProperty_OBJECTIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestWriteProperty_OBJECTIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(objectIdentifierHeader)))
+	}
+
+	// Simple Field (objectType)
+	var objectType uint16 = io.ReadUint16(10)
+
+	// Simple Field (objectInstanceNumber)
+	var objectInstanceNumber uint32 = io.ReadUint32(22)
+
+	// Const Field (propertyIdentifierHeader)
+	var propertyIdentifierHeader uint8 = io.ReadUint8(5)
+	if propertyIdentifierHeader != BACnetConfirmedServiceRequestWriteProperty_PROPERTYIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestWriteProperty_PROPERTYIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(propertyIdentifierHeader)))
+	}
+
+	// Simple Field (propertyIdentifierLength)
+	var propertyIdentifierLength uint8 = io.ReadUint8(3)
+
+	// Array field (propertyIdentifier)
+	var propertyIdentifier []int8
+	// Count array
+	{
+		propertyIdentifier := make([]int8, propertyIdentifierLength)
+		for curItem := uint16(0); curItem < uint16(propertyIdentifierLength); curItem++ {
+
+			propertyIdentifier = append(propertyIdentifier, io.ReadInt8(8))
+		}
+	}
+
+	// Const Field (openingTag)
+	var openingTag uint8 = io.ReadUint8(8)
+	if openingTag != BACnetConfirmedServiceRequestWriteProperty_OPENINGTAG {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestWriteProperty_OPENINGTAG)) + " but got " + strconv.Itoa(int(openingTag)))
+	}
+
+	// Simple Field (value)
+	_valueMessage, _err := BACnetTagParse(io)
+	if _err != nil {
+		return nil, errors.New("Error parsing simple field 'value'. " + _err.Error())
+	}
+	var value BACnetTag
+	value, _valueOk := _valueMessage.(BACnetTag)
+	if !_valueOk {
+		return nil, errors.New("Couldn't cast message of type " + reflect.TypeOf(_valueMessage).Name() + " to BACnetTag")
+	}
+
+	// Const Field (closingTag)
+	var closingTag uint8 = io.ReadUint8(8)
+	if closingTag != BACnetConfirmedServiceRequestWriteProperty_CLOSINGTAG {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetConfirmedServiceRequestWriteProperty_CLOSINGTAG)) + " but got " + strconv.Itoa(int(closingTag)))
+	}
+
+	// Optional Field (priority) (Can be skipped, if a given expression evaluates to false)
+	curPos = io.GetPos() - startPos
+	var priority *BACnetTag = nil
+	if (curPos) < ((len) - (1)) {
+		_message, _err := BACnetTagParse(io)
+		if _err != nil {
+			return nil, errors.New("Error parsing 'priority' field " + _err.Error())
+		}
+		var _item BACnetTag
+		_item, _ok := _message.(BACnetTag)
+		if !_ok {
+			return nil, errors.New("Couldn't cast message of type " + reflect.TypeOf(_item).Name() + " to BACnetTag")
+		}
+		priority = &_item
+	}
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestWriteProperty(objectType, objectInstanceNumber, propertyIdentifierLength, propertyIdentifier, value, priority), nil
+}
+
+func (m BACnetConfirmedServiceRequestWriteProperty) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestWriteProperty); ok {
+
+			// Const Field (objectIdentifierHeader)
+			io.WriteUint8(8, 0x0C)
+
+			// Simple Field (objectType)
+			var objectType uint16 = m.objectType
+			io.WriteUint16(10, (objectType))
+
+			// Simple Field (objectInstanceNumber)
+			var objectInstanceNumber uint32 = m.objectInstanceNumber
+			io.WriteUint32(22, (objectInstanceNumber))
+
+			// Const Field (propertyIdentifierHeader)
+			io.WriteUint8(5, 0x03)
+
+			// Simple Field (propertyIdentifierLength)
+			var propertyIdentifierLength uint8 = m.propertyIdentifierLength
+			io.WriteUint8(3, (propertyIdentifierLength))
+
+			// Array Field (propertyIdentifier)
+			if m.propertyIdentifier != nil {
+				for _, _element := range m.propertyIdentifier {
+					io.WriteInt8(8, _element)
+				}
+			}
+
+			// Const Field (openingTag)
+			io.WriteUint8(8, 0x3E)
+
+			// Simple Field (value)
+			var value BACnetTag = m.value
+			value.Serialize(io)
+
+			// Const Field (closingTag)
+			io.WriteUint8(8, 0x3F)
+
+			// Optional Field (priority) (Can be skipped, if the value is null)
+			var priority *BACnetTag = nil
+			if m.priority != nil {
+				priority = m.priority
+				priority.Serialize(io)
+			}
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
new file mode 100644
index 0000000..df03cdb
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWritePropertyMultiple.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetConfirmedServiceRequestWritePropertyMultiple struct {
+	BACnetConfirmedServiceRequest
+}
+
+// The corresponding interface
+type IBACnetConfirmedServiceRequestWritePropertyMultiple interface {
+	IBACnetConfirmedServiceRequest
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetConfirmedServiceRequestWritePropertyMultiple) ServiceChoice() uint8 {
+	return 0x10
+}
+
+func (m BACnetConfirmedServiceRequestWritePropertyMultiple) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetConfirmedServiceRequestWritePropertyMultiple() BACnetConfirmedServiceRequestInitializer {
+	return &BACnetConfirmedServiceRequestWritePropertyMultiple{}
+}
+
+func (m BACnetConfirmedServiceRequestWritePropertyMultiple) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetConfirmedServiceRequest.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetConfirmedServiceRequestWritePropertyMultiple) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetConfirmedServiceRequestWritePropertyMultipleParse(io spi.ReadBuffer) (BACnetConfirmedServiceRequestInitializer, error) {
+
+	// Create the instance
+	return NewBACnetConfirmedServiceRequestWritePropertyMultiple(), nil
+}
+
+func (m BACnetConfirmedServiceRequestWritePropertyMultiple) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetConfirmedServiceRequestWritePropertyMultiple); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
new file mode 100644
index 0000000..bb8031e
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetError.go
@@ -0,0 +1,119 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetError struct {
+}
+
+// The corresponding interface
+type IBACnetError interface {
+	spi.Message
+	ServiceChoice() uint8
+	Serialize(io spi.WriteBuffer)
+}
+
+type BACnetErrorInitializer interface {
+	initialize() spi.Message
+}
+
+func BACnetErrorServiceChoice(m IBACnetError) uint8 {
+	return m.ServiceChoice()
+}
+
+func (m BACnetError) LengthInBits() uint16 {
+	var lengthInBits uint16 = 0
+
+	// Discriminator Field (serviceChoice)
+	lengthInBits += 8
+
+	// Length of sub-type elements will be added by sub-type...
+
+	return lengthInBits
+}
+
+func (m BACnetError) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorParse(io spi.ReadBuffer) (spi.Message, error) {
+
+	// Discriminator Field (serviceChoice) (Used as input to a switch field)
+	var serviceChoice uint8 = io.ReadUint8(8)
+
+	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+	var initializer BACnetErrorInitializer
+	var typeSwitchError error
+	switch {
+	case serviceChoice == 0x03:
+		initializer, typeSwitchError = BACnetErrorGetAlarmSummaryParse(io)
+	case serviceChoice == 0x04:
+		initializer, typeSwitchError = BACnetErrorGetEnrollmentSummaryParse(io)
+	case serviceChoice == 0x1D:
+		initializer, typeSwitchError = BACnetErrorGetEventInformationParse(io)
+	case serviceChoice == 0x06:
+		initializer, typeSwitchError = BACnetErrorAtomicReadFileParse(io)
+	case serviceChoice == 0x07:
+		initializer, typeSwitchError = BACnetErrorAtomicWriteFileParse(io)
+	case serviceChoice == 0x0A:
+		initializer, typeSwitchError = BACnetErrorCreateObjectParse(io)
+	case serviceChoice == 0x0C:
+		initializer, typeSwitchError = BACnetErrorReadPropertyParse(io)
+	case serviceChoice == 0x0E:
+		initializer, typeSwitchError = BACnetErrorReadPropertyMultipleParse(io)
+	case serviceChoice == 0x1A:
+		initializer, typeSwitchError = BACnetErrorReadRangeParse(io)
+	case serviceChoice == 0x12:
+		initializer, typeSwitchError = BACnetErrorConfirmedPrivateTransferParse(io)
+	case serviceChoice == 0x15:
+		initializer, typeSwitchError = BACnetErrorVTOpenParse(io)
+	case serviceChoice == 0x17:
+		initializer, typeSwitchError = BACnetErrorVTDataParse(io)
+	case serviceChoice == 0x18:
+		initializer, typeSwitchError = BACnetErrorRemovedAuthenticateParse(io)
+	case serviceChoice == 0x0D:
+		initializer, typeSwitchError = BACnetErrorRemovedReadPropertyConditionalParse(io)
+	}
+	if typeSwitchError != nil {
+		return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+	}
+
+	// Create the instance
+	return initializer.initialize(), nil
+}
+
+func (m BACnetError) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if iBACnetError, ok := typ.(IBACnetError); ok {
+
+			// Discriminator Field (serviceChoice) (Used as input to a switch field)
+			serviceChoice := BACnetErrorServiceChoice(iBACnetError)
+			io.WriteUint8(8, (serviceChoice))
+
+			// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+			iBACnetError.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
new file mode 100644
index 0000000..5fb2dba
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicReadFile.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorAtomicReadFile struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorAtomicReadFile interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorAtomicReadFile) ServiceChoice() uint8 {
+	return 0x06
+}
+
+func (m BACnetErrorAtomicReadFile) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorAtomicReadFile() BACnetErrorInitializer {
+	return &BACnetErrorAtomicReadFile{}
+}
+
+func (m BACnetErrorAtomicReadFile) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorAtomicReadFile) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorAtomicReadFileParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorAtomicReadFile(), nil
+}
+
+func (m BACnetErrorAtomicReadFile) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorAtomicReadFile); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
new file mode 100644
index 0000000..3283416
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorAtomicWriteFile.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorAtomicWriteFile struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorAtomicWriteFile interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorAtomicWriteFile) ServiceChoice() uint8 {
+	return 0x07
+}
+
+func (m BACnetErrorAtomicWriteFile) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorAtomicWriteFile() BACnetErrorInitializer {
+	return &BACnetErrorAtomicWriteFile{}
+}
+
+func (m BACnetErrorAtomicWriteFile) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorAtomicWriteFile) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorAtomicWriteFileParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorAtomicWriteFile(), nil
+}
+
+func (m BACnetErrorAtomicWriteFile) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorAtomicWriteFile); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
new file mode 100644
index 0000000..9b7420e
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorConfirmedPrivateTransfer.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorConfirmedPrivateTransfer struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorConfirmedPrivateTransfer interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorConfirmedPrivateTransfer) ServiceChoice() uint8 {
+	return 0x12
+}
+
+func (m BACnetErrorConfirmedPrivateTransfer) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorConfirmedPrivateTransfer() BACnetErrorInitializer {
+	return &BACnetErrorConfirmedPrivateTransfer{}
+}
+
+func (m BACnetErrorConfirmedPrivateTransfer) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorConfirmedPrivateTransfer) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorConfirmedPrivateTransferParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorConfirmedPrivateTransfer(), nil
+}
+
+func (m BACnetErrorConfirmedPrivateTransfer) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorConfirmedPrivateTransfer); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
new file mode 100644
index 0000000..0a84055
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorCreateObject.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorCreateObject struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorCreateObject interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorCreateObject) ServiceChoice() uint8 {
+	return 0x0A
+}
+
+func (m BACnetErrorCreateObject) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorCreateObject() BACnetErrorInitializer {
+	return &BACnetErrorCreateObject{}
+}
+
+func (m BACnetErrorCreateObject) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorCreateObject) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorCreateObjectParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorCreateObject(), nil
+}
+
+func (m BACnetErrorCreateObject) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorCreateObject); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
new file mode 100644
index 0000000..efe70e2
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetAlarmSummary.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorGetAlarmSummary struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorGetAlarmSummary interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorGetAlarmSummary) ServiceChoice() uint8 {
+	return 0x03
+}
+
+func (m BACnetErrorGetAlarmSummary) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorGetAlarmSummary() BACnetErrorInitializer {
+	return &BACnetErrorGetAlarmSummary{}
+}
+
+func (m BACnetErrorGetAlarmSummary) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorGetAlarmSummary) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorGetAlarmSummaryParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorGetAlarmSummary(), nil
+}
+
+func (m BACnetErrorGetAlarmSummary) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorGetAlarmSummary); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
new file mode 100644
index 0000000..5073a34
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEnrollmentSummary.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorGetEnrollmentSummary struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorGetEnrollmentSummary interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorGetEnrollmentSummary) ServiceChoice() uint8 {
+	return 0x04
+}
+
+func (m BACnetErrorGetEnrollmentSummary) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorGetEnrollmentSummary() BACnetErrorInitializer {
+	return &BACnetErrorGetEnrollmentSummary{}
+}
+
+func (m BACnetErrorGetEnrollmentSummary) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorGetEnrollmentSummary) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorGetEnrollmentSummaryParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorGetEnrollmentSummary(), nil
+}
+
+func (m BACnetErrorGetEnrollmentSummary) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorGetEnrollmentSummary); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
new file mode 100644
index 0000000..a70c863
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorGetEventInformation.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorGetEventInformation struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorGetEventInformation interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorGetEventInformation) ServiceChoice() uint8 {
+	return 0x1D
+}
+
+func (m BACnetErrorGetEventInformation) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorGetEventInformation() BACnetErrorInitializer {
+	return &BACnetErrorGetEventInformation{}
+}
+
+func (m BACnetErrorGetEventInformation) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorGetEventInformation) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorGetEventInformationParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorGetEventInformation(), nil
+}
+
+func (m BACnetErrorGetEventInformation) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorGetEventInformation); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
new file mode 100644
index 0000000..96d9fc0
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
@@ -0,0 +1,171 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"strconv"
+)
+
+// Constant values.
+const BACnetErrorReadProperty_ERRORCLASSHEADER uint8 = 0x12
+const BACnetErrorReadProperty_ERRORCODEHEADER uint8 = 0x12
+
+// The data-structure of this message
+type BACnetErrorReadProperty struct {
+	errorClassLength uint8
+	errorClass       []int8
+	errorCodeLength  uint8
+	errorCode        []int8
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorReadProperty interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorReadProperty) ServiceChoice() uint8 {
+	return 0x0C
+}
+
+func (m BACnetErrorReadProperty) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorReadProperty(errorClassLength uint8, errorClass []int8, errorCodeLength uint8, errorCode []int8) BACnetErrorInitializer {
+	return &BACnetErrorReadProperty{errorClassLength: errorClassLength, errorClass: errorClass, errorCodeLength: errorCodeLength, errorCode: errorCode}
+}
+
+func (m BACnetErrorReadProperty) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	// Const Field (errorClassHeader)
+	lengthInBits += 5
+
+	// Simple field (errorClassLength)
+	lengthInBits += 3
+
+	// Array field
+	if len(m.errorClass) > 0 {
+		lengthInBits += 8 * uint16(len(m.errorClass))
+	}
+
+	// Const Field (errorCodeHeader)
+	lengthInBits += 5
+
+	// Simple field (errorCodeLength)
+	lengthInBits += 3
+
+	// Array field
+	if len(m.errorCode) > 0 {
+		lengthInBits += 8 * uint16(len(m.errorCode))
+	}
+
+	return lengthInBits
+}
+
+func (m BACnetErrorReadProperty) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorReadPropertyParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Const Field (errorClassHeader)
+	var errorClassHeader uint8 = io.ReadUint8(5)
+	if errorClassHeader != BACnetErrorReadProperty_ERRORCLASSHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetErrorReadProperty_ERRORCLASSHEADER)) + " but got " + strconv.Itoa(int(errorClassHeader)))
+	}
+
+	// Simple Field (errorClassLength)
+	var errorClassLength uint8 = io.ReadUint8(3)
+
+	// Array field (errorClass)
+	var errorClass []int8
+	// Count array
+	{
+		errorClass := make([]int8, errorClassLength)
+		for curItem := uint16(0); curItem < uint16(errorClassLength); curItem++ {
+
+			errorClass = append(errorClass, io.ReadInt8(8))
+		}
+	}
+
+	// Const Field (errorCodeHeader)
+	var errorCodeHeader uint8 = io.ReadUint8(5)
+	if errorCodeHeader != BACnetErrorReadProperty_ERRORCODEHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetErrorReadProperty_ERRORCODEHEADER)) + " but got " + strconv.Itoa(int(errorCodeHeader)))
+	}
+
+	// Simple Field (errorCodeLength)
+	var errorCodeLength uint8 = io.ReadUint8(3)
+
+	// Array field (errorCode)
+	var errorCode []int8
+	// Count array
+	{
+		errorCode := make([]int8, errorCodeLength)
+		for curItem := uint16(0); curItem < uint16(errorCodeLength); curItem++ {
+
+			errorCode = append(errorCode, io.ReadInt8(8))
+		}
+	}
+
+	// Create the instance
+	return NewBACnetErrorReadProperty(errorClassLength, errorClass, errorCodeLength, errorCode), nil
+}
+
+func (m BACnetErrorReadProperty) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorReadProperty); ok {
+
+			// Const Field (errorClassHeader)
+			io.WriteUint8(5, 0x12)
+
+			// Simple Field (errorClassLength)
+			var errorClassLength uint8 = m.errorClassLength
+			io.WriteUint8(3, (errorClassLength))
+
+			// Array Field (errorClass)
+			if m.errorClass != nil {
+				for _, _element := range m.errorClass {
+					io.WriteInt8(8, _element)
+				}
+			}
+
+			// Const Field (errorCodeHeader)
+			io.WriteUint8(5, 0x12)
+
+			// Simple Field (errorCodeLength)
+			var errorCodeLength uint8 = m.errorCodeLength
+			io.WriteUint8(3, (errorCodeLength))
+
+			// Array Field (errorCode)
+			if m.errorCode != nil {
+				for _, _element := range m.errorCode {
+					io.WriteInt8(8, _element)
+				}
+			}
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
new file mode 100644
index 0000000..96f1ef3
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadPropertyMultiple.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorReadPropertyMultiple struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorReadPropertyMultiple interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorReadPropertyMultiple) ServiceChoice() uint8 {
+	return 0x0E
+}
+
+func (m BACnetErrorReadPropertyMultiple) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorReadPropertyMultiple() BACnetErrorInitializer {
+	return &BACnetErrorReadPropertyMultiple{}
+}
+
+func (m BACnetErrorReadPropertyMultiple) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorReadPropertyMultiple) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorReadPropertyMultipleParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorReadPropertyMultiple(), nil
+}
+
+func (m BACnetErrorReadPropertyMultiple) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorReadPropertyMultiple); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
new file mode 100644
index 0000000..fc7efde
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadRange.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorReadRange struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorReadRange interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorReadRange) ServiceChoice() uint8 {
+	return 0x1A
+}
+
+func (m BACnetErrorReadRange) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorReadRange() BACnetErrorInitializer {
+	return &BACnetErrorReadRange{}
+}
+
+func (m BACnetErrorReadRange) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorReadRange) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorReadRangeParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorReadRange(), nil
+}
+
+func (m BACnetErrorReadRange) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorReadRange); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
new file mode 100644
index 0000000..ee98e85
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedAuthenticate.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorRemovedAuthenticate struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorRemovedAuthenticate interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorRemovedAuthenticate) ServiceChoice() uint8 {
+	return 0x18
+}
+
+func (m BACnetErrorRemovedAuthenticate) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorRemovedAuthenticate() BACnetErrorInitializer {
+	return &BACnetErrorRemovedAuthenticate{}
+}
+
+func (m BACnetErrorRemovedAuthenticate) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorRemovedAuthenticate) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorRemovedAuthenticateParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorRemovedAuthenticate(), nil
+}
+
+func (m BACnetErrorRemovedAuthenticate) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorRemovedAuthenticate); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
new file mode 100644
index 0000000..fbc57a5
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorRemovedReadPropertyConditional.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorRemovedReadPropertyConditional struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorRemovedReadPropertyConditional interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorRemovedReadPropertyConditional) ServiceChoice() uint8 {
+	return 0x0D
+}
+
+func (m BACnetErrorRemovedReadPropertyConditional) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorRemovedReadPropertyConditional() BACnetErrorInitializer {
+	return &BACnetErrorRemovedReadPropertyConditional{}
+}
+
+func (m BACnetErrorRemovedReadPropertyConditional) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorRemovedReadPropertyConditional) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorRemovedReadPropertyConditionalParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorRemovedReadPropertyConditional(), nil
+}
+
+func (m BACnetErrorRemovedReadPropertyConditional) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorRemovedReadPropertyConditional); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
new file mode 100644
index 0000000..eba4084
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTData.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorVTData struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorVTData interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorVTData) ServiceChoice() uint8 {
+	return 0x17
+}
+
+func (m BACnetErrorVTData) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorVTData() BACnetErrorInitializer {
+	return &BACnetErrorVTData{}
+}
+
+func (m BACnetErrorVTData) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorVTData) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorVTDataParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorVTData(), nil
+}
+
+func (m BACnetErrorVTData) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorVTData); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
new file mode 100644
index 0000000..4e3e14d
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorVTOpen.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetErrorVTOpen struct {
+	BACnetError
+}
+
+// The corresponding interface
+type IBACnetErrorVTOpen interface {
+	IBACnetError
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetErrorVTOpen) ServiceChoice() uint8 {
+	return 0x15
+}
+
+func (m BACnetErrorVTOpen) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetErrorVTOpen() BACnetErrorInitializer {
+	return &BACnetErrorVTOpen{}
+}
+
+func (m BACnetErrorVTOpen) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetError.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetErrorVTOpen) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetErrorVTOpenParse(io spi.ReadBuffer) (BACnetErrorInitializer, error) {
+
+	// Create the instance
+	return NewBACnetErrorVTOpen(), nil
+}
+
+func (m BACnetErrorVTOpen) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetErrorVTOpen); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
new file mode 100644
index 0000000..659fcc0
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNetworkType.go
@@ -0,0 +1,46 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import "plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+
+type BACnetNetworkType uint8
+
+const (
+	BACnetNetworkType_ETHERNET           BACnetNetworkType = 0x0
+	BACnetNetworkType_ARCNET             BACnetNetworkType = 0x1
+	BACnetNetworkType_MSTP               BACnetNetworkType = 0x2
+	BACnetNetworkType_PTP                BACnetNetworkType = 0x3
+	BACnetNetworkType_LONTALK            BACnetNetworkType = 0x4
+	BACnetNetworkType_IPV4               BACnetNetworkType = 0x5
+	BACnetNetworkType_ZIGBEE             BACnetNetworkType = 0x6
+	BACnetNetworkType_VIRTUAL            BACnetNetworkType = 0x7
+	BACnetNetworkType_REMOVED_NON_BACNET BACnetNetworkType = 0x8
+	BACnetNetworkType_IPV6               BACnetNetworkType = 0x9
+	BACnetNetworkType_SERIAL             BACnetNetworkType = 0xA
+)
+
+func BACnetNetworkTypeParse(io spi.ReadBuffer) (BACnetNetworkType, error) {
+	// TODO: Implement ...
+	return 0, nil
+}
+
+func (e BACnetNetworkType) Serialize(io spi.WriteBuffer) {
+	// TODO: Implement ...
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
new file mode 100644
index 0000000..dd528cb
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNodeType.go
@@ -0,0 +1,57 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import "plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+
+type BACnetNodeType uint8
+
+const (
+	BACnetNodeType_UNKNOWN        BACnetNodeType = 0x00
+	BACnetNodeType_SYSTEM         BACnetNodeType = 0x01
+	BACnetNodeType_NETWORK        BACnetNodeType = 0x02
+	BACnetNodeType_DEVICE         BACnetNodeType = 0x03
+	BACnetNodeType_ORGANIZATIONAL BACnetNodeType = 0x04
+	BACnetNodeType_AREA           BACnetNodeType = 0x05
+	BACnetNodeType_EQUIPMENT      BACnetNodeType = 0x06
+	BACnetNodeType_POINT          BACnetNodeType = 0x07
+	BACnetNodeType_COLLECTION     BACnetNodeType = 0x08
+	BACnetNodeType_PROPERTY       BACnetNodeType = 0x09
+	BACnetNodeType_FUNCTIONAL     BACnetNodeType = 0x0A
+	BACnetNodeType_OTHER          BACnetNodeType = 0x0B
+	BACnetNodeType_SUBSYSTEM      BACnetNodeType = 0x0C
+	BACnetNodeType_BUILDING       BACnetNodeType = 0x0D
+	BACnetNodeType_FLOOR          BACnetNodeType = 0x0E
+	BACnetNodeType_SECTION        BACnetNodeType = 0x0F
+	BACnetNodeType_MODULE         BACnetNodeType = 0x10
+	BACnetNodeType_TREE           BACnetNodeType = 0x11
+	BACnetNodeType_MEMBER         BACnetNodeType = 0x12
+	BACnetNodeType_PROTOCOL       BACnetNodeType = 0x13
+	BACnetNodeType_ROOM           BACnetNodeType = 0x14
+	BACnetNodeType_ZONE           BACnetNodeType = 0x15
+)
+
+func BACnetNodeTypeParse(io spi.ReadBuffer) (BACnetNodeType, error) {
+	// TODO: Implement ...
+	return 0, nil
+}
+
+func (e BACnetNodeType) Serialize(io spi.WriteBuffer) {
+	// TODO: Implement ...
+}
diff --git a/sandbox/plc4go/cmd/main/main.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
similarity index 52%
copy from sandbox/plc4go/cmd/main/main.go
copy to sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
index 40d865a..5e868e5 100644
--- a/sandbox/plc4go/cmd/main/main.go
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetNotifyType.go
@@ -1,3 +1,6 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
 // distributed with this work for additional information
 // regarding copyright ownership.  The ASF licenses this file
 // to you under the Apache License, Version 2.0 (the
@@ -13,13 +16,23 @@
 // specific language governing permissions and limitations
 // under the License.
 //
-package main
+package model
+
+import "plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+
+type BACnetNotifyType uint8
 
-import (
-	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/cmd/main/drivers"
+const (
+	BACnetNotifyType_ALARM            BACnetNotifyType = 0x0
+	BACnetNotifyType_EVENT            BACnetNotifyType = 0x1
+	BACnetNotifyType_ACK_NOTIFICATION BACnetNotifyType = 0x2
 )
 
-func main() {
-	drivers.Modbus()
-	//drivers.S7()
+func BACnetNotifyTypeParse(io spi.ReadBuffer) (BACnetNotifyType, error) {
+	// TODO: Implement ...
+	return 0, nil
+}
+
+func (e BACnetNotifyType) Serialize(io spi.WriteBuffer) {
+	// TODO: Implement ...
 }
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
new file mode 100644
index 0000000..794e628
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetObjectType.go
@@ -0,0 +1,94 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import "plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+
+type BACnetObjectType uint16
+
+const (
+	BACnetObjectType_ANALOG_INPUT           BACnetObjectType = 0x000
+	BACnetObjectType_ANALOG_OUTPUT          BACnetObjectType = 0x001
+	BACnetObjectType_ANALOG_VALUE           BACnetObjectType = 0x002
+	BACnetObjectType_BINARY_INPUT           BACnetObjectType = 0x003
+	BACnetObjectType_BINARY_OUTPUT          BACnetObjectType = 0x004
+	BACnetObjectType_BINARY_VALUE           BACnetObjectType = 0x005
+	BACnetObjectType_MULTISTATE_INPUT       BACnetObjectType = 0x00D
+	BACnetObjectType_MULTISTATE_OUTPUT      BACnetObjectType = 0x00E
+	BACnetObjectType_MULTISTATE_VALUE       BACnetObjectType = 0x013
+	BACnetObjectType_SCHEDULE               BACnetObjectType = 0x011
+	BACnetObjectType_DEVICE                 BACnetObjectType = 0x008
+	BACnetObjectType_CALENDAR               BACnetObjectType = 0x006
+	BACnetObjectType_COMMAND                BACnetObjectType = 0x007
+	BACnetObjectType_EVENT_ENROLLMENT       BACnetObjectType = 0x009
+	BACnetObjectType_FILE                   BACnetObjectType = 0x00A
+	BACnetObjectType_GROUP                  BACnetObjectType = 0x00B
+	BACnetObjectType_LOOP                   BACnetObjectType = 0x00C
+	BACnetObjectType_NOTIFICATION_CLASS     BACnetObjectType = 0x00F
+	BACnetObjectType_PROGRAM                BACnetObjectType = 0x010
+	BACnetObjectType_AVERAGING              BACnetObjectType = 0x012
+	BACnetObjectType_TREND_LOG              BACnetObjectType = 0x014
+	BACnetObjectType_LIFE_SAFETY_POINT      BACnetObjectType = 0x015
+	BACnetObjectType_LIFE_SAFETY_ZONE       BACnetObjectType = 0x016
+	BACnetObjectType_ACCUMULATOR            BACnetObjectType = 0x017
+	BACnetObjectType_PULSE_CONVERTER        BACnetObjectType = 0x018
+	BACnetObjectType_EVENT_LOG              BACnetObjectType = 0x019
+	BACnetObjectType_GLOBAL_GROUP           BACnetObjectType = 0x01A
+	BACnetObjectType_TREND_LOG_MULTIPLE     BACnetObjectType = 0x01B
+	BACnetObjectType_LOAD_CONTROL           BACnetObjectType = 0x01C
+	BACnetObjectType_STRUCTURED_VIEW        BACnetObjectType = 0x01D
+	BACnetObjectType_ACCESS_DOOR            BACnetObjectType = 0x01E
+	BACnetObjectType_TIMER                  BACnetObjectType = 0x01F
+	BACnetObjectType_ACCESS_CREDENTIAL      BACnetObjectType = 0x020
+	BACnetObjectType_ACCESS_POINT           BACnetObjectType = 0x021
+	BACnetObjectType_ACCESS_RIGHTS          BACnetObjectType = 0x022
+	BACnetObjectType_ACCESS_USER            BACnetObjectType = 0x023
+	BACnetObjectType_ACCESS_ZONE            BACnetObjectType = 0x024
+	BACnetObjectType_CREDENTIAL_DATA_INPUT  BACnetObjectType = 0x025
+	BACnetObjectType_NETWORK_SECURITY       BACnetObjectType = 0x026
+	BACnetObjectType_BITSTRING_VALUE        BACnetObjectType = 0x027
+	BACnetObjectType_CHARACTERSTRING_VALUE  BACnetObjectType = 0x028
+	BACnetObjectType_DATEPATTERN_VALUE      BACnetObjectType = 0x029
+	BACnetObjectType_DATE_VALUE             BACnetObjectType = 0x02A
+	BACnetObjectType_DATETIMEPATTERN_VALUE  BACnetObjectType = 0x02B
+	BACnetObjectType_DATETIME_VALUE         BACnetObjectType = 0x02C
+	BACnetObjectType_INTEGER_VALUE          BACnetObjectType = 0x02D
+	BACnetObjectType_LARGE_ANALOG_VALUE     BACnetObjectType = 0x02E
+	BACnetObjectType_OCTETSTRING_VALUE      BACnetObjectType = 0x02F
+	BACnetObjectType_POSITIVE_INTEGER_VALUE BACnetObjectType = 0x030
+	BACnetObjectType_TIMEPATTERN_VALUE      BACnetObjectType = 0x031
+	BACnetObjectType_TIME_VALUE             BACnetObjectType = 0x032
+	BACnetObjectType_NOTIFICATION_FORWARDER BACnetObjectType = 0x033
+	BACnetObjectType_ALERT_ENROLLMENT       BACnetObjectType = 0x034
+	BACnetObjectType_CHANNEL                BACnetObjectType = 0x035
+	BACnetObjectType_LIGHTING_OUTPUT        BACnetObjectType = 0x036
+	BACnetObjectType_BINARY_LIGHTING_OUTPUT BACnetObjectType = 0x037
+	BACnetObjectType_NETWORK_PORT           BACnetObjectType = 0x038
+	BACnetObjectType_ELEVATOR_GROUP         BACnetObjectType = 0x039
+	BACnetObjectType_ESCALATOR              BACnetObjectType = 0x03A
+)
+
+func BACnetObjectTypeParse(io spi.ReadBuffer) (BACnetObjectType, error) {
+	// TODO: Implement ...
+	return 0, nil
+}
+
+func (e BACnetObjectType) Serialize(io spi.WriteBuffer) {
+	// TODO: Implement ...
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
new file mode 100644
index 0000000..d025cb2
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAck.go
@@ -0,0 +1,119 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAck struct {
+}
+
+// The corresponding interface
+type IBACnetServiceAck interface {
+	spi.Message
+	ServiceChoice() uint8
+	Serialize(io spi.WriteBuffer)
+}
+
+type BACnetServiceAckInitializer interface {
+	initialize() spi.Message
+}
+
+func BACnetServiceAckServiceChoice(m IBACnetServiceAck) uint8 {
+	return m.ServiceChoice()
+}
+
+func (m BACnetServiceAck) LengthInBits() uint16 {
+	var lengthInBits uint16 = 0
+
+	// Discriminator Field (serviceChoice)
+	lengthInBits += 8
+
+	// Length of sub-type elements will be added by sub-type...
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAck) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckParse(io spi.ReadBuffer) (spi.Message, error) {
+
+	// Discriminator Field (serviceChoice) (Used as input to a switch field)
+	var serviceChoice uint8 = io.ReadUint8(8)
+
+	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+	var initializer BACnetServiceAckInitializer
+	var typeSwitchError error
+	switch {
+	case serviceChoice == 0x03:
+		initializer, typeSwitchError = BACnetServiceAckGetAlarmSummaryParse(io)
+	case serviceChoice == 0x04:
+		initializer, typeSwitchError = BACnetServiceAckGetEnrollmentSummaryParse(io)
+	case serviceChoice == 0x1D:
+		initializer, typeSwitchError = BACnetServiceAckGetEventInformationParse(io)
+	case serviceChoice == 0x06:
+		initializer, typeSwitchError = BACnetServiceAckAtomicReadFileParse(io)
+	case serviceChoice == 0x07:
+		initializer, typeSwitchError = BACnetServiceAckAtomicWriteFileParse(io)
+	case serviceChoice == 0x0A:
+		initializer, typeSwitchError = BACnetServiceAckCreateObjectParse(io)
+	case serviceChoice == 0x0C:
+		initializer, typeSwitchError = BACnetServiceAckReadPropertyParse(io)
+	case serviceChoice == 0x0E:
+		initializer, typeSwitchError = BACnetServiceAckReadPropertyMultipleParse(io)
+	case serviceChoice == 0x1A:
+		initializer, typeSwitchError = BACnetServiceAckReadRangeParse(io)
+	case serviceChoice == 0x12:
+		initializer, typeSwitchError = BACnetServiceAckConfirmedPrivateTransferParse(io)
+	case serviceChoice == 0x15:
+		initializer, typeSwitchError = BACnetServiceAckVTOpenParse(io)
+	case serviceChoice == 0x17:
+		initializer, typeSwitchError = BACnetServiceAckVTDataParse(io)
+	case serviceChoice == 0x18:
+		initializer, typeSwitchError = BACnetServiceAckRemovedAuthenticateParse(io)
+	case serviceChoice == 0x0D:
+		initializer, typeSwitchError = BACnetServiceAckRemovedReadPropertyConditionalParse(io)
+	}
+	if typeSwitchError != nil {
+		return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+	}
+
+	// Create the instance
+	return initializer.initialize(), nil
+}
+
+func (m BACnetServiceAck) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if iBACnetServiceAck, ok := typ.(IBACnetServiceAck); ok {
+
+			// Discriminator Field (serviceChoice) (Used as input to a switch field)
+			serviceChoice := BACnetServiceAckServiceChoice(iBACnetServiceAck)
+			io.WriteUint8(8, (serviceChoice))
+
+			// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+			iBACnetServiceAck.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
new file mode 100644
index 0000000..2237e58
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFile.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckAtomicReadFile struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckAtomicReadFile interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckAtomicReadFile) ServiceChoice() uint8 {
+	return 0x06
+}
+
+func (m BACnetServiceAckAtomicReadFile) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckAtomicReadFile() BACnetServiceAckInitializer {
+	return &BACnetServiceAckAtomicReadFile{}
+}
+
+func (m BACnetServiceAckAtomicReadFile) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckAtomicReadFile) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckAtomicReadFileParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckAtomicReadFile(), nil
+}
+
+func (m BACnetServiceAckAtomicReadFile) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckAtomicReadFile); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
new file mode 100644
index 0000000..6d228b4
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckAtomicWriteFile.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckAtomicWriteFile struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckAtomicWriteFile interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckAtomicWriteFile) ServiceChoice() uint8 {
+	return 0x07
+}
+
+func (m BACnetServiceAckAtomicWriteFile) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckAtomicWriteFile() BACnetServiceAckInitializer {
+	return &BACnetServiceAckAtomicWriteFile{}
+}
+
+func (m BACnetServiceAckAtomicWriteFile) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckAtomicWriteFile) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckAtomicWriteFileParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckAtomicWriteFile(), nil
+}
+
+func (m BACnetServiceAckAtomicWriteFile) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckAtomicWriteFile); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
new file mode 100644
index 0000000..78a5b04
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckConfirmedPrivateTransfer.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckConfirmedPrivateTransfer struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckConfirmedPrivateTransfer interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckConfirmedPrivateTransfer) ServiceChoice() uint8 {
+	return 0x12
+}
+
+func (m BACnetServiceAckConfirmedPrivateTransfer) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckConfirmedPrivateTransfer() BACnetServiceAckInitializer {
+	return &BACnetServiceAckConfirmedPrivateTransfer{}
+}
+
+func (m BACnetServiceAckConfirmedPrivateTransfer) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckConfirmedPrivateTransfer) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckConfirmedPrivateTransferParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckConfirmedPrivateTransfer(), nil
+}
+
+func (m BACnetServiceAckConfirmedPrivateTransfer) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckConfirmedPrivateTransfer); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
new file mode 100644
index 0000000..eb5b0d8
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckCreateObject.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckCreateObject struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckCreateObject interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckCreateObject) ServiceChoice() uint8 {
+	return 0x0A
+}
+
+func (m BACnetServiceAckCreateObject) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckCreateObject() BACnetServiceAckInitializer {
+	return &BACnetServiceAckCreateObject{}
+}
+
+func (m BACnetServiceAckCreateObject) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckCreateObject) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckCreateObjectParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckCreateObject(), nil
+}
+
+func (m BACnetServiceAckCreateObject) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckCreateObject); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
new file mode 100644
index 0000000..1b15774
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetAlarmSummary.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckGetAlarmSummary struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckGetAlarmSummary interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckGetAlarmSummary) ServiceChoice() uint8 {
+	return 0x03
+}
+
+func (m BACnetServiceAckGetAlarmSummary) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckGetAlarmSummary() BACnetServiceAckInitializer {
+	return &BACnetServiceAckGetAlarmSummary{}
+}
+
+func (m BACnetServiceAckGetAlarmSummary) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckGetAlarmSummary) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckGetAlarmSummaryParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckGetAlarmSummary(), nil
+}
+
+func (m BACnetServiceAckGetAlarmSummary) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckGetAlarmSummary); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
new file mode 100644
index 0000000..a5e2f96
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEnrollmentSummary.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckGetEnrollmentSummary struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckGetEnrollmentSummary interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckGetEnrollmentSummary) ServiceChoice() uint8 {
+	return 0x04
+}
+
+func (m BACnetServiceAckGetEnrollmentSummary) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckGetEnrollmentSummary() BACnetServiceAckInitializer {
+	return &BACnetServiceAckGetEnrollmentSummary{}
+}
+
+func (m BACnetServiceAckGetEnrollmentSummary) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckGetEnrollmentSummary) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckGetEnrollmentSummaryParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckGetEnrollmentSummary(), nil
+}
+
+func (m BACnetServiceAckGetEnrollmentSummary) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckGetEnrollmentSummary); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
new file mode 100644
index 0000000..4045e60
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckGetEventInformation.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckGetEventInformation struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckGetEventInformation interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckGetEventInformation) ServiceChoice() uint8 {
+	return 0x1D
+}
+
+func (m BACnetServiceAckGetEventInformation) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckGetEventInformation() BACnetServiceAckInitializer {
+	return &BACnetServiceAckGetEventInformation{}
+}
+
+func (m BACnetServiceAckGetEventInformation) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckGetEventInformation) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckGetEventInformationParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckGetEventInformation(), nil
+}
+
+func (m BACnetServiceAckGetEventInformation) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckGetEventInformation); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
new file mode 100644
index 0000000..665c740
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
@@ -0,0 +1,204 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+	"reflect"
+	"strconv"
+)
+
+// Constant values.
+const BACnetServiceAckReadProperty_OBJECTIDENTIFIERHEADER uint8 = 0x0C
+const BACnetServiceAckReadProperty_PROPERTYIDENTIFIERHEADER uint8 = 0x03
+const BACnetServiceAckReadProperty_OPENINGTAG uint8 = 0x3E
+const BACnetServiceAckReadProperty_CLOSINGTAG uint8 = 0x3F
+
+// The data-structure of this message
+type BACnetServiceAckReadProperty struct {
+	objectType               uint16
+	objectInstanceNumber     uint32
+	propertyIdentifierLength uint8
+	propertyIdentifier       []int8
+	value                    BACnetTag
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckReadProperty interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckReadProperty) ServiceChoice() uint8 {
+	return 0x0C
+}
+
+func (m BACnetServiceAckReadProperty) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckReadProperty(objectType uint16, objectInstanceNumber uint32, propertyIdentifierLength uint8, propertyIdentifier []int8, value BACnetTag) BACnetServiceAckInitializer {
+	return &BACnetServiceAckReadProperty{objectType: objectType, objectInstanceNumber: objectInstanceNumber, propertyIdentifierLength: propertyIdentifierLength, propertyIdentifier: propertyIdentifier, value: value}
+}
+
+func (m BACnetServiceAckReadProperty) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	// Const Field (objectIdentifierHeader)
+	lengthInBits += 8
+
+	// Simple field (objectType)
+	lengthInBits += 10
+
+	// Simple field (objectInstanceNumber)
+	lengthInBits += 22
+
+	// Const Field (propertyIdentifierHeader)
+	lengthInBits += 5
+
+	// Simple field (propertyIdentifierLength)
+	lengthInBits += 3
+
+	// Array field
+	if len(m.propertyIdentifier) > 0 {
+		lengthInBits += 8 * uint16(len(m.propertyIdentifier))
+	}
+
+	// Const Field (openingTag)
+	lengthInBits += 8
+
+	// Simple field (value)
+	lengthInBits += m.value.LengthInBits()
+
+	// Const Field (closingTag)
+	lengthInBits += 8
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckReadProperty) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckReadPropertyParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Const Field (objectIdentifierHeader)
+	var objectIdentifierHeader uint8 = io.ReadUint8(8)
+	if objectIdentifierHeader != BACnetServiceAckReadProperty_OBJECTIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetServiceAckReadProperty_OBJECTIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(objectIdentifierHeader)))
+	}
+
+	// Simple Field (objectType)
+	var objectType uint16 = io.ReadUint16(10)
+
+	// Simple Field (objectInstanceNumber)
+	var objectInstanceNumber uint32 = io.ReadUint32(22)
+
+	// Const Field (propertyIdentifierHeader)
+	var propertyIdentifierHeader uint8 = io.ReadUint8(5)
+	if propertyIdentifierHeader != BACnetServiceAckReadProperty_PROPERTYIDENTIFIERHEADER {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetServiceAckReadProperty_PROPERTYIDENTIFIERHEADER)) + " but got " + strconv.Itoa(int(propertyIdentifierHeader)))
+	}
+
+	// Simple Field (propertyIdentifierLength)
+	var propertyIdentifierLength uint8 = io.ReadUint8(3)
+
+	// Array field (propertyIdentifier)
+	var propertyIdentifier []int8
+	// Count array
+	{
+		propertyIdentifier := make([]int8, propertyIdentifierLength)
+		for curItem := uint16(0); curItem < uint16(propertyIdentifierLength); curItem++ {
+
+			propertyIdentifier = append(propertyIdentifier, io.ReadInt8(8))
+		}
+	}
+
+	// Const Field (openingTag)
+	var openingTag uint8 = io.ReadUint8(8)
+	if openingTag != BACnetServiceAckReadProperty_OPENINGTAG {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetServiceAckReadProperty_OPENINGTAG)) + " but got " + strconv.Itoa(int(openingTag)))
+	}
+
+	// Simple Field (value)
+	_valueMessage, _err := BACnetTagParse(io)
+	if _err != nil {
+		return nil, errors.New("Error parsing simple field 'value'. " + _err.Error())
+	}
+	var value BACnetTag
+	value, _valueOk := _valueMessage.(BACnetTag)
+	if !_valueOk {
+		return nil, errors.New("Couldn't cast message of type " + reflect.TypeOf(_valueMessage).Name() + " to BACnetTag")
+	}
+
+	// Const Field (closingTag)
+	var closingTag uint8 = io.ReadUint8(8)
+	if closingTag != BACnetServiceAckReadProperty_CLOSINGTAG {
+		return nil, errors.New("Expected constant value " + strconv.Itoa(int(BACnetServiceAckReadProperty_CLOSINGTAG)) + " but got " + strconv.Itoa(int(closingTag)))
+	}
+
+	// Create the instance
+	return NewBACnetServiceAckReadProperty(objectType, objectInstanceNumber, propertyIdentifierLength, propertyIdentifier, value), nil
+}
+
+func (m BACnetServiceAckReadProperty) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckReadProperty); ok {
+
+			// Const Field (objectIdentifierHeader)
+			io.WriteUint8(8, 0x0C)
+
+			// Simple Field (objectType)
+			var objectType uint16 = m.objectType
+			io.WriteUint16(10, (objectType))
+
+			// Simple Field (objectInstanceNumber)
+			var objectInstanceNumber uint32 = m.objectInstanceNumber
+			io.WriteUint32(22, (objectInstanceNumber))
+
+			// Const Field (propertyIdentifierHeader)
+			io.WriteUint8(5, 0x03)
+
+			// Simple Field (propertyIdentifierLength)
+			var propertyIdentifierLength uint8 = m.propertyIdentifierLength
+			io.WriteUint8(3, (propertyIdentifierLength))
+
+			// Array Field (propertyIdentifier)
+			if m.propertyIdentifier != nil {
+				for _, _element := range m.propertyIdentifier {
+					io.WriteInt8(8, _element)
+				}
+			}
+
+			// Const Field (openingTag)
+			io.WriteUint8(8, 0x3E)
+
+			// Simple Field (value)
+			var value BACnetTag = m.value
+			value.Serialize(io)
+
+			// Const Field (closingTag)
+			io.WriteUint8(8, 0x3F)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
new file mode 100644
index 0000000..500841e
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadPropertyMultiple.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckReadPropertyMultiple struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckReadPropertyMultiple interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckReadPropertyMultiple) ServiceChoice() uint8 {
+	return 0x0E
+}
+
+func (m BACnetServiceAckReadPropertyMultiple) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckReadPropertyMultiple() BACnetServiceAckInitializer {
+	return &BACnetServiceAckReadPropertyMultiple{}
+}
+
+func (m BACnetServiceAckReadPropertyMultiple) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckReadPropertyMultiple) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckReadPropertyMultipleParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckReadPropertyMultiple(), nil
+}
+
+func (m BACnetServiceAckReadPropertyMultiple) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckReadPropertyMultiple); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
new file mode 100644
index 0000000..fb90fb9
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadRange.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckReadRange struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckReadRange interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckReadRange) ServiceChoice() uint8 {
+	return 0x1A
+}
+
+func (m BACnetServiceAckReadRange) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckReadRange() BACnetServiceAckInitializer {
+	return &BACnetServiceAckReadRange{}
+}
+
+func (m BACnetServiceAckReadRange) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckReadRange) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckReadRangeParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckReadRange(), nil
+}
+
+func (m BACnetServiceAckReadRange) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckReadRange); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
new file mode 100644
index 0000000..6f216ae
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedAuthenticate.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckRemovedAuthenticate struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckRemovedAuthenticate interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckRemovedAuthenticate) ServiceChoice() uint8 {
+	return 0x18
+}
+
+func (m BACnetServiceAckRemovedAuthenticate) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckRemovedAuthenticate() BACnetServiceAckInitializer {
+	return &BACnetServiceAckRemovedAuthenticate{}
+}
+
+func (m BACnetServiceAckRemovedAuthenticate) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckRemovedAuthenticate) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckRemovedAuthenticateParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckRemovedAuthenticate(), nil
+}
+
+func (m BACnetServiceAckRemovedAuthenticate) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckRemovedAuthenticate); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
new file mode 100644
index 0000000..c90fbcd
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckRemovedReadPropertyConditional.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckRemovedReadPropertyConditional struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckRemovedReadPropertyConditional interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckRemovedReadPropertyConditional) ServiceChoice() uint8 {
+	return 0x0D
+}
+
+func (m BACnetServiceAckRemovedReadPropertyConditional) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckRemovedReadPropertyConditional() BACnetServiceAckInitializer {
+	return &BACnetServiceAckRemovedReadPropertyConditional{}
+}
+
+func (m BACnetServiceAckRemovedReadPropertyConditional) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckRemovedReadPropertyConditional) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckRemovedReadPropertyConditionalParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckRemovedReadPropertyConditional(), nil
+}
+
+func (m BACnetServiceAckRemovedReadPropertyConditional) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckRemovedReadPropertyConditional); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
new file mode 100644
index 0000000..0c3317b
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTData.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckVTData struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckVTData interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckVTData) ServiceChoice() uint8 {
+	return 0x17
+}
+
+func (m BACnetServiceAckVTData) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckVTData() BACnetServiceAckInitializer {
+	return &BACnetServiceAckVTData{}
+}
+
+func (m BACnetServiceAckVTData) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckVTData) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckVTDataParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckVTData(), nil
+}
+
+func (m BACnetServiceAckVTData) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckVTData); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
new file mode 100644
index 0000000..d15f0d6
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckVTOpen.go
@@ -0,0 +1,71 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetServiceAckVTOpen struct {
+	BACnetServiceAck
+}
+
+// The corresponding interface
+type IBACnetServiceAckVTOpen interface {
+	IBACnetServiceAck
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetServiceAckVTOpen) ServiceChoice() uint8 {
+	return 0x15
+}
+
+func (m BACnetServiceAckVTOpen) initialize() spi.Message {
+	return m
+}
+
+func NewBACnetServiceAckVTOpen() BACnetServiceAckInitializer {
+	return &BACnetServiceAckVTOpen{}
+}
+
+func (m BACnetServiceAckVTOpen) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetServiceAck.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetServiceAckVTOpen) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetServiceAckVTOpenParse(io spi.ReadBuffer) (BACnetServiceAckInitializer, error) {
+
+	// Create the instance
+	return NewBACnetServiceAckVTOpen(), nil
+}
+
+func (m BACnetServiceAckVTOpen) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetServiceAckVTOpen); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
new file mode 100644
index 0000000..ca4851b
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTag.go
@@ -0,0 +1,181 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"errors"
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetTag struct {
+	typeOrTagNumber uint8
+	lengthValueType uint8
+	extTagNumber    *uint8
+	extLength       *uint8
+}
+
+// The corresponding interface
+type IBACnetTag interface {
+	spi.Message
+	ContextSpecificTag() uint8
+	Serialize(io spi.WriteBuffer)
+}
+
+type BACnetTagInitializer interface {
+	initialize(typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8) spi.Message
+}
+
+func BACnetTagContextSpecificTag(m IBACnetTag) uint8 {
+	return m.ContextSpecificTag()
+}
+
+func (m BACnetTag) LengthInBits() uint16 {
+	var lengthInBits uint16 = 0
+
+	// Simple field (typeOrTagNumber)
+	lengthInBits += 4
+
+	// Discriminator Field (contextSpecificTag)
+	lengthInBits += 1
+
+	// Simple field (lengthValueType)
+	lengthInBits += 3
+
+	// Optional Field (extTagNumber)
+	if m.extTagNumber != nil {
+		lengthInBits += 8
+	}
+
+	// Optional Field (extLength)
+	if m.extLength != nil {
+		lengthInBits += 8
+	}
+
+	// Length of sub-type elements will be added by sub-type...
+
+	return lengthInBits
+}
+
+func (m BACnetTag) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetTagParse(io spi.ReadBuffer) (spi.Message, error) {
+
+	// Simple Field (typeOrTagNumber)
+	var typeOrTagNumber uint8 = io.ReadUint8(4)
+
+	// Discriminator Field (contextSpecificTag) (Used as input to a switch field)
+	var contextSpecificTag uint8 = io.ReadUint8(1)
+
+	// Simple Field (lengthValueType)
+	var lengthValueType uint8 = io.ReadUint8(3)
+
+	// Optional Field (extTagNumber) (Can be skipped, if a given expression evaluates to false)
+	var extTagNumber *uint8 = nil
+	if (typeOrTagNumber) == (15) {
+		_val := io.ReadUint8(8)
+		extTagNumber = &_val
+	}
+
+	// Optional Field (extLength) (Can be skipped, if a given expression evaluates to false)
+	var extLength *uint8 = nil
+	if (lengthValueType) == (5) {
+		_val := io.ReadUint8(8)
+		extLength = &_val
+	}
+
+	// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+	var initializer BACnetTagInitializer
+	var typeSwitchError error
+	switch {
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x0:
+		initializer, typeSwitchError = BACnetTagApplicationNullParse(io)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x1:
+		initializer, typeSwitchError = BACnetTagApplicationBooleanParse(io)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x2:
+		initializer, typeSwitchError = BACnetTagApplicationUnsignedIntegerParse(io, lengthValueType, extLength)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x3:
+		initializer, typeSwitchError = BACnetTagApplicationSignedIntegerParse(io, lengthValueType, extLength)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x4:
+		initializer, typeSwitchError = BACnetTagApplicationRealParse(io, lengthValueType, extLength)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x5:
+		initializer, typeSwitchError = BACnetTagApplicationDoubleParse(io, lengthValueType, extLength)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x6:
+		initializer, typeSwitchError = BACnetTagApplicationOctetStringParse(io)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x7:
+		initializer, typeSwitchError = BACnetTagApplicationCharacterStringParse(io)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x8:
+		initializer, typeSwitchError = BACnetTagApplicationBitStringParse(io, lengthValueType, extLength)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0x9:
+		initializer, typeSwitchError = BACnetTagApplicationEnumeratedParse(io, lengthValueType, extLength)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0xA:
+		initializer, typeSwitchError = BACnetTagApplicationDateParse(io)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0xB:
+		initializer, typeSwitchError = BACnetTagApplicationTimeParse(io)
+	case contextSpecificTag == 0 && typeOrTagNumber == 0xC:
+		initializer, typeSwitchError = BACnetTagApplicationObjectIdentifierParse(io)
+	case contextSpecificTag == 1:
+		initializer, typeSwitchError = BACnetTagContextParse(io, typeOrTagNumber, extTagNumber, lengthValueType, extLength)
+	}
+	if typeSwitchError != nil {
+		return nil, errors.New("Error parsing sub-type for type-switch. " + typeSwitchError.Error())
+	}
+
+	// Create the instance
+	return initializer.initialize(typeOrTagNumber, lengthValueType, extTagNumber, extLength), nil
+}
+
+func (m BACnetTag) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if iBACnetTag, ok := typ.(IBACnetTag); ok {
+
+			// Simple Field (typeOrTagNumber)
+			var typeOrTagNumber uint8 = m.typeOrTagNumber
+			io.WriteUint8(4, (typeOrTagNumber))
+
+			// Discriminator Field (contextSpecificTag) (Used as input to a switch field)
+			contextSpecificTag := BACnetTagContextSpecificTag(iBACnetTag)
+			io.WriteUint8(1, (contextSpecificTag))
+
+			// Simple Field (lengthValueType)
+			var lengthValueType uint8 = m.lengthValueType
+			io.WriteUint8(3, (lengthValueType))
+
+			// Optional Field (extTagNumber) (Can be skipped, if the value is null)
+			var extTagNumber *uint8 = nil
+			if m.extTagNumber != nil {
+				extTagNumber = m.extTagNumber
+				io.WriteUint8(8, *(extTagNumber))
+			}
+
+			// Optional Field (extLength) (Can be skipped, if the value is null)
+			var extLength *uint8 = nil
+			if m.extLength != nil {
+				extLength = m.extLength
+				io.WriteUint8(8, *(extLength))
+			}
+
+			// Switch field (Depending on the discriminator values, passes the serialization to a sub-type)
+			iBACnetTag.Serialize(io)
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
new file mode 100644
index 0000000..93da747
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
@@ -0,0 +1,108 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetTagApplicationBitString struct {
+	unusedBits uint8
+	data       []int8
+	BACnetTag
+}
+
+// The corresponding interface
+type IBACnetTagApplicationBitString interface {
+	IBACnetTag
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetTagApplicationBitString) ContextSpecificTag() uint8 {
+	return 0
+}
+
+func (m BACnetTagApplicationBitString) initialize(typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8) spi.Message {
+	m.typeOrTagNumber = typeOrTagNumber
+	m.lengthValueType = lengthValueType
+	m.extTagNumber = extTagNumber
+	m.extLength = extLength
+	return m
+}
+
+func NewBACnetTagApplicationBitString(unusedBits uint8, data []int8) BACnetTagInitializer {
+	return &BACnetTagApplicationBitString{unusedBits: unusedBits, data: data}
+}
+
+func (m BACnetTagApplicationBitString) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetTag.LengthInBits()
+
+	// Simple field (unusedBits)
+	lengthInBits += 8
+
+	// Array field
+	if len(m.data) > 0 {
+		lengthInBits += 8 * uint16(len(m.data))
+	}
+
+	return lengthInBits
+}
+
+func (m BACnetTagApplicationBitString) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetTagApplicationBitStringParse(io spi.ReadBuffer, lengthValueType uint8, extLength uint8) (BACnetTagInitializer, error) {
+
+	// Simple Field (unusedBits)
+	var unusedBits uint8 = io.ReadUint8(8)
+
+	// Array field (data)
+	var data []int8
+	// Length array
+	_dataLength := uint16(spi.InlineIf(((lengthValueType) == (5)), uint16(((extLength) - (1))), uint16(((lengthValueType) - (1)))))
+	_dataEndPos := io.GetPos() + _dataLength
+	for io.GetPos() < _dataEndPos {
+		data = append(data, io.ReadInt8(8))
+	}
+
+	// Create the instance
+	return NewBACnetTagApplicationBitString(unusedBits, data), nil
+}
+
+func (m BACnetTagApplicationBitString) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetTagApplicationBitString); ok {
+
+			// Simple Field (unusedBits)
+			var unusedBits uint8 = m.unusedBits
+			io.WriteUint8(8, (unusedBits))
+
+			// Array Field (data)
+			if m.data != nil {
+				for _, _element := range m.data {
+					io.WriteInt8(8, _element)
+				}
+			}
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
new file mode 100644
index 0000000..421deaf
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBoolean.go
@@ -0,0 +1,75 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetTagApplicationBoolean struct {
+	BACnetTag
+}
+
+// The corresponding interface
+type IBACnetTagApplicationBoolean interface {
+	IBACnetTag
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetTagApplicationBoolean) ContextSpecificTag() uint8 {
+	return 0
+}
+
+func (m BACnetTagApplicationBoolean) initialize(typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8) spi.Message {
+	m.typeOrTagNumber = typeOrTagNumber
+	m.lengthValueType = lengthValueType
+	m.extTagNumber = extTagNumber
+	m.extLength = extLength
+	return m
+}
+
+func NewBACnetTagApplicationBoolean() BACnetTagInitializer {
+	return &BACnetTagApplicationBoolean{}
+}
+
+func (m BACnetTagApplicationBoolean) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetTag.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetTagApplicationBoolean) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetTagApplicationBooleanParse(io spi.ReadBuffer) (BACnetTagInitializer, error) {
+
+	// Create the instance
+	return NewBACnetTagApplicationBoolean(), nil
+}
+
+func (m BACnetTagApplicationBoolean) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetTagApplicationBoolean); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
new file mode 100644
index 0000000..facb6c8
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationCharacterString.go
@@ -0,0 +1,75 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetTagApplicationCharacterString struct {
+	BACnetTag
+}
+
+// The corresponding interface
+type IBACnetTagApplicationCharacterString interface {
+	IBACnetTag
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetTagApplicationCharacterString) ContextSpecificTag() uint8 {
+	return 0
+}
+
+func (m BACnetTagApplicationCharacterString) initialize(typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8) spi.Message {
+	m.typeOrTagNumber = typeOrTagNumber
+	m.lengthValueType = lengthValueType
+	m.extTagNumber = extTagNumber
+	m.extLength = extLength
+	return m
+}
+
+func NewBACnetTagApplicationCharacterString() BACnetTagInitializer {
+	return &BACnetTagApplicationCharacterString{}
+}
+
+func (m BACnetTagApplicationCharacterString) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetTag.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetTagApplicationCharacterString) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetTagApplicationCharacterStringParse(io spi.ReadBuffer) (BACnetTagInitializer, error) {
+
+	// Create the instance
+	return NewBACnetTagApplicationCharacterString(), nil
+}
+
+func (m BACnetTagApplicationCharacterString) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetTagApplicationCharacterString); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
new file mode 100644
index 0000000..c968020
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDate.go
@@ -0,0 +1,75 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetTagApplicationDate struct {
+	BACnetTag
+}
+
+// The corresponding interface
+type IBACnetTagApplicationDate interface {
+	IBACnetTag
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetTagApplicationDate) ContextSpecificTag() uint8 {
+	return 0
+}
+
+func (m BACnetTagApplicationDate) initialize(typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8) spi.Message {
+	m.typeOrTagNumber = typeOrTagNumber
+	m.lengthValueType = lengthValueType
+	m.extTagNumber = extTagNumber
+	m.extLength = extLength
+	return m
+}
+
+func NewBACnetTagApplicationDate() BACnetTagInitializer {
+	return &BACnetTagApplicationDate{}
+}
+
+func (m BACnetTagApplicationDate) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetTag.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetTagApplicationDate) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetTagApplicationDateParse(io spi.ReadBuffer) (BACnetTagInitializer, error) {
+
+	// Create the instance
+	return NewBACnetTagApplicationDate(), nil
+}
+
+func (m BACnetTagApplicationDate) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetTagApplicationDate); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
new file mode 100644
index 0000000..699e0af
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationDouble.go
@@ -0,0 +1,86 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetTagApplicationDouble struct {
+	value float64
+	BACnetTag
+}
+
+// The corresponding interface
+type IBACnetTagApplicationDouble interface {
+	IBACnetTag
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetTagApplicationDouble) ContextSpecificTag() uint8 {
+	return 0
+}
+
+func (m BACnetTagApplicationDouble) initialize(typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8) spi.Message {
+	m.typeOrTagNumber = typeOrTagNumber
+	m.lengthValueType = lengthValueType
+	m.extTagNumber = extTagNumber
+	m.extLength = extLength
+	return m
+}
+
+func NewBACnetTagApplicationDouble(value float64) BACnetTagInitializer {
+	return &BACnetTagApplicationDouble{value: value}
+}
+
+func (m BACnetTagApplicationDouble) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetTag.LengthInBits()
+
+	// Simple field (value)
+	lengthInBits += 64
+
+	return lengthInBits
+}
+
+func (m BACnetTagApplicationDouble) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetTagApplicationDoubleParse(io spi.ReadBuffer, lengthValueType uint8, extLength uint8) (BACnetTagInitializer, error) {
+
+	// Simple Field (value)
+	var value float64 = io.ReadFloat64(64)
+
+	// Create the instance
+	return NewBACnetTagApplicationDouble(value), nil
+}
+
+func (m BACnetTagApplicationDouble) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetTagApplicationDouble); ok {
+
+			// Simple Field (value)
+			var value float64 = m.value
+			io.WriteFloat64(64, (value))
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
new file mode 100644
index 0000000..b550ab0
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
@@ -0,0 +1,97 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetTagApplicationEnumerated struct {
+	data []int8
+	BACnetTag
+}
+
+// The corresponding interface
+type IBACnetTagApplicationEnumerated interface {
+	IBACnetTag
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetTagApplicationEnumerated) ContextSpecificTag() uint8 {
+	return 0
+}
+
+func (m BACnetTagApplicationEnumerated) initialize(typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8) spi.Message {
+	m.typeOrTagNumber = typeOrTagNumber
+	m.lengthValueType = lengthValueType
+	m.extTagNumber = extTagNumber
+	m.extLength = extLength
+	return m
+}
+
+func NewBACnetTagApplicationEnumerated(data []int8) BACnetTagInitializer {
+	return &BACnetTagApplicationEnumerated{data: data}
+}
+
+func (m BACnetTagApplicationEnumerated) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetTag.LengthInBits()
+
+	// Array field
+	if len(m.data) > 0 {
+		lengthInBits += 8 * uint16(len(m.data))
+	}
+
+	return lengthInBits
+}
+
+func (m BACnetTagApplicationEnumerated) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetTagApplicationEnumeratedParse(io spi.ReadBuffer, lengthValueType uint8, extLength uint8) (BACnetTagInitializer, error) {
+
+	// Array field (data)
+	var data []int8
+	// Length array
+	_dataLength := uint16(spi.InlineIf(((lengthValueType) == (5)), uint16(extLength), uint16(lengthValueType)))
+	_dataEndPos := io.GetPos() + _dataLength
+	for io.GetPos() < _dataEndPos {
+		data = append(data, io.ReadInt8(8))
+	}
+
+	// Create the instance
+	return NewBACnetTagApplicationEnumerated(data), nil
+}
+
+func (m BACnetTagApplicationEnumerated) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetTagApplicationEnumerated); ok {
+
+			// Array Field (data)
+			if m.data != nil {
+				for _, _element := range m.data {
+					io.WriteInt8(8, _element)
+				}
+			}
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
new file mode 100644
index 0000000..12d3c8e
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationNull.go
@@ -0,0 +1,75 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
+	"plc4x.apache.org/plc4go-modbus-driver/0.8.0/internal/plc4go/spi"
+)
+
+// The data-structure of this message
+type BACnetTagApplicationNull struct {
+	BACnetTag
+}
+
+// The corresponding interface
+type IBACnetTagApplicationNull interface {
+	IBACnetTag
+	Serialize(io spi.WriteBuffer)
+}
+
+// Accessors for discriminator values.
+func (m BACnetTagApplicationNull) ContextSpecificTag() uint8 {
+	return 0
+}
+
+func (m BACnetTagApplicationNull) initialize(typeOrTagNumber uint8, lengthValueType uint8, extTagNumber *uint8, extLength *uint8) spi.Message {
+	m.typeOrTagNumber = typeOrTagNumber
+	m.lengthValueType = lengthValueType
+	m.extTagNumber = extTagNumber
+	m.extLength = extLength
+	return m
+}
+
+func NewBACnetTagApplicationNull() BACnetTagInitializer {
+	return &BACnetTagApplicationNull{}
+}
+
+func (m BACnetTagApplicationNull) LengthInBits() uint16 {
+	var lengthInBits uint16 = m.BACnetTag.LengthInBits()
+
+	return lengthInBits
+}
+
+func (m BACnetTagApplicationNull) LengthInBytes() uint16 {
+	return m.LengthInBits() / 8
+}
+
+func BACnetTagApplicationNullParse(io spi.ReadBuffer) (BACnetTagInitializer, error) {
+
+	// Create the instance
+	return NewBACnetTagApplicationNull(), nil
+}
+
+func (m BACnetTagApplicationNull) Serialize(io spi.WriteBuffer) {
+	serializeFunc := func(typ interface{}) {
+		if _, ok := typ.(IBACnetTagApplicationNull); ok {
+		}
+	}
+	serializeFunc(m)
+}
diff --git a/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
new file mode 100644
index 0000000..63374c7
--- /dev/null
+++ b/sandbox/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationObjectIdentifier.go
@@ -0,0 +1,75 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+package model
+
+import (
... 12959 lines suppressed ...