You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2023/01/29 17:07:03 UTC

[plc4x] branch develop updated (fd8d1f4608 -> 09b37146e0)

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

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


    from fd8d1f4608 Fix issue-701 for S7 driver. (#770)
     new c293398d8d chore(plc4go/bacnet): Added new vendorIds
     new 0bf3bd3ac8 chore(plc4j/driver/open-protocol): Implemented ASCII number support for reading and writing BitIntegers
     new 09b37146e0 chore(plc4j/driver/open-protocol): Continued implementing more open-protocol types

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../bacnetip/readwrite/model/BACnetVendorId.go     |   48 +
 .../java/bacnetip/readwrite/BACnetVendorId.java    |    3 +
 ...ighteningStatus.java => AlarmActiveStatus.java} |   14 +-
 .../{TighteningStatus.java => ForcedOrder.java}    |   15 +-
 ...TighteningStatus.java => IdentifierResult.java} |   14 +-
 .../{TighteningStatus.java => JobBatchMode.java}   |   14 +-
 .../{TighteningStatus.java => NoYes.java}          |   14 +-
 .../{TighteningStatus.java => NokOk.java}          |   10 +-
 .../{TighteningStatus.java => OkNok.java}          |   14 +-
 .../readwrite/OpenProtocolMessage.java             |   46 +
 .../readwrite/OpenProtocolMessageAlarm.java        |  193 ++++
 .../OpenProtocolMessageAlarmAcknowledge.java       |  191 ++++
 .../OpenProtocolMessageAlarmAcknowledgeRev1.java   |  153 +++
 .../readwrite/OpenProtocolMessageAlarmRev1.java    |  354 +++++++
 .../readwrite/OpenProtocolMessageAlarmRev2.java    |  402 +++++++
 .../readwrite/OpenProtocolMessageAlarmStatus.java  |  195 ++++
 .../OpenProtocolMessageAlarmStatusAcknowledge.java |  191 ++++
 ...nProtocolMessageAlarmStatusAcknowledgeRev1.java |  155 +++
 .../OpenProtocolMessageAlarmStatusRev1.java        |  416 ++++++++
 .../OpenProtocolMessageAlarmStatusRev2.java        |  416 ++++++++
 .../OpenProtocolMessageAlarmSubscribe.java         |  191 ++++
 .../OpenProtocolMessageAlarmSubscribeRev1.java     |  153 +++
 .../OpenProtocolMessageAlarmUnsubscribe.java       |  191 ++++
 .../OpenProtocolMessageAlarmUnsubscribeRev1.java   |  153 +++
 ...penProtocolMessageExecuteDynamicJobRequest.java |  196 ++++
 ...rotocolMessageExecuteDynamicJobRequestRev1.java | 1116 ++++++++++++++++++++
 ...tocolMessageExecuteDynamicJobRequestRev999.java | 1116 ++++++++++++++++++++
 ...enProtocolMessageIdentifierDownloadRequest.java |  192 ++++
 ...otocolMessageIdentifierDownloadRequestRev1.java |  183 ++++
 ...lMessageKeepAliveOpenProtocolCommunication.java |  193 ++++
 ...sageKeepAliveOpenProtocolCommunicationRev1.java |  156 +++
 ...rotocolMessageLastTighteningResultDataRev1.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev2.java |  886 +++++++++++++++-
 ...rotocolMessageLastTighteningResultDataRev3.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev4.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev5.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev6.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev7.java |   39 +-
 ...tocolMessageLastTighteningResultDataRev998.java |   39 +-
 ...MessageLastTighteningResultDataRev999Light.java |   39 +-
 .../OpenProtocolMessageResultTracesCurve.java      |  191 ++++
 ...enProtocolMessageResultTracesCurvePlotData.java |  192 ++++
 ...otocolMessageResultTracesCurvePlotDataRev1.java |  259 +++++
 .../OpenProtocolMessageResultTracesCurveRev1.java  |  153 +++
 .../readwrite/OpenProtocolMessageSetTime.java      |  189 ++++
 .../readwrite/OpenProtocolMessageSetTimeRev1.java  |  174 +++
 .../{TighteningStatus.java => ToolLoosening.java}  |   15 +-
 .../{TighteningStatus.java => TraceType.java}      |   27 +-
 .../readwrite/utils/StaticHelper.java}             |   36 +-
 .../java/spi/generation/ReadBufferByteBased.java   |   39 +-
 .../java/spi/generation/WriteBufferByteBased.java  |   14 +-
 .../protocols/openprotocol/open-protocol.mspec     |  373 ++++++-
 .../openprotocol/ParserSerializerTestsuite.xml     |   79 ++
 53 files changed, 9299 insertions(+), 338 deletions(-)
 copy plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/{TighteningStatus.java => AlarmActiveStatus.java} (80%)
 copy plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/{TighteningStatus.java => ForcedOrder.java} (81%)
 copy plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/{TighteningStatus.java => IdentifierResult.java} (81%)
 copy plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/{TighteningStatus.java => JobBatchMode.java} (80%)
 copy plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/{TighteningStatus.java => NoYes.java} (82%)
 copy plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/{TighteningStatus.java => NokOk.java} (84%)
 copy plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/{TighteningStatus.java => OkNok.java} (82%)
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarm.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmAcknowledge.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmAcknowledgeRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmRev2.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatus.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusAcknowledge.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusAcknowledgeRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusRev2.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmSubscribe.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmSubscribeRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmUnsubscribe.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmUnsubscribeRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequest.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequestRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequestRev999.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageIdentifierDownloadRequest.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageIdentifierDownloadRequestRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageKeepAliveOpenProtocolCommunication.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurve.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurvePlotData.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurvePlotDataRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurveRev1.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageSetTime.java
 create mode 100644 plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageSetTimeRev1.java
 copy plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/{TighteningStatus.java => ToolLoosening.java} (80%)
 copy plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/{TighteningStatus.java => TraceType.java} (68%)
 rename plc4j/drivers/open-protocol/src/main/{generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java => java/org/apache/plc4x/java/openprotocol/readwrite/utils/StaticHelper.java} (52%)


[plc4x] 01/03: chore(plc4go/bacnet): Added new vendorIds

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c293398d8d36b7dc90dca7e9558090fc0eeeecbb
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Jan 29 18:05:14 2023 +0100

    chore(plc4go/bacnet): Added new vendorIds
---
 .../bacnetip/readwrite/model/BACnetVendorId.go     | 48 ++++++++++++++++++++++
 .../java/bacnetip/readwrite/BACnetVendorId.java    |  3 ++
 2 files changed, 51 insertions(+)

diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetVendorId.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetVendorId.go
index a8cb34b52d..7632ac734d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetVendorId.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetVendorId.go
@@ -1428,6 +1428,9 @@ const (
 	BACnetVendorId_KOMFORTIQ_INC                                                                BACnetVendorId = 1397
 	BACnetVendorId_COOL_TERA_LIMITED                                                            BACnetVendorId = 1398
 	BACnetVendorId_HADRON_SOLUTIONS_SRLS                                                        BACnetVendorId = 1399
+	BACnetVendorId_BITPOOL                                                                      BACnetVendorId = 1401
+	BACnetVendorId_SONICULLC                                                                    BACnetVendorId = 1402
+	BACnetVendorId_RISHABH_INSTRUMENTS_LIMITED                                                  BACnetVendorId = 1403
 	BACnetVendorId_UNKNOWN_VENDOR                                                               BACnetVendorId = 0xFFFF
 )
 
@@ -2828,6 +2831,9 @@ func init() {
 		BACnetVendorId_KOMFORTIQ_INC,
 		BACnetVendorId_COOL_TERA_LIMITED,
 		BACnetVendorId_HADRON_SOLUTIONS_SRLS,
+		BACnetVendorId_BITPOOL,
+		BACnetVendorId_SONICULLC,
+		BACnetVendorId_RISHABH_INSTRUMENTS_LIMITED,
 		BACnetVendorId_UNKNOWN_VENDOR,
 	}
 }
@@ -4622,6 +4628,18 @@ func (e BACnetVendorId) VendorId() uint16 {
 		{ /* '140' */
 			return 140
 		}
+	case 1401:
+		{ /* '1401' */
+			return 1401
+		}
+	case 1402:
+		{ /* '1402' */
+			return 1402
+		}
+	case 1403:
+		{ /* '1403' */
+			return 1403
+		}
 	case 141:
 		{ /* '141' */
 			return 141
@@ -10212,6 +10230,18 @@ func (e BACnetVendorId) VendorName() string {
 		{ /* '140' */
 			return "Viconics Electronics, Inc."
 		}
+	case 1401:
+		{ /* '1401' */
+			return "Bitpool"
+		}
+	case 1402:
+		{ /* '1402' */
+			return "Sonicu, LLC"
+		}
+	case 1403:
+		{ /* '1403' */
+			return "Rishabh Instruments Limited"
+		}
 	case 141:
 		{ /* '141' */
 			return "Yaskawa America, Inc."
@@ -14907,6 +14937,12 @@ func BACnetVendorIdByValue(value uint16) (enum BACnetVendorId, ok bool) {
 		return BACnetVendorId_CIMETRICS_TECHNOLOGY, true
 	case 140:
 		return BACnetVendorId_VICONICS_ELECTRONICS_INC, true
+	case 1401:
+		return BACnetVendorId_BITPOOL, true
+	case 1402:
+		return BACnetVendorId_SONICULLC, true
+	case 1403:
+		return BACnetVendorId_RISHABH_INSTRUMENTS_LIMITED, true
 	case 141:
 		return BACnetVendorId_YASKAWA_AMERICA_INC, true
 	case 142:
@@ -17699,6 +17735,12 @@ func BACnetVendorIdByName(value string) (enum BACnetVendorId, ok bool) {
 		return BACnetVendorId_CIMETRICS_TECHNOLOGY, true
 	case "VICONICS_ELECTRONICS_INC":
 		return BACnetVendorId_VICONICS_ELECTRONICS_INC, true
+	case "BITPOOL":
+		return BACnetVendorId_BITPOOL, true
+	case "SONICULLC":
+		return BACnetVendorId_SONICULLC, true
+	case "RISHABH_INSTRUMENTS_LIMITED":
+		return BACnetVendorId_RISHABH_INSTRUMENTS_LIMITED, true
 	case "YASKAWA_AMERICA_INC":
 		return BACnetVendorId_YASKAWA_AMERICA_INC, true
 	case "DEO_SCONTROLSYSTEMS_GMBH":
@@ -20548,6 +20590,12 @@ func (e BACnetVendorId) PLC4XEnumName() string {
 		return "CIMETRICS_TECHNOLOGY"
 	case BACnetVendorId_VICONICS_ELECTRONICS_INC:
 		return "VICONICS_ELECTRONICS_INC"
+	case BACnetVendorId_BITPOOL:
+		return "BITPOOL"
+	case BACnetVendorId_SONICULLC:
+		return "SONICULLC"
+	case BACnetVendorId_RISHABH_INSTRUMENTS_LIMITED:
+		return "RISHABH_INSTRUMENTS_LIMITED"
 	case BACnetVendorId_YASKAWA_AMERICA_INC:
 		return "YASKAWA_AMERICA_INC"
 	case BACnetVendorId_DEO_SCONTROLSYSTEMS_GMBH:
diff --git a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
index 55d0bef9b4..5330ed6b2d 100644
--- a/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
+++ b/plc4j/drivers/bacnet/src/main/generated/org/apache/plc4x/java/bacnetip/readwrite/BACnetVendorId.java
@@ -1607,6 +1607,9 @@ public enum BACnetVendorId {
   KOMFORTIQ_INC((int) 1397, (int) 1397, (String) "Komfort IQ, Inc."),
   COOL_TERA_LIMITED((int) 1398, (int) 1398, (String) "CoolTera Limited"),
   HADRON_SOLUTIONS_SRLS((int) 1399, (int) 1399, (String) "Hadron Solutions S.r.l.s"),
+  BITPOOL((int) 1401, (int) 1401, (String) "Bitpool"),
+  SONICULLC((int) 1402, (int) 1402, (String) "Sonicu, LLC"),
+  RISHABH_INSTRUMENTS_LIMITED((int) 1403, (int) 1403, (String) "Rishabh Instruments Limited"),
   UNKNOWN_VENDOR((int) 0xFFFF, (int) 0xFFFF, (String) "Unknown");
   private static final Map<Integer, BACnetVendorId> map;
 


[plc4x] 03/03: chore(plc4j/driver/open-protocol): Continued implementing more open-protocol types

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 09b37146e0cbf333e6d09e8289fe13640ee813d1
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Jan 29 18:06:49 2023 +0100

    chore(plc4j/driver/open-protocol): Continued implementing more open-protocol types
---
 ...ighteningStatus.java => AlarmActiveStatus.java} |   14 +-
 .../{TighteningStatus.java => ForcedOrder.java}    |   15 +-
 ...TighteningStatus.java => IdentifierResult.java} |   14 +-
 .../{TighteningStatus.java => JobBatchMode.java}   |   14 +-
 .../{TighteningStatus.java => NoYes.java}          |   14 +-
 .../{TighteningStatus.java => NokOk.java}          |   10 +-
 .../{TighteningStatus.java => OkNok.java}          |   14 +-
 .../readwrite/OpenProtocolMessage.java             |   46 +
 .../readwrite/OpenProtocolMessageAlarm.java        |  193 ++++
 .../OpenProtocolMessageAlarmAcknowledge.java       |  191 ++++
 .../OpenProtocolMessageAlarmAcknowledgeRev1.java   |  153 +++
 .../readwrite/OpenProtocolMessageAlarmRev1.java    |  354 +++++++
 .../readwrite/OpenProtocolMessageAlarmRev2.java    |  402 +++++++
 .../readwrite/OpenProtocolMessageAlarmStatus.java  |  195 ++++
 .../OpenProtocolMessageAlarmStatusAcknowledge.java |  191 ++++
 ...nProtocolMessageAlarmStatusAcknowledgeRev1.java |  155 +++
 .../OpenProtocolMessageAlarmStatusRev1.java        |  416 ++++++++
 .../OpenProtocolMessageAlarmStatusRev2.java        |  416 ++++++++
 .../OpenProtocolMessageAlarmSubscribe.java         |  191 ++++
 .../OpenProtocolMessageAlarmSubscribeRev1.java     |  153 +++
 .../OpenProtocolMessageAlarmUnsubscribe.java       |  191 ++++
 .../OpenProtocolMessageAlarmUnsubscribeRev1.java   |  153 +++
 ...penProtocolMessageExecuteDynamicJobRequest.java |  196 ++++
 ...rotocolMessageExecuteDynamicJobRequestRev1.java | 1116 ++++++++++++++++++++
 ...tocolMessageExecuteDynamicJobRequestRev999.java | 1116 ++++++++++++++++++++
 ...enProtocolMessageIdentifierDownloadRequest.java |  192 ++++
 ...otocolMessageIdentifierDownloadRequestRev1.java |  183 ++++
 ...lMessageKeepAliveOpenProtocolCommunication.java |  193 ++++
 ...sageKeepAliveOpenProtocolCommunicationRev1.java |  156 +++
 ...rotocolMessageLastTighteningResultDataRev1.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev2.java |  886 +++++++++++++++-
 ...rotocolMessageLastTighteningResultDataRev3.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev4.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev5.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev6.java |   39 +-
 ...rotocolMessageLastTighteningResultDataRev7.java |   39 +-
 ...tocolMessageLastTighteningResultDataRev998.java |   39 +-
 ...MessageLastTighteningResultDataRev999Light.java |   39 +-
 .../OpenProtocolMessageResultTracesCurve.java      |  191 ++++
 ...enProtocolMessageResultTracesCurvePlotData.java |  192 ++++
 ...otocolMessageResultTracesCurvePlotDataRev1.java |  259 +++++
 .../OpenProtocolMessageResultTracesCurveRev1.java  |  153 +++
 .../readwrite/OpenProtocolMessageSetTime.java      |  189 ++++
 .../readwrite/OpenProtocolMessageSetTimeRev1.java  |  174 +++
 .../{TighteningStatus.java => ToolLoosening.java}  |   15 +-
 .../{TighteningStatus.java => TraceType.java}      |   27 +-
 .../readwrite/utils/StaticHelper.java}             |   36 +-
 .../protocols/openprotocol/open-protocol.mspec     |  373 ++++++-
 .../openprotocol/ParserSerializerTestsuite.xml     |   79 ++
 49 files changed, 9212 insertions(+), 321 deletions(-)

diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/AlarmActiveStatus.java
similarity index 80%
copy from plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
copy to plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/AlarmActiveStatus.java
index 08aeaa893c..3cef09564c 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/AlarmActiveStatus.java
@@ -23,21 +23,21 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum TighteningStatus {
-  NOK((short) 0),
-  OK((short) 1);
-  private static final Map<Short, TighteningStatus> map;
+public enum AlarmActiveStatus {
+  NoAlarmIsActive((short) 0),
+  AlarmIsActive((short) 1);
+  private static final Map<Short, AlarmActiveStatus> map;
 
   static {
     map = new HashMap<>();
-    for (TighteningStatus value : TighteningStatus.values()) {
+    for (AlarmActiveStatus value : AlarmActiveStatus.values()) {
       map.put((short) value.getValue(), value);
     }
   }
 
   private short value;
 
-  TighteningStatus(short value) {
+  AlarmActiveStatus(short value) {
     this.value = value;
   }
 
@@ -45,7 +45,7 @@ public enum TighteningStatus {
     return value;
   }
 
-  public static TighteningStatus enumForValue(short value) {
+  public static AlarmActiveStatus enumForValue(short value) {
     return map.get(value);
   }
 
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/ForcedOrder.java
similarity index 81%
copy from plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
copy to plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/ForcedOrder.java
index 08aeaa893c..f45986f510 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/ForcedOrder.java
@@ -23,21 +23,22 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum TighteningStatus {
-  NOK((short) 0),
-  OK((short) 1);
-  private static final Map<Short, TighteningStatus> map;
+public enum ForcedOrder {
+  FreeOrder((short) 0),
+  ForcedOrder((short) 1),
+  FreeAndForced((short) 2);
+  private static final Map<Short, ForcedOrder> map;
 
   static {
     map = new HashMap<>();
-    for (TighteningStatus value : TighteningStatus.values()) {
+    for (ForcedOrder value : ForcedOrder.values()) {
       map.put((short) value.getValue(), value);
     }
   }
 
   private short value;
 
-  TighteningStatus(short value) {
+  ForcedOrder(short value) {
     this.value = value;
   }
 
@@ -45,7 +46,7 @@ public enum TighteningStatus {
     return value;
   }
 
-  public static TighteningStatus enumForValue(short value) {
+  public static ForcedOrder enumForValue(short value) {
     return map.get(value);
   }
 
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/IdentifierResult.java
similarity index 81%
copy from plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
copy to plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/IdentifierResult.java
index 08aeaa893c..6b54704afe 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/IdentifierResult.java
@@ -23,21 +23,21 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum TighteningStatus {
-  NOK((short) 0),
-  OK((short) 1);
-  private static final Map<Short, TighteningStatus> map;
+public enum IdentifierResult {
+  JobVinNumber((short) 0),
+  Other((short) 1);
+  private static final Map<Short, IdentifierResult> map;
 
   static {
     map = new HashMap<>();
-    for (TighteningStatus value : TighteningStatus.values()) {
+    for (IdentifierResult value : IdentifierResult.values()) {
       map.put((short) value.getValue(), value);
     }
   }
 
   private short value;
 
-  TighteningStatus(short value) {
+  IdentifierResult(short value) {
     this.value = value;
   }
 
@@ -45,7 +45,7 @@ public enum TighteningStatus {
     return value;
   }
 
-  public static TighteningStatus enumForValue(short value) {
+  public static IdentifierResult enumForValue(short value) {
     return map.get(value);
   }
 
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/JobBatchMode.java
similarity index 80%
copy from plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
copy to plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/JobBatchMode.java
index 08aeaa893c..a2b1c8ffc1 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/JobBatchMode.java
@@ -23,21 +23,21 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum TighteningStatus {
-  NOK((short) 0),
-  OK((short) 1);
-  private static final Map<Short, TighteningStatus> map;
+public enum JobBatchMode {
+  OnlyOkTighteningsAreCounted((short) 0),
+  BothOkAndNokTighteningsAreCounted((short) 1);
+  private static final Map<Short, JobBatchMode> map;
 
   static {
     map = new HashMap<>();
-    for (TighteningStatus value : TighteningStatus.values()) {
+    for (JobBatchMode value : JobBatchMode.values()) {
       map.put((short) value.getValue(), value);
     }
   }
 
   private short value;
 
-  TighteningStatus(short value) {
+  JobBatchMode(short value) {
     this.value = value;
   }
 
@@ -45,7 +45,7 @@ public enum TighteningStatus {
     return value;
   }
 
-  public static TighteningStatus enumForValue(short value) {
+  public static JobBatchMode enumForValue(short value) {
     return map.get(value);
   }
 
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/NoYes.java
similarity index 82%
copy from plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
copy to plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/NoYes.java
index 08aeaa893c..bec47ce0df 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/NoYes.java
@@ -23,21 +23,21 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum TighteningStatus {
-  NOK((short) 0),
-  OK((short) 1);
-  private static final Map<Short, TighteningStatus> map;
+public enum NoYes {
+  No((short) 0),
+  Yes((short) 1);
+  private static final Map<Short, NoYes> map;
 
   static {
     map = new HashMap<>();
-    for (TighteningStatus value : TighteningStatus.values()) {
+    for (NoYes value : NoYes.values()) {
       map.put((short) value.getValue(), value);
     }
   }
 
   private short value;
 
-  TighteningStatus(short value) {
+  NoYes(short value) {
     this.value = value;
   }
 
@@ -45,7 +45,7 @@ public enum TighteningStatus {
     return value;
   }
 
-  public static TighteningStatus enumForValue(short value) {
+  public static NoYes enumForValue(short value) {
     return map.get(value);
   }
 
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/NokOk.java
similarity index 84%
copy from plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
copy to plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/NokOk.java
index 08aeaa893c..a9c90c5d01 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/NokOk.java
@@ -23,21 +23,21 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum TighteningStatus {
+public enum NokOk {
   NOK((short) 0),
   OK((short) 1);
-  private static final Map<Short, TighteningStatus> map;
+  private static final Map<Short, NokOk> map;
 
   static {
     map = new HashMap<>();
-    for (TighteningStatus value : TighteningStatus.values()) {
+    for (NokOk value : NokOk.values()) {
       map.put((short) value.getValue(), value);
     }
   }
 
   private short value;
 
-  TighteningStatus(short value) {
+  NokOk(short value) {
     this.value = value;
   }
 
@@ -45,7 +45,7 @@ public enum TighteningStatus {
     return value;
   }
 
-  public static TighteningStatus enumForValue(short value) {
+  public static NokOk enumForValue(short value) {
     return map.get(value);
   }
 
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OkNok.java
similarity index 82%
copy from plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
copy to plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OkNok.java
index 08aeaa893c..35ac266e13 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/TighteningStatus.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OkNok.java
@@ -23,21 +23,21 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum TighteningStatus {
-  NOK((short) 0),
-  OK((short) 1);
-  private static final Map<Short, TighteningStatus> map;
+public enum OkNok {
+  OK((short) 0),
+  NOK((short) 1);
+  private static final Map<Short, OkNok> map;
 
   static {
     map = new HashMap<>();
-    for (TighteningStatus value : TighteningStatus.values()) {
+    for (OkNok value : OkNok.values()) {
       map.put((short) value.getValue(), value);
     }
   }
 
   private short value;
 
-  TighteningStatus(short value) {
+  OkNok(short value) {
     this.value = value;
   }
 
@@ -45,7 +45,7 @@ public enum TighteningStatus {
     return value;
   }
 
-  public static TighteningStatus enumForValue(short value) {
+  public static OkNok enumForValue(short value) {
     return map.get(value);
   }
 
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessage.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessage.java
index 0d89c5ab86..ce5f7630a8 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessage.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessage.java
@@ -429,6 +429,48 @@ public abstract class OpenProtocolMessage implements Message {
       builder =
           OpenProtocolMessageLastTighteningResultData.staticParseOpenProtocolMessageBuilder(
               readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.AlarmSubscribe)) {
+      builder =
+          OpenProtocolMessageAlarmSubscribe.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.Alarm)) {
+      builder =
+          OpenProtocolMessageAlarm.staticParseOpenProtocolMessageBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.AlarmAcknowledge)) {
+      builder =
+          OpenProtocolMessageAlarmAcknowledge.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.AlarmUnsubscribe)) {
+      builder =
+          OpenProtocolMessageAlarmUnsubscribe.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.AlarmStatus)) {
+      builder =
+          OpenProtocolMessageAlarmStatus.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.AlarmStatusAcknowledge)) {
+      builder =
+          OpenProtocolMessageAlarmStatusAcknowledge.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.SetTime)) {
+      builder =
+          OpenProtocolMessageSetTime.staticParseOpenProtocolMessageBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ExecuteDynamicJobRequest)) {
+      builder =
+          OpenProtocolMessageExecuteDynamicJobRequest.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.IdentifierDownloadRequest)) {
+      builder =
+          OpenProtocolMessageIdentifierDownloadRequest.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ResultTracesCurve)) {
+      builder =
+          OpenProtocolMessageResultTracesCurve.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ResultTracesCurvePlotData)) {
+      builder =
+          OpenProtocolMessageResultTracesCurvePlotData.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
     } else if (EvaluationHelper.equals(mid, Mid.ProgramPsetSelectionInDynamicJob)) {
       builder =
           OpenProtocolMessageProgramPsetSelectionInDynamicJob.staticParseOpenProtocolMessageBuilder(
@@ -445,6 +487,10 @@ public abstract class OpenProtocolMessage implements Message {
       builder =
           OpenProtocolMessageLinkLevelNegativeAcknowledge.staticParseOpenProtocolMessageBuilder(
               readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.KeepAliveOpenProtocolCommunication)) {
+      builder =
+          OpenProtocolMessageKeepAliveOpenProtocolCommunication
+              .staticParseOpenProtocolMessageBuilder(readBuffer, revision);
     }
     if (builder == null) {
       throw new ParseException(
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarm.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarm.java
new file mode 100644
index 0000000000..faaef5153c
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarm.java
@@ -0,0 +1,193 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageAlarm extends OpenProtocolMessage implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.Alarm;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageAlarm(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageAlarmChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarm");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageAlarmChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageAlarm");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarm _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarm");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageAlarmBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageAlarmRev1.staticParseOpenProtocolMessageAlarmBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 2)) {
+      builder =
+          OpenProtocolMessageAlarmRev2.staticParseOpenProtocolMessageAlarmBuilder(
+              readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageAlarm");
+    // Create the instance
+    return new OpenProtocolMessageAlarmBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageAlarmBuilder {
+    OpenProtocolMessageAlarm build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageAlarmBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageAlarmBuilder builder;
+
+    public OpenProtocolMessageAlarmBuilderImpl(OpenProtocolMessageAlarmBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageAlarm build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarm)) {
+      return false;
+    }
+    OpenProtocolMessageAlarm that = (OpenProtocolMessageAlarm) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmAcknowledge.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmAcknowledge.java
new file mode 100644
index 0000000000..cdaa22a837
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmAcknowledge.java
@@ -0,0 +1,191 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageAlarmAcknowledge extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.AlarmAcknowledge;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageAlarmAcknowledge(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageAlarmAcknowledgeChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmAcknowledge");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageAlarmAcknowledgeChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmAcknowledge");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmAcknowledge _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmAcknowledge");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageAlarmAcknowledgeBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageAlarmAcknowledgeRev1
+              .staticParseOpenProtocolMessageAlarmAcknowledgeBuilder(readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmAcknowledge");
+    // Create the instance
+    return new OpenProtocolMessageAlarmAcknowledgeBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageAlarmAcknowledgeBuilder {
+    OpenProtocolMessageAlarmAcknowledge build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageAlarmAcknowledgeBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageAlarmAcknowledgeBuilder builder;
+
+    public OpenProtocolMessageAlarmAcknowledgeBuilderImpl(
+        OpenProtocolMessageAlarmAcknowledgeBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageAlarmAcknowledge build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmAcknowledge)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmAcknowledge that = (OpenProtocolMessageAlarmAcknowledge) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmAcknowledgeRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmAcknowledgeRev1.java
new file mode 100644
index 0000000000..fb3a7c4d50
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmAcknowledgeRev1.java
@@ -0,0 +1,153 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageAlarmAcknowledgeRev1 extends OpenProtocolMessageAlarmAcknowledge
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  public OpenProtocolMessageAlarmAcknowledgeRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageAlarmAcknowledgeChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmAcknowledgeRev1");
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmAcknowledgeRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmAcknowledgeRev1 _value = this;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageAlarmAcknowledgeBuilder
+      staticParseOpenProtocolMessageAlarmAcknowledgeBuilder(ReadBuffer readBuffer, Long revision)
+          throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmAcknowledgeRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmAcknowledgeRev1");
+    // Create the instance
+    return new OpenProtocolMessageAlarmAcknowledgeRev1BuilderImpl();
+  }
+
+  public static class OpenProtocolMessageAlarmAcknowledgeRev1BuilderImpl
+      implements OpenProtocolMessageAlarmAcknowledge.OpenProtocolMessageAlarmAcknowledgeBuilder {
+
+    public OpenProtocolMessageAlarmAcknowledgeRev1BuilderImpl() {}
+
+    public OpenProtocolMessageAlarmAcknowledgeRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageAlarmAcknowledgeRev1 openProtocolMessageAlarmAcknowledgeRev1 =
+          new OpenProtocolMessageAlarmAcknowledgeRev1(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber);
+      return openProtocolMessageAlarmAcknowledgeRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmAcknowledgeRev1)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmAcknowledgeRev1 that = (OpenProtocolMessageAlarmAcknowledgeRev1) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmRev1.java
new file mode 100644
index 0000000000..a3f15fc0c9
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmRev1.java
@@ -0,0 +1,354 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageAlarmRev1 extends OpenProtocolMessageAlarm implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDERRORCODE = 1;
+  public static final Integer BLOCKIDCONTROLLERREADYSTATUS = 2;
+  public static final Integer BLOCKIDTOOLREADYSTATUS = 3;
+  public static final Integer BLOCKIDTIME = 4;
+
+  // Properties.
+  protected final String errorCode;
+  protected final NokOk controllerReadyStatus;
+  protected final NokOk toolReadyStatus;
+  protected final String alarmTime;
+
+  public OpenProtocolMessageAlarmRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      String errorCode,
+      NokOk controllerReadyStatus,
+      NokOk toolReadyStatus,
+      String alarmTime) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.errorCode = errorCode;
+    this.controllerReadyStatus = controllerReadyStatus;
+    this.toolReadyStatus = toolReadyStatus;
+    this.alarmTime = alarmTime;
+  }
+
+  public String getErrorCode() {
+    return errorCode;
+  }
+
+  public NokOk getControllerReadyStatus() {
+    return controllerReadyStatus;
+  }
+
+  public NokOk getToolReadyStatus() {
+    return toolReadyStatus;
+  }
+
+  public String getAlarmTime() {
+    return alarmTime;
+  }
+
+  public int getBlockIdErrorCode() {
+    return BLOCKIDERRORCODE;
+  }
+
+  public int getBlockIdControllerReadyStatus() {
+    return BLOCKIDCONTROLLERREADYSTATUS;
+  }
+
+  public int getBlockIdToolReadyStatus() {
+    return BLOCKIDTOOLREADYSTATUS;
+  }
+
+  public int getBlockIdTime() {
+    return BLOCKIDTIME;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageAlarmChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmRev1");
+
+    // Const Field (blockIdErrorCode)
+    writeConstField(
+        "blockIdErrorCode",
+        BLOCKIDERRORCODE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (errorCode)
+    writeSimpleField(
+        "errorCode", errorCode, writeString(writeBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdControllerReadyStatus)
+    writeConstField(
+        "blockIdControllerReadyStatus",
+        BLOCKIDCONTROLLERREADYSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (controllerReadyStatus)
+    writeSimpleEnumField(
+        "controllerReadyStatus",
+        "NokOk",
+        controllerReadyStatus,
+        new DataWriterEnumDefault<>(
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdToolReadyStatus)
+    writeConstField(
+        "blockIdToolReadyStatus",
+        BLOCKIDTOOLREADYSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (toolReadyStatus)
+    writeSimpleEnumField(
+        "toolReadyStatus",
+        "NokOk",
+        toolReadyStatus,
+        new DataWriterEnumDefault<>(
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTime)
+    writeConstField(
+        "blockIdTime",
+        BLOCKIDTIME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (alarmTime)
+    writeSimpleField(
+        "alarmTime", alarmTime, writeString(writeBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmRev1 _value = this;
+
+    // Const Field (blockIdErrorCode)
+    lengthInBits += 16;
+
+    // Simple field (errorCode)
+    lengthInBits += 32;
+
+    // Const Field (blockIdControllerReadyStatus)
+    lengthInBits += 16;
+
+    // Simple field (controllerReadyStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdToolReadyStatus)
+    lengthInBits += 16;
+
+    // Simple field (toolReadyStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTime)
+    lengthInBits += 16;
+
+    // Simple field (alarmTime)
+    lengthInBits += 152;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageAlarmBuilder staticParseOpenProtocolMessageAlarmBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    int blockIdErrorCode =
+        readConstField(
+            "blockIdErrorCode",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmRev1.BLOCKIDERRORCODE,
+            WithOption.WithEncoding("ASCII"));
+
+    String errorCode =
+        readSimpleField("errorCode", readString(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdControllerReadyStatus =
+        readConstField(
+            "blockIdControllerReadyStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmRev1.BLOCKIDCONTROLLERREADYSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    NokOk controllerReadyStatus =
+        readEnumField(
+            "controllerReadyStatus",
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdToolReadyStatus =
+        readConstField(
+            "blockIdToolReadyStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmRev1.BLOCKIDTOOLREADYSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    NokOk toolReadyStatus =
+        readEnumField(
+            "toolReadyStatus",
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTime =
+        readConstField(
+            "blockIdTime",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmRev1.BLOCKIDTIME,
+            WithOption.WithEncoding("ASCII"));
+
+    String alarmTime =
+        readSimpleField("alarmTime", readString(readBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmRev1");
+    // Create the instance
+    return new OpenProtocolMessageAlarmRev1BuilderImpl(
+        errorCode, controllerReadyStatus, toolReadyStatus, alarmTime);
+  }
+
+  public static class OpenProtocolMessageAlarmRev1BuilderImpl
+      implements OpenProtocolMessageAlarm.OpenProtocolMessageAlarmBuilder {
+    private final String errorCode;
+    private final NokOk controllerReadyStatus;
+    private final NokOk toolReadyStatus;
+    private final String alarmTime;
+
+    public OpenProtocolMessageAlarmRev1BuilderImpl(
+        String errorCode, NokOk controllerReadyStatus, NokOk toolReadyStatus, String alarmTime) {
+      this.errorCode = errorCode;
+      this.controllerReadyStatus = controllerReadyStatus;
+      this.toolReadyStatus = toolReadyStatus;
+      this.alarmTime = alarmTime;
+    }
+
+    public OpenProtocolMessageAlarmRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageAlarmRev1 openProtocolMessageAlarmRev1 =
+          new OpenProtocolMessageAlarmRev1(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber,
+              errorCode,
+              controllerReadyStatus,
+              toolReadyStatus,
+              alarmTime);
+      return openProtocolMessageAlarmRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmRev1)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmRev1 that = (OpenProtocolMessageAlarmRev1) o;
+    return (getErrorCode() == that.getErrorCode())
+        && (getControllerReadyStatus() == that.getControllerReadyStatus())
+        && (getToolReadyStatus() == that.getToolReadyStatus())
+        && (getAlarmTime() == that.getAlarmTime())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getErrorCode(),
+        getControllerReadyStatus(),
+        getToolReadyStatus(),
+        getAlarmTime());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmRev2.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmRev2.java
new file mode 100644
index 0000000000..c76dfb3401
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmRev2.java
@@ -0,0 +1,402 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageAlarmRev2 extends OpenProtocolMessageAlarm implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 2;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDERRORCODE = 1;
+  public static final Integer BLOCKIDCONTROLLERREADYSTATUS = 2;
+  public static final Integer BLOCKIDTOOLREADYSTATUS = 3;
+  public static final Integer BLOCKIDTIME = 4;
+  public static final Integer BLOCKIDALARMTEXT = 5;
+
+  // Properties.
+  protected final String errorCode;
+  protected final NokOk controllerReadyStatus;
+  protected final NokOk toolReadyStatus;
+  protected final String alarmTime;
+  protected final String alarmText;
+
+  public OpenProtocolMessageAlarmRev2(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      String errorCode,
+      NokOk controllerReadyStatus,
+      NokOk toolReadyStatus,
+      String alarmTime,
+      String alarmText) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.errorCode = errorCode;
+    this.controllerReadyStatus = controllerReadyStatus;
+    this.toolReadyStatus = toolReadyStatus;
+    this.alarmTime = alarmTime;
+    this.alarmText = alarmText;
+  }
+
+  public String getErrorCode() {
+    return errorCode;
+  }
+
+  public NokOk getControllerReadyStatus() {
+    return controllerReadyStatus;
+  }
+
+  public NokOk getToolReadyStatus() {
+    return toolReadyStatus;
+  }
+
+  public String getAlarmTime() {
+    return alarmTime;
+  }
+
+  public String getAlarmText() {
+    return alarmText;
+  }
+
+  public int getBlockIdErrorCode() {
+    return BLOCKIDERRORCODE;
+  }
+
+  public int getBlockIdControllerReadyStatus() {
+    return BLOCKIDCONTROLLERREADYSTATUS;
+  }
+
+  public int getBlockIdToolReadyStatus() {
+    return BLOCKIDTOOLREADYSTATUS;
+  }
+
+  public int getBlockIdTime() {
+    return BLOCKIDTIME;
+  }
+
+  public int getBlockIdAlarmText() {
+    return BLOCKIDALARMTEXT;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageAlarmChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmRev2");
+
+    // Const Field (blockIdErrorCode)
+    writeConstField(
+        "blockIdErrorCode",
+        BLOCKIDERRORCODE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (errorCode)
+    writeSimpleField(
+        "errorCode", errorCode, writeString(writeBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdControllerReadyStatus)
+    writeConstField(
+        "blockIdControllerReadyStatus",
+        BLOCKIDCONTROLLERREADYSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (controllerReadyStatus)
+    writeSimpleEnumField(
+        "controllerReadyStatus",
+        "NokOk",
+        controllerReadyStatus,
+        new DataWriterEnumDefault<>(
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdToolReadyStatus)
+    writeConstField(
+        "blockIdToolReadyStatus",
+        BLOCKIDTOOLREADYSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (toolReadyStatus)
+    writeSimpleEnumField(
+        "toolReadyStatus",
+        "NokOk",
+        toolReadyStatus,
+        new DataWriterEnumDefault<>(
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTime)
+    writeConstField(
+        "blockIdTime",
+        BLOCKIDTIME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (alarmTime)
+    writeSimpleField(
+        "alarmTime", alarmTime, writeString(writeBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAlarmText)
+    writeConstField(
+        "blockIdAlarmText",
+        BLOCKIDALARMTEXT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (alarmText)
+    writeSimpleField(
+        "alarmText", alarmText, writeString(writeBuffer, 400), WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmRev2");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmRev2 _value = this;
+
+    // Const Field (blockIdErrorCode)
+    lengthInBits += 16;
+
+    // Simple field (errorCode)
+    lengthInBits += 40;
+
+    // Const Field (blockIdControllerReadyStatus)
+    lengthInBits += 16;
+
+    // Simple field (controllerReadyStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdToolReadyStatus)
+    lengthInBits += 16;
+
+    // Simple field (toolReadyStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTime)
+    lengthInBits += 16;
+
+    // Simple field (alarmTime)
+    lengthInBits += 152;
+
+    // Const Field (blockIdAlarmText)
+    lengthInBits += 16;
+
+    // Simple field (alarmText)
+    lengthInBits += 400;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageAlarmBuilder staticParseOpenProtocolMessageAlarmBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmRev2");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    int blockIdErrorCode =
+        readConstField(
+            "blockIdErrorCode",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmRev2.BLOCKIDERRORCODE,
+            WithOption.WithEncoding("ASCII"));
+
+    String errorCode =
+        readSimpleField("errorCode", readString(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdControllerReadyStatus =
+        readConstField(
+            "blockIdControllerReadyStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmRev2.BLOCKIDCONTROLLERREADYSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    NokOk controllerReadyStatus =
+        readEnumField(
+            "controllerReadyStatus",
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdToolReadyStatus =
+        readConstField(
+            "blockIdToolReadyStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmRev2.BLOCKIDTOOLREADYSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    NokOk toolReadyStatus =
+        readEnumField(
+            "toolReadyStatus",
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTime =
+        readConstField(
+            "blockIdTime",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmRev2.BLOCKIDTIME,
+            WithOption.WithEncoding("ASCII"));
+
+    String alarmTime =
+        readSimpleField("alarmTime", readString(readBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    int blockIdAlarmText =
+        readConstField(
+            "blockIdAlarmText",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmRev2.BLOCKIDALARMTEXT,
+            WithOption.WithEncoding("ASCII"));
+
+    String alarmText =
+        readSimpleField("alarmText", readString(readBuffer, 400), WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmRev2");
+    // Create the instance
+    return new OpenProtocolMessageAlarmRev2BuilderImpl(
+        errorCode, controllerReadyStatus, toolReadyStatus, alarmTime, alarmText);
+  }
+
+  public static class OpenProtocolMessageAlarmRev2BuilderImpl
+      implements OpenProtocolMessageAlarm.OpenProtocolMessageAlarmBuilder {
+    private final String errorCode;
+    private final NokOk controllerReadyStatus;
+    private final NokOk toolReadyStatus;
+    private final String alarmTime;
+    private final String alarmText;
+
+    public OpenProtocolMessageAlarmRev2BuilderImpl(
+        String errorCode,
+        NokOk controllerReadyStatus,
+        NokOk toolReadyStatus,
+        String alarmTime,
+        String alarmText) {
+      this.errorCode = errorCode;
+      this.controllerReadyStatus = controllerReadyStatus;
+      this.toolReadyStatus = toolReadyStatus;
+      this.alarmTime = alarmTime;
+      this.alarmText = alarmText;
+    }
+
+    public OpenProtocolMessageAlarmRev2 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageAlarmRev2 openProtocolMessageAlarmRev2 =
+          new OpenProtocolMessageAlarmRev2(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber,
+              errorCode,
+              controllerReadyStatus,
+              toolReadyStatus,
+              alarmTime,
+              alarmText);
+      return openProtocolMessageAlarmRev2;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmRev2)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmRev2 that = (OpenProtocolMessageAlarmRev2) o;
+    return (getErrorCode() == that.getErrorCode())
+        && (getControllerReadyStatus() == that.getControllerReadyStatus())
+        && (getToolReadyStatus() == that.getToolReadyStatus())
+        && (getAlarmTime() == that.getAlarmTime())
+        && (getAlarmText() == that.getAlarmText())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getErrorCode(),
+        getControllerReadyStatus(),
+        getToolReadyStatus(),
+        getAlarmTime(),
+        getAlarmText());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatus.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatus.java
new file mode 100644
index 0000000000..1bfd3186f2
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatus.java
@@ -0,0 +1,195 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageAlarmStatus extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.AlarmStatus;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageAlarmStatus(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageAlarmStatusChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmStatus");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageAlarmStatusChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmStatus");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmStatus _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmStatus");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageAlarmStatusBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageAlarmStatusRev1.staticParseOpenProtocolMessageAlarmStatusBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 2)) {
+      builder =
+          OpenProtocolMessageAlarmStatusRev2.staticParseOpenProtocolMessageAlarmStatusBuilder(
+              readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmStatus");
+    // Create the instance
+    return new OpenProtocolMessageAlarmStatusBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageAlarmStatusBuilder {
+    OpenProtocolMessageAlarmStatus build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageAlarmStatusBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageAlarmStatusBuilder builder;
+
+    public OpenProtocolMessageAlarmStatusBuilderImpl(
+        OpenProtocolMessageAlarmStatusBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageAlarmStatus build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmStatus)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmStatus that = (OpenProtocolMessageAlarmStatus) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusAcknowledge.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusAcknowledge.java
new file mode 100644
index 0000000000..93640c496c
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusAcknowledge.java
@@ -0,0 +1,191 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageAlarmStatusAcknowledge extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.AlarmStatusAcknowledge;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageAlarmStatusAcknowledge(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageAlarmStatusAcknowledgeChild(
+      WriteBuffer writeBuffer) throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmStatusAcknowledge");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageAlarmStatusAcknowledgeChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmStatusAcknowledge");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmStatusAcknowledge _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmStatusAcknowledge");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageAlarmStatusAcknowledgeBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageAlarmStatusAcknowledgeRev1
+              .staticParseOpenProtocolMessageAlarmStatusAcknowledgeBuilder(readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmStatusAcknowledge");
+    // Create the instance
+    return new OpenProtocolMessageAlarmStatusAcknowledgeBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageAlarmStatusAcknowledgeBuilder {
+    OpenProtocolMessageAlarmStatusAcknowledge build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageAlarmStatusAcknowledgeBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageAlarmStatusAcknowledgeBuilder builder;
+
+    public OpenProtocolMessageAlarmStatusAcknowledgeBuilderImpl(
+        OpenProtocolMessageAlarmStatusAcknowledgeBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageAlarmStatusAcknowledge build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmStatusAcknowledge)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmStatusAcknowledge that = (OpenProtocolMessageAlarmStatusAcknowledge) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusAcknowledgeRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusAcknowledgeRev1.java
new file mode 100644
index 0000000000..8fbd0b67db
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusAcknowledgeRev1.java
@@ -0,0 +1,155 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageAlarmStatusAcknowledgeRev1
+    extends OpenProtocolMessageAlarmStatusAcknowledge implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  public OpenProtocolMessageAlarmStatusAcknowledgeRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageAlarmStatusAcknowledgeChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmStatusAcknowledgeRev1");
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmStatusAcknowledgeRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmStatusAcknowledgeRev1 _value = this;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageAlarmStatusAcknowledgeBuilder
+      staticParseOpenProtocolMessageAlarmStatusAcknowledgeBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmStatusAcknowledgeRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmStatusAcknowledgeRev1");
+    // Create the instance
+    return new OpenProtocolMessageAlarmStatusAcknowledgeRev1BuilderImpl();
+  }
+
+  public static class OpenProtocolMessageAlarmStatusAcknowledgeRev1BuilderImpl
+      implements OpenProtocolMessageAlarmStatusAcknowledge
+          .OpenProtocolMessageAlarmStatusAcknowledgeBuilder {
+
+    public OpenProtocolMessageAlarmStatusAcknowledgeRev1BuilderImpl() {}
+
+    public OpenProtocolMessageAlarmStatusAcknowledgeRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageAlarmStatusAcknowledgeRev1 openProtocolMessageAlarmStatusAcknowledgeRev1 =
+          new OpenProtocolMessageAlarmStatusAcknowledgeRev1(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber);
+      return openProtocolMessageAlarmStatusAcknowledgeRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmStatusAcknowledgeRev1)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmStatusAcknowledgeRev1 that =
+        (OpenProtocolMessageAlarmStatusAcknowledgeRev1) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusRev1.java
new file mode 100644
index 0000000000..face516c2a
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusRev1.java
@@ -0,0 +1,416 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageAlarmStatusRev1 extends OpenProtocolMessageAlarmStatus
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDALARMSTATUS = 1;
+  public static final Integer BLOCKIDERRORCODE = 2;
+  public static final Integer BLOCKIDCONTROLLERREADYSTATUS = 3;
+  public static final Integer BLOCKIDTOOLREADYSTATUS = 4;
+  public static final Integer BLOCKIDTIME = 5;
+
+  // Properties.
+  protected final AlarmActiveStatus controllerAlarmStatus;
+  protected final String errorCode;
+  protected final NokOk controllerReadyStatus;
+  protected final NokOk toolReadyStatus;
+  protected final String alarmTime;
+
+  public OpenProtocolMessageAlarmStatusRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      AlarmActiveStatus controllerAlarmStatus,
+      String errorCode,
+      NokOk controllerReadyStatus,
+      NokOk toolReadyStatus,
+      String alarmTime) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.controllerAlarmStatus = controllerAlarmStatus;
+    this.errorCode = errorCode;
+    this.controllerReadyStatus = controllerReadyStatus;
+    this.toolReadyStatus = toolReadyStatus;
+    this.alarmTime = alarmTime;
+  }
+
+  public AlarmActiveStatus getControllerAlarmStatus() {
+    return controllerAlarmStatus;
+  }
+
+  public String getErrorCode() {
+    return errorCode;
+  }
+
+  public NokOk getControllerReadyStatus() {
+    return controllerReadyStatus;
+  }
+
+  public NokOk getToolReadyStatus() {
+    return toolReadyStatus;
+  }
+
+  public String getAlarmTime() {
+    return alarmTime;
+  }
+
+  public int getBlockIdAlarmStatus() {
+    return BLOCKIDALARMSTATUS;
+  }
+
+  public int getBlockIdErrorCode() {
+    return BLOCKIDERRORCODE;
+  }
+
+  public int getBlockIdControllerReadyStatus() {
+    return BLOCKIDCONTROLLERREADYSTATUS;
+  }
+
+  public int getBlockIdToolReadyStatus() {
+    return BLOCKIDTOOLREADYSTATUS;
+  }
+
+  public int getBlockIdTime() {
+    return BLOCKIDTIME;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageAlarmStatusChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmStatusRev1");
+
+    // Const Field (blockIdAlarmStatus)
+    writeConstField(
+        "blockIdAlarmStatus",
+        BLOCKIDALARMSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (controllerAlarmStatus)
+    writeSimpleEnumField(
+        "controllerAlarmStatus",
+        "AlarmActiveStatus",
+        controllerAlarmStatus,
+        new DataWriterEnumDefault<>(
+            AlarmActiveStatus::getValue,
+            AlarmActiveStatus::name,
+            writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdErrorCode)
+    writeConstField(
+        "blockIdErrorCode",
+        BLOCKIDERRORCODE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (errorCode)
+    writeSimpleField(
+        "errorCode", errorCode, writeString(writeBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdControllerReadyStatus)
+    writeConstField(
+        "blockIdControllerReadyStatus",
+        BLOCKIDCONTROLLERREADYSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (controllerReadyStatus)
+    writeSimpleEnumField(
+        "controllerReadyStatus",
+        "NokOk",
+        controllerReadyStatus,
+        new DataWriterEnumDefault<>(
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdToolReadyStatus)
+    writeConstField(
+        "blockIdToolReadyStatus",
+        BLOCKIDTOOLREADYSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (toolReadyStatus)
+    writeSimpleEnumField(
+        "toolReadyStatus",
+        "NokOk",
+        toolReadyStatus,
+        new DataWriterEnumDefault<>(
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTime)
+    writeConstField(
+        "blockIdTime",
+        BLOCKIDTIME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (alarmTime)
+    writeSimpleField(
+        "alarmTime", alarmTime, writeString(writeBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmStatusRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmStatusRev1 _value = this;
+
+    // Const Field (blockIdAlarmStatus)
+    lengthInBits += 16;
+
+    // Simple field (controllerAlarmStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdErrorCode)
+    lengthInBits += 16;
+
+    // Simple field (errorCode)
+    lengthInBits += 32;
+
+    // Const Field (blockIdControllerReadyStatus)
+    lengthInBits += 16;
+
+    // Simple field (controllerReadyStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdToolReadyStatus)
+    lengthInBits += 16;
+
+    // Simple field (toolReadyStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTime)
+    lengthInBits += 16;
+
+    // Simple field (alarmTime)
+    lengthInBits += 152;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageAlarmStatusBuilder
+      staticParseOpenProtocolMessageAlarmStatusBuilder(ReadBuffer readBuffer, Long revision)
+          throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmStatusRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    int blockIdAlarmStatus =
+        readConstField(
+            "blockIdAlarmStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev1.BLOCKIDALARMSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    AlarmActiveStatus controllerAlarmStatus =
+        readEnumField(
+            "controllerAlarmStatus",
+            "AlarmActiveStatus",
+            new DataReaderEnumDefault<>(
+                AlarmActiveStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdErrorCode =
+        readConstField(
+            "blockIdErrorCode",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev1.BLOCKIDERRORCODE,
+            WithOption.WithEncoding("ASCII"));
+
+    String errorCode =
+        readSimpleField("errorCode", readString(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdControllerReadyStatus =
+        readConstField(
+            "blockIdControllerReadyStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev1.BLOCKIDCONTROLLERREADYSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    NokOk controllerReadyStatus =
+        readEnumField(
+            "controllerReadyStatus",
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdToolReadyStatus =
+        readConstField(
+            "blockIdToolReadyStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev1.BLOCKIDTOOLREADYSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    NokOk toolReadyStatus =
+        readEnumField(
+            "toolReadyStatus",
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTime =
+        readConstField(
+            "blockIdTime",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev1.BLOCKIDTIME,
+            WithOption.WithEncoding("ASCII"));
+
+    String alarmTime =
+        readSimpleField("alarmTime", readString(readBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmStatusRev1");
+    // Create the instance
+    return new OpenProtocolMessageAlarmStatusRev1BuilderImpl(
+        controllerAlarmStatus, errorCode, controllerReadyStatus, toolReadyStatus, alarmTime);
+  }
+
+  public static class OpenProtocolMessageAlarmStatusRev1BuilderImpl
+      implements OpenProtocolMessageAlarmStatus.OpenProtocolMessageAlarmStatusBuilder {
+    private final AlarmActiveStatus controllerAlarmStatus;
+    private final String errorCode;
+    private final NokOk controllerReadyStatus;
+    private final NokOk toolReadyStatus;
+    private final String alarmTime;
+
+    public OpenProtocolMessageAlarmStatusRev1BuilderImpl(
+        AlarmActiveStatus controllerAlarmStatus,
+        String errorCode,
+        NokOk controllerReadyStatus,
+        NokOk toolReadyStatus,
+        String alarmTime) {
+      this.controllerAlarmStatus = controllerAlarmStatus;
+      this.errorCode = errorCode;
+      this.controllerReadyStatus = controllerReadyStatus;
+      this.toolReadyStatus = toolReadyStatus;
+      this.alarmTime = alarmTime;
+    }
+
+    public OpenProtocolMessageAlarmStatusRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageAlarmStatusRev1 openProtocolMessageAlarmStatusRev1 =
+          new OpenProtocolMessageAlarmStatusRev1(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber,
+              controllerAlarmStatus,
+              errorCode,
+              controllerReadyStatus,
+              toolReadyStatus,
+              alarmTime);
+      return openProtocolMessageAlarmStatusRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmStatusRev1)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmStatusRev1 that = (OpenProtocolMessageAlarmStatusRev1) o;
+    return (getControllerAlarmStatus() == that.getControllerAlarmStatus())
+        && (getErrorCode() == that.getErrorCode())
+        && (getControllerReadyStatus() == that.getControllerReadyStatus())
+        && (getToolReadyStatus() == that.getToolReadyStatus())
+        && (getAlarmTime() == that.getAlarmTime())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getControllerAlarmStatus(),
+        getErrorCode(),
+        getControllerReadyStatus(),
+        getToolReadyStatus(),
+        getAlarmTime());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusRev2.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusRev2.java
new file mode 100644
index 0000000000..9a4aaf69d7
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmStatusRev2.java
@@ -0,0 +1,416 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageAlarmStatusRev2 extends OpenProtocolMessageAlarmStatus
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 2;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDALARMSTATUS = 1;
+  public static final Integer BLOCKIDERRORCODE = 2;
+  public static final Integer BLOCKIDCONTROLLERREADYSTATUS = 3;
+  public static final Integer BLOCKIDTOOLREADYSTATUS = 4;
+  public static final Integer BLOCKIDTIME = 5;
+
+  // Properties.
+  protected final AlarmActiveStatus controllerAlarmStatus;
+  protected final String errorCode;
+  protected final NokOk controllerReadyStatus;
+  protected final NokOk toolReadyStatus;
+  protected final String alarmTime;
+
+  public OpenProtocolMessageAlarmStatusRev2(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      AlarmActiveStatus controllerAlarmStatus,
+      String errorCode,
+      NokOk controllerReadyStatus,
+      NokOk toolReadyStatus,
+      String alarmTime) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.controllerAlarmStatus = controllerAlarmStatus;
+    this.errorCode = errorCode;
+    this.controllerReadyStatus = controllerReadyStatus;
+    this.toolReadyStatus = toolReadyStatus;
+    this.alarmTime = alarmTime;
+  }
+
+  public AlarmActiveStatus getControllerAlarmStatus() {
+    return controllerAlarmStatus;
+  }
+
+  public String getErrorCode() {
+    return errorCode;
+  }
+
+  public NokOk getControllerReadyStatus() {
+    return controllerReadyStatus;
+  }
+
+  public NokOk getToolReadyStatus() {
+    return toolReadyStatus;
+  }
+
+  public String getAlarmTime() {
+    return alarmTime;
+  }
+
+  public int getBlockIdAlarmStatus() {
+    return BLOCKIDALARMSTATUS;
+  }
+
+  public int getBlockIdErrorCode() {
+    return BLOCKIDERRORCODE;
+  }
+
+  public int getBlockIdControllerReadyStatus() {
+    return BLOCKIDCONTROLLERREADYSTATUS;
+  }
+
+  public int getBlockIdToolReadyStatus() {
+    return BLOCKIDTOOLREADYSTATUS;
+  }
+
+  public int getBlockIdTime() {
+    return BLOCKIDTIME;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageAlarmStatusChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmStatusRev2");
+
+    // Const Field (blockIdAlarmStatus)
+    writeConstField(
+        "blockIdAlarmStatus",
+        BLOCKIDALARMSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (controllerAlarmStatus)
+    writeSimpleEnumField(
+        "controllerAlarmStatus",
+        "AlarmActiveStatus",
+        controllerAlarmStatus,
+        new DataWriterEnumDefault<>(
+            AlarmActiveStatus::getValue,
+            AlarmActiveStatus::name,
+            writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdErrorCode)
+    writeConstField(
+        "blockIdErrorCode",
+        BLOCKIDERRORCODE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (errorCode)
+    writeSimpleField(
+        "errorCode", errorCode, writeString(writeBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdControllerReadyStatus)
+    writeConstField(
+        "blockIdControllerReadyStatus",
+        BLOCKIDCONTROLLERREADYSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (controllerReadyStatus)
+    writeSimpleEnumField(
+        "controllerReadyStatus",
+        "NokOk",
+        controllerReadyStatus,
+        new DataWriterEnumDefault<>(
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdToolReadyStatus)
+    writeConstField(
+        "blockIdToolReadyStatus",
+        BLOCKIDTOOLREADYSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (toolReadyStatus)
+    writeSimpleEnumField(
+        "toolReadyStatus",
+        "NokOk",
+        toolReadyStatus,
+        new DataWriterEnumDefault<>(
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTime)
+    writeConstField(
+        "blockIdTime",
+        BLOCKIDTIME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (alarmTime)
+    writeSimpleField(
+        "alarmTime", alarmTime, writeString(writeBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmStatusRev2");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmStatusRev2 _value = this;
+
+    // Const Field (blockIdAlarmStatus)
+    lengthInBits += 16;
+
+    // Simple field (controllerAlarmStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdErrorCode)
+    lengthInBits += 16;
+
+    // Simple field (errorCode)
+    lengthInBits += 40;
+
+    // Const Field (blockIdControllerReadyStatus)
+    lengthInBits += 16;
+
+    // Simple field (controllerReadyStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdToolReadyStatus)
+    lengthInBits += 16;
+
+    // Simple field (toolReadyStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTime)
+    lengthInBits += 16;
+
+    // Simple field (alarmTime)
+    lengthInBits += 152;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageAlarmStatusBuilder
+      staticParseOpenProtocolMessageAlarmStatusBuilder(ReadBuffer readBuffer, Long revision)
+          throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmStatusRev2");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    int blockIdAlarmStatus =
+        readConstField(
+            "blockIdAlarmStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev2.BLOCKIDALARMSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    AlarmActiveStatus controllerAlarmStatus =
+        readEnumField(
+            "controllerAlarmStatus",
+            "AlarmActiveStatus",
+            new DataReaderEnumDefault<>(
+                AlarmActiveStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdErrorCode =
+        readConstField(
+            "blockIdErrorCode",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev2.BLOCKIDERRORCODE,
+            WithOption.WithEncoding("ASCII"));
+
+    String errorCode =
+        readSimpleField("errorCode", readString(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdControllerReadyStatus =
+        readConstField(
+            "blockIdControllerReadyStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev2.BLOCKIDCONTROLLERREADYSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    NokOk controllerReadyStatus =
+        readEnumField(
+            "controllerReadyStatus",
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdToolReadyStatus =
+        readConstField(
+            "blockIdToolReadyStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev2.BLOCKIDTOOLREADYSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    NokOk toolReadyStatus =
+        readEnumField(
+            "toolReadyStatus",
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTime =
+        readConstField(
+            "blockIdTime",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageAlarmStatusRev2.BLOCKIDTIME,
+            WithOption.WithEncoding("ASCII"));
+
+    String alarmTime =
+        readSimpleField("alarmTime", readString(readBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmStatusRev2");
+    // Create the instance
+    return new OpenProtocolMessageAlarmStatusRev2BuilderImpl(
+        controllerAlarmStatus, errorCode, controllerReadyStatus, toolReadyStatus, alarmTime);
+  }
+
+  public static class OpenProtocolMessageAlarmStatusRev2BuilderImpl
+      implements OpenProtocolMessageAlarmStatus.OpenProtocolMessageAlarmStatusBuilder {
+    private final AlarmActiveStatus controllerAlarmStatus;
+    private final String errorCode;
+    private final NokOk controllerReadyStatus;
+    private final NokOk toolReadyStatus;
+    private final String alarmTime;
+
+    public OpenProtocolMessageAlarmStatusRev2BuilderImpl(
+        AlarmActiveStatus controllerAlarmStatus,
+        String errorCode,
+        NokOk controllerReadyStatus,
+        NokOk toolReadyStatus,
+        String alarmTime) {
+      this.controllerAlarmStatus = controllerAlarmStatus;
+      this.errorCode = errorCode;
+      this.controllerReadyStatus = controllerReadyStatus;
+      this.toolReadyStatus = toolReadyStatus;
+      this.alarmTime = alarmTime;
+    }
+
+    public OpenProtocolMessageAlarmStatusRev2 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageAlarmStatusRev2 openProtocolMessageAlarmStatusRev2 =
+          new OpenProtocolMessageAlarmStatusRev2(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber,
+              controllerAlarmStatus,
+              errorCode,
+              controllerReadyStatus,
+              toolReadyStatus,
+              alarmTime);
+      return openProtocolMessageAlarmStatusRev2;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmStatusRev2)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmStatusRev2 that = (OpenProtocolMessageAlarmStatusRev2) o;
+    return (getControllerAlarmStatus() == that.getControllerAlarmStatus())
+        && (getErrorCode() == that.getErrorCode())
+        && (getControllerReadyStatus() == that.getControllerReadyStatus())
+        && (getToolReadyStatus() == that.getToolReadyStatus())
+        && (getAlarmTime() == that.getAlarmTime())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getControllerAlarmStatus(),
+        getErrorCode(),
+        getControllerReadyStatus(),
+        getToolReadyStatus(),
+        getAlarmTime());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmSubscribe.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmSubscribe.java
new file mode 100644
index 0000000000..acc06544d1
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmSubscribe.java
@@ -0,0 +1,191 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageAlarmSubscribe extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.AlarmSubscribe;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageAlarmSubscribe(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageAlarmSubscribeChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmSubscribe");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageAlarmSubscribeChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmSubscribe");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmSubscribe _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmSubscribe");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageAlarmSubscribeBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageAlarmSubscribeRev1.staticParseOpenProtocolMessageAlarmSubscribeBuilder(
+              readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmSubscribe");
+    // Create the instance
+    return new OpenProtocolMessageAlarmSubscribeBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageAlarmSubscribeBuilder {
+    OpenProtocolMessageAlarmSubscribe build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageAlarmSubscribeBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageAlarmSubscribeBuilder builder;
+
+    public OpenProtocolMessageAlarmSubscribeBuilderImpl(
+        OpenProtocolMessageAlarmSubscribeBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageAlarmSubscribe build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmSubscribe)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmSubscribe that = (OpenProtocolMessageAlarmSubscribe) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmSubscribeRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmSubscribeRev1.java
new file mode 100644
index 0000000000..df8e4a4114
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmSubscribeRev1.java
@@ -0,0 +1,153 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageAlarmSubscribeRev1 extends OpenProtocolMessageAlarmSubscribe
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  public OpenProtocolMessageAlarmSubscribeRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageAlarmSubscribeChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmSubscribeRev1");
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmSubscribeRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmSubscribeRev1 _value = this;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageAlarmSubscribeBuilder
+      staticParseOpenProtocolMessageAlarmSubscribeBuilder(ReadBuffer readBuffer, Long revision)
+          throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmSubscribeRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmSubscribeRev1");
+    // Create the instance
+    return new OpenProtocolMessageAlarmSubscribeRev1BuilderImpl();
+  }
+
+  public static class OpenProtocolMessageAlarmSubscribeRev1BuilderImpl
+      implements OpenProtocolMessageAlarmSubscribe.OpenProtocolMessageAlarmSubscribeBuilder {
+
+    public OpenProtocolMessageAlarmSubscribeRev1BuilderImpl() {}
+
+    public OpenProtocolMessageAlarmSubscribeRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageAlarmSubscribeRev1 openProtocolMessageAlarmSubscribeRev1 =
+          new OpenProtocolMessageAlarmSubscribeRev1(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber);
+      return openProtocolMessageAlarmSubscribeRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmSubscribeRev1)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmSubscribeRev1 that = (OpenProtocolMessageAlarmSubscribeRev1) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmUnsubscribe.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmUnsubscribe.java
new file mode 100644
index 0000000000..f733b519ec
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmUnsubscribe.java
@@ -0,0 +1,191 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageAlarmUnsubscribe extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.AlarmUnsubscribe;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageAlarmUnsubscribe(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageAlarmUnsubscribeChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmUnsubscribe");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageAlarmUnsubscribeChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmUnsubscribe");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmUnsubscribe _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmUnsubscribe");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageAlarmUnsubscribeBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageAlarmUnsubscribeRev1
+              .staticParseOpenProtocolMessageAlarmUnsubscribeBuilder(readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmUnsubscribe");
+    // Create the instance
+    return new OpenProtocolMessageAlarmUnsubscribeBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageAlarmUnsubscribeBuilder {
+    OpenProtocolMessageAlarmUnsubscribe build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageAlarmUnsubscribeBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageAlarmUnsubscribeBuilder builder;
+
+    public OpenProtocolMessageAlarmUnsubscribeBuilderImpl(
+        OpenProtocolMessageAlarmUnsubscribeBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageAlarmUnsubscribe build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmUnsubscribe)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmUnsubscribe that = (OpenProtocolMessageAlarmUnsubscribe) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmUnsubscribeRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmUnsubscribeRev1.java
new file mode 100644
index 0000000000..9e918f6bae
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageAlarmUnsubscribeRev1.java
@@ -0,0 +1,153 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageAlarmUnsubscribeRev1 extends OpenProtocolMessageAlarmUnsubscribe
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  public OpenProtocolMessageAlarmUnsubscribeRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageAlarmUnsubscribeChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageAlarmUnsubscribeRev1");
+
+    writeBuffer.popContext("OpenProtocolMessageAlarmUnsubscribeRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageAlarmUnsubscribeRev1 _value = this;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageAlarmUnsubscribeBuilder
+      staticParseOpenProtocolMessageAlarmUnsubscribeBuilder(ReadBuffer readBuffer, Long revision)
+          throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageAlarmUnsubscribeRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    readBuffer.closeContext("OpenProtocolMessageAlarmUnsubscribeRev1");
+    // Create the instance
+    return new OpenProtocolMessageAlarmUnsubscribeRev1BuilderImpl();
+  }
+
+  public static class OpenProtocolMessageAlarmUnsubscribeRev1BuilderImpl
+      implements OpenProtocolMessageAlarmUnsubscribe.OpenProtocolMessageAlarmUnsubscribeBuilder {
+
+    public OpenProtocolMessageAlarmUnsubscribeRev1BuilderImpl() {}
+
+    public OpenProtocolMessageAlarmUnsubscribeRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageAlarmUnsubscribeRev1 openProtocolMessageAlarmUnsubscribeRev1 =
+          new OpenProtocolMessageAlarmUnsubscribeRev1(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber);
+      return openProtocolMessageAlarmUnsubscribeRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageAlarmUnsubscribeRev1)) {
+      return false;
+    }
+    OpenProtocolMessageAlarmUnsubscribeRev1 that = (OpenProtocolMessageAlarmUnsubscribeRev1) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequest.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequest.java
new file mode 100644
index 0000000000..1ca231a85f
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequest.java
@@ -0,0 +1,196 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageExecuteDynamicJobRequest extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.ExecuteDynamicJobRequest;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageExecuteDynamicJobRequest(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageExecuteDynamicJobRequestChild(
+      WriteBuffer writeBuffer) throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageExecuteDynamicJobRequest");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageExecuteDynamicJobRequestChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageExecuteDynamicJobRequest");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageExecuteDynamicJobRequest _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageExecuteDynamicJobRequest");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageExecuteDynamicJobRequestBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageExecuteDynamicJobRequestRev1
+              .staticParseOpenProtocolMessageExecuteDynamicJobRequestBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 999)) {
+      builder =
+          OpenProtocolMessageExecuteDynamicJobRequestRev999
+              .staticParseOpenProtocolMessageExecuteDynamicJobRequestBuilder(readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageExecuteDynamicJobRequest");
+    // Create the instance
+    return new OpenProtocolMessageExecuteDynamicJobRequestBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageExecuteDynamicJobRequestBuilder {
+    OpenProtocolMessageExecuteDynamicJobRequest build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageExecuteDynamicJobRequestBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageExecuteDynamicJobRequestBuilder builder;
+
+    public OpenProtocolMessageExecuteDynamicJobRequestBuilderImpl(
+        OpenProtocolMessageExecuteDynamicJobRequestBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageExecuteDynamicJobRequest build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageExecuteDynamicJobRequest)) {
+      return false;
+    }
+    OpenProtocolMessageExecuteDynamicJobRequest that =
+        (OpenProtocolMessageExecuteDynamicJobRequest) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequestRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequestRev1.java
new file mode 100644
index 0000000000..a48ca90545
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequestRev1.java
@@ -0,0 +1,1116 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.math.BigInteger;
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageExecuteDynamicJobRequestRev1
+    extends OpenProtocolMessageExecuteDynamicJobRequest implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDJOBID = 1;
+  public static final Integer BLOCKIDJOBNAME = 2;
+  public static final Integer BLOCKIDNUMBEROFPARAMETERSETS = 3;
+  public static final Integer BLOCKIDJOBLIST = 4;
+  public static final Integer BLOCKIDFORCEDORDER = 5;
+  public static final Integer BLOCKIDLOCKATJOBDONE = 6;
+  public static final Integer BLOCKIDTOOLLOOSENING = 7;
+  public static final Integer BLOCKIDREPEATJOB = 8;
+  public static final Integer BLOCKIDJOBBATCHMODEANDCOUNTTYPE = 9;
+  public static final Integer BLOCKIDBATCHSTATUSATINCREMENTBYPASS = 10;
+  public static final Integer BLOCKIDDECREMENTBATCHATOKLOOSENING = 11;
+  public static final Integer BLOCKIDMAXTIMEFORFIRSTTIGHTENING = 12;
+  public static final Integer BLOCKIDMAXTIMETOCOMPLETEJOB = 13;
+  public static final Integer BLOCKIDDISPLAYRESULTATAUTOSELECT = 14;
+  public static final Integer BLOCKIDUSELINECONTROL = 15;
+  public static final Integer BLOCKIDIDENTIFIERRESULTPART = 16;
+  public static final Integer BLOCKIDRESULTOFNONTIGHTENINGS = 17;
+  public static final Integer BLOCKIDRESETALLIDENTIFIERSATJOBDONE = 18;
+  public static final Integer BLOCKIDRESERVED = 19;
+
+  // Properties.
+  protected final long jobId;
+  protected final String jobName;
+  protected final ForcedOrder forcedOrder;
+  protected final NoYes lockAtJobDone;
+  protected final ToolLoosening toolLoosening;
+  protected final NoYes repeatJob;
+  protected final JobBatchMode jobBatchModeAndCountType;
+  protected final OkNok batchStatusAtIncrementBypass;
+  protected final NoYes decrementBatchAtOkLoosening;
+  protected final long maxTimeForFirstTightening;
+  protected final BigInteger maxTimeToCompleteJob;
+  protected final long displayResultAtAutoSelect;
+  protected final NoYes useLineControl;
+  protected final IdentifierResult identifierResultPart;
+  protected final NoYes resultOfNonTightenings;
+  protected final NoYes resetAllIdentifiersAtJobDone;
+  protected final short jobRepair;
+
+  public OpenProtocolMessageExecuteDynamicJobRequestRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      long jobId,
+      String jobName,
+      ForcedOrder forcedOrder,
+      NoYes lockAtJobDone,
+      ToolLoosening toolLoosening,
+      NoYes repeatJob,
+      JobBatchMode jobBatchModeAndCountType,
+      OkNok batchStatusAtIncrementBypass,
+      NoYes decrementBatchAtOkLoosening,
+      long maxTimeForFirstTightening,
+      BigInteger maxTimeToCompleteJob,
+      long displayResultAtAutoSelect,
+      NoYes useLineControl,
+      IdentifierResult identifierResultPart,
+      NoYes resultOfNonTightenings,
+      NoYes resetAllIdentifiersAtJobDone,
+      short jobRepair) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.jobId = jobId;
+    this.jobName = jobName;
+    this.forcedOrder = forcedOrder;
+    this.lockAtJobDone = lockAtJobDone;
+    this.toolLoosening = toolLoosening;
+    this.repeatJob = repeatJob;
+    this.jobBatchModeAndCountType = jobBatchModeAndCountType;
+    this.batchStatusAtIncrementBypass = batchStatusAtIncrementBypass;
+    this.decrementBatchAtOkLoosening = decrementBatchAtOkLoosening;
+    this.maxTimeForFirstTightening = maxTimeForFirstTightening;
+    this.maxTimeToCompleteJob = maxTimeToCompleteJob;
+    this.displayResultAtAutoSelect = displayResultAtAutoSelect;
+    this.useLineControl = useLineControl;
+    this.identifierResultPart = identifierResultPart;
+    this.resultOfNonTightenings = resultOfNonTightenings;
+    this.resetAllIdentifiersAtJobDone = resetAllIdentifiersAtJobDone;
+    this.jobRepair = jobRepair;
+  }
+
+  public long getJobId() {
+    return jobId;
+  }
+
+  public String getJobName() {
+    return jobName;
+  }
+
+  public ForcedOrder getForcedOrder() {
+    return forcedOrder;
+  }
+
+  public NoYes getLockAtJobDone() {
+    return lockAtJobDone;
+  }
+
+  public ToolLoosening getToolLoosening() {
+    return toolLoosening;
+  }
+
+  public NoYes getRepeatJob() {
+    return repeatJob;
+  }
+
+  public JobBatchMode getJobBatchModeAndCountType() {
+    return jobBatchModeAndCountType;
+  }
+
+  public OkNok getBatchStatusAtIncrementBypass() {
+    return batchStatusAtIncrementBypass;
+  }
+
+  public NoYes getDecrementBatchAtOkLoosening() {
+    return decrementBatchAtOkLoosening;
+  }
+
+  public long getMaxTimeForFirstTightening() {
+    return maxTimeForFirstTightening;
+  }
+
+  public BigInteger getMaxTimeToCompleteJob() {
+    return maxTimeToCompleteJob;
+  }
+
+  public long getDisplayResultAtAutoSelect() {
+    return displayResultAtAutoSelect;
+  }
+
+  public NoYes getUseLineControl() {
+    return useLineControl;
+  }
+
+  public IdentifierResult getIdentifierResultPart() {
+    return identifierResultPart;
+  }
+
+  public NoYes getResultOfNonTightenings() {
+    return resultOfNonTightenings;
+  }
+
+  public NoYes getResetAllIdentifiersAtJobDone() {
+    return resetAllIdentifiersAtJobDone;
+  }
+
+  public short getJobRepair() {
+    return jobRepair;
+  }
+
+  public int getBlockIdJobId() {
+    return BLOCKIDJOBID;
+  }
+
+  public int getBlockIdJobName() {
+    return BLOCKIDJOBNAME;
+  }
+
+  public int getBlockIdNumberOfParameterSets() {
+    return BLOCKIDNUMBEROFPARAMETERSETS;
+  }
+
+  public int getBlockIdJobList() {
+    return BLOCKIDJOBLIST;
+  }
+
+  public int getBlockIdForcedOrder() {
+    return BLOCKIDFORCEDORDER;
+  }
+
+  public int getBlockIdLockAtJobDone() {
+    return BLOCKIDLOCKATJOBDONE;
+  }
+
+  public int getBlockIdToolLoosening() {
+    return BLOCKIDTOOLLOOSENING;
+  }
+
+  public int getBlockIdRepeatJob() {
+    return BLOCKIDREPEATJOB;
+  }
+
+  public int getBlockIdJobBatchModeAndCountType() {
+    return BLOCKIDJOBBATCHMODEANDCOUNTTYPE;
+  }
+
+  public int getBlockIdBatchStatusAtIncrementBypass() {
+    return BLOCKIDBATCHSTATUSATINCREMENTBYPASS;
+  }
+
+  public int getBlockIdDecrementBatchAtOkLoosening() {
+    return BLOCKIDDECREMENTBATCHATOKLOOSENING;
+  }
+
+  public int getBlockIdMaxTimeForFirstTightening() {
+    return BLOCKIDMAXTIMEFORFIRSTTIGHTENING;
+  }
+
+  public int getBlockIdMaxTimeToCompleteJob() {
+    return BLOCKIDMAXTIMETOCOMPLETEJOB;
+  }
+
+  public int getBlockIdDisplayResultAtAutoSelect() {
+    return BLOCKIDDISPLAYRESULTATAUTOSELECT;
+  }
+
+  public int getBlockIdUseLineControl() {
+    return BLOCKIDUSELINECONTROL;
+  }
+
+  public int getBlockIdIdentifierResultPart() {
+    return BLOCKIDIDENTIFIERRESULTPART;
+  }
+
+  public int getBlockIdResultOfNonTightenings() {
+    return BLOCKIDRESULTOFNONTIGHTENINGS;
+  }
+
+  public int getBlockIdResetAllIdentifiersAtJobDone() {
+    return BLOCKIDRESETALLIDENTIFIERSATJOBDONE;
+  }
+
+  public int getBlockIdReserved() {
+    return BLOCKIDRESERVED;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageExecuteDynamicJobRequestChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageExecuteDynamicJobRequestRev1");
+
+    // Const Field (blockIdJobId)
+    writeConstField(
+        "blockIdJobId",
+        BLOCKIDJOBID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobId)
+    writeSimpleField(
+        "jobId", jobId, writeUnsignedLong(writeBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobName)
+    writeConstField(
+        "blockIdJobName",
+        BLOCKIDJOBNAME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobName)
+    writeSimpleField(
+        "jobName", jobName, writeString(writeBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdNumberOfParameterSets)
+    writeConstField(
+        "blockIdNumberOfParameterSets",
+        BLOCKIDNUMBEROFPARAMETERSETS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobList)
+    writeConstField(
+        "blockIdJobList",
+        BLOCKIDJOBLIST,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdForcedOrder)
+    writeConstField(
+        "blockIdForcedOrder",
+        BLOCKIDFORCEDORDER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (forcedOrder)
+    writeSimpleEnumField(
+        "forcedOrder",
+        "ForcedOrder",
+        forcedOrder,
+        new DataWriterEnumDefault<>(
+            ForcedOrder::getValue, ForcedOrder::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdLockAtJobDone)
+    writeConstField(
+        "blockIdLockAtJobDone",
+        BLOCKIDLOCKATJOBDONE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (lockAtJobDone)
+    writeSimpleEnumField(
+        "lockAtJobDone",
+        "NoYes",
+        lockAtJobDone,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdToolLoosening)
+    writeConstField(
+        "blockIdToolLoosening",
+        BLOCKIDTOOLLOOSENING,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (toolLoosening)
+    writeSimpleEnumField(
+        "toolLoosening",
+        "ToolLoosening",
+        toolLoosening,
+        new DataWriterEnumDefault<>(
+            ToolLoosening::getValue, ToolLoosening::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRepeatJob)
+    writeConstField(
+        "blockIdRepeatJob",
+        BLOCKIDREPEATJOB,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (repeatJob)
+    writeSimpleEnumField(
+        "repeatJob",
+        "NoYes",
+        repeatJob,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobBatchModeAndCountType)
+    writeConstField(
+        "blockIdJobBatchModeAndCountType",
+        BLOCKIDJOBBATCHMODEANDCOUNTTYPE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobBatchModeAndCountType)
+    writeSimpleEnumField(
+        "jobBatchModeAndCountType",
+        "JobBatchMode",
+        jobBatchModeAndCountType,
+        new DataWriterEnumDefault<>(
+            JobBatchMode::getValue, JobBatchMode::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchStatusAtIncrementBypass)
+    writeConstField(
+        "blockIdBatchStatusAtIncrementBypass",
+        BLOCKIDBATCHSTATUSATINCREMENTBYPASS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchStatusAtIncrementBypass)
+    writeSimpleEnumField(
+        "batchStatusAtIncrementBypass",
+        "OkNok",
+        batchStatusAtIncrementBypass,
+        new DataWriterEnumDefault<>(
+            OkNok::getValue, OkNok::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdDecrementBatchAtOkLoosening)
+    writeConstField(
+        "blockIdDecrementBatchAtOkLoosening",
+        BLOCKIDDECREMENTBATCHATOKLOOSENING,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (decrementBatchAtOkLoosening)
+    writeSimpleEnumField(
+        "decrementBatchAtOkLoosening",
+        "NoYes",
+        decrementBatchAtOkLoosening,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdMaxTimeForFirstTightening)
+    writeConstField(
+        "blockIdMaxTimeForFirstTightening",
+        BLOCKIDMAXTIMEFORFIRSTTIGHTENING,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (maxTimeForFirstTightening)
+    writeSimpleField(
+        "maxTimeForFirstTightening",
+        maxTimeForFirstTightening,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdMaxTimeToCompleteJob)
+    writeConstField(
+        "blockIdMaxTimeToCompleteJob",
+        BLOCKIDMAXTIMETOCOMPLETEJOB,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (maxTimeToCompleteJob)
+    writeSimpleField(
+        "maxTimeToCompleteJob",
+        maxTimeToCompleteJob,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdDisplayResultAtAutoSelect)
+    writeConstField(
+        "blockIdDisplayResultAtAutoSelect",
+        BLOCKIDDISPLAYRESULTATAUTOSELECT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (displayResultAtAutoSelect)
+    writeSimpleField(
+        "displayResultAtAutoSelect",
+        displayResultAtAutoSelect,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdUseLineControl)
+    writeConstField(
+        "blockIdUseLineControl",
+        BLOCKIDUSELINECONTROL,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (useLineControl)
+    writeSimpleEnumField(
+        "useLineControl",
+        "NoYes",
+        useLineControl,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdIdentifierResultPart)
+    writeConstField(
+        "blockIdIdentifierResultPart",
+        BLOCKIDIDENTIFIERRESULTPART,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (identifierResultPart)
+    writeSimpleEnumField(
+        "identifierResultPart",
+        "IdentifierResult",
+        identifierResultPart,
+        new DataWriterEnumDefault<>(
+            IdentifierResult::getValue, IdentifierResult::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdResultOfNonTightenings)
+    writeConstField(
+        "blockIdResultOfNonTightenings",
+        BLOCKIDRESULTOFNONTIGHTENINGS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (resultOfNonTightenings)
+    writeSimpleEnumField(
+        "resultOfNonTightenings",
+        "NoYes",
+        resultOfNonTightenings,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdResetAllIdentifiersAtJobDone)
+    writeConstField(
+        "blockIdResetAllIdentifiersAtJobDone",
+        BLOCKIDRESETALLIDENTIFIERSATJOBDONE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (resetAllIdentifiersAtJobDone)
+    writeSimpleEnumField(
+        "resetAllIdentifiersAtJobDone",
+        "NoYes",
+        resetAllIdentifiersAtJobDone,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdReserved)
+    writeConstField(
+        "blockIdReserved",
+        BLOCKIDRESERVED,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobRepair)
+    writeSimpleField(
+        "jobRepair",
+        jobRepair,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageExecuteDynamicJobRequestRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageExecuteDynamicJobRequestRev1 _value = this;
+
+    // Const Field (blockIdJobId)
+    lengthInBits += 16;
+
+    // Simple field (jobId)
+    lengthInBits += 32;
+
+    // Const Field (blockIdJobName)
+    lengthInBits += 16;
+
+    // Simple field (jobName)
+    lengthInBits += 200;
+
+    // Const Field (blockIdNumberOfParameterSets)
+    lengthInBits += 16;
+
+    // Const Field (blockIdJobList)
+    lengthInBits += 16;
+
+    // Const Field (blockIdForcedOrder)
+    lengthInBits += 16;
+
+    // Simple field (forcedOrder)
+    lengthInBits += 8;
+
+    // Const Field (blockIdLockAtJobDone)
+    lengthInBits += 16;
+
+    // Simple field (lockAtJobDone)
+    lengthInBits += 8;
+
+    // Const Field (blockIdToolLoosening)
+    lengthInBits += 16;
+
+    // Simple field (toolLoosening)
+    lengthInBits += 8;
+
+    // Const Field (blockIdRepeatJob)
+    lengthInBits += 16;
+
+    // Simple field (repeatJob)
+    lengthInBits += 8;
+
+    // Const Field (blockIdJobBatchModeAndCountType)
+    lengthInBits += 16;
+
+    // Simple field (jobBatchModeAndCountType)
+    lengthInBits += 8;
+
+    // Const Field (blockIdBatchStatusAtIncrementBypass)
+    lengthInBits += 16;
+
+    // Simple field (batchStatusAtIncrementBypass)
+    lengthInBits += 8;
+
+    // Const Field (blockIdDecrementBatchAtOkLoosening)
+    lengthInBits += 16;
+
+    // Simple field (decrementBatchAtOkLoosening)
+    lengthInBits += 8;
+
+    // Const Field (blockIdMaxTimeForFirstTightening)
+    lengthInBits += 16;
+
+    // Simple field (maxTimeForFirstTightening)
+    lengthInBits += 32;
+
+    // Const Field (blockIdMaxTimeToCompleteJob)
+    lengthInBits += 16;
+
+    // Simple field (maxTimeToCompleteJob)
+    lengthInBits += 40;
+
+    // Const Field (blockIdDisplayResultAtAutoSelect)
+    lengthInBits += 16;
+
+    // Simple field (displayResultAtAutoSelect)
+    lengthInBits += 32;
+
+    // Const Field (blockIdUseLineControl)
+    lengthInBits += 16;
+
+    // Simple field (useLineControl)
+    lengthInBits += 8;
+
+    // Const Field (blockIdIdentifierResultPart)
+    lengthInBits += 16;
+
+    // Simple field (identifierResultPart)
+    lengthInBits += 8;
+
+    // Const Field (blockIdResultOfNonTightenings)
+    lengthInBits += 16;
+
+    // Simple field (resultOfNonTightenings)
+    lengthInBits += 8;
+
+    // Const Field (blockIdResetAllIdentifiersAtJobDone)
+    lengthInBits += 16;
+
+    // Simple field (resetAllIdentifiersAtJobDone)
+    lengthInBits += 8;
+
+    // Const Field (blockIdReserved)
+    lengthInBits += 16;
+
+    // Simple field (jobRepair)
+    lengthInBits += 8;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageExecuteDynamicJobRequestBuilder
+      staticParseOpenProtocolMessageExecuteDynamicJobRequestBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageExecuteDynamicJobRequestRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    int blockIdJobId =
+        readConstField(
+            "blockIdJobId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDJOBID,
+            WithOption.WithEncoding("ASCII"));
+
+    long jobId =
+        readSimpleField(
+            "jobId", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobName =
+        readConstField(
+            "blockIdJobName",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDJOBNAME,
+            WithOption.WithEncoding("ASCII"));
+
+    String jobName =
+        readSimpleField("jobName", readString(readBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    int blockIdNumberOfParameterSets =
+        readConstField(
+            "blockIdNumberOfParameterSets",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDNUMBEROFPARAMETERSETS,
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobList =
+        readConstField(
+            "blockIdJobList",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDJOBLIST,
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdForcedOrder =
+        readConstField(
+            "blockIdForcedOrder",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDFORCEDORDER,
+            WithOption.WithEncoding("ASCII"));
+
+    ForcedOrder forcedOrder =
+        readEnumField(
+            "forcedOrder",
+            "ForcedOrder",
+            new DataReaderEnumDefault<>(
+                ForcedOrder::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdLockAtJobDone =
+        readConstField(
+            "blockIdLockAtJobDone",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDLOCKATJOBDONE,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes lockAtJobDone =
+        readEnumField(
+            "lockAtJobDone",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdToolLoosening =
+        readConstField(
+            "blockIdToolLoosening",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDTOOLLOOSENING,
+            WithOption.WithEncoding("ASCII"));
+
+    ToolLoosening toolLoosening =
+        readEnumField(
+            "toolLoosening",
+            "ToolLoosening",
+            new DataReaderEnumDefault<>(
+                ToolLoosening::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdRepeatJob =
+        readConstField(
+            "blockIdRepeatJob",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDREPEATJOB,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes repeatJob =
+        readEnumField(
+            "repeatJob",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobBatchModeAndCountType =
+        readConstField(
+            "blockIdJobBatchModeAndCountType",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDJOBBATCHMODEANDCOUNTTYPE,
+            WithOption.WithEncoding("ASCII"));
+
+    JobBatchMode jobBatchModeAndCountType =
+        readEnumField(
+            "jobBatchModeAndCountType",
+            "JobBatchMode",
+            new DataReaderEnumDefault<>(
+                JobBatchMode::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchStatusAtIncrementBypass =
+        readConstField(
+            "blockIdBatchStatusAtIncrementBypass",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDBATCHSTATUSATINCREMENTBYPASS,
+            WithOption.WithEncoding("ASCII"));
+
+    OkNok batchStatusAtIncrementBypass =
+        readEnumField(
+            "batchStatusAtIncrementBypass",
+            "OkNok",
+            new DataReaderEnumDefault<>(OkNok::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdDecrementBatchAtOkLoosening =
+        readConstField(
+            "blockIdDecrementBatchAtOkLoosening",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDDECREMENTBATCHATOKLOOSENING,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes decrementBatchAtOkLoosening =
+        readEnumField(
+            "decrementBatchAtOkLoosening",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdMaxTimeForFirstTightening =
+        readConstField(
+            "blockIdMaxTimeForFirstTightening",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDMAXTIMEFORFIRSTTIGHTENING,
+            WithOption.WithEncoding("ASCII"));
+
+    long maxTimeForFirstTightening =
+        readSimpleField(
+            "maxTimeForFirstTightening",
+            readUnsignedLong(readBuffer, 32),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdMaxTimeToCompleteJob =
+        readConstField(
+            "blockIdMaxTimeToCompleteJob",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDMAXTIMETOCOMPLETEJOB,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger maxTimeToCompleteJob =
+        readSimpleField(
+            "maxTimeToCompleteJob",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdDisplayResultAtAutoSelect =
+        readConstField(
+            "blockIdDisplayResultAtAutoSelect",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDDISPLAYRESULTATAUTOSELECT,
+            WithOption.WithEncoding("ASCII"));
+
+    long displayResultAtAutoSelect =
+        readSimpleField(
+            "displayResultAtAutoSelect",
+            readUnsignedLong(readBuffer, 32),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdUseLineControl =
+        readConstField(
+            "blockIdUseLineControl",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDUSELINECONTROL,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes useLineControl =
+        readEnumField(
+            "useLineControl",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdIdentifierResultPart =
+        readConstField(
+            "blockIdIdentifierResultPart",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDIDENTIFIERRESULTPART,
+            WithOption.WithEncoding("ASCII"));
+
+    IdentifierResult identifierResultPart =
+        readEnumField(
+            "identifierResultPart",
+            "IdentifierResult",
+            new DataReaderEnumDefault<>(
+                IdentifierResult::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdResultOfNonTightenings =
+        readConstField(
+            "blockIdResultOfNonTightenings",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDRESULTOFNONTIGHTENINGS,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes resultOfNonTightenings =
+        readEnumField(
+            "resultOfNonTightenings",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdResetAllIdentifiersAtJobDone =
+        readConstField(
+            "blockIdResetAllIdentifiersAtJobDone",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDRESETALLIDENTIFIERSATJOBDONE,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes resetAllIdentifiersAtJobDone =
+        readEnumField(
+            "resetAllIdentifiersAtJobDone",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdReserved =
+        readConstField(
+            "blockIdReserved",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev1.BLOCKIDRESERVED,
+            WithOption.WithEncoding("ASCII"));
+
+    short jobRepair =
+        readSimpleField(
+            "jobRepair", readUnsignedShort(readBuffer, 8), WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageExecuteDynamicJobRequestRev1");
+    // Create the instance
+    return new OpenProtocolMessageExecuteDynamicJobRequestRev1BuilderImpl(
+        jobId,
+        jobName,
+        forcedOrder,
+        lockAtJobDone,
+        toolLoosening,
+        repeatJob,
+        jobBatchModeAndCountType,
+        batchStatusAtIncrementBypass,
+        decrementBatchAtOkLoosening,
+        maxTimeForFirstTightening,
+        maxTimeToCompleteJob,
+        displayResultAtAutoSelect,
+        useLineControl,
+        identifierResultPart,
+        resultOfNonTightenings,
+        resetAllIdentifiersAtJobDone,
+        jobRepair);
+  }
+
+  public static class OpenProtocolMessageExecuteDynamicJobRequestRev1BuilderImpl
+      implements OpenProtocolMessageExecuteDynamicJobRequest
+          .OpenProtocolMessageExecuteDynamicJobRequestBuilder {
+    private final long jobId;
+    private final String jobName;
+    private final ForcedOrder forcedOrder;
+    private final NoYes lockAtJobDone;
+    private final ToolLoosening toolLoosening;
+    private final NoYes repeatJob;
+    private final JobBatchMode jobBatchModeAndCountType;
+    private final OkNok batchStatusAtIncrementBypass;
+    private final NoYes decrementBatchAtOkLoosening;
+    private final long maxTimeForFirstTightening;
+    private final BigInteger maxTimeToCompleteJob;
+    private final long displayResultAtAutoSelect;
+    private final NoYes useLineControl;
+    private final IdentifierResult identifierResultPart;
+    private final NoYes resultOfNonTightenings;
+    private final NoYes resetAllIdentifiersAtJobDone;
+    private final short jobRepair;
+
+    public OpenProtocolMessageExecuteDynamicJobRequestRev1BuilderImpl(
+        long jobId,
+        String jobName,
+        ForcedOrder forcedOrder,
+        NoYes lockAtJobDone,
+        ToolLoosening toolLoosening,
+        NoYes repeatJob,
+        JobBatchMode jobBatchModeAndCountType,
+        OkNok batchStatusAtIncrementBypass,
+        NoYes decrementBatchAtOkLoosening,
+        long maxTimeForFirstTightening,
+        BigInteger maxTimeToCompleteJob,
+        long displayResultAtAutoSelect,
+        NoYes useLineControl,
+        IdentifierResult identifierResultPart,
+        NoYes resultOfNonTightenings,
+        NoYes resetAllIdentifiersAtJobDone,
+        short jobRepair) {
+      this.jobId = jobId;
+      this.jobName = jobName;
+      this.forcedOrder = forcedOrder;
+      this.lockAtJobDone = lockAtJobDone;
+      this.toolLoosening = toolLoosening;
+      this.repeatJob = repeatJob;
+      this.jobBatchModeAndCountType = jobBatchModeAndCountType;
+      this.batchStatusAtIncrementBypass = batchStatusAtIncrementBypass;
+      this.decrementBatchAtOkLoosening = decrementBatchAtOkLoosening;
+      this.maxTimeForFirstTightening = maxTimeForFirstTightening;
+      this.maxTimeToCompleteJob = maxTimeToCompleteJob;
+      this.displayResultAtAutoSelect = displayResultAtAutoSelect;
+      this.useLineControl = useLineControl;
+      this.identifierResultPart = identifierResultPart;
+      this.resultOfNonTightenings = resultOfNonTightenings;
+      this.resetAllIdentifiersAtJobDone = resetAllIdentifiersAtJobDone;
+      this.jobRepair = jobRepair;
+    }
+
+    public OpenProtocolMessageExecuteDynamicJobRequestRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageExecuteDynamicJobRequestRev1
+          openProtocolMessageExecuteDynamicJobRequestRev1 =
+              new OpenProtocolMessageExecuteDynamicJobRequestRev1(
+                  midRevision,
+                  noAckFlag,
+                  targetStationId,
+                  targetSpindleId,
+                  sequenceNumber,
+                  numberOfMessageParts,
+                  messagePartNumber,
+                  jobId,
+                  jobName,
+                  forcedOrder,
+                  lockAtJobDone,
+                  toolLoosening,
+                  repeatJob,
+                  jobBatchModeAndCountType,
+                  batchStatusAtIncrementBypass,
+                  decrementBatchAtOkLoosening,
+                  maxTimeForFirstTightening,
+                  maxTimeToCompleteJob,
+                  displayResultAtAutoSelect,
+                  useLineControl,
+                  identifierResultPart,
+                  resultOfNonTightenings,
+                  resetAllIdentifiersAtJobDone,
+                  jobRepair);
+      return openProtocolMessageExecuteDynamicJobRequestRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageExecuteDynamicJobRequestRev1)) {
+      return false;
+    }
+    OpenProtocolMessageExecuteDynamicJobRequestRev1 that =
+        (OpenProtocolMessageExecuteDynamicJobRequestRev1) o;
+    return (getJobId() == that.getJobId())
+        && (getJobName() == that.getJobName())
+        && (getForcedOrder() == that.getForcedOrder())
+        && (getLockAtJobDone() == that.getLockAtJobDone())
+        && (getToolLoosening() == that.getToolLoosening())
+        && (getRepeatJob() == that.getRepeatJob())
+        && (getJobBatchModeAndCountType() == that.getJobBatchModeAndCountType())
+        && (getBatchStatusAtIncrementBypass() == that.getBatchStatusAtIncrementBypass())
+        && (getDecrementBatchAtOkLoosening() == that.getDecrementBatchAtOkLoosening())
+        && (getMaxTimeForFirstTightening() == that.getMaxTimeForFirstTightening())
+        && (getMaxTimeToCompleteJob() == that.getMaxTimeToCompleteJob())
+        && (getDisplayResultAtAutoSelect() == that.getDisplayResultAtAutoSelect())
+        && (getUseLineControl() == that.getUseLineControl())
+        && (getIdentifierResultPart() == that.getIdentifierResultPart())
+        && (getResultOfNonTightenings() == that.getResultOfNonTightenings())
+        && (getResetAllIdentifiersAtJobDone() == that.getResetAllIdentifiersAtJobDone())
+        && (getJobRepair() == that.getJobRepair())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getJobId(),
+        getJobName(),
+        getForcedOrder(),
+        getLockAtJobDone(),
+        getToolLoosening(),
+        getRepeatJob(),
+        getJobBatchModeAndCountType(),
+        getBatchStatusAtIncrementBypass(),
+        getDecrementBatchAtOkLoosening(),
+        getMaxTimeForFirstTightening(),
+        getMaxTimeToCompleteJob(),
+        getDisplayResultAtAutoSelect(),
+        getUseLineControl(),
+        getIdentifierResultPart(),
+        getResultOfNonTightenings(),
+        getResetAllIdentifiersAtJobDone(),
+        getJobRepair());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequestRev999.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequestRev999.java
new file mode 100644
index 0000000000..dd65425f80
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageExecuteDynamicJobRequestRev999.java
@@ -0,0 +1,1116 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.math.BigInteger;
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageExecuteDynamicJobRequestRev999
+    extends OpenProtocolMessageExecuteDynamicJobRequest implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 999;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDJOBID = 1;
+  public static final Integer BLOCKIDJOBNAME = 2;
+  public static final Integer BLOCKIDNUMBEROFPARAMETERSETS = 3;
+  public static final Integer BLOCKIDJOBLIST = 4;
+  public static final Integer BLOCKIDFORCEDORDER = 5;
+  public static final Integer BLOCKIDLOCKATJOBDONE = 6;
+  public static final Integer BLOCKIDTOOLLOOSENING = 7;
+  public static final Integer BLOCKIDREPEATJOB = 8;
+  public static final Integer BLOCKIDJOBBATCHMODEANDCOUNTTYPE = 9;
+  public static final Integer BLOCKIDBATCHSTATUSATINCREMENTBYPASS = 10;
+  public static final Integer BLOCKIDDECREMENTBATCHATOKLOOSENING = 11;
+  public static final Integer BLOCKIDMAXTIMEFORFIRSTTIGHTENING = 12;
+  public static final Integer BLOCKIDMAXTIMETOCOMPLETEJOB = 13;
+  public static final Integer BLOCKIDDISPLAYRESULTATAUTOSELECT = 14;
+  public static final Integer BLOCKIDUSELINECONTROL = 15;
+  public static final Integer BLOCKIDIDENTIFIERRESULTPART = 16;
+  public static final Integer BLOCKIDRESULTOFNONTIGHTENINGS = 17;
+  public static final Integer BLOCKIDRESETALLIDENTIFIERSATJOBDONE = 18;
+  public static final Integer BLOCKIDRESERVED = 19;
+
+  // Properties.
+  protected final long jobId;
+  protected final String jobName;
+  protected final ForcedOrder forcedOrder;
+  protected final NoYes lockAtJobDone;
+  protected final ToolLoosening toolLoosening;
+  protected final NoYes repeatJob;
+  protected final JobBatchMode jobBatchModeAndCountType;
+  protected final OkNok batchStatusAtIncrementBypass;
+  protected final NoYes decrementBatchAtOkLoosening;
+  protected final long maxTimeForFirstTightening;
+  protected final BigInteger maxTimeToCompleteJob;
+  protected final long displayResultAtAutoSelect;
+  protected final NoYes useLineControl;
+  protected final IdentifierResult identifierResultPart;
+  protected final NoYes resultOfNonTightenings;
+  protected final NoYes resetAllIdentifiersAtJobDone;
+  protected final short jobRepair;
+
+  public OpenProtocolMessageExecuteDynamicJobRequestRev999(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      long jobId,
+      String jobName,
+      ForcedOrder forcedOrder,
+      NoYes lockAtJobDone,
+      ToolLoosening toolLoosening,
+      NoYes repeatJob,
+      JobBatchMode jobBatchModeAndCountType,
+      OkNok batchStatusAtIncrementBypass,
+      NoYes decrementBatchAtOkLoosening,
+      long maxTimeForFirstTightening,
+      BigInteger maxTimeToCompleteJob,
+      long displayResultAtAutoSelect,
+      NoYes useLineControl,
+      IdentifierResult identifierResultPart,
+      NoYes resultOfNonTightenings,
+      NoYes resetAllIdentifiersAtJobDone,
+      short jobRepair) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.jobId = jobId;
+    this.jobName = jobName;
+    this.forcedOrder = forcedOrder;
+    this.lockAtJobDone = lockAtJobDone;
+    this.toolLoosening = toolLoosening;
+    this.repeatJob = repeatJob;
+    this.jobBatchModeAndCountType = jobBatchModeAndCountType;
+    this.batchStatusAtIncrementBypass = batchStatusAtIncrementBypass;
+    this.decrementBatchAtOkLoosening = decrementBatchAtOkLoosening;
+    this.maxTimeForFirstTightening = maxTimeForFirstTightening;
+    this.maxTimeToCompleteJob = maxTimeToCompleteJob;
+    this.displayResultAtAutoSelect = displayResultAtAutoSelect;
+    this.useLineControl = useLineControl;
+    this.identifierResultPart = identifierResultPart;
+    this.resultOfNonTightenings = resultOfNonTightenings;
+    this.resetAllIdentifiersAtJobDone = resetAllIdentifiersAtJobDone;
+    this.jobRepair = jobRepair;
+  }
+
+  public long getJobId() {
+    return jobId;
+  }
+
+  public String getJobName() {
+    return jobName;
+  }
+
+  public ForcedOrder getForcedOrder() {
+    return forcedOrder;
+  }
+
+  public NoYes getLockAtJobDone() {
+    return lockAtJobDone;
+  }
+
+  public ToolLoosening getToolLoosening() {
+    return toolLoosening;
+  }
+
+  public NoYes getRepeatJob() {
+    return repeatJob;
+  }
+
+  public JobBatchMode getJobBatchModeAndCountType() {
+    return jobBatchModeAndCountType;
+  }
+
+  public OkNok getBatchStatusAtIncrementBypass() {
+    return batchStatusAtIncrementBypass;
+  }
+
+  public NoYes getDecrementBatchAtOkLoosening() {
+    return decrementBatchAtOkLoosening;
+  }
+
+  public long getMaxTimeForFirstTightening() {
+    return maxTimeForFirstTightening;
+  }
+
+  public BigInteger getMaxTimeToCompleteJob() {
+    return maxTimeToCompleteJob;
+  }
+
+  public long getDisplayResultAtAutoSelect() {
+    return displayResultAtAutoSelect;
+  }
+
+  public NoYes getUseLineControl() {
+    return useLineControl;
+  }
+
+  public IdentifierResult getIdentifierResultPart() {
+    return identifierResultPart;
+  }
+
+  public NoYes getResultOfNonTightenings() {
+    return resultOfNonTightenings;
+  }
+
+  public NoYes getResetAllIdentifiersAtJobDone() {
+    return resetAllIdentifiersAtJobDone;
+  }
+
+  public short getJobRepair() {
+    return jobRepair;
+  }
+
+  public int getBlockIdJobId() {
+    return BLOCKIDJOBID;
+  }
+
+  public int getBlockIdJobName() {
+    return BLOCKIDJOBNAME;
+  }
+
+  public int getBlockIdNumberOfParameterSets() {
+    return BLOCKIDNUMBEROFPARAMETERSETS;
+  }
+
+  public int getBlockIdJobList() {
+    return BLOCKIDJOBLIST;
+  }
+
+  public int getBlockIdForcedOrder() {
+    return BLOCKIDFORCEDORDER;
+  }
+
+  public int getBlockIdLockAtJobDone() {
+    return BLOCKIDLOCKATJOBDONE;
+  }
+
+  public int getBlockIdToolLoosening() {
+    return BLOCKIDTOOLLOOSENING;
+  }
+
+  public int getBlockIdRepeatJob() {
+    return BLOCKIDREPEATJOB;
+  }
+
+  public int getBlockIdJobBatchModeAndCountType() {
+    return BLOCKIDJOBBATCHMODEANDCOUNTTYPE;
+  }
+
+  public int getBlockIdBatchStatusAtIncrementBypass() {
+    return BLOCKIDBATCHSTATUSATINCREMENTBYPASS;
+  }
+
+  public int getBlockIdDecrementBatchAtOkLoosening() {
+    return BLOCKIDDECREMENTBATCHATOKLOOSENING;
+  }
+
+  public int getBlockIdMaxTimeForFirstTightening() {
+    return BLOCKIDMAXTIMEFORFIRSTTIGHTENING;
+  }
+
+  public int getBlockIdMaxTimeToCompleteJob() {
+    return BLOCKIDMAXTIMETOCOMPLETEJOB;
+  }
+
+  public int getBlockIdDisplayResultAtAutoSelect() {
+    return BLOCKIDDISPLAYRESULTATAUTOSELECT;
+  }
+
+  public int getBlockIdUseLineControl() {
+    return BLOCKIDUSELINECONTROL;
+  }
+
+  public int getBlockIdIdentifierResultPart() {
+    return BLOCKIDIDENTIFIERRESULTPART;
+  }
+
+  public int getBlockIdResultOfNonTightenings() {
+    return BLOCKIDRESULTOFNONTIGHTENINGS;
+  }
+
+  public int getBlockIdResetAllIdentifiersAtJobDone() {
+    return BLOCKIDRESETALLIDENTIFIERSATJOBDONE;
+  }
+
+  public int getBlockIdReserved() {
+    return BLOCKIDRESERVED;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageExecuteDynamicJobRequestChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageExecuteDynamicJobRequestRev999");
+
+    // Const Field (blockIdJobId)
+    writeConstField(
+        "blockIdJobId",
+        BLOCKIDJOBID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobId)
+    writeSimpleField(
+        "jobId", jobId, writeUnsignedLong(writeBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobName)
+    writeConstField(
+        "blockIdJobName",
+        BLOCKIDJOBNAME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobName)
+    writeSimpleField(
+        "jobName", jobName, writeString(writeBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdNumberOfParameterSets)
+    writeConstField(
+        "blockIdNumberOfParameterSets",
+        BLOCKIDNUMBEROFPARAMETERSETS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobList)
+    writeConstField(
+        "blockIdJobList",
+        BLOCKIDJOBLIST,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdForcedOrder)
+    writeConstField(
+        "blockIdForcedOrder",
+        BLOCKIDFORCEDORDER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (forcedOrder)
+    writeSimpleEnumField(
+        "forcedOrder",
+        "ForcedOrder",
+        forcedOrder,
+        new DataWriterEnumDefault<>(
+            ForcedOrder::getValue, ForcedOrder::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdLockAtJobDone)
+    writeConstField(
+        "blockIdLockAtJobDone",
+        BLOCKIDLOCKATJOBDONE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (lockAtJobDone)
+    writeSimpleEnumField(
+        "lockAtJobDone",
+        "NoYes",
+        lockAtJobDone,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdToolLoosening)
+    writeConstField(
+        "blockIdToolLoosening",
+        BLOCKIDTOOLLOOSENING,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (toolLoosening)
+    writeSimpleEnumField(
+        "toolLoosening",
+        "ToolLoosening",
+        toolLoosening,
+        new DataWriterEnumDefault<>(
+            ToolLoosening::getValue, ToolLoosening::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRepeatJob)
+    writeConstField(
+        "blockIdRepeatJob",
+        BLOCKIDREPEATJOB,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (repeatJob)
+    writeSimpleEnumField(
+        "repeatJob",
+        "NoYes",
+        repeatJob,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobBatchModeAndCountType)
+    writeConstField(
+        "blockIdJobBatchModeAndCountType",
+        BLOCKIDJOBBATCHMODEANDCOUNTTYPE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobBatchModeAndCountType)
+    writeSimpleEnumField(
+        "jobBatchModeAndCountType",
+        "JobBatchMode",
+        jobBatchModeAndCountType,
+        new DataWriterEnumDefault<>(
+            JobBatchMode::getValue, JobBatchMode::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchStatusAtIncrementBypass)
+    writeConstField(
+        "blockIdBatchStatusAtIncrementBypass",
+        BLOCKIDBATCHSTATUSATINCREMENTBYPASS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchStatusAtIncrementBypass)
+    writeSimpleEnumField(
+        "batchStatusAtIncrementBypass",
+        "OkNok",
+        batchStatusAtIncrementBypass,
+        new DataWriterEnumDefault<>(
+            OkNok::getValue, OkNok::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdDecrementBatchAtOkLoosening)
+    writeConstField(
+        "blockIdDecrementBatchAtOkLoosening",
+        BLOCKIDDECREMENTBATCHATOKLOOSENING,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (decrementBatchAtOkLoosening)
+    writeSimpleEnumField(
+        "decrementBatchAtOkLoosening",
+        "NoYes",
+        decrementBatchAtOkLoosening,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdMaxTimeForFirstTightening)
+    writeConstField(
+        "blockIdMaxTimeForFirstTightening",
+        BLOCKIDMAXTIMEFORFIRSTTIGHTENING,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (maxTimeForFirstTightening)
+    writeSimpleField(
+        "maxTimeForFirstTightening",
+        maxTimeForFirstTightening,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdMaxTimeToCompleteJob)
+    writeConstField(
+        "blockIdMaxTimeToCompleteJob",
+        BLOCKIDMAXTIMETOCOMPLETEJOB,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (maxTimeToCompleteJob)
+    writeSimpleField(
+        "maxTimeToCompleteJob",
+        maxTimeToCompleteJob,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdDisplayResultAtAutoSelect)
+    writeConstField(
+        "blockIdDisplayResultAtAutoSelect",
+        BLOCKIDDISPLAYRESULTATAUTOSELECT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (displayResultAtAutoSelect)
+    writeSimpleField(
+        "displayResultAtAutoSelect",
+        displayResultAtAutoSelect,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdUseLineControl)
+    writeConstField(
+        "blockIdUseLineControl",
+        BLOCKIDUSELINECONTROL,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (useLineControl)
+    writeSimpleEnumField(
+        "useLineControl",
+        "NoYes",
+        useLineControl,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdIdentifierResultPart)
+    writeConstField(
+        "blockIdIdentifierResultPart",
+        BLOCKIDIDENTIFIERRESULTPART,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (identifierResultPart)
+    writeSimpleEnumField(
+        "identifierResultPart",
+        "IdentifierResult",
+        identifierResultPart,
+        new DataWriterEnumDefault<>(
+            IdentifierResult::getValue, IdentifierResult::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdResultOfNonTightenings)
+    writeConstField(
+        "blockIdResultOfNonTightenings",
+        BLOCKIDRESULTOFNONTIGHTENINGS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (resultOfNonTightenings)
+    writeSimpleEnumField(
+        "resultOfNonTightenings",
+        "NoYes",
+        resultOfNonTightenings,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdResetAllIdentifiersAtJobDone)
+    writeConstField(
+        "blockIdResetAllIdentifiersAtJobDone",
+        BLOCKIDRESETALLIDENTIFIERSATJOBDONE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (resetAllIdentifiersAtJobDone)
+    writeSimpleEnumField(
+        "resetAllIdentifiersAtJobDone",
+        "NoYes",
+        resetAllIdentifiersAtJobDone,
+        new DataWriterEnumDefault<>(
+            NoYes::getValue, NoYes::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdReserved)
+    writeConstField(
+        "blockIdReserved",
+        BLOCKIDRESERVED,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobRepair)
+    writeSimpleField(
+        "jobRepair",
+        jobRepair,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageExecuteDynamicJobRequestRev999");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageExecuteDynamicJobRequestRev999 _value = this;
+
+    // Const Field (blockIdJobId)
+    lengthInBits += 16;
+
+    // Simple field (jobId)
+    lengthInBits += 32;
+
+    // Const Field (blockIdJobName)
+    lengthInBits += 16;
+
+    // Simple field (jobName)
+    lengthInBits += 200;
+
+    // Const Field (blockIdNumberOfParameterSets)
+    lengthInBits += 16;
+
+    // Const Field (blockIdJobList)
+    lengthInBits += 16;
+
+    // Const Field (blockIdForcedOrder)
+    lengthInBits += 16;
+
+    // Simple field (forcedOrder)
+    lengthInBits += 8;
+
+    // Const Field (blockIdLockAtJobDone)
+    lengthInBits += 16;
+
+    // Simple field (lockAtJobDone)
+    lengthInBits += 8;
+
+    // Const Field (blockIdToolLoosening)
+    lengthInBits += 16;
+
+    // Simple field (toolLoosening)
+    lengthInBits += 8;
+
+    // Const Field (blockIdRepeatJob)
+    lengthInBits += 16;
+
+    // Simple field (repeatJob)
+    lengthInBits += 8;
+
+    // Const Field (blockIdJobBatchModeAndCountType)
+    lengthInBits += 16;
+
+    // Simple field (jobBatchModeAndCountType)
+    lengthInBits += 8;
+
+    // Const Field (blockIdBatchStatusAtIncrementBypass)
+    lengthInBits += 16;
+
+    // Simple field (batchStatusAtIncrementBypass)
+    lengthInBits += 8;
+
+    // Const Field (blockIdDecrementBatchAtOkLoosening)
+    lengthInBits += 16;
+
+    // Simple field (decrementBatchAtOkLoosening)
+    lengthInBits += 8;
+
+    // Const Field (blockIdMaxTimeForFirstTightening)
+    lengthInBits += 16;
+
+    // Simple field (maxTimeForFirstTightening)
+    lengthInBits += 32;
+
+    // Const Field (blockIdMaxTimeToCompleteJob)
+    lengthInBits += 16;
+
+    // Simple field (maxTimeToCompleteJob)
+    lengthInBits += 40;
+
+    // Const Field (blockIdDisplayResultAtAutoSelect)
+    lengthInBits += 16;
+
+    // Simple field (displayResultAtAutoSelect)
+    lengthInBits += 32;
+
+    // Const Field (blockIdUseLineControl)
+    lengthInBits += 16;
+
+    // Simple field (useLineControl)
+    lengthInBits += 8;
+
+    // Const Field (blockIdIdentifierResultPart)
+    lengthInBits += 16;
+
+    // Simple field (identifierResultPart)
+    lengthInBits += 8;
+
+    // Const Field (blockIdResultOfNonTightenings)
+    lengthInBits += 16;
+
+    // Simple field (resultOfNonTightenings)
+    lengthInBits += 8;
+
+    // Const Field (blockIdResetAllIdentifiersAtJobDone)
+    lengthInBits += 16;
+
+    // Simple field (resetAllIdentifiersAtJobDone)
+    lengthInBits += 8;
+
+    // Const Field (blockIdReserved)
+    lengthInBits += 16;
+
+    // Simple field (jobRepair)
+    lengthInBits += 8;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageExecuteDynamicJobRequestBuilder
+      staticParseOpenProtocolMessageExecuteDynamicJobRequestBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageExecuteDynamicJobRequestRev999");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    int blockIdJobId =
+        readConstField(
+            "blockIdJobId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDJOBID,
+            WithOption.WithEncoding("ASCII"));
+
+    long jobId =
+        readSimpleField(
+            "jobId", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobName =
+        readConstField(
+            "blockIdJobName",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDJOBNAME,
+            WithOption.WithEncoding("ASCII"));
+
+    String jobName =
+        readSimpleField("jobName", readString(readBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    int blockIdNumberOfParameterSets =
+        readConstField(
+            "blockIdNumberOfParameterSets",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDNUMBEROFPARAMETERSETS,
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobList =
+        readConstField(
+            "blockIdJobList",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDJOBLIST,
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdForcedOrder =
+        readConstField(
+            "blockIdForcedOrder",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDFORCEDORDER,
+            WithOption.WithEncoding("ASCII"));
+
+    ForcedOrder forcedOrder =
+        readEnumField(
+            "forcedOrder",
+            "ForcedOrder",
+            new DataReaderEnumDefault<>(
+                ForcedOrder::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdLockAtJobDone =
+        readConstField(
+            "blockIdLockAtJobDone",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDLOCKATJOBDONE,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes lockAtJobDone =
+        readEnumField(
+            "lockAtJobDone",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdToolLoosening =
+        readConstField(
+            "blockIdToolLoosening",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDTOOLLOOSENING,
+            WithOption.WithEncoding("ASCII"));
+
+    ToolLoosening toolLoosening =
+        readEnumField(
+            "toolLoosening",
+            "ToolLoosening",
+            new DataReaderEnumDefault<>(
+                ToolLoosening::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdRepeatJob =
+        readConstField(
+            "blockIdRepeatJob",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDREPEATJOB,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes repeatJob =
+        readEnumField(
+            "repeatJob",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobBatchModeAndCountType =
+        readConstField(
+            "blockIdJobBatchModeAndCountType",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDJOBBATCHMODEANDCOUNTTYPE,
+            WithOption.WithEncoding("ASCII"));
+
+    JobBatchMode jobBatchModeAndCountType =
+        readEnumField(
+            "jobBatchModeAndCountType",
+            "JobBatchMode",
+            new DataReaderEnumDefault<>(
+                JobBatchMode::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchStatusAtIncrementBypass =
+        readConstField(
+            "blockIdBatchStatusAtIncrementBypass",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDBATCHSTATUSATINCREMENTBYPASS,
+            WithOption.WithEncoding("ASCII"));
+
+    OkNok batchStatusAtIncrementBypass =
+        readEnumField(
+            "batchStatusAtIncrementBypass",
+            "OkNok",
+            new DataReaderEnumDefault<>(OkNok::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdDecrementBatchAtOkLoosening =
+        readConstField(
+            "blockIdDecrementBatchAtOkLoosening",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDDECREMENTBATCHATOKLOOSENING,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes decrementBatchAtOkLoosening =
+        readEnumField(
+            "decrementBatchAtOkLoosening",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdMaxTimeForFirstTightening =
+        readConstField(
+            "blockIdMaxTimeForFirstTightening",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDMAXTIMEFORFIRSTTIGHTENING,
+            WithOption.WithEncoding("ASCII"));
+
+    long maxTimeForFirstTightening =
+        readSimpleField(
+            "maxTimeForFirstTightening",
+            readUnsignedLong(readBuffer, 32),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdMaxTimeToCompleteJob =
+        readConstField(
+            "blockIdMaxTimeToCompleteJob",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDMAXTIMETOCOMPLETEJOB,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger maxTimeToCompleteJob =
+        readSimpleField(
+            "maxTimeToCompleteJob",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdDisplayResultAtAutoSelect =
+        readConstField(
+            "blockIdDisplayResultAtAutoSelect",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDDISPLAYRESULTATAUTOSELECT,
+            WithOption.WithEncoding("ASCII"));
+
+    long displayResultAtAutoSelect =
+        readSimpleField(
+            "displayResultAtAutoSelect",
+            readUnsignedLong(readBuffer, 32),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdUseLineControl =
+        readConstField(
+            "blockIdUseLineControl",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDUSELINECONTROL,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes useLineControl =
+        readEnumField(
+            "useLineControl",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdIdentifierResultPart =
+        readConstField(
+            "blockIdIdentifierResultPart",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDIDENTIFIERRESULTPART,
+            WithOption.WithEncoding("ASCII"));
+
+    IdentifierResult identifierResultPart =
+        readEnumField(
+            "identifierResultPart",
+            "IdentifierResult",
+            new DataReaderEnumDefault<>(
+                IdentifierResult::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdResultOfNonTightenings =
+        readConstField(
+            "blockIdResultOfNonTightenings",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDRESULTOFNONTIGHTENINGS,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes resultOfNonTightenings =
+        readEnumField(
+            "resultOfNonTightenings",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdResetAllIdentifiersAtJobDone =
+        readConstField(
+            "blockIdResetAllIdentifiersAtJobDone",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDRESETALLIDENTIFIERSATJOBDONE,
+            WithOption.WithEncoding("ASCII"));
+
+    NoYes resetAllIdentifiersAtJobDone =
+        readEnumField(
+            "resetAllIdentifiersAtJobDone",
+            "NoYes",
+            new DataReaderEnumDefault<>(NoYes::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdReserved =
+        readConstField(
+            "blockIdReserved",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageExecuteDynamicJobRequestRev999.BLOCKIDRESERVED,
+            WithOption.WithEncoding("ASCII"));
+
+    short jobRepair =
+        readSimpleField(
+            "jobRepair", readUnsignedShort(readBuffer, 8), WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageExecuteDynamicJobRequestRev999");
+    // Create the instance
+    return new OpenProtocolMessageExecuteDynamicJobRequestRev999BuilderImpl(
+        jobId,
+        jobName,
+        forcedOrder,
+        lockAtJobDone,
+        toolLoosening,
+        repeatJob,
+        jobBatchModeAndCountType,
+        batchStatusAtIncrementBypass,
+        decrementBatchAtOkLoosening,
+        maxTimeForFirstTightening,
+        maxTimeToCompleteJob,
+        displayResultAtAutoSelect,
+        useLineControl,
+        identifierResultPart,
+        resultOfNonTightenings,
+        resetAllIdentifiersAtJobDone,
+        jobRepair);
+  }
+
+  public static class OpenProtocolMessageExecuteDynamicJobRequestRev999BuilderImpl
+      implements OpenProtocolMessageExecuteDynamicJobRequest
+          .OpenProtocolMessageExecuteDynamicJobRequestBuilder {
+    private final long jobId;
+    private final String jobName;
+    private final ForcedOrder forcedOrder;
+    private final NoYes lockAtJobDone;
+    private final ToolLoosening toolLoosening;
+    private final NoYes repeatJob;
+    private final JobBatchMode jobBatchModeAndCountType;
+    private final OkNok batchStatusAtIncrementBypass;
+    private final NoYes decrementBatchAtOkLoosening;
+    private final long maxTimeForFirstTightening;
+    private final BigInteger maxTimeToCompleteJob;
+    private final long displayResultAtAutoSelect;
+    private final NoYes useLineControl;
+    private final IdentifierResult identifierResultPart;
+    private final NoYes resultOfNonTightenings;
+    private final NoYes resetAllIdentifiersAtJobDone;
+    private final short jobRepair;
+
+    public OpenProtocolMessageExecuteDynamicJobRequestRev999BuilderImpl(
+        long jobId,
+        String jobName,
+        ForcedOrder forcedOrder,
+        NoYes lockAtJobDone,
+        ToolLoosening toolLoosening,
+        NoYes repeatJob,
+        JobBatchMode jobBatchModeAndCountType,
+        OkNok batchStatusAtIncrementBypass,
+        NoYes decrementBatchAtOkLoosening,
+        long maxTimeForFirstTightening,
+        BigInteger maxTimeToCompleteJob,
+        long displayResultAtAutoSelect,
+        NoYes useLineControl,
+        IdentifierResult identifierResultPart,
+        NoYes resultOfNonTightenings,
+        NoYes resetAllIdentifiersAtJobDone,
+        short jobRepair) {
+      this.jobId = jobId;
+      this.jobName = jobName;
+      this.forcedOrder = forcedOrder;
+      this.lockAtJobDone = lockAtJobDone;
+      this.toolLoosening = toolLoosening;
+      this.repeatJob = repeatJob;
+      this.jobBatchModeAndCountType = jobBatchModeAndCountType;
+      this.batchStatusAtIncrementBypass = batchStatusAtIncrementBypass;
+      this.decrementBatchAtOkLoosening = decrementBatchAtOkLoosening;
+      this.maxTimeForFirstTightening = maxTimeForFirstTightening;
+      this.maxTimeToCompleteJob = maxTimeToCompleteJob;
+      this.displayResultAtAutoSelect = displayResultAtAutoSelect;
+      this.useLineControl = useLineControl;
+      this.identifierResultPart = identifierResultPart;
+      this.resultOfNonTightenings = resultOfNonTightenings;
+      this.resetAllIdentifiersAtJobDone = resetAllIdentifiersAtJobDone;
+      this.jobRepair = jobRepair;
+    }
+
+    public OpenProtocolMessageExecuteDynamicJobRequestRev999 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageExecuteDynamicJobRequestRev999
+          openProtocolMessageExecuteDynamicJobRequestRev999 =
+              new OpenProtocolMessageExecuteDynamicJobRequestRev999(
+                  midRevision,
+                  noAckFlag,
+                  targetStationId,
+                  targetSpindleId,
+                  sequenceNumber,
+                  numberOfMessageParts,
+                  messagePartNumber,
+                  jobId,
+                  jobName,
+                  forcedOrder,
+                  lockAtJobDone,
+                  toolLoosening,
+                  repeatJob,
+                  jobBatchModeAndCountType,
+                  batchStatusAtIncrementBypass,
+                  decrementBatchAtOkLoosening,
+                  maxTimeForFirstTightening,
+                  maxTimeToCompleteJob,
+                  displayResultAtAutoSelect,
+                  useLineControl,
+                  identifierResultPart,
+                  resultOfNonTightenings,
+                  resetAllIdentifiersAtJobDone,
+                  jobRepair);
+      return openProtocolMessageExecuteDynamicJobRequestRev999;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageExecuteDynamicJobRequestRev999)) {
+      return false;
+    }
+    OpenProtocolMessageExecuteDynamicJobRequestRev999 that =
+        (OpenProtocolMessageExecuteDynamicJobRequestRev999) o;
+    return (getJobId() == that.getJobId())
+        && (getJobName() == that.getJobName())
+        && (getForcedOrder() == that.getForcedOrder())
+        && (getLockAtJobDone() == that.getLockAtJobDone())
+        && (getToolLoosening() == that.getToolLoosening())
+        && (getRepeatJob() == that.getRepeatJob())
+        && (getJobBatchModeAndCountType() == that.getJobBatchModeAndCountType())
+        && (getBatchStatusAtIncrementBypass() == that.getBatchStatusAtIncrementBypass())
+        && (getDecrementBatchAtOkLoosening() == that.getDecrementBatchAtOkLoosening())
+        && (getMaxTimeForFirstTightening() == that.getMaxTimeForFirstTightening())
+        && (getMaxTimeToCompleteJob() == that.getMaxTimeToCompleteJob())
+        && (getDisplayResultAtAutoSelect() == that.getDisplayResultAtAutoSelect())
+        && (getUseLineControl() == that.getUseLineControl())
+        && (getIdentifierResultPart() == that.getIdentifierResultPart())
+        && (getResultOfNonTightenings() == that.getResultOfNonTightenings())
+        && (getResetAllIdentifiersAtJobDone() == that.getResetAllIdentifiersAtJobDone())
+        && (getJobRepair() == that.getJobRepair())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getJobId(),
+        getJobName(),
+        getForcedOrder(),
+        getLockAtJobDone(),
+        getToolLoosening(),
+        getRepeatJob(),
+        getJobBatchModeAndCountType(),
+        getBatchStatusAtIncrementBypass(),
+        getDecrementBatchAtOkLoosening(),
+        getMaxTimeForFirstTightening(),
+        getMaxTimeToCompleteJob(),
+        getDisplayResultAtAutoSelect(),
+        getUseLineControl(),
+        getIdentifierResultPart(),
+        getResultOfNonTightenings(),
+        getResetAllIdentifiersAtJobDone(),
+        getJobRepair());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageIdentifierDownloadRequest.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageIdentifierDownloadRequest.java
new file mode 100644
index 0000000000..c6f7a8298a
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageIdentifierDownloadRequest.java
@@ -0,0 +1,192 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageIdentifierDownloadRequest extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.IdentifierDownloadRequest;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageIdentifierDownloadRequest(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageIdentifierDownloadRequestChild(
+      WriteBuffer writeBuffer) throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageIdentifierDownloadRequest");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageIdentifierDownloadRequestChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageIdentifierDownloadRequest");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageIdentifierDownloadRequest _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageIdentifierDownloadRequest");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageIdentifierDownloadRequestBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageIdentifierDownloadRequestRev1
+              .staticParseOpenProtocolMessageIdentifierDownloadRequestBuilder(readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageIdentifierDownloadRequest");
+    // Create the instance
+    return new OpenProtocolMessageIdentifierDownloadRequestBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageIdentifierDownloadRequestBuilder {
+    OpenProtocolMessageIdentifierDownloadRequest build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageIdentifierDownloadRequestBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageIdentifierDownloadRequestBuilder builder;
+
+    public OpenProtocolMessageIdentifierDownloadRequestBuilderImpl(
+        OpenProtocolMessageIdentifierDownloadRequestBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageIdentifierDownloadRequest build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageIdentifierDownloadRequest)) {
+      return false;
+    }
+    OpenProtocolMessageIdentifierDownloadRequest that =
+        (OpenProtocolMessageIdentifierDownloadRequest) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageIdentifierDownloadRequestRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageIdentifierDownloadRequestRev1.java
new file mode 100644
index 0000000000..5e98eb68ae
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageIdentifierDownloadRequestRev1.java
@@ -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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageIdentifierDownloadRequestRev1
+    extends OpenProtocolMessageIdentifierDownloadRequest implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  // Properties.
+  protected final String identifierData;
+
+  public OpenProtocolMessageIdentifierDownloadRequestRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      String identifierData) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.identifierData = identifierData;
+  }
+
+  public String getIdentifierData() {
+    return identifierData;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageIdentifierDownloadRequestChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageIdentifierDownloadRequestRev1");
+
+    // Simple Field (identifierData)
+    writeSimpleField(
+        "identifierData",
+        identifierData,
+        writeString(writeBuffer, 800),
+        WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageIdentifierDownloadRequestRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageIdentifierDownloadRequestRev1 _value = this;
+
+    // Simple field (identifierData)
+    lengthInBits += 800;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageIdentifierDownloadRequestBuilder
+      staticParseOpenProtocolMessageIdentifierDownloadRequestBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageIdentifierDownloadRequestRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    String identifierData =
+        readSimpleField(
+            "identifierData", readString(readBuffer, 800), WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageIdentifierDownloadRequestRev1");
+    // Create the instance
+    return new OpenProtocolMessageIdentifierDownloadRequestRev1BuilderImpl(identifierData);
+  }
+
+  public static class OpenProtocolMessageIdentifierDownloadRequestRev1BuilderImpl
+      implements OpenProtocolMessageIdentifierDownloadRequest
+          .OpenProtocolMessageIdentifierDownloadRequestBuilder {
+    private final String identifierData;
+
+    public OpenProtocolMessageIdentifierDownloadRequestRev1BuilderImpl(String identifierData) {
+      this.identifierData = identifierData;
+    }
+
+    public OpenProtocolMessageIdentifierDownloadRequestRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageIdentifierDownloadRequestRev1
+          openProtocolMessageIdentifierDownloadRequestRev1 =
+              new OpenProtocolMessageIdentifierDownloadRequestRev1(
+                  midRevision,
+                  noAckFlag,
+                  targetStationId,
+                  targetSpindleId,
+                  sequenceNumber,
+                  numberOfMessageParts,
+                  messagePartNumber,
+                  identifierData);
+      return openProtocolMessageIdentifierDownloadRequestRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageIdentifierDownloadRequestRev1)) {
+      return false;
+    }
+    OpenProtocolMessageIdentifierDownloadRequestRev1 that =
+        (OpenProtocolMessageIdentifierDownloadRequestRev1) o;
+    return (getIdentifierData() == that.getIdentifierData()) && super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode(), getIdentifierData());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageKeepAliveOpenProtocolCommunication.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageKeepAliveOpenProtocolCommunication.java
new file mode 100644
index 0000000000..fb626668df
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageKeepAliveOpenProtocolCommunication.java
@@ -0,0 +1,193 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageKeepAliveOpenProtocolCommunication
+    extends OpenProtocolMessage implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.KeepAliveOpenProtocolCommunication;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageKeepAliveOpenProtocolCommunication(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageKeepAliveOpenProtocolCommunicationChild(
+      WriteBuffer writeBuffer) throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageKeepAliveOpenProtocolCommunication");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageKeepAliveOpenProtocolCommunicationChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageKeepAliveOpenProtocolCommunication");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageKeepAliveOpenProtocolCommunication _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageKeepAliveOpenProtocolCommunication");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1
+              .staticParseOpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilder(
+                  readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageKeepAliveOpenProtocolCommunication");
+    // Create the instance
+    return new OpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilder {
+    OpenProtocolMessageKeepAliveOpenProtocolCommunication build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilder builder;
+
+    public OpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilderImpl(
+        OpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageKeepAliveOpenProtocolCommunication build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageKeepAliveOpenProtocolCommunication)) {
+      return false;
+    }
+    OpenProtocolMessageKeepAliveOpenProtocolCommunication that =
+        (OpenProtocolMessageKeepAliveOpenProtocolCommunication) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1.java
new file mode 100644
index 0000000000..ad0ddf4e54
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1.java
@@ -0,0 +1,156 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1
+    extends OpenProtocolMessageKeepAliveOpenProtocolCommunication implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  public OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageKeepAliveOpenProtocolCommunicationChild(
+      WriteBuffer writeBuffer) throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1");
+
+    writeBuffer.popContext("OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1 _value = this;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilder
+      staticParseOpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    readBuffer.closeContext("OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1");
+    // Create the instance
+    return new OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1BuilderImpl();
+  }
+
+  public static class OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1BuilderImpl
+      implements OpenProtocolMessageKeepAliveOpenProtocolCommunication
+          .OpenProtocolMessageKeepAliveOpenProtocolCommunicationBuilder {
+
+    public OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1BuilderImpl() {}
+
+    public OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1
+          openProtocolMessageKeepAliveOpenProtocolCommunicationRev1 =
+              new OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1(
+                  midRevision,
+                  noAckFlag,
+                  targetStationId,
+                  targetSpindleId,
+                  sequenceNumber,
+                  numberOfMessageParts,
+                  messagePartNumber);
+      return openProtocolMessageKeepAliveOpenProtocolCommunicationRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1)) {
+      return false;
+    }
+    OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1 that =
+        (OpenProtocolMessageKeepAliveOpenProtocolCommunicationRev1) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev1.java
index fe74f84be2..3c4bbb3aa6 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev1.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev1.java
@@ -78,7 +78,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
   protected final long parameterSetId;
   protected final long batchSize;
   protected final long batchCounter;
-  protected final TighteningStatus tighteningStatus;
+  protected final NokOk tighteningStatus;
   protected final Status torqueStatus;
   protected final Status angleStatus;
   protected final BigInteger torqueMinLimit;
@@ -92,7 +92,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
   protected final String timeStamp;
   protected final String dateTimeOfLastChangeIndParameterSetSettings;
   protected final BatchStatus batchStatus;
-  protected final BigInteger tighteningId;
+  protected final String tighteningId;
 
   public OpenProtocolMessageLastTighteningResultDataRev1(
       Long midRevision,
@@ -110,7 +110,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
       long parameterSetId,
       long batchSize,
       long batchCounter,
-      TighteningStatus tighteningStatus,
+      NokOk tighteningStatus,
       Status torqueStatus,
       Status angleStatus,
       BigInteger torqueMinLimit,
@@ -124,7 +124,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
       String timeStamp,
       String dateTimeOfLastChangeIndParameterSetSettings,
       BatchStatus batchStatus,
-      BigInteger tighteningId) {
+      String tighteningId) {
     super(
         midRevision,
         noAckFlag,
@@ -190,7 +190,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
     return batchCounter;
   }
 
-  public TighteningStatus getTighteningStatus() {
+  public NokOk getTighteningStatus() {
     return tighteningStatus;
   }
 
@@ -246,7 +246,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
     return batchStatus;
   }
 
-  public BigInteger getTighteningId() {
+  public String getTighteningId() {
     return tighteningId;
   }
 
@@ -462,10 +462,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
     // Simple Field (tighteningStatus)
     writeSimpleEnumField(
         "tighteningStatus",
-        "TighteningStatus",
+        "NokOk",
         tighteningStatus,
         new DataWriterEnumDefault<>(
-            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdTorqueStatus)
@@ -661,7 +661,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
     writeSimpleField(
         "tighteningId",
         tighteningId,
-        writeUnsignedBigInteger(writeBuffer, 80),
+        writeString(writeBuffer, 80),
         WithOption.WithEncoding("ASCII"));
 
     writeBuffer.popContext("OpenProtocolMessageLastTighteningResultDataRev1");
@@ -919,12 +919,11 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
             OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTIGHTENINGSTATUS,
             WithOption.WithEncoding("ASCII"));
 
-    TighteningStatus tighteningStatus =
+    NokOk tighteningStatus =
         readEnumField(
             "tighteningStatus",
-            "TighteningStatus",
-            new DataReaderEnumDefault<>(
-                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
     int blockIdTorqueStatus =
@@ -1097,11 +1096,9 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
             OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTIGHTENINGID,
             WithOption.WithEncoding("ASCII"));
 
-    BigInteger tighteningId =
+    String tighteningId =
         readSimpleField(
-            "tighteningId",
-            readUnsignedBigInteger(readBuffer, 80),
-            WithOption.WithEncoding("ASCII"));
+            "tighteningId", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
 
     readBuffer.closeContext("OpenProtocolMessageLastTighteningResultDataRev1");
     // Create the instance
@@ -1142,7 +1139,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
     private final long parameterSetId;
     private final long batchSize;
     private final long batchCounter;
-    private final TighteningStatus tighteningStatus;
+    private final NokOk tighteningStatus;
     private final Status torqueStatus;
     private final Status angleStatus;
     private final BigInteger torqueMinLimit;
@@ -1156,7 +1153,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
     private final String timeStamp;
     private final String dateTimeOfLastChangeIndParameterSetSettings;
     private final BatchStatus batchStatus;
-    private final BigInteger tighteningId;
+    private final String tighteningId;
 
     public OpenProtocolMessageLastTighteningResultDataRev1BuilderImpl(
         long cellId,
@@ -1167,7 +1164,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
         long parameterSetId,
         long batchSize,
         long batchCounter,
-        TighteningStatus tighteningStatus,
+        NokOk tighteningStatus,
         Status torqueStatus,
         Status angleStatus,
         BigInteger torqueMinLimit,
@@ -1181,7 +1178,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev1
         String timeStamp,
         String dateTimeOfLastChangeIndParameterSetSettings,
         BatchStatus batchStatus,
-        BigInteger tighteningId) {
+        String tighteningId) {
       this.cellId = cellId;
       this.channelId = channelId;
       this.torqueControllerName = torqueControllerName;
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev2.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev2.java
index 90fa8c5e74..bd4818e295 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev2.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev2.java
@@ -100,9 +100,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
   protected final long jobId;
   protected final long parameterSetNumber;
   protected final Strategy strategy;
+  protected final long strategyOptions;
   protected final long batchSize;
   protected final long batchCounter;
-  protected final TighteningStatus tighteningStatus;
+  protected final NokOk tighteningStatus;
   protected final BatchStatus batchStatus;
   protected final Status torqueStatus;
   protected final Status angleStatus;
@@ -111,6 +112,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
   protected final Status selfTapStatus;
   protected final Status prevailTorqueMonitoringStatus;
   protected final Status prevailTorqueCompensateStatus;
+  protected final String tighteningErrorStatus;
   protected final BigInteger torqueMinLimit;
   protected final BigInteger torqueMaxLimit;
   protected final BigInteger torqueFinalTarget;
@@ -131,7 +133,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
   protected final BigInteger prevailTorqueMonitoringMin;
   protected final BigInteger prevailTorqueMonitoringMax;
   protected final BigInteger prevailTorque;
-  protected final BigInteger tighteningId;
+  protected final String tighteningId;
   protected final BigInteger jobSequenceNumber;
   protected final BigInteger syncTighteningId;
   protected final String toolSerialNumber;
@@ -153,9 +155,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
       long jobId,
       long parameterSetNumber,
       Strategy strategy,
+      long strategyOptions,
       long batchSize,
       long batchCounter,
-      TighteningStatus tighteningStatus,
+      NokOk tighteningStatus,
       BatchStatus batchStatus,
       Status torqueStatus,
       Status angleStatus,
@@ -164,6 +167,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
       Status selfTapStatus,
       Status prevailTorqueMonitoringStatus,
       Status prevailTorqueCompensateStatus,
+      String tighteningErrorStatus,
       BigInteger torqueMinLimit,
       BigInteger torqueMaxLimit,
       BigInteger torqueFinalTarget,
@@ -184,7 +188,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
       BigInteger prevailTorqueMonitoringMin,
       BigInteger prevailTorqueMonitoringMax,
       BigInteger prevailTorque,
-      BigInteger tighteningId,
+      String tighteningId,
       BigInteger jobSequenceNumber,
       BigInteger syncTighteningId,
       String toolSerialNumber,
@@ -205,6 +209,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     this.jobId = jobId;
     this.parameterSetNumber = parameterSetNumber;
     this.strategy = strategy;
+    this.strategyOptions = strategyOptions;
     this.batchSize = batchSize;
     this.batchCounter = batchCounter;
     this.tighteningStatus = tighteningStatus;
@@ -216,6 +221,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     this.selfTapStatus = selfTapStatus;
     this.prevailTorqueMonitoringStatus = prevailTorqueMonitoringStatus;
     this.prevailTorqueCompensateStatus = prevailTorqueCompensateStatus;
+    this.tighteningErrorStatus = tighteningErrorStatus;
     this.torqueMinLimit = torqueMinLimit;
     this.torqueMaxLimit = torqueMaxLimit;
     this.torqueFinalTarget = torqueFinalTarget;
@@ -272,6 +278,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     return strategy;
   }
 
+  public long getStrategyOptions() {
+    return strategyOptions;
+  }
+
   public long getBatchSize() {
     return batchSize;
   }
@@ -280,7 +290,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     return batchCounter;
   }
 
-  public TighteningStatus getTighteningStatus() {
+  public NokOk getTighteningStatus() {
     return tighteningStatus;
   }
 
@@ -316,6 +326,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     return prevailTorqueCompensateStatus;
   }
 
+  public String getTighteningErrorStatus() {
+    return tighteningErrorStatus;
+  }
+
   public BigInteger getTorqueMinLimit() {
     return torqueMinLimit;
   }
@@ -396,7 +410,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     return prevailTorque;
   }
 
-  public BigInteger getTighteningId() {
+  public String getTighteningId() {
     return tighteningId;
   }
 
@@ -420,6 +434,242 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     return dateTimeOfLastChangeIndParameterSetSettings;
   }
 
+  public boolean getStrategyOptionRbwMonitoring() {
+    return (boolean) ((((getStrategyOptions()) & (0x0001))) == (0x0001));
+  }
+
+  public boolean getStrategyOptionClickWrench() {
+    return (boolean) ((((getStrategyOptions()) & (0x0002))) == (0x0002));
+  }
+
+  public boolean getStrategyOptionDsControl() {
+    return (boolean) ((((getStrategyOptions()) & (0x0004))) == (0x0004));
+  }
+
+  public boolean getStrategyOptionCm() {
+    return (boolean) ((((getStrategyOptions()) & (0x0008))) == (0x0008));
+  }
+
+  public boolean getStrategyOptionRundown() {
+    return (boolean) ((((getStrategyOptions()) & (0x0010))) == (0x0010));
+  }
+
+  public boolean getStrategyOptionSelfTap() {
+    return (boolean) ((((getStrategyOptions()) & (0x0020))) == (0x0020));
+  }
+
+  public boolean getStrategyOptionPvtCompensate() {
+    return (boolean) ((((getStrategyOptions()) & (0x0040))) == (0x0040));
+  }
+
+  public boolean getStrategyOptionPvtMonitoring() {
+    return (boolean) ((((getStrategyOptions()) & (0x0080))) == (0x0080));
+  }
+
+  public boolean getStrategyOptionBatch() {
+    return (boolean) ((((getStrategyOptions()) & (0x0100))) == (0x0100));
+  }
+
+  public boolean getStrategyOptionAngle() {
+    return (boolean) ((((getStrategyOptions()) & (0x0200))) == (0x0200));
+  }
+
+  public boolean getStrategyOptionTorque() {
+    return (boolean) ((((getStrategyOptions()) & (0x0400))) == (0x0400));
+  }
+
+  public boolean getTighteningErrorStatusRundownAngleMaxShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 1));
+  }
+
+  public boolean getTighteningErrorStatusRundownAngleMinShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 2));
+  }
+
+  public boolean getTighteningErrorStatusTorqueMaxShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 3));
+  }
+
+  public boolean getTighteningErrorStatusAngleMaxShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 4));
+  }
+
+  public boolean getTighteningErrorStatusSelfTapTorqueMaxShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 5));
+  }
+
+  public boolean getTighteningErrorStatusSelfTapTorqueMinShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 6));
+  }
+
+  public boolean getTighteningErrorStatusPrevailTorqueMaxShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 7));
+  }
+
+  public boolean getTighteningErrorStatusPrevailTorqueMinShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 8));
+  }
+
+  public boolean getTighteningErrorStatusPrevailTorqueCompensateOverflow() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 9));
+  }
+
+  public boolean getTighteningErrorStatusCurrentMonitoringMaxShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 10));
+  }
+
+  public boolean getTighteningErrorStatusPostViewTorqueMinTorqueShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 11));
+  }
+
+  public boolean getTighteningErrorStatusPostViewTorqueMaxTorqueShutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 12));
+  }
+
+  public boolean getTighteningErrorStatusPortViewTorqueAngleTooSmall() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 13));
+  }
+
+  public boolean getTighteningErrorStatusTriggerLost() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 14));
+  }
+
+  public boolean getTighteningErrorStatusTorqueLessThanTarget() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 15));
+  }
+
+  public boolean getTighteningErrorStatusToolHot() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 16));
+  }
+
+  public boolean getTighteningErrorStatusMultistageAbort() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 17));
+  }
+
+  public boolean getTighteningErrorStatusRehit() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 18));
+  }
+
+  public boolean getTighteningErrorStatusDsMeasureFailed() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 19));
+  }
+
+  public boolean getTighteningErrorStatusCurrentLimitReached() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 20));
+  }
+
+  public boolean getTighteningErrorStatusEndTimeOutShutoff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 21));
+  }
+
+  public boolean getTighteningErrorStatusRemoveFastenerLimitExceeded() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 22));
+  }
+
+  public boolean getTighteningErrorStatusDisableDrive() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 23));
+  }
+
+  public boolean getTighteningErrorStatusTransducerLost() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 24));
+  }
+
+  public boolean getTighteningErrorStatusTransducerShorted() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 25));
+  }
+
+  public boolean getTighteningErrorStatusTransducerCorrupt() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 26));
+  }
+
+  public boolean getTighteningErrorStatusSyncTimeout() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 27));
+  }
+
+  public boolean getTighteningErrorStatusDynamicCurrentMonitoringMin() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 28));
+  }
+
+  public boolean getTighteningErrorStatusDynamicCurrentMonitoringMax() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 29));
+  }
+
+  public boolean getTighteningErrorStatusAngleMaxMonitor() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 30));
+  }
+
+  public boolean getTighteningErrorStatusYieldNutOff() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 31));
+  }
+
+  public boolean getTighteningErrorStatusYieldTooFewSamples() {
+    return (boolean)
+        (org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+            getTighteningErrorStatus(), 32));
+  }
+
   public int getBlockIdCellId() {
     return BLOCKIDCELLID;
   }
@@ -709,6 +959,60 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         writeUnsignedInt(writeBuffer, 16),
         WithOption.WithEncoding("ASCII"));
 
+    // Reserved Field (reserved)
+    writeReservedField("reserved", (short) 0x30, writeUnsignedShort(writeBuffer, 8));
+
+    // Simple Field (strategyOptions)
+    writeSimpleField(
+        "strategyOptions",
+        strategyOptions,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionRbwMonitoring = getStrategyOptionRbwMonitoring();
+    writeBuffer.writeVirtual("strategyOptionRbwMonitoring", strategyOptionRbwMonitoring);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionClickWrench = getStrategyOptionClickWrench();
+    writeBuffer.writeVirtual("strategyOptionClickWrench", strategyOptionClickWrench);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionDsControl = getStrategyOptionDsControl();
+    writeBuffer.writeVirtual("strategyOptionDsControl", strategyOptionDsControl);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionCm = getStrategyOptionCm();
+    writeBuffer.writeVirtual("strategyOptionCm", strategyOptionCm);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionRundown = getStrategyOptionRundown();
+    writeBuffer.writeVirtual("strategyOptionRundown", strategyOptionRundown);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionSelfTap = getStrategyOptionSelfTap();
+    writeBuffer.writeVirtual("strategyOptionSelfTap", strategyOptionSelfTap);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionPvtCompensate = getStrategyOptionPvtCompensate();
+    writeBuffer.writeVirtual("strategyOptionPvtCompensate", strategyOptionPvtCompensate);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionPvtMonitoring = getStrategyOptionPvtMonitoring();
+    writeBuffer.writeVirtual("strategyOptionPvtMonitoring", strategyOptionPvtMonitoring);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionBatch = getStrategyOptionBatch();
+    writeBuffer.writeVirtual("strategyOptionBatch", strategyOptionBatch);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionAngle = getStrategyOptionAngle();
+    writeBuffer.writeVirtual("strategyOptionAngle", strategyOptionAngle);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean strategyOptionTorque = getStrategyOptionTorque();
+    writeBuffer.writeVirtual("strategyOptionTorque", strategyOptionTorque);
+
     // Const Field (blockIdBatchSize)
     writeConstField(
         "blockIdBatchSize",
@@ -747,10 +1051,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     // Simple Field (tighteningStatus)
     writeSimpleEnumField(
         "tighteningStatus",
-        "TighteningStatus",
+        "NokOk",
         tighteningStatus,
         new DataWriterEnumDefault<>(
-            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdBatchStatus)
@@ -888,6 +1192,196 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         writeUnsignedInt(writeBuffer, 16),
         WithOption.WithEncoding("ASCII"));
 
+    // Simple Field (tighteningErrorStatus)
+    writeSimpleField(
+        "tighteningErrorStatus",
+        tighteningErrorStatus,
+        writeString(writeBuffer, 80),
+        WithOption.WithEncoding("ASCII"));
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusRundownAngleMaxShutOff =
+        getTighteningErrorStatusRundownAngleMaxShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusRundownAngleMaxShutOff", tighteningErrorStatusRundownAngleMaxShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusRundownAngleMinShutOff =
+        getTighteningErrorStatusRundownAngleMinShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusRundownAngleMinShutOff", tighteningErrorStatusRundownAngleMinShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusTorqueMaxShutOff = getTighteningErrorStatusTorqueMaxShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusTorqueMaxShutOff", tighteningErrorStatusTorqueMaxShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusAngleMaxShutOff = getTighteningErrorStatusAngleMaxShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusAngleMaxShutOff", tighteningErrorStatusAngleMaxShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusSelfTapTorqueMaxShutOff =
+        getTighteningErrorStatusSelfTapTorqueMaxShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusSelfTapTorqueMaxShutOff",
+        tighteningErrorStatusSelfTapTorqueMaxShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusSelfTapTorqueMinShutOff =
+        getTighteningErrorStatusSelfTapTorqueMinShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusSelfTapTorqueMinShutOff",
+        tighteningErrorStatusSelfTapTorqueMinShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusPrevailTorqueMaxShutOff =
+        getTighteningErrorStatusPrevailTorqueMaxShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusPrevailTorqueMaxShutOff",
+        tighteningErrorStatusPrevailTorqueMaxShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusPrevailTorqueMinShutOff =
+        getTighteningErrorStatusPrevailTorqueMinShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusPrevailTorqueMinShutOff",
+        tighteningErrorStatusPrevailTorqueMinShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusPrevailTorqueCompensateOverflow =
+        getTighteningErrorStatusPrevailTorqueCompensateOverflow();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusPrevailTorqueCompensateOverflow",
+        tighteningErrorStatusPrevailTorqueCompensateOverflow);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusCurrentMonitoringMaxShutOff =
+        getTighteningErrorStatusCurrentMonitoringMaxShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusCurrentMonitoringMaxShutOff",
+        tighteningErrorStatusCurrentMonitoringMaxShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusPostViewTorqueMinTorqueShutOff =
+        getTighteningErrorStatusPostViewTorqueMinTorqueShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusPostViewTorqueMinTorqueShutOff",
+        tighteningErrorStatusPostViewTorqueMinTorqueShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusPostViewTorqueMaxTorqueShutOff =
+        getTighteningErrorStatusPostViewTorqueMaxTorqueShutOff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusPostViewTorqueMaxTorqueShutOff",
+        tighteningErrorStatusPostViewTorqueMaxTorqueShutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusPortViewTorqueAngleTooSmall =
+        getTighteningErrorStatusPortViewTorqueAngleTooSmall();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusPortViewTorqueAngleTooSmall",
+        tighteningErrorStatusPortViewTorqueAngleTooSmall);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusTriggerLost = getTighteningErrorStatusTriggerLost();
+    writeBuffer.writeVirtual("tighteningErrorStatusTriggerLost", tighteningErrorStatusTriggerLost);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusTorqueLessThanTarget =
+        getTighteningErrorStatusTorqueLessThanTarget();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusTorqueLessThanTarget", tighteningErrorStatusTorqueLessThanTarget);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusToolHot = getTighteningErrorStatusToolHot();
+    writeBuffer.writeVirtual("tighteningErrorStatusToolHot", tighteningErrorStatusToolHot);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusMultistageAbort = getTighteningErrorStatusMultistageAbort();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusMultistageAbort", tighteningErrorStatusMultistageAbort);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusRehit = getTighteningErrorStatusRehit();
+    writeBuffer.writeVirtual("tighteningErrorStatusRehit", tighteningErrorStatusRehit);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusDsMeasureFailed = getTighteningErrorStatusDsMeasureFailed();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusDsMeasureFailed", tighteningErrorStatusDsMeasureFailed);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusCurrentLimitReached =
+        getTighteningErrorStatusCurrentLimitReached();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusCurrentLimitReached", tighteningErrorStatusCurrentLimitReached);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusEndTimeOutShutoff = getTighteningErrorStatusEndTimeOutShutoff();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusEndTimeOutShutoff", tighteningErrorStatusEndTimeOutShutoff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusRemoveFastenerLimitExceeded =
+        getTighteningErrorStatusRemoveFastenerLimitExceeded();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusRemoveFastenerLimitExceeded",
+        tighteningErrorStatusRemoveFastenerLimitExceeded);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusDisableDrive = getTighteningErrorStatusDisableDrive();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusDisableDrive", tighteningErrorStatusDisableDrive);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusTransducerLost = getTighteningErrorStatusTransducerLost();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusTransducerLost", tighteningErrorStatusTransducerLost);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusTransducerShorted = getTighteningErrorStatusTransducerShorted();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusTransducerShorted", tighteningErrorStatusTransducerShorted);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusTransducerCorrupt = getTighteningErrorStatusTransducerCorrupt();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusTransducerCorrupt", tighteningErrorStatusTransducerCorrupt);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusSyncTimeout = getTighteningErrorStatusSyncTimeout();
+    writeBuffer.writeVirtual("tighteningErrorStatusSyncTimeout", tighteningErrorStatusSyncTimeout);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusDynamicCurrentMonitoringMin =
+        getTighteningErrorStatusDynamicCurrentMonitoringMin();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusDynamicCurrentMonitoringMin",
+        tighteningErrorStatusDynamicCurrentMonitoringMin);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusDynamicCurrentMonitoringMax =
+        getTighteningErrorStatusDynamicCurrentMonitoringMax();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusDynamicCurrentMonitoringMax",
+        tighteningErrorStatusDynamicCurrentMonitoringMax);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusAngleMaxMonitor = getTighteningErrorStatusAngleMaxMonitor();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusAngleMaxMonitor", tighteningErrorStatusAngleMaxMonitor);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusYieldNutOff = getTighteningErrorStatusYieldNutOff();
+    writeBuffer.writeVirtual("tighteningErrorStatusYieldNutOff", tighteningErrorStatusYieldNutOff);
+
+    // Virtual field (doesn't actually serialize anything, just makes the value available)
+    boolean tighteningErrorStatusYieldTooFewSamples = getTighteningErrorStatusYieldTooFewSamples();
+    writeBuffer.writeVirtual(
+        "tighteningErrorStatusYieldTooFewSamples", tighteningErrorStatusYieldTooFewSamples);
+
     // Const Field (blockIdTorqueMinLimit)
     writeConstField(
         "blockIdTorqueMinLimit",
@@ -1176,7 +1670,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     writeSimpleField(
         "tighteningId",
         tighteningId,
-        writeUnsignedBigInteger(writeBuffer, 80),
+        writeString(writeBuffer, 80),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdJobSequenceNumber)
@@ -1304,6 +1798,34 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     // Const Field (blockIdStrategyOptions)
     lengthInBits += 16;
 
+    // Reserved Field (reserved)
+    lengthInBits += 8;
+
+    // Simple field (strategyOptions)
+    lengthInBits += 32;
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
     // Const Field (blockIdBatchSize)
     lengthInBits += 16;
 
@@ -1373,6 +1895,73 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     // Const Field (blockIdTighteningErrorStatus)
     lengthInBits += 16;
 
+    // Simple field (tighteningErrorStatus)
+    lengthInBits += 80;
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
+    // A virtual field doesn't have any in- or output.
+
     // Const Field (blockIdTorqueMinLimit)
     lengthInBits += 16;
 
@@ -1628,6 +2217,54 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
             OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDSTRATEGYOPTIONS,
             WithOption.WithEncoding("ASCII"));
 
+    Short reservedField0 =
+        readReservedField("reserved", readUnsignedShort(readBuffer, 8), (short) 0x30);
+
+    long strategyOptions =
+        readSimpleField(
+            "strategyOptions", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+    boolean strategyOptionRbwMonitoring =
+        readVirtualField(
+            "strategyOptionRbwMonitoring",
+            boolean.class,
+            (((strategyOptions) & (0x0001))) == (0x0001));
+    boolean strategyOptionClickWrench =
+        readVirtualField(
+            "strategyOptionClickWrench",
+            boolean.class,
+            (((strategyOptions) & (0x0002))) == (0x0002));
+    boolean strategyOptionDsControl =
+        readVirtualField(
+            "strategyOptionDsControl", boolean.class, (((strategyOptions) & (0x0004))) == (0x0004));
+    boolean strategyOptionCm =
+        readVirtualField(
+            "strategyOptionCm", boolean.class, (((strategyOptions) & (0x0008))) == (0x0008));
+    boolean strategyOptionRundown =
+        readVirtualField(
+            "strategyOptionRundown", boolean.class, (((strategyOptions) & (0x0010))) == (0x0010));
+    boolean strategyOptionSelfTap =
+        readVirtualField(
+            "strategyOptionSelfTap", boolean.class, (((strategyOptions) & (0x0020))) == (0x0020));
+    boolean strategyOptionPvtCompensate =
+        readVirtualField(
+            "strategyOptionPvtCompensate",
+            boolean.class,
+            (((strategyOptions) & (0x0040))) == (0x0040));
+    boolean strategyOptionPvtMonitoring =
+        readVirtualField(
+            "strategyOptionPvtMonitoring",
+            boolean.class,
+            (((strategyOptions) & (0x0080))) == (0x0080));
+    boolean strategyOptionBatch =
+        readVirtualField(
+            "strategyOptionBatch", boolean.class, (((strategyOptions) & (0x0100))) == (0x0100));
+    boolean strategyOptionAngle =
+        readVirtualField(
+            "strategyOptionAngle", boolean.class, (((strategyOptions) & (0x0200))) == (0x0200));
+    boolean strategyOptionTorque =
+        readVirtualField(
+            "strategyOptionTorque", boolean.class, (((strategyOptions) & (0x0400))) == (0x0400));
+
     int blockIdBatchSize =
         readConstField(
             "blockIdBatchSize",
@@ -1657,12 +2294,11 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
             OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTIGHTENINGSTATUS,
             WithOption.WithEncoding("ASCII"));
 
-    TighteningStatus tighteningStatus =
+    NokOk tighteningStatus =
         readEnumField(
             "tighteningStatus",
-            "TighteningStatus",
-            new DataReaderEnumDefault<>(
-                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
     int blockIdBatchStatus =
@@ -1785,6 +2421,202 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
             OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTIGHTENINGERRORSTATUS,
             WithOption.WithEncoding("ASCII"));
 
+    String tighteningErrorStatus =
+        readSimpleField(
+            "tighteningErrorStatus", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
+    boolean tighteningErrorStatusRundownAngleMaxShutOff =
+        readVirtualField(
+            "tighteningErrorStatusRundownAngleMaxShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 1));
+    boolean tighteningErrorStatusRundownAngleMinShutOff =
+        readVirtualField(
+            "tighteningErrorStatusRundownAngleMinShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 2));
+    boolean tighteningErrorStatusTorqueMaxShutOff =
+        readVirtualField(
+            "tighteningErrorStatusTorqueMaxShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 3));
+    boolean tighteningErrorStatusAngleMaxShutOff =
+        readVirtualField(
+            "tighteningErrorStatusAngleMaxShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 4));
+    boolean tighteningErrorStatusSelfTapTorqueMaxShutOff =
+        readVirtualField(
+            "tighteningErrorStatusSelfTapTorqueMaxShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 5));
+    boolean tighteningErrorStatusSelfTapTorqueMinShutOff =
+        readVirtualField(
+            "tighteningErrorStatusSelfTapTorqueMinShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 6));
+    boolean tighteningErrorStatusPrevailTorqueMaxShutOff =
+        readVirtualField(
+            "tighteningErrorStatusPrevailTorqueMaxShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 7));
+    boolean tighteningErrorStatusPrevailTorqueMinShutOff =
+        readVirtualField(
+            "tighteningErrorStatusPrevailTorqueMinShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 8));
+    boolean tighteningErrorStatusPrevailTorqueCompensateOverflow =
+        readVirtualField(
+            "tighteningErrorStatusPrevailTorqueCompensateOverflow",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 9));
+    boolean tighteningErrorStatusCurrentMonitoringMaxShutOff =
+        readVirtualField(
+            "tighteningErrorStatusCurrentMonitoringMaxShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 10));
+    boolean tighteningErrorStatusPostViewTorqueMinTorqueShutOff =
+        readVirtualField(
+            "tighteningErrorStatusPostViewTorqueMinTorqueShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 11));
+    boolean tighteningErrorStatusPostViewTorqueMaxTorqueShutOff =
+        readVirtualField(
+            "tighteningErrorStatusPostViewTorqueMaxTorqueShutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 12));
+    boolean tighteningErrorStatusPortViewTorqueAngleTooSmall =
+        readVirtualField(
+            "tighteningErrorStatusPortViewTorqueAngleTooSmall",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 13));
+    boolean tighteningErrorStatusTriggerLost =
+        readVirtualField(
+            "tighteningErrorStatusTriggerLost",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 14));
+    boolean tighteningErrorStatusTorqueLessThanTarget =
+        readVirtualField(
+            "tighteningErrorStatusTorqueLessThanTarget",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 15));
+    boolean tighteningErrorStatusToolHot =
+        readVirtualField(
+            "tighteningErrorStatusToolHot",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 16));
+    boolean tighteningErrorStatusMultistageAbort =
+        readVirtualField(
+            "tighteningErrorStatusMultistageAbort",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 17));
+    boolean tighteningErrorStatusRehit =
+        readVirtualField(
+            "tighteningErrorStatusRehit",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 18));
+    boolean tighteningErrorStatusDsMeasureFailed =
+        readVirtualField(
+            "tighteningErrorStatusDsMeasureFailed",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 19));
+    boolean tighteningErrorStatusCurrentLimitReached =
+        readVirtualField(
+            "tighteningErrorStatusCurrentLimitReached",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 20));
+    boolean tighteningErrorStatusEndTimeOutShutoff =
+        readVirtualField(
+            "tighteningErrorStatusEndTimeOutShutoff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 21));
+    boolean tighteningErrorStatusRemoveFastenerLimitExceeded =
+        readVirtualField(
+            "tighteningErrorStatusRemoveFastenerLimitExceeded",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 22));
+    boolean tighteningErrorStatusDisableDrive =
+        readVirtualField(
+            "tighteningErrorStatusDisableDrive",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 23));
+    boolean tighteningErrorStatusTransducerLost =
+        readVirtualField(
+            "tighteningErrorStatusTransducerLost",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 24));
+    boolean tighteningErrorStatusTransducerShorted =
+        readVirtualField(
+            "tighteningErrorStatusTransducerShorted",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 25));
+    boolean tighteningErrorStatusTransducerCorrupt =
+        readVirtualField(
+            "tighteningErrorStatusTransducerCorrupt",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 26));
+    boolean tighteningErrorStatusSyncTimeout =
+        readVirtualField(
+            "tighteningErrorStatusSyncTimeout",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 27));
+    boolean tighteningErrorStatusDynamicCurrentMonitoringMin =
+        readVirtualField(
+            "tighteningErrorStatusDynamicCurrentMonitoringMin",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 28));
+    boolean tighteningErrorStatusDynamicCurrentMonitoringMax =
+        readVirtualField(
+            "tighteningErrorStatusDynamicCurrentMonitoringMax",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 29));
+    boolean tighteningErrorStatusAngleMaxMonitor =
+        readVirtualField(
+            "tighteningErrorStatusAngleMaxMonitor",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 30));
+    boolean tighteningErrorStatusYieldNutOff =
+        readVirtualField(
+            "tighteningErrorStatusYieldNutOff",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 31));
+    boolean tighteningErrorStatusYieldTooFewSamples =
+        readVirtualField(
+            "tighteningErrorStatusYieldTooFewSamples",
+            boolean.class,
+            org.apache.plc4x.java.openprotocol.readwrite.utils.StaticHelper.isBitSet(
+                tighteningErrorStatus, 32));
+
     int blockIdTorqueMinLimit =
         readConstField(
             "blockIdTorqueMinLimit",
@@ -2040,11 +2872,9 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
             OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTIGHTENINGID,
             WithOption.WithEncoding("ASCII"));
 
-    BigInteger tighteningId =
+    String tighteningId =
         readSimpleField(
-            "tighteningId",
-            readUnsignedBigInteger(readBuffer, 80),
-            WithOption.WithEncoding("ASCII"));
+            "tighteningId", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
 
     int blockIdJobSequenceNumber =
         readConstField(
@@ -2117,6 +2947,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         jobId,
         parameterSetNumber,
         strategy,
+        strategyOptions,
         batchSize,
         batchCounter,
         tighteningStatus,
@@ -2128,6 +2959,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         selfTapStatus,
         prevailTorqueMonitoringStatus,
         prevailTorqueCompensateStatus,
+        tighteningErrorStatus,
         torqueMinLimit,
         torqueMaxLimit,
         torqueFinalTarget,
@@ -2166,9 +2998,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     private final long jobId;
     private final long parameterSetNumber;
     private final Strategy strategy;
+    private final long strategyOptions;
     private final long batchSize;
     private final long batchCounter;
-    private final TighteningStatus tighteningStatus;
+    private final NokOk tighteningStatus;
     private final BatchStatus batchStatus;
     private final Status torqueStatus;
     private final Status angleStatus;
@@ -2177,6 +3010,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     private final Status selfTapStatus;
     private final Status prevailTorqueMonitoringStatus;
     private final Status prevailTorqueCompensateStatus;
+    private final String tighteningErrorStatus;
     private final BigInteger torqueMinLimit;
     private final BigInteger torqueMaxLimit;
     private final BigInteger torqueFinalTarget;
@@ -2197,7 +3031,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
     private final BigInteger prevailTorqueMonitoringMin;
     private final BigInteger prevailTorqueMonitoringMax;
     private final BigInteger prevailTorque;
-    private final BigInteger tighteningId;
+    private final String tighteningId;
     private final BigInteger jobSequenceNumber;
     private final BigInteger syncTighteningId;
     private final String toolSerialNumber;
@@ -2212,9 +3046,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         long jobId,
         long parameterSetNumber,
         Strategy strategy,
+        long strategyOptions,
         long batchSize,
         long batchCounter,
-        TighteningStatus tighteningStatus,
+        NokOk tighteningStatus,
         BatchStatus batchStatus,
         Status torqueStatus,
         Status angleStatus,
@@ -2223,6 +3058,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         Status selfTapStatus,
         Status prevailTorqueMonitoringStatus,
         Status prevailTorqueCompensateStatus,
+        String tighteningErrorStatus,
         BigInteger torqueMinLimit,
         BigInteger torqueMaxLimit,
         BigInteger torqueFinalTarget,
@@ -2243,7 +3079,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         BigInteger prevailTorqueMonitoringMin,
         BigInteger prevailTorqueMonitoringMax,
         BigInteger prevailTorque,
-        BigInteger tighteningId,
+        String tighteningId,
         BigInteger jobSequenceNumber,
         BigInteger syncTighteningId,
         String toolSerialNumber,
@@ -2256,6 +3092,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
       this.jobId = jobId;
       this.parameterSetNumber = parameterSetNumber;
       this.strategy = strategy;
+      this.strategyOptions = strategyOptions;
       this.batchSize = batchSize;
       this.batchCounter = batchCounter;
       this.tighteningStatus = tighteningStatus;
@@ -2267,6 +3104,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
       this.selfTapStatus = selfTapStatus;
       this.prevailTorqueMonitoringStatus = prevailTorqueMonitoringStatus;
       this.prevailTorqueCompensateStatus = prevailTorqueCompensateStatus;
+      this.tighteningErrorStatus = tighteningErrorStatus;
       this.torqueMinLimit = torqueMinLimit;
       this.torqueMaxLimit = torqueMaxLimit;
       this.torqueFinalTarget = torqueFinalTarget;
@@ -2321,6 +3159,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
                   jobId,
                   parameterSetNumber,
                   strategy,
+                  strategyOptions,
                   batchSize,
                   batchCounter,
                   tighteningStatus,
@@ -2332,6 +3171,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
                   selfTapStatus,
                   prevailTorqueMonitoringStatus,
                   prevailTorqueCompensateStatus,
+                  tighteningErrorStatus,
                   torqueMinLimit,
                   torqueMaxLimit,
                   torqueFinalTarget,
@@ -2379,6 +3219,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         && (getJobId() == that.getJobId())
         && (getParameterSetNumber() == that.getParameterSetNumber())
         && (getStrategy() == that.getStrategy())
+        && (getStrategyOptions() == that.getStrategyOptions())
         && (getBatchSize() == that.getBatchSize())
         && (getBatchCounter() == that.getBatchCounter())
         && (getTighteningStatus() == that.getTighteningStatus())
@@ -2390,6 +3231,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         && (getSelfTapStatus() == that.getSelfTapStatus())
         && (getPrevailTorqueMonitoringStatus() == that.getPrevailTorqueMonitoringStatus())
         && (getPrevailTorqueCompensateStatus() == that.getPrevailTorqueCompensateStatus())
+        && (getTighteningErrorStatus() == that.getTighteningErrorStatus())
         && (getTorqueMinLimit() == that.getTorqueMinLimit())
         && (getTorqueMaxLimit() == that.getTorqueMaxLimit())
         && (getTorqueFinalTarget() == that.getTorqueFinalTarget())
@@ -2432,6 +3274,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         getJobId(),
         getParameterSetNumber(),
         getStrategy(),
+        getStrategyOptions(),
         getBatchSize(),
         getBatchCounter(),
         getTighteningStatus(),
@@ -2443,6 +3286,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev2
         getSelfTapStatus(),
         getPrevailTorqueMonitoringStatus(),
         getPrevailTorqueCompensateStatus(),
+        getTighteningErrorStatus(),
         getTorqueMinLimit(),
         getTorqueMaxLimit(),
         getTorqueFinalTarget(),
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev3.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev3.java
index b9fd7b5d9a..8c3af3867f 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev3.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev3.java
@@ -105,7 +105,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
   protected final Strategy strategy;
   protected final long batchSize;
   protected final long batchCounter;
-  protected final TighteningStatus tighteningStatus;
+  protected final NokOk tighteningStatus;
   protected final BatchStatus batchStatus;
   protected final Status torqueStatus;
   protected final Status angleStatus;
@@ -134,7 +134,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
   protected final BigInteger prevailTorqueMonitoringMin;
   protected final BigInteger prevailTorqueMonitoringMax;
   protected final BigInteger prevailTorque;
-  protected final BigInteger tighteningId;
+  protected final String tighteningId;
   protected final BigInteger jobSequenceNumber;
   protected final BigInteger syncTighteningId;
   protected final String toolSerialNumber;
@@ -161,7 +161,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
       Strategy strategy,
       long batchSize,
       long batchCounter,
-      TighteningStatus tighteningStatus,
+      NokOk tighteningStatus,
       BatchStatus batchStatus,
       Status torqueStatus,
       Status angleStatus,
@@ -190,7 +190,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
       BigInteger prevailTorqueMonitoringMin,
       BigInteger prevailTorqueMonitoringMax,
       BigInteger prevailTorque,
-      BigInteger tighteningId,
+      String tighteningId,
       BigInteger jobSequenceNumber,
       BigInteger syncTighteningId,
       String toolSerialNumber,
@@ -292,7 +292,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
     return batchCounter;
   }
 
-  public TighteningStatus getTighteningStatus() {
+  public NokOk getTighteningStatus() {
     return tighteningStatus;
   }
 
@@ -408,7 +408,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
     return prevailTorque;
   }
 
-  public BigInteger getTighteningId() {
+  public String getTighteningId() {
     return tighteningId;
   }
 
@@ -783,10 +783,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
     // Simple Field (tighteningStatus)
     writeSimpleEnumField(
         "tighteningStatus",
-        "TighteningStatus",
+        "NokOk",
         tighteningStatus,
         new DataWriterEnumDefault<>(
-            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdBatchStatus)
@@ -1212,7 +1212,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
     writeSimpleField(
         "tighteningId",
         tighteningId,
-        writeUnsignedBigInteger(writeBuffer, 80),
+        writeString(writeBuffer, 80),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdJobSequenceNumber)
@@ -1756,12 +1756,11 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
             OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTIGHTENINGSTATUS,
             WithOption.WithEncoding("ASCII"));
 
-    TighteningStatus tighteningStatus =
+    NokOk tighteningStatus =
         readEnumField(
             "tighteningStatus",
-            "TighteningStatus",
-            new DataReaderEnumDefault<>(
-                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
     int blockIdBatchStatus =
@@ -2139,11 +2138,9 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
             OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTIGHTENINGID,
             WithOption.WithEncoding("ASCII"));
 
-    BigInteger tighteningId =
+    String tighteningId =
         readSimpleField(
-            "tighteningId",
-            readUnsignedBigInteger(readBuffer, 80),
-            WithOption.WithEncoding("ASCII"));
+            "tighteningId", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
 
     int blockIdJobSequenceNumber =
         readConstField(
@@ -2309,7 +2306,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
     private final Strategy strategy;
     private final long batchSize;
     private final long batchCounter;
-    private final TighteningStatus tighteningStatus;
+    private final NokOk tighteningStatus;
     private final BatchStatus batchStatus;
     private final Status torqueStatus;
     private final Status angleStatus;
@@ -2338,7 +2335,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
     private final BigInteger prevailTorqueMonitoringMin;
     private final BigInteger prevailTorqueMonitoringMax;
     private final BigInteger prevailTorque;
-    private final BigInteger tighteningId;
+    private final String tighteningId;
     private final BigInteger jobSequenceNumber;
     private final BigInteger syncTighteningId;
     private final String toolSerialNumber;
@@ -2358,7 +2355,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
         Strategy strategy,
         long batchSize,
         long batchCounter,
-        TighteningStatus tighteningStatus,
+        NokOk tighteningStatus,
         BatchStatus batchStatus,
         Status torqueStatus,
         Status angleStatus,
@@ -2387,7 +2384,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev3
         BigInteger prevailTorqueMonitoringMin,
         BigInteger prevailTorqueMonitoringMax,
         BigInteger prevailTorque,
-        BigInteger tighteningId,
+        String tighteningId,
         BigInteger jobSequenceNumber,
         BigInteger syncTighteningId,
         String toolSerialNumber,
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev4.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev4.java
index 14869f947f..835d1d1308 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev4.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev4.java
@@ -108,7 +108,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
   protected final Strategy strategy;
   protected final long batchSize;
   protected final long batchCounter;
-  protected final TighteningStatus tighteningStatus;
+  protected final NokOk tighteningStatus;
   protected final BatchStatus batchStatus;
   protected final Status torqueStatus;
   protected final Status angleStatus;
@@ -137,7 +137,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
   protected final BigInteger prevailTorqueMonitoringMin;
   protected final BigInteger prevailTorqueMonitoringMax;
   protected final BigInteger prevailTorque;
-  protected final BigInteger tighteningId;
+  protected final String tighteningId;
   protected final BigInteger jobSequenceNumber;
   protected final BigInteger syncTighteningId;
   protected final String toolSerialNumber;
@@ -167,7 +167,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
       Strategy strategy,
       long batchSize,
       long batchCounter,
-      TighteningStatus tighteningStatus,
+      NokOk tighteningStatus,
       BatchStatus batchStatus,
       Status torqueStatus,
       Status angleStatus,
@@ -196,7 +196,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
       BigInteger prevailTorqueMonitoringMin,
       BigInteger prevailTorqueMonitoringMax,
       BigInteger prevailTorque,
-      BigInteger tighteningId,
+      String tighteningId,
       BigInteger jobSequenceNumber,
       BigInteger syncTighteningId,
       String toolSerialNumber,
@@ -304,7 +304,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
     return batchCounter;
   }
 
-  public TighteningStatus getTighteningStatus() {
+  public NokOk getTighteningStatus() {
     return tighteningStatus;
   }
 
@@ -420,7 +420,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
     return prevailTorque;
   }
 
-  public BigInteger getTighteningId() {
+  public String getTighteningId() {
     return tighteningId;
   }
 
@@ -819,10 +819,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
     // Simple Field (tighteningStatus)
     writeSimpleEnumField(
         "tighteningStatus",
-        "TighteningStatus",
+        "NokOk",
         tighteningStatus,
         new DataWriterEnumDefault<>(
-            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdBatchStatus)
@@ -1248,7 +1248,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
     writeSimpleField(
         "tighteningId",
         tighteningId,
-        writeUnsignedBigInteger(writeBuffer, 80),
+        writeString(writeBuffer, 80),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdJobSequenceNumber)
@@ -1852,12 +1852,11 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
             OpenProtocolMessageLastTighteningResultDataRev4.BLOCKIDTIGHTENINGSTATUS,
             WithOption.WithEncoding("ASCII"));
 
-    TighteningStatus tighteningStatus =
+    NokOk tighteningStatus =
         readEnumField(
             "tighteningStatus",
-            "TighteningStatus",
-            new DataReaderEnumDefault<>(
-                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
     int blockIdBatchStatus =
@@ -2235,11 +2234,9 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
             OpenProtocolMessageLastTighteningResultDataRev4.BLOCKIDTIGHTENINGID,
             WithOption.WithEncoding("ASCII"));
 
-    BigInteger tighteningId =
+    String tighteningId =
         readSimpleField(
-            "tighteningId",
-            readUnsignedBigInteger(readBuffer, 80),
-            WithOption.WithEncoding("ASCII"));
+            "tighteningId", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
 
     int blockIdJobSequenceNumber =
         readConstField(
@@ -2441,7 +2438,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
     private final Strategy strategy;
     private final long batchSize;
     private final long batchCounter;
-    private final TighteningStatus tighteningStatus;
+    private final NokOk tighteningStatus;
     private final BatchStatus batchStatus;
     private final Status torqueStatus;
     private final Status angleStatus;
@@ -2470,7 +2467,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
     private final BigInteger prevailTorqueMonitoringMin;
     private final BigInteger prevailTorqueMonitoringMax;
     private final BigInteger prevailTorque;
-    private final BigInteger tighteningId;
+    private final String tighteningId;
     private final BigInteger jobSequenceNumber;
     private final BigInteger syncTighteningId;
     private final String toolSerialNumber;
@@ -2493,7 +2490,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
         Strategy strategy,
         long batchSize,
         long batchCounter,
-        TighteningStatus tighteningStatus,
+        NokOk tighteningStatus,
         BatchStatus batchStatus,
         Status torqueStatus,
         Status angleStatus,
@@ -2522,7 +2519,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev4
         BigInteger prevailTorqueMonitoringMin,
         BigInteger prevailTorqueMonitoringMax,
         BigInteger prevailTorque,
-        BigInteger tighteningId,
+        String tighteningId,
         BigInteger jobSequenceNumber,
         BigInteger syncTighteningId,
         String toolSerialNumber,
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev5.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev5.java
index 642ded1ad9..09b6f19150 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev5.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev5.java
@@ -109,7 +109,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
   protected final Strategy strategy;
   protected final long batchSize;
   protected final long batchCounter;
-  protected final TighteningStatus tighteningStatus;
+  protected final NokOk tighteningStatus;
   protected final BatchStatus batchStatus;
   protected final Status torqueStatus;
   protected final Status angleStatus;
@@ -138,7 +138,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
   protected final BigInteger prevailTorqueMonitoringMin;
   protected final BigInteger prevailTorqueMonitoringMax;
   protected final BigInteger prevailTorque;
-  protected final BigInteger tighteningId;
+  protected final String tighteningId;
   protected final BigInteger jobSequenceNumber;
   protected final BigInteger syncTighteningId;
   protected final String toolSerialNumber;
@@ -169,7 +169,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
       Strategy strategy,
       long batchSize,
       long batchCounter,
-      TighteningStatus tighteningStatus,
+      NokOk tighteningStatus,
       BatchStatus batchStatus,
       Status torqueStatus,
       Status angleStatus,
@@ -198,7 +198,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
       BigInteger prevailTorqueMonitoringMin,
       BigInteger prevailTorqueMonitoringMax,
       BigInteger prevailTorque,
-      BigInteger tighteningId,
+      String tighteningId,
       BigInteger jobSequenceNumber,
       BigInteger syncTighteningId,
       String toolSerialNumber,
@@ -308,7 +308,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
     return batchCounter;
   }
 
-  public TighteningStatus getTighteningStatus() {
+  public NokOk getTighteningStatus() {
     return tighteningStatus;
   }
 
@@ -424,7 +424,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
     return prevailTorque;
   }
 
-  public BigInteger getTighteningId() {
+  public String getTighteningId() {
     return tighteningId;
   }
 
@@ -831,10 +831,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
     // Simple Field (tighteningStatus)
     writeSimpleEnumField(
         "tighteningStatus",
-        "TighteningStatus",
+        "NokOk",
         tighteningStatus,
         new DataWriterEnumDefault<>(
-            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdBatchStatus)
@@ -1260,7 +1260,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
     writeSimpleField(
         "tighteningId",
         tighteningId,
-        writeUnsignedBigInteger(writeBuffer, 80),
+        writeString(writeBuffer, 80),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdJobSequenceNumber)
@@ -1884,12 +1884,11 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
             OpenProtocolMessageLastTighteningResultDataRev5.BLOCKIDTIGHTENINGSTATUS,
             WithOption.WithEncoding("ASCII"));
 
-    TighteningStatus tighteningStatus =
+    NokOk tighteningStatus =
         readEnumField(
             "tighteningStatus",
-            "TighteningStatus",
-            new DataReaderEnumDefault<>(
-                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
     int blockIdBatchStatus =
@@ -2267,11 +2266,9 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
             OpenProtocolMessageLastTighteningResultDataRev5.BLOCKIDTIGHTENINGID,
             WithOption.WithEncoding("ASCII"));
 
-    BigInteger tighteningId =
+    String tighteningId =
         readSimpleField(
-            "tighteningId",
-            readUnsignedBigInteger(readBuffer, 80),
-            WithOption.WithEncoding("ASCII"));
+            "tighteningId", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
 
     int blockIdJobSequenceNumber =
         readConstField(
@@ -2487,7 +2484,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
     private final Strategy strategy;
     private final long batchSize;
     private final long batchCounter;
-    private final TighteningStatus tighteningStatus;
+    private final NokOk tighteningStatus;
     private final BatchStatus batchStatus;
     private final Status torqueStatus;
     private final Status angleStatus;
@@ -2516,7 +2513,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
     private final BigInteger prevailTorqueMonitoringMin;
     private final BigInteger prevailTorqueMonitoringMax;
     private final BigInteger prevailTorque;
-    private final BigInteger tighteningId;
+    private final String tighteningId;
     private final BigInteger jobSequenceNumber;
     private final BigInteger syncTighteningId;
     private final String toolSerialNumber;
@@ -2540,7 +2537,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
         Strategy strategy,
         long batchSize,
         long batchCounter,
-        TighteningStatus tighteningStatus,
+        NokOk tighteningStatus,
         BatchStatus batchStatus,
         Status torqueStatus,
         Status angleStatus,
@@ -2569,7 +2566,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev5
         BigInteger prevailTorqueMonitoringMin,
         BigInteger prevailTorqueMonitoringMax,
         BigInteger prevailTorque,
-        BigInteger tighteningId,
+        String tighteningId,
         BigInteger jobSequenceNumber,
         BigInteger syncTighteningId,
         String toolSerialNumber,
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev6.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev6.java
index 05c8cf5a6a..732221adc3 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev6.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev6.java
@@ -111,7 +111,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
   protected final Strategy strategy;
   protected final long batchSize;
   protected final long batchCounter;
-  protected final TighteningStatus tighteningStatus;
+  protected final NokOk tighteningStatus;
   protected final BatchStatus batchStatus;
   protected final Status torqueStatus;
   protected final Status angleStatus;
@@ -140,7 +140,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
   protected final BigInteger prevailTorqueMonitoringMin;
   protected final BigInteger prevailTorqueMonitoringMax;
   protected final BigInteger prevailTorque;
-  protected final BigInteger tighteningId;
+  protected final String tighteningId;
   protected final BigInteger jobSequenceNumber;
   protected final BigInteger syncTighteningId;
   protected final String toolSerialNumber;
@@ -173,7 +173,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
       Strategy strategy,
       long batchSize,
       long batchCounter,
-      TighteningStatus tighteningStatus,
+      NokOk tighteningStatus,
       BatchStatus batchStatus,
       Status torqueStatus,
       Status angleStatus,
@@ -202,7 +202,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
       BigInteger prevailTorqueMonitoringMin,
       BigInteger prevailTorqueMonitoringMax,
       BigInteger prevailTorque,
-      BigInteger tighteningId,
+      String tighteningId,
       BigInteger jobSequenceNumber,
       BigInteger syncTighteningId,
       String toolSerialNumber,
@@ -316,7 +316,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
     return batchCounter;
   }
 
-  public TighteningStatus getTighteningStatus() {
+  public NokOk getTighteningStatus() {
     return tighteningStatus;
   }
 
@@ -432,7 +432,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
     return prevailTorque;
   }
 
-  public BigInteger getTighteningId() {
+  public String getTighteningId() {
     return tighteningId;
   }
 
@@ -855,10 +855,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
     // Simple Field (tighteningStatus)
     writeSimpleEnumField(
         "tighteningStatus",
-        "TighteningStatus",
+        "NokOk",
         tighteningStatus,
         new DataWriterEnumDefault<>(
-            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdBatchStatus)
@@ -1284,7 +1284,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
     writeSimpleField(
         "tighteningId",
         tighteningId,
-        writeUnsignedBigInteger(writeBuffer, 80),
+        writeString(writeBuffer, 80),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdJobSequenceNumber)
@@ -1950,12 +1950,11 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
             OpenProtocolMessageLastTighteningResultDataRev6.BLOCKIDTIGHTENINGSTATUS,
             WithOption.WithEncoding("ASCII"));
 
-    TighteningStatus tighteningStatus =
+    NokOk tighteningStatus =
         readEnumField(
             "tighteningStatus",
-            "TighteningStatus",
-            new DataReaderEnumDefault<>(
-                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
     int blockIdBatchStatus =
@@ -2333,11 +2332,9 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
             OpenProtocolMessageLastTighteningResultDataRev6.BLOCKIDTIGHTENINGID,
             WithOption.WithEncoding("ASCII"));
 
-    BigInteger tighteningId =
+    String tighteningId =
         readSimpleField(
-            "tighteningId",
-            readUnsignedBigInteger(readBuffer, 80),
-            WithOption.WithEncoding("ASCII"));
+            "tighteningId", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
 
     int blockIdJobSequenceNumber =
         readConstField(
@@ -2582,7 +2579,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
     private final Strategy strategy;
     private final long batchSize;
     private final long batchCounter;
-    private final TighteningStatus tighteningStatus;
+    private final NokOk tighteningStatus;
     private final BatchStatus batchStatus;
     private final Status torqueStatus;
     private final Status angleStatus;
@@ -2611,7 +2608,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
     private final BigInteger prevailTorqueMonitoringMin;
     private final BigInteger prevailTorqueMonitoringMax;
     private final BigInteger prevailTorque;
-    private final BigInteger tighteningId;
+    private final String tighteningId;
     private final BigInteger jobSequenceNumber;
     private final BigInteger syncTighteningId;
     private final String toolSerialNumber;
@@ -2637,7 +2634,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
         Strategy strategy,
         long batchSize,
         long batchCounter,
-        TighteningStatus tighteningStatus,
+        NokOk tighteningStatus,
         BatchStatus batchStatus,
         Status torqueStatus,
         Status angleStatus,
@@ -2666,7 +2663,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev6
         BigInteger prevailTorqueMonitoringMin,
         BigInteger prevailTorqueMonitoringMax,
         BigInteger prevailTorque,
-        BigInteger tighteningId,
+        String tighteningId,
         BigInteger jobSequenceNumber,
         BigInteger syncTighteningId,
         String toolSerialNumber,
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev7.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev7.java
index 56770c45fc..ac1a1ca9d7 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev7.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev7.java
@@ -113,7 +113,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
   protected final Strategy strategy;
   protected final long batchSize;
   protected final long batchCounter;
-  protected final TighteningStatus tighteningStatus;
+  protected final NokOk tighteningStatus;
   protected final BatchStatus batchStatus;
   protected final Status torqueStatus;
   protected final Status angleStatus;
@@ -142,7 +142,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
   protected final BigInteger prevailTorqueMonitoringMin;
   protected final BigInteger prevailTorqueMonitoringMax;
   protected final BigInteger prevailTorque;
-  protected final BigInteger tighteningId;
+  protected final String tighteningId;
   protected final BigInteger jobSequenceNumber;
   protected final BigInteger syncTighteningId;
   protected final String toolSerialNumber;
@@ -176,7 +176,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
       Strategy strategy,
       long batchSize,
       long batchCounter,
-      TighteningStatus tighteningStatus,
+      NokOk tighteningStatus,
       BatchStatus batchStatus,
       Status torqueStatus,
       Status angleStatus,
@@ -205,7 +205,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
       BigInteger prevailTorqueMonitoringMin,
       BigInteger prevailTorqueMonitoringMax,
       BigInteger prevailTorque,
-      BigInteger tighteningId,
+      String tighteningId,
       BigInteger jobSequenceNumber,
       BigInteger syncTighteningId,
       String toolSerialNumber,
@@ -321,7 +321,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
     return batchCounter;
   }
 
-  public TighteningStatus getTighteningStatus() {
+  public NokOk getTighteningStatus() {
     return tighteningStatus;
   }
 
@@ -437,7 +437,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
     return prevailTorque;
   }
 
-  public BigInteger getTighteningId() {
+  public String getTighteningId() {
     return tighteningId;
   }
 
@@ -872,10 +872,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
     // Simple Field (tighteningStatus)
     writeSimpleEnumField(
         "tighteningStatus",
-        "TighteningStatus",
+        "NokOk",
         tighteningStatus,
         new DataWriterEnumDefault<>(
-            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdBatchStatus)
@@ -1301,7 +1301,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
     writeSimpleField(
         "tighteningId",
         tighteningId,
-        writeUnsignedBigInteger(writeBuffer, 80),
+        writeString(writeBuffer, 80),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdJobSequenceNumber)
@@ -1995,12 +1995,11 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
             OpenProtocolMessageLastTighteningResultDataRev7.BLOCKIDTIGHTENINGSTATUS,
             WithOption.WithEncoding("ASCII"));
 
-    TighteningStatus tighteningStatus =
+    NokOk tighteningStatus =
         readEnumField(
             "tighteningStatus",
-            "TighteningStatus",
-            new DataReaderEnumDefault<>(
-                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
     int blockIdBatchStatus =
@@ -2378,11 +2377,9 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
             OpenProtocolMessageLastTighteningResultDataRev7.BLOCKIDTIGHTENINGID,
             WithOption.WithEncoding("ASCII"));
 
-    BigInteger tighteningId =
+    String tighteningId =
         readSimpleField(
-            "tighteningId",
-            readUnsignedBigInteger(readBuffer, 80),
-            WithOption.WithEncoding("ASCII"));
+            "tighteningId", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
 
     int blockIdJobSequenceNumber =
         readConstField(
@@ -2647,7 +2644,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
     private final Strategy strategy;
     private final long batchSize;
     private final long batchCounter;
-    private final TighteningStatus tighteningStatus;
+    private final NokOk tighteningStatus;
     private final BatchStatus batchStatus;
     private final Status torqueStatus;
     private final Status angleStatus;
@@ -2676,7 +2673,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
     private final BigInteger prevailTorqueMonitoringMin;
     private final BigInteger prevailTorqueMonitoringMax;
     private final BigInteger prevailTorque;
-    private final BigInteger tighteningId;
+    private final String tighteningId;
     private final BigInteger jobSequenceNumber;
     private final BigInteger syncTighteningId;
     private final String toolSerialNumber;
@@ -2703,7 +2700,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
         Strategy strategy,
         long batchSize,
         long batchCounter,
-        TighteningStatus tighteningStatus,
+        NokOk tighteningStatus,
         BatchStatus batchStatus,
         Status torqueStatus,
         Status angleStatus,
@@ -2732,7 +2729,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev7
         BigInteger prevailTorqueMonitoringMin,
         BigInteger prevailTorqueMonitoringMax,
         BigInteger prevailTorque,
-        BigInteger tighteningId,
+        String tighteningId,
         BigInteger jobSequenceNumber,
         BigInteger syncTighteningId,
         String toolSerialNumber,
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev998.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev998.java
index 34a6d06b38..261e1584e6 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev998.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev998.java
@@ -114,7 +114,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
   protected final Strategy strategy;
   protected final long batchSize;
   protected final long batchCounter;
-  protected final TighteningStatus tighteningStatus;
+  protected final NokOk tighteningStatus;
   protected final BatchStatus batchStatus;
   protected final Status torqueStatus;
   protected final Status angleStatus;
@@ -143,7 +143,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
   protected final BigInteger prevailTorqueMonitoringMin;
   protected final BigInteger prevailTorqueMonitoringMax;
   protected final BigInteger prevailTorque;
-  protected final BigInteger tighteningId;
+  protected final String tighteningId;
   protected final BigInteger jobSequenceNumber;
   protected final BigInteger syncTighteningId;
   protected final String toolSerialNumber;
@@ -177,7 +177,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
       Strategy strategy,
       long batchSize,
       long batchCounter,
-      TighteningStatus tighteningStatus,
+      NokOk tighteningStatus,
       BatchStatus batchStatus,
       Status torqueStatus,
       Status angleStatus,
@@ -206,7 +206,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
       BigInteger prevailTorqueMonitoringMin,
       BigInteger prevailTorqueMonitoringMax,
       BigInteger prevailTorque,
-      BigInteger tighteningId,
+      String tighteningId,
       BigInteger jobSequenceNumber,
       BigInteger syncTighteningId,
       String toolSerialNumber,
@@ -322,7 +322,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
     return batchCounter;
   }
 
-  public TighteningStatus getTighteningStatus() {
+  public NokOk getTighteningStatus() {
     return tighteningStatus;
   }
 
@@ -438,7 +438,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
     return prevailTorque;
   }
 
-  public BigInteger getTighteningId() {
+  public String getTighteningId() {
     return tighteningId;
   }
 
@@ -877,10 +877,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
     // Simple Field (tighteningStatus)
     writeSimpleEnumField(
         "tighteningStatus",
-        "TighteningStatus",
+        "NokOk",
         tighteningStatus,
         new DataWriterEnumDefault<>(
-            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdBatchStatus)
@@ -1306,7 +1306,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
     writeSimpleField(
         "tighteningId",
         tighteningId,
-        writeUnsignedBigInteger(writeBuffer, 80),
+        writeString(writeBuffer, 80),
         WithOption.WithEncoding("ASCII"));
 
     // Const Field (blockIdJobSequenceNumber)
@@ -2025,12 +2025,11 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
             OpenProtocolMessageLastTighteningResultDataRev998.BLOCKIDTIGHTENINGSTATUS,
             WithOption.WithEncoding("ASCII"));
 
-    TighteningStatus tighteningStatus =
+    NokOk tighteningStatus =
         readEnumField(
             "tighteningStatus",
-            "TighteningStatus",
-            new DataReaderEnumDefault<>(
-                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
     int blockIdBatchStatus =
@@ -2408,11 +2407,9 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
             OpenProtocolMessageLastTighteningResultDataRev998.BLOCKIDTIGHTENINGID,
             WithOption.WithEncoding("ASCII"));
 
-    BigInteger tighteningId =
+    String tighteningId =
         readSimpleField(
-            "tighteningId",
-            readUnsignedBigInteger(readBuffer, 80),
-            WithOption.WithEncoding("ASCII"));
+            "tighteningId", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
 
     int blockIdJobSequenceNumber =
         readConstField(
@@ -2691,7 +2688,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
     private final Strategy strategy;
     private final long batchSize;
     private final long batchCounter;
-    private final TighteningStatus tighteningStatus;
+    private final NokOk tighteningStatus;
     private final BatchStatus batchStatus;
     private final Status torqueStatus;
     private final Status angleStatus;
@@ -2720,7 +2717,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
     private final BigInteger prevailTorqueMonitoringMin;
     private final BigInteger prevailTorqueMonitoringMax;
     private final BigInteger prevailTorque;
-    private final BigInteger tighteningId;
+    private final String tighteningId;
     private final BigInteger jobSequenceNumber;
     private final BigInteger syncTighteningId;
     private final String toolSerialNumber;
@@ -2747,7 +2744,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
         Strategy strategy,
         long batchSize,
         long batchCounter,
-        TighteningStatus tighteningStatus,
+        NokOk tighteningStatus,
         BatchStatus batchStatus,
         Status torqueStatus,
         Status angleStatus,
@@ -2776,7 +2773,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev998
         BigInteger prevailTorqueMonitoringMin,
         BigInteger prevailTorqueMonitoringMax,
         BigInteger prevailTorque,
-        BigInteger tighteningId,
+        String tighteningId,
         BigInteger jobSequenceNumber,
         BigInteger syncTighteningId,
         String toolSerialNumber,
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev999Light.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev999Light.java
index 14330faf30..c902fc69a8 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev999Light.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev999Light.java
@@ -51,14 +51,14 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
   protected final long batchSize;
   protected final long batchCounter;
   protected final BatchStatus batchStatus;
-  protected final TighteningStatus tighteningStatus;
+  protected final NokOk tighteningStatus;
   protected final Status torqueStatus;
   protected final Status angleStatus;
   protected final BigInteger torque;
   protected final BigInteger angle;
   protected final String timeStamp;
   protected final String dateTimeOfLastChangeIndParameterSetSettings;
-  protected final BigInteger tighteningId;
+  protected final String tighteningId;
 
   public OpenProtocolMessageLastTighteningResultDataRev999Light(
       Long midRevision,
@@ -74,14 +74,14 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
       long batchSize,
       long batchCounter,
       BatchStatus batchStatus,
-      TighteningStatus tighteningStatus,
+      NokOk tighteningStatus,
       Status torqueStatus,
       Status angleStatus,
       BigInteger torque,
       BigInteger angle,
       String timeStamp,
       String dateTimeOfLastChangeIndParameterSetSettings,
-      BigInteger tighteningId) {
+      String tighteningId) {
     super(
         midRevision,
         noAckFlag,
@@ -130,7 +130,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
     return batchStatus;
   }
 
-  public TighteningStatus getTighteningStatus() {
+  public NokOk getTighteningStatus() {
     return tighteningStatus;
   }
 
@@ -158,7 +158,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
     return dateTimeOfLastChangeIndParameterSetSettings;
   }
 
-  public BigInteger getTighteningId() {
+  public String getTighteningId() {
     return tighteningId;
   }
 
@@ -210,10 +210,10 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
     // Simple Field (tighteningStatus)
     writeSimpleEnumField(
         "tighteningStatus",
-        "TighteningStatus",
+        "NokOk",
         tighteningStatus,
         new DataWriterEnumDefault<>(
-            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+            NokOk::getValue, NokOk::name, writeUnsignedShort(writeBuffer, 8)),
         WithOption.WithEncoding("ASCII"));
 
     // Simple Field (torqueStatus)
@@ -260,7 +260,7 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
     writeSimpleField(
         "tighteningId",
         tighteningId,
-        writeUnsignedBigInteger(writeBuffer, 80),
+        writeString(writeBuffer, 80),
         WithOption.WithEncoding("ASCII"));
 
     writeBuffer.popContext("OpenProtocolMessageLastTighteningResultDataRev999Light");
@@ -355,12 +355,11 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
                 BatchStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
-    TighteningStatus tighteningStatus =
+    NokOk tighteningStatus =
         readEnumField(
             "tighteningStatus",
-            "TighteningStatus",
-            new DataReaderEnumDefault<>(
-                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            "NokOk",
+            new DataReaderEnumDefault<>(NokOk::enumForValue, readUnsignedShort(readBuffer, 8)),
             WithOption.WithEncoding("ASCII"));
 
     Status torqueStatus =
@@ -394,11 +393,9 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
             readString(readBuffer, 152),
             WithOption.WithEncoding("ASCII"));
 
-    BigInteger tighteningId =
+    String tighteningId =
         readSimpleField(
-            "tighteningId",
-            readUnsignedBigInteger(readBuffer, 80),
-            WithOption.WithEncoding("ASCII"));
+            "tighteningId", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
 
     readBuffer.closeContext("OpenProtocolMessageLastTighteningResultDataRev999Light");
     // Create the instance
@@ -428,14 +425,14 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
     private final long batchSize;
     private final long batchCounter;
     private final BatchStatus batchStatus;
-    private final TighteningStatus tighteningStatus;
+    private final NokOk tighteningStatus;
     private final Status torqueStatus;
     private final Status angleStatus;
     private final BigInteger torque;
     private final BigInteger angle;
     private final String timeStamp;
     private final String dateTimeOfLastChangeIndParameterSetSettings;
-    private final BigInteger tighteningId;
+    private final String tighteningId;
 
     public OpenProtocolMessageLastTighteningResultDataRev999LightBuilderImpl(
         String vinNumber,
@@ -444,14 +441,14 @@ public class OpenProtocolMessageLastTighteningResultDataRev999Light
         long batchSize,
         long batchCounter,
         BatchStatus batchStatus,
-        TighteningStatus tighteningStatus,
+        NokOk tighteningStatus,
         Status torqueStatus,
         Status angleStatus,
         BigInteger torque,
         BigInteger angle,
         String timeStamp,
         String dateTimeOfLastChangeIndParameterSetSettings,
-        BigInteger tighteningId) {
+        String tighteningId) {
       this.vinNumber = vinNumber;
       this.jobId = jobId;
       this.parameterSetId = parameterSetId;
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurve.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurve.java
new file mode 100644
index 0000000000..0e00f8692d
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurve.java
@@ -0,0 +1,191 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageResultTracesCurve extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.ResultTracesCurve;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageResultTracesCurve(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageResultTracesCurveChild(
+      WriteBuffer writeBuffer) throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageResultTracesCurve");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageResultTracesCurveChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageResultTracesCurve");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageResultTracesCurve _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageResultTracesCurve");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageResultTracesCurveBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageResultTracesCurveRev1
+              .staticParseOpenProtocolMessageResultTracesCurveBuilder(readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageResultTracesCurve");
+    // Create the instance
+    return new OpenProtocolMessageResultTracesCurveBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageResultTracesCurveBuilder {
+    OpenProtocolMessageResultTracesCurve build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageResultTracesCurveBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageResultTracesCurveBuilder builder;
+
+    public OpenProtocolMessageResultTracesCurveBuilderImpl(
+        OpenProtocolMessageResultTracesCurveBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageResultTracesCurve build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageResultTracesCurve)) {
+      return false;
+    }
+    OpenProtocolMessageResultTracesCurve that = (OpenProtocolMessageResultTracesCurve) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurvePlotData.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurvePlotData.java
new file mode 100644
index 0000000000..d0514232ef
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurvePlotData.java
@@ -0,0 +1,192 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public abstract class OpenProtocolMessageResultTracesCurvePlotData extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.ResultTracesCurvePlotData;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageResultTracesCurvePlotData(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+  }
+
+  protected abstract void serializeOpenProtocolMessageResultTracesCurvePlotDataChild(
+      WriteBuffer writeBuffer) throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageResultTracesCurvePlotData");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageResultTracesCurvePlotDataChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageResultTracesCurvePlotData");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageResultTracesCurvePlotData _value = this;
+
+    // Length of sub-type elements will be added by sub-type...
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageBuilder staticParseOpenProtocolMessageBuilder(
+      ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageResultTracesCurvePlotData");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageResultTracesCurvePlotDataBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageResultTracesCurvePlotDataRev1
+              .staticParseOpenProtocolMessageResultTracesCurvePlotDataBuilder(readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageResultTracesCurvePlotData");
+    // Create the instance
+    return new OpenProtocolMessageResultTracesCurvePlotDataBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageResultTracesCurvePlotDataBuilder {
+    OpenProtocolMessageResultTracesCurvePlotData build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageResultTracesCurvePlotDataBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageResultTracesCurvePlotDataBuilder builder;
+
+    public OpenProtocolMessageResultTracesCurvePlotDataBuilderImpl(
+        OpenProtocolMessageResultTracesCurvePlotDataBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageResultTracesCurvePlotData build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      return builder.build(
+          midRevision,
+          noAckFlag,
+          targetStationId,
+          targetSpindleId,
+          sequenceNumber,
+          numberOfMessageParts,
+          messagePartNumber);
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageResultTracesCurvePlotData)) {
+      return false;
+    }
+    OpenProtocolMessageResultTracesCurvePlotData that =
+        (OpenProtocolMessageResultTracesCurvePlotData) o;
+    return super.equals(that) && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode());
+  }
+
+  @Override
+  public String toString() {
+    WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
+    try {
+      writeBufferBoxBased.writeSerializable(this);
+    } catch (SerializationException e) {
+      throw new RuntimeException(e);
+    }
+    return "\n" + writeBufferBoxBased.getBox().toString() + "\n";
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurvePlotDataRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurvePlotDataRev1.java
new file mode 100644
index 0000000000..29ec7148c1
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageResultTracesCurvePlotDataRev1.java
@@ -0,0 +1,259 @@
+/*
+ * 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
+ *
+ *   https://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 org.apache.plc4x.java.openprotocol.readwrite;
+
+import static org.apache.plc4x.java.spi.codegen.fields.FieldReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.fields.FieldWriterFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataReaderFactory.*;
+import static org.apache.plc4x.java.spi.codegen.io.DataWriterFactory.*;
+import static org.apache.plc4x.java.spi.generation.StaticHelper.*;
+
+import java.time.*;
+import java.util.*;
+import org.apache.plc4x.java.api.exceptions.*;
+import org.apache.plc4x.java.api.value.*;
+import org.apache.plc4x.java.spi.codegen.*;
+import org.apache.plc4x.java.spi.codegen.fields.*;
+import org.apache.plc4x.java.spi.codegen.io.*;
+import org.apache.plc4x.java.spi.generation.*;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public class OpenProtocolMessageResultTracesCurvePlotDataRev1
+    extends OpenProtocolMessageResultTracesCurvePlotData implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  // Properties.
+  protected final String resultDataIdentifier;
+  protected final String timeStamp;
+  protected final List<VariableDataField> dataFields;
+
+  public OpenProtocolMessageResultTracesCurvePlotDataRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      String resultDataIdentifier,
+      String timeStamp,
+      List<VariableDataField> dataFields) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.resultDataIdentifier = resultDataIdentifier;
+    this.timeStamp = timeStamp;
+    this.dataFields = dataFields;
+  }
+
+  public String getResultDataIdentifier() {
+    return resultDataIdentifier;
+  }
+
+  public String getTimeStamp() {
+    return timeStamp;
+  }
+
+  public List<VariableDataField> getDataFields() {
+    return dataFields;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageResultTracesCurvePlotDataChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageResultTracesCurvePlotDataRev1");
+
+    // Simple Field (resultDataIdentifier)
+    writeSimpleField(
+        "resultDataIdentifier",
+        resultDataIdentifier,
+        writeString(writeBuffer, 80),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (timeStamp)
+    writeSimpleField(
+        "timeStamp", timeStamp, writeString(writeBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    // Implicit Field (numberOfParameterDataFields) (Used for parsing, but its value is not stored
+    // as it's implicitly given by the objects content)
+    long numberOfParameterDataFields = (long) (COUNT(getDataFields()));
+    writeImplicitField(
+        "numberOfParameterDataFields",
+        numberOfParameterDataFields,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Array Field (dataFields)
+    writeComplexTypeArrayField(
+        "dataFields", dataFields, writeBuffer, WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageResultTracesCurvePlotDataRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageResultTracesCurvePlotDataRev1 _value = this;
+
+    // Simple field (resultDataIdentifier)
+    lengthInBits += 80;
+
+    // Simple field (timeStamp)
+    lengthInBits += 152;
+
+    // Implicit Field (numberOfParameterDataFields)
+    lengthInBits += 24;
+
+    // Array field
+    if (dataFields != null) {
+      int i = 0;
+      for (VariableDataField element : dataFields) {
+        boolean last = ++i >= dataFields.size();
+        lengthInBits += element.getLengthInBits();
+      }
+    }
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageResultTracesCurvePlotDataBuilder
+      staticParseOpenProtocolMessageResultTracesCurvePlotDataBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageResultTracesCurvePlotDataRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    String resultDataIdentifier =
+        readSimpleField(
+            "resultDataIdentifier", readString(readBuffer, 80), WithOption.WithEncoding("ASCII"));
+
+    String timeStamp =
+        readSimpleField("timeStamp", readString(readBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    long numberOfParameterDataFields =
+        readImplicitField(
+            "numberOfParameterDataFields",
+            readUnsignedLong(readBuffer, 24),
+            WithOption.WithEncoding("ASCII"));
+
+    List<VariableDataField> dataFields =
+        readCountArrayField(
+            "dataFields",
+            new DataReaderComplexDefault<>(
+                () -> VariableDataField.staticParse(readBuffer), readBuffer),
+            numberOfParameterDataFields,
+            WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageResultTracesCurvePlotDataRev1");
+    // Create the instance
+    return new OpenProtocolMessageResultTracesCurvePlotDataRev1BuilderImpl(
+        resultDataIdentifier, timeStamp, dataFields);
+  }
+
+  public static class OpenProtocolMessageResultTracesCurvePlotDataRev1BuilderImpl
+      implements OpenProtocolMessageResultTracesCurvePlotData
+          .OpenProtocolMessageResultTracesCurvePlotDataBuilder {
+    private final String resultDataIdentifier;
+    private final String timeStamp;
+    private final List<VariableDataField> dataFields;
+
+    public OpenProtocolMessageResultTracesCurvePlotDataRev1BuilderImpl(
+        String resultDataIdentifier, String timeStamp, List<VariableDataField> dataFields) {
+      this.resultDataIdentifier = resultDataIdentifier;
+      this.timeStamp = timeStamp;
+      this.dataFields = dataFields;
+    }
... 1423 lines suppressed ...


[plc4x] 02/03: chore(plc4j/driver/open-protocol): Implemented ASCII number support for reading and writing BitIntegers

Posted by cd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0bf3bd3ac84f2eb299b048b1c44ed08be1579184
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sun Jan 29 18:06:08 2023 +0100

    chore(plc4j/driver/open-protocol): Implemented ASCII number support for reading and writing BitIntegers
---
 .../java/spi/generation/ReadBufferByteBased.java   | 39 ++++++++++++++++------
 .../java/spi/generation/WriteBufferByteBased.java  | 14 ++++----
 2 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBufferByteBased.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBufferByteBased.java
index f926f6f6cd..2904705ceb 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBufferByteBased.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBufferByteBased.java
@@ -264,16 +264,35 @@ public class ReadBufferByteBased implements ReadBuffer, BufferCommons {
             throw new ParseException("unsigned long can only contain max 64 bits");
         }
         try {
-            // Read as signed value
-            long val = bi.readLong(false, bitLength);
-            if (byteOrder == ByteOrder.LITTLE_ENDIAN) {
-                val = Long.reverseBytes(val);
-            }
-            if (val >= 0) {
-                return BigInteger.valueOf(val);
-            } else {
-                BigInteger constant = BigInteger.valueOf(Long.MAX_VALUE).multiply(BigInteger.valueOf(2)).add(BigInteger.valueOf(2));
-                return BigInteger.valueOf(val).add(constant);
+            String encoding = extractEncoding(readerArgs).orElse("default");
+            switch (encoding) {
+                case "ASCII":
+                    // AsciiUint can only decode values that have a multiple of 8 length.
+                    if (bitLength % 8 != 0) {
+                        throw new ParseException("'ASCII' encoded fields must have a length that is a multiple of 8 bits long");
+                    }
+                    int charLen = bitLength / 8;
+                    byte[] stringBytes = new byte[charLen];
+                    for (int i = 0; i < charLen; i++) {
+                        stringBytes[i] = bi.readByte(false, 8);
+                    }
+                    String stringValue = new String(stringBytes, StandardCharsets.US_ASCII);
+                    stringValue = stringValue.trim();
+                    return new BigInteger(stringValue);
+                case "default":
+                    // Read as signed value
+                    long val = bi.readLong(false, bitLength);
+                    if (byteOrder == ByteOrder.LITTLE_ENDIAN) {
+                        val = Long.reverseBytes(val);
+                    }
+                    if (val >= 0) {
+                        return BigInteger.valueOf(val);
+                    } else {
+                        BigInteger constant = BigInteger.valueOf(Long.MAX_VALUE).multiply(BigInteger.valueOf(2)).add(BigInteger.valueOf(2));
+                        return BigInteger.valueOf(val).add(constant);
+                    }
+                default:
+                    throw new ParseException("unsupported encoding '" + encoding + "'");
             }
         } catch (IOException e) {
             throw new ParseException("Error reading unsigned big integer", e);
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java
index 38dba9c549..9f918cdc81 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferByteBased.java
@@ -238,21 +238,21 @@ public class WriteBufferByteBased implements WriteBuffer, BufferCommons {
             if (bitLength == 64) {
                 if (byteOrder == ByteOrder.LITTLE_ENDIAN) {
                     if (value.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) >= 0) {
-                        writeLong(logicalName, 32, value.longValue());
-                        writeLong(logicalName, 32, value.shiftRight(32).longValue());
+                        writeLong(logicalName, 32, value.longValue(), writerArgs);
+                        writeLong(logicalName, 32, value.shiftRight(32).longValue(), writerArgs);
                     } else {
-                        writeLong(logicalName, bitLength, value.longValue());
+                        writeLong(logicalName, bitLength, value.longValue(), writerArgs);
                     }
                 } else {
                     if (value.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) >= 0) {
-                        writeLong(logicalName, 32, value.shiftRight(32).longValue());
-                        writeLong(logicalName, 32, value.longValue());
+                        writeLong(logicalName, 32, value.shiftRight(32).longValue(), writerArgs);
+                        writeLong(logicalName, 32, value.longValue(), writerArgs);
                     } else {
-                        writeLong(logicalName, bitLength, value.longValue());
+                        writeLong(logicalName, bitLength, value.longValue(), writerArgs);
                     }
                 }
             } else if (bitLength < 64) {
-                writeUnsignedLong(logicalName, bitLength, value.longValue());
+                writeUnsignedLong(logicalName, bitLength, value.longValue(), writerArgs);
             } else {
                 throw new SerializationException("Unsigned Big Integer can only contain max 64 bits");
             }