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/27 17:21:47 UTC

[plc4x] branch develop updated: chore(plc4j/driver/open-protocol): Continued specifying datatypes.

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


The following commit(s) were added to refs/heads/develop by this push:
     new 3048adc053 chore(plc4j/driver/open-protocol): Continued specifying datatypes.
3048adc053 is described below

commit 3048adc05316a15f86f62e22fe2b5098dbd0cde5
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Fri Jan 27 18:21:36 2023 +0100

    chore(plc4j/driver/open-protocol): Continued specifying datatypes.
---
 ...ror.java => ApplicationCommunicationError.java} |   10 +-
 .../java/openprotocol/readwrite/BatchStatus.java   |   56 +
 .../LinkLevelNegativeAcknowledgeError.java         |   58 +
 .../readwrite/OpenProtocolMessage.java             |   91 +
 ...ProtocolMessageApplicationCommandErrorRev1.java |   24 +-
 .../readwrite/OpenProtocolMessageDisableTool.java  |  191 ++
 .../OpenProtocolMessageDisableToolRev1.java        |  153 +
 .../OpenProtocolMessageDynamicPsetSelection.java   |  191 ++
 ...penProtocolMessageDynamicPsetSelectionRev1.java |  235 ++
 .../readwrite/OpenProtocolMessageEnableTool.java   |  189 ++
 .../OpenProtocolMessageEnableToolRev1.java         |  153 +
 ...penProtocolMessageLastTighteningResultData.java |  224 ++
 ...rotocolMessageLastTighteningResultDataRev1.java | 1333 +++++++++
 ...rotocolMessageLastTighteningResultDataRev2.java | 2484 ++++++++++++++++
 ...rotocolMessageLastTighteningResultDataRev3.java | 2643 +++++++++++++++++
 ...rotocolMessageLastTighteningResultDataRev4.java | 2793 ++++++++++++++++++
 ...rotocolMessageLastTighteningResultDataRev5.java | 2845 ++++++++++++++++++
 ...rotocolMessageLastTighteningResultDataRev6.java | 2952 +++++++++++++++++++
 ...rotocolMessageLastTighteningResultDataRev7.java | 3023 +++++++++++++++++++
 ...tocolMessageLastTighteningResultDataRev998.java | 3067 ++++++++++++++++++++
 ...MessageLastTighteningResultDataRev999Light.java |  567 ++++
 ...olMessageLastTighteningResultDataSubscribe.java |  193 ++
 ...ssageLastTighteningResultDataSubscribeRev1.java |  156 +
 ...rotocolMessageLinkLevelNegativeAcknowledge.java |  193 ++
 ...olMessageLinkLevelNegativeAcknowledgeRev1.java} |  106 +-
 ...rotocolMessageLinkLevelPositiveAcknowledge.java |  193 ++
 ...olMessageLinkLevelPositiveAcknowledgeRev1.java} |  114 +-
 ...penProtocolMessageLockAtBatchDoneSubscribe.java |  192 ++
 ...otocolMessageLockAtBatchDoneSubscribeRev1.java} |  121 +-
 ...nProtocolMessageLockAtBatchDoneUnsubscribe.java |  193 ++
 ...tocolMessageLockAtBatchDoneUnsubscribeRev1.java |  156 +
 .../OpenProtocolMessageLockAtBatchDoneUpload.java  |  191 ++
 ...colMessageLockAtBatchDoneUploadAcknowledge.java |  193 ++
 ...essageLockAtBatchDoneUploadAcknowledgeRev1.java |  156 +
 ...enProtocolMessageLockAtBatchDoneUploadRev1.java |  182 ++
 ...ProtocolMessageParameterSetDataUploadReply.java |  198 ++
 ...ocolMessageParameterSetDataUploadReplyRev1.java |  676 +++++
 ...ocolMessageParameterSetDataUploadReplyRev2.java |  780 +++++
 ...otocolMessageParameterSetDataUploadRequest.java |  198 ++
 ...lMessageParameterSetDataUploadRequestRev1.java} |  128 +-
 ...lMessageParameterSetDataUploadRequestRev2.java} |  130 +-
 ...enProtocolMessageParameterSetIdUploadReply.java |  200 ++
 ...tocolMessageParameterSetIdUploadReplyRev1.java} |  137 +-
 ...otocolMessageParameterSetIdUploadReplyRev2.java |  238 ++
 ...otocolMessageParameterSetIdUploadReplyRev3.java |  268 ++
 ...ProtocolMessageParameterSetIdUploadRequest.java |  193 ++
 ...ocolMessageParameterSetIdUploadRequestRev1.java |  156 +
 .../OpenProtocolMessageParameterSetSelected.java   |  195 ++
 ...ocolMessageParameterSetSelectedAcknowledge.java |  193 ++
 ...MessageParameterSetSelectedAcknowledgeRev1.java |  156 +
 ...penProtocolMessageParameterSetSelectedRev1.java |  215 ++
 ...penProtocolMessageParameterSetSelectedRev2.java |  833 ++++++
 ...otocolMessageParameterSetSelectedSubscribe.java |  193 ++
 ...olMessageParameterSetSelectedSubscribeRev1.java |  156 +
 ...ocolMessageParameterSetSelectedUnsubscribe.java |  193 ++
 ...MessageParameterSetSelectedUnsubscribeRev1.java |  156 +
 ...colMessageProgramPsetSelectionInDynamicJob.java |  193 ++
 ...ssageProgramPsetSelectionInDynamicJobRev1.java} |  128 +-
 ...otocolMessageResetParameterSetBatchCounter.java |  193 ++
 ...lMessageResetParameterSetBatchCounterRev1.java} |  128 +-
 .../OpenProtocolMessageSelectParameterSet.java     |  191 ++
 .../OpenProtocolMessageSelectParameterSetRev1.java |  181 ++
 ...penProtocolMessageSetParameterSetBatchSize.java |  192 ++
 ...otocolMessageSetParameterSetBatchSizeRev1.java} |  141 +-
 .../java/openprotocol/readwrite/ResultType.java    |   61 +
 .../openprotocol/readwrite/RotationDirection.java  |   56 +
 .../java/openprotocol/readwrite/StageResult.java   |  160 +
 .../plc4x/java/openprotocol/readwrite/Status.java  |   56 +
 .../java/openprotocol/readwrite/Strategy.java      |   80 +
 .../openprotocol/readwrite/TighteningStatus.java   |   55 +
 .../plc4x/java/openprotocol/readwrite/Unit.java    |   61 +
 .../openprotocol/readwrite/VariableDataField.java  |  228 ++
 .../protocols/openprotocol/open-protocol.mspec     | 1555 ++++++++--
 .../openprotocol/ParserSerializerTestsuite.xml     |    2 +-
 74 files changed, 33971 insertions(+), 903 deletions(-)

diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/Error.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/ApplicationCommunicationError.java
similarity index 94%
rename from plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/Error.java
rename to plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/ApplicationCommunicationError.java
index 002f461fb5..f007ac9422 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/Error.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/ApplicationCommunicationError.java
@@ -23,7 +23,7 @@ import java.util.Map;
 
 // Code generated by code-generation. DO NOT EDIT.
 
-public enum Error {
+public enum ApplicationCommunicationError {
   NoError((int) 0),
   InvalidData((int) 1),
   ParameterSetIdNotPresent((int) 2),
@@ -113,18 +113,18 @@ public enum Error {
   MidRevisionUnsupported((int) 97),
   ControllerInternalRequestTimeout((int) 98),
   UnknownMid((int) 99);
-  private static final Map<Integer, Error> map;
+  private static final Map<Integer, ApplicationCommunicationError> map;
 
   static {
     map = new HashMap<>();
-    for (Error value : Error.values()) {
+    for (ApplicationCommunicationError value : ApplicationCommunicationError.values()) {
       map.put((int) value.getValue(), value);
     }
   }
 
   private int value;
 
-  Error(int value) {
+  ApplicationCommunicationError(int value) {
     this.value = value;
   }
 
@@ -132,7 +132,7 @@ public enum Error {
     return value;
   }
 
-  public static Error enumForValue(int value) {
+  public static ApplicationCommunicationError enumForValue(int value) {
     return map.get(value);
   }
 
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/BatchStatus.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/BatchStatus.java
new file mode 100644
index 0000000000..ceba0514b6
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/BatchStatus.java
@@ -0,0 +1,56 @@
+/*
+ * 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 java.util.HashMap;
+import java.util.Map;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public enum BatchStatus {
+  NOK((short) 0),
+  OK((short) 1),
+  Unused((short) 2);
+  private static final Map<Short, BatchStatus> map;
+
+  static {
+    map = new HashMap<>();
+    for (BatchStatus value : BatchStatus.values()) {
+      map.put((short) value.getValue(), value);
+    }
+  }
+
+  private short value;
+
+  BatchStatus(short value) {
+    this.value = value;
+  }
+
+  public short getValue() {
+    return value;
+  }
+
+  public static BatchStatus enumForValue(short value) {
+    return map.get(value);
+  }
+
+  public static Boolean isDefined(short value) {
+    return map.containsKey(value);
+  }
+}
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/LinkLevelNegativeAcknowledgeError.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/LinkLevelNegativeAcknowledgeError.java
new file mode 100644
index 0000000000..e291dbc74d
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/LinkLevelNegativeAcknowledgeError.java
@@ -0,0 +1,58 @@
+/*
+ * 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 java.util.HashMap;
+import java.util.Map;
+
+// Code generated by code-generation. DO NOT EDIT.
+
+public enum LinkLevelNegativeAcknowledgeError {
+  NoError((long) 0L),
+  InvalidLength((long) 1L),
+  InvalidRevision((long) 2L),
+  InvalidSequenceNumber((long) 3L),
+  InconsistencyOfNumberOfMessages((long) 4L);
+  private static final Map<Long, LinkLevelNegativeAcknowledgeError> map;
+
+  static {
+    map = new HashMap<>();
+    for (LinkLevelNegativeAcknowledgeError value : LinkLevelNegativeAcknowledgeError.values()) {
+      map.put((long) value.getValue(), value);
+    }
+  }
+
+  private long value;
+
+  LinkLevelNegativeAcknowledgeError(long value) {
+    this.value = value;
+  }
+
+  public long getValue() {
+    return value;
+  }
+
+  public static LinkLevelNegativeAcknowledgeError enumForValue(long value) {
+    return map.get(value);
+  }
+
+  public static Boolean isDefined(long value) {
+    return map.containsKey(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 780f2b9a37..0d89c5ab86 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
@@ -354,6 +354,97 @@ public abstract class OpenProtocolMessage implements Message {
       builder =
           OpenProtocolMessageApplicationGenericUnsubscribe.staticParseOpenProtocolMessageBuilder(
               readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ParameterSetIdUploadRequest)) {
+      builder =
+          OpenProtocolMessageParameterSetIdUploadRequest.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ParameterSetIdUploadReply)) {
+      builder =
+          OpenProtocolMessageParameterSetIdUploadReply.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ParameterSetDataUploadRequest)) {
+      builder =
+          OpenProtocolMessageParameterSetDataUploadRequest.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ParameterSetDataUploadReply)) {
+      builder =
+          OpenProtocolMessageParameterSetDataUploadReply.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ParameterSetSelectedSubscribe)) {
+      builder =
+          OpenProtocolMessageParameterSetSelectedSubscribe.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ParameterSetSelected)) {
+      builder =
+          OpenProtocolMessageParameterSetSelected.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ParameterSetSelectedAcknowledge)) {
+      builder =
+          OpenProtocolMessageParameterSetSelectedAcknowledge.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ParameterSetSelectedUnsubscribe)) {
+      builder =
+          OpenProtocolMessageParameterSetSelectedUnsubscribe.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.SelectParameterSet)) {
+      builder =
+          OpenProtocolMessageSelectParameterSet.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.SetParameterSetBatchSize)) {
+      builder =
+          OpenProtocolMessageSetParameterSetBatchSize.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ResetParameterSetBatchCounter)) {
+      builder =
+          OpenProtocolMessageResetParameterSetBatchCounter.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.LockAtBatchDoneSubscribe)) {
+      builder =
+          OpenProtocolMessageLockAtBatchDoneSubscribe.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.LockAtBatchDoneUpload)) {
+      builder =
+          OpenProtocolMessageLockAtBatchDoneUpload.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.LockAtBatchDoneUploadAcknowledge)) {
+      builder =
+          OpenProtocolMessageLockAtBatchDoneUploadAcknowledge.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.LockAtBatchDoneUnsubscribe)) {
+      builder =
+          OpenProtocolMessageLockAtBatchDoneUnsubscribe.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.DisableTool)) {
+      builder =
+          OpenProtocolMessageDisableTool.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.EnableTool)) {
+      builder =
+          OpenProtocolMessageEnableTool.staticParseOpenProtocolMessageBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.LastTighteningResultDataSubscribe)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataSubscribe
+              .staticParseOpenProtocolMessageBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.LastTighteningResultData)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultData.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.ProgramPsetSelectionInDynamicJob)) {
+      builder =
+          OpenProtocolMessageProgramPsetSelectionInDynamicJob.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.DynamicPsetSelection)) {
+      builder =
+          OpenProtocolMessageDynamicPsetSelection.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.LinkLevelPositiveAcknowledge)) {
+      builder =
+          OpenProtocolMessageLinkLevelPositiveAcknowledge.staticParseOpenProtocolMessageBuilder(
+              readBuffer, revision);
+    } else if (EvaluationHelper.equals(mid, Mid.LinkLevelNegativeAcknowledge)) {
+      builder =
+          OpenProtocolMessageLinkLevelNegativeAcknowledge.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/OpenProtocolMessageApplicationCommandErrorRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageApplicationCommandErrorRev1.java
index 2f9862bfee..3cea407979 100644
--- a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageApplicationCommandErrorRev1.java
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageApplicationCommandErrorRev1.java
@@ -45,7 +45,7 @@ public class OpenProtocolMessageApplicationCommandErrorRev1
 
   // Properties.
   protected final Mid requestMid;
-  protected final Error error;
+  protected final ApplicationCommunicationError error;
 
   public OpenProtocolMessageApplicationCommandErrorRev1(
       Long midRevision,
@@ -56,7 +56,7 @@ public class OpenProtocolMessageApplicationCommandErrorRev1
       Short numberOfMessageParts,
       Short messagePartNumber,
       Mid requestMid,
-      Error error) {
+      ApplicationCommunicationError error) {
     super(
         midRevision,
         noAckFlag,
@@ -73,7 +73,7 @@ public class OpenProtocolMessageApplicationCommandErrorRev1
     return requestMid;
   }
 
-  public Error getError() {
+  public ApplicationCommunicationError getError() {
     return error;
   }
 
@@ -95,10 +95,12 @@ public class OpenProtocolMessageApplicationCommandErrorRev1
     // Simple Field (error)
     writeSimpleEnumField(
         "error",
-        "Error",
+        "ApplicationCommunicationError",
         error,
         new DataWriterEnumDefault<>(
-            Error::getValue, Error::name, writeUnsignedInt(writeBuffer, 16)),
+            ApplicationCommunicationError::getValue,
+            ApplicationCommunicationError::name,
+            writeUnsignedInt(writeBuffer, 16)),
         WithOption.WithEncoding("ASCII"));
 
     writeBuffer.popContext("OpenProtocolMessageApplicationCommandErrorRev1");
@@ -138,11 +140,12 @@ public class OpenProtocolMessageApplicationCommandErrorRev1
             new DataReaderEnumDefault<>(Mid::enumForValue, readUnsignedLong(readBuffer, 32)),
             WithOption.WithEncoding("ASCII"));
 
-    Error error =
+    ApplicationCommunicationError error =
         readEnumField(
             "error",
-            "Error",
-            new DataReaderEnumDefault<>(Error::enumForValue, readUnsignedInt(readBuffer, 16)),
+            "ApplicationCommunicationError",
+            new DataReaderEnumDefault<>(
+                ApplicationCommunicationError::enumForValue, readUnsignedInt(readBuffer, 16)),
             WithOption.WithEncoding("ASCII"));
 
     readBuffer.closeContext("OpenProtocolMessageApplicationCommandErrorRev1");
@@ -154,9 +157,10 @@ public class OpenProtocolMessageApplicationCommandErrorRev1
       implements OpenProtocolMessageApplicationCommandError
           .OpenProtocolMessageApplicationCommandErrorBuilder {
     private final Mid requestMid;
-    private final Error error;
+    private final ApplicationCommunicationError error;
 
-    public OpenProtocolMessageApplicationCommandErrorRev1BuilderImpl(Mid requestMid, Error error) {
+    public OpenProtocolMessageApplicationCommandErrorRev1BuilderImpl(
+        Mid requestMid, ApplicationCommunicationError error) {
       this.requestMid = requestMid;
       this.error = error;
     }
diff --git a/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageDisableTool.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageDisableTool.java
new file mode 100644
index 0000000000..81c71d7a1a
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageDisableTool.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 OpenProtocolMessageDisableTool extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.DisableTool;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageDisableTool(
+      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 serializeOpenProtocolMessageDisableToolChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageDisableTool");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageDisableToolChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageDisableTool");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageDisableTool _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("OpenProtocolMessageDisableTool");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageDisableToolBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageDisableToolRev1.staticParseOpenProtocolMessageDisableToolBuilder(
+              readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageDisableTool");
+    // Create the instance
+    return new OpenProtocolMessageDisableToolBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageDisableToolBuilder {
+    OpenProtocolMessageDisableTool build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageDisableToolBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageDisableToolBuilder builder;
+
+    public OpenProtocolMessageDisableToolBuilderImpl(
+        OpenProtocolMessageDisableToolBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageDisableTool 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 OpenProtocolMessageDisableTool)) {
+      return false;
+    }
+    OpenProtocolMessageDisableTool that = (OpenProtocolMessageDisableTool) 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/OpenProtocolMessageDisableToolRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageDisableToolRev1.java
new file mode 100644
index 0000000000..bc00c7018d
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageDisableToolRev1.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 OpenProtocolMessageDisableToolRev1 extends OpenProtocolMessageDisableTool
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  public OpenProtocolMessageDisableToolRev1(
+      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 serializeOpenProtocolMessageDisableToolChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageDisableToolRev1");
+
+    writeBuffer.popContext("OpenProtocolMessageDisableToolRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageDisableToolRev1 _value = this;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageDisableToolBuilder
+      staticParseOpenProtocolMessageDisableToolBuilder(ReadBuffer readBuffer, Long revision)
+          throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageDisableToolRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    readBuffer.closeContext("OpenProtocolMessageDisableToolRev1");
+    // Create the instance
+    return new OpenProtocolMessageDisableToolRev1BuilderImpl();
+  }
+
+  public static class OpenProtocolMessageDisableToolRev1BuilderImpl
+      implements OpenProtocolMessageDisableTool.OpenProtocolMessageDisableToolBuilder {
+
+    public OpenProtocolMessageDisableToolRev1BuilderImpl() {}
+
+    public OpenProtocolMessageDisableToolRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageDisableToolRev1 openProtocolMessageDisableToolRev1 =
+          new OpenProtocolMessageDisableToolRev1(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber);
+      return openProtocolMessageDisableToolRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageDisableToolRev1)) {
+      return false;
+    }
+    OpenProtocolMessageDisableToolRev1 that = (OpenProtocolMessageDisableToolRev1) 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/OpenProtocolMessageDynamicPsetSelection.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageDynamicPsetSelection.java
new file mode 100644
index 0000000000..6d079724b1
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageDynamicPsetSelection.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 OpenProtocolMessageDynamicPsetSelection extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.DynamicPsetSelection;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageDynamicPsetSelection(
+      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 serializeOpenProtocolMessageDynamicPsetSelectionChild(
+      WriteBuffer writeBuffer) throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageDynamicPsetSelection");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageDynamicPsetSelectionChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageDynamicPsetSelection");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageDynamicPsetSelection _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("OpenProtocolMessageDynamicPsetSelection");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageDynamicPsetSelectionBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageDynamicPsetSelectionRev1
+              .staticParseOpenProtocolMessageDynamicPsetSelectionBuilder(readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageDynamicPsetSelection");
+    // Create the instance
+    return new OpenProtocolMessageDynamicPsetSelectionBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageDynamicPsetSelectionBuilder {
+    OpenProtocolMessageDynamicPsetSelection build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageDynamicPsetSelectionBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageDynamicPsetSelectionBuilder builder;
+
+    public OpenProtocolMessageDynamicPsetSelectionBuilderImpl(
+        OpenProtocolMessageDynamicPsetSelectionBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageDynamicPsetSelection 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 OpenProtocolMessageDynamicPsetSelection)) {
+      return false;
+    }
+    OpenProtocolMessageDynamicPsetSelection that = (OpenProtocolMessageDynamicPsetSelection) 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/OpenProtocolMessageDynamicPsetSelectionRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageDynamicPsetSelectionRev1.java
new file mode 100644
index 0000000000..bb7e03bc25
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageDynamicPsetSelectionRev1.java
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   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 OpenProtocolMessageDynamicPsetSelectionRev1
+    extends OpenProtocolMessageDynamicPsetSelection implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  // Properties.
+  protected final long parameterSetId;
+  protected final List<VariableDataField> dataFields;
+
+  public OpenProtocolMessageDynamicPsetSelectionRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      long parameterSetId,
+      List<VariableDataField> dataFields) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.parameterSetId = parameterSetId;
+    this.dataFields = dataFields;
+  }
+
+  public long getParameterSetId() {
+    return parameterSetId;
+  }
+
+  public List<VariableDataField> getDataFields() {
+    return dataFields;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageDynamicPsetSelectionChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageDynamicPsetSelectionRev1");
+
+    // Simple Field (parameterSetId)
+    writeSimpleField(
+        "parameterSetId",
+        parameterSetId,
+        writeUnsignedLong(writeBuffer, 24),
+        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("OpenProtocolMessageDynamicPsetSelectionRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageDynamicPsetSelectionRev1 _value = this;
+
+    // Simple field (parameterSetId)
+    lengthInBits += 24;
+
+    // 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 OpenProtocolMessageDynamicPsetSelectionBuilder
+      staticParseOpenProtocolMessageDynamicPsetSelectionBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageDynamicPsetSelectionRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    long parameterSetId =
+        readSimpleField(
+            "parameterSetId", readUnsignedLong(readBuffer, 24), 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("OpenProtocolMessageDynamicPsetSelectionRev1");
+    // Create the instance
+    return new OpenProtocolMessageDynamicPsetSelectionRev1BuilderImpl(parameterSetId, dataFields);
+  }
+
+  public static class OpenProtocolMessageDynamicPsetSelectionRev1BuilderImpl
+      implements OpenProtocolMessageDynamicPsetSelection
+          .OpenProtocolMessageDynamicPsetSelectionBuilder {
+    private final long parameterSetId;
+    private final List<VariableDataField> dataFields;
+
+    public OpenProtocolMessageDynamicPsetSelectionRev1BuilderImpl(
+        long parameterSetId, List<VariableDataField> dataFields) {
+      this.parameterSetId = parameterSetId;
+      this.dataFields = dataFields;
+    }
+
+    public OpenProtocolMessageDynamicPsetSelectionRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageDynamicPsetSelectionRev1 openProtocolMessageDynamicPsetSelectionRev1 =
+          new OpenProtocolMessageDynamicPsetSelectionRev1(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber,
+              parameterSetId,
+              dataFields);
+      return openProtocolMessageDynamicPsetSelectionRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageDynamicPsetSelectionRev1)) {
+      return false;
+    }
+    OpenProtocolMessageDynamicPsetSelectionRev1 that =
+        (OpenProtocolMessageDynamicPsetSelectionRev1) o;
+    return (getParameterSetId() == that.getParameterSetId())
+        && (getDataFields() == that.getDataFields())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(super.hashCode(), getParameterSetId(), getDataFields());
+  }
+
+  @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/OpenProtocolMessageEnableTool.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageEnableTool.java
new file mode 100644
index 0000000000..5c28525183
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageEnableTool.java
@@ -0,0 +1,189 @@
+/*
+ * 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 OpenProtocolMessageEnableTool extends OpenProtocolMessage implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.EnableTool;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageEnableTool(
+      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 serializeOpenProtocolMessageEnableToolChild(WriteBuffer writeBuffer)
+      throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageEnableTool");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageEnableToolChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageEnableTool");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageEnableTool _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("OpenProtocolMessageEnableTool");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageEnableToolBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageEnableToolRev1.staticParseOpenProtocolMessageEnableToolBuilder(
+              readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageEnableTool");
+    // Create the instance
+    return new OpenProtocolMessageEnableToolBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageEnableToolBuilder {
+    OpenProtocolMessageEnableTool build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageEnableToolBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageEnableToolBuilder builder;
+
+    public OpenProtocolMessageEnableToolBuilderImpl(OpenProtocolMessageEnableToolBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageEnableTool 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 OpenProtocolMessageEnableTool)) {
+      return false;
+    }
+    OpenProtocolMessageEnableTool that = (OpenProtocolMessageEnableTool) 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/OpenProtocolMessageEnableToolRev1.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageEnableToolRev1.java
new file mode 100644
index 0000000000..697c82e233
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageEnableToolRev1.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 OpenProtocolMessageEnableToolRev1 extends OpenProtocolMessageEnableTool
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  public OpenProtocolMessageEnableToolRev1(
+      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 serializeOpenProtocolMessageEnableToolChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageEnableToolRev1");
+
+    writeBuffer.popContext("OpenProtocolMessageEnableToolRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageEnableToolRev1 _value = this;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageEnableToolBuilder
+      staticParseOpenProtocolMessageEnableToolBuilder(ReadBuffer readBuffer, Long revision)
+          throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageEnableToolRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    readBuffer.closeContext("OpenProtocolMessageEnableToolRev1");
+    // Create the instance
+    return new OpenProtocolMessageEnableToolRev1BuilderImpl();
+  }
+
+  public static class OpenProtocolMessageEnableToolRev1BuilderImpl
+      implements OpenProtocolMessageEnableTool.OpenProtocolMessageEnableToolBuilder {
+
+    public OpenProtocolMessageEnableToolRev1BuilderImpl() {}
+
+    public OpenProtocolMessageEnableToolRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageEnableToolRev1 openProtocolMessageEnableToolRev1 =
+          new OpenProtocolMessageEnableToolRev1(
+              midRevision,
+              noAckFlag,
+              targetStationId,
+              targetSpindleId,
+              sequenceNumber,
+              numberOfMessageParts,
+              messagePartNumber);
+      return openProtocolMessageEnableToolRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageEnableToolRev1)) {
+      return false;
+    }
+    OpenProtocolMessageEnableToolRev1 that = (OpenProtocolMessageEnableToolRev1) 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/OpenProtocolMessageLastTighteningResultData.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultData.java
new file mode 100644
index 0000000000..2c6576d8a1
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultData.java
@@ -0,0 +1,224 @@
+/*
+ * 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 OpenProtocolMessageLastTighteningResultData extends OpenProtocolMessage
+    implements Message {
+
+  // Accessors for discriminator values.
+  public Mid getMid() {
+    return Mid.LastTighteningResultData;
+  }
+  // Abstract accessors for discriminator values.
+  public abstract Long getRevision();
+
+  public OpenProtocolMessageLastTighteningResultData(
+      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 serializeOpenProtocolMessageLastTighteningResultDataChild(
+      WriteBuffer writeBuffer) throws SerializationException;
+
+  @Override
+  protected void serializeOpenProtocolMessageChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageLastTighteningResultData");
+
+    // Switch field (Serialize the sub-type)
+    serializeOpenProtocolMessageLastTighteningResultDataChild(writeBuffer);
+
+    writeBuffer.popContext("OpenProtocolMessageLastTighteningResultData");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageLastTighteningResultData _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("OpenProtocolMessageLastTighteningResultData");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
+    OpenProtocolMessageLastTighteningResultDataBuilder builder = null;
+    if (EvaluationHelper.equals(revision, (long) 1)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataRev1
+              .staticParseOpenProtocolMessageLastTighteningResultDataBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 2)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataRev2
+              .staticParseOpenProtocolMessageLastTighteningResultDataBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 3)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataRev3
+              .staticParseOpenProtocolMessageLastTighteningResultDataBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 4)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataRev4
+              .staticParseOpenProtocolMessageLastTighteningResultDataBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 5)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataRev5
+              .staticParseOpenProtocolMessageLastTighteningResultDataBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 6)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataRev6
+              .staticParseOpenProtocolMessageLastTighteningResultDataBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 7)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataRev7
+              .staticParseOpenProtocolMessageLastTighteningResultDataBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 998)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataRev998
+              .staticParseOpenProtocolMessageLastTighteningResultDataBuilder(readBuffer, revision);
+    } else if (EvaluationHelper.equals(revision, (long) 999)) {
+      builder =
+          OpenProtocolMessageLastTighteningResultDataRev999Light
+              .staticParseOpenProtocolMessageLastTighteningResultDataBuilder(readBuffer, revision);
+    }
+    if (builder == null) {
+      throw new ParseException(
+          "Unsupported case for discriminated type"
+              + " parameters ["
+              + "revision="
+              + revision
+              + "]");
+    }
+
+    readBuffer.closeContext("OpenProtocolMessageLastTighteningResultData");
+    // Create the instance
+    return new OpenProtocolMessageLastTighteningResultDataBuilderImpl(builder);
+  }
+
+  public interface OpenProtocolMessageLastTighteningResultDataBuilder {
+    OpenProtocolMessageLastTighteningResultData build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber);
+  }
+
+  public static class OpenProtocolMessageLastTighteningResultDataBuilderImpl
+      implements OpenProtocolMessage.OpenProtocolMessageBuilder {
+    private final OpenProtocolMessageLastTighteningResultDataBuilder builder;
+
+    public OpenProtocolMessageLastTighteningResultDataBuilderImpl(
+        OpenProtocolMessageLastTighteningResultDataBuilder builder) {
+      this.builder = builder;
+    }
+
+    public OpenProtocolMessageLastTighteningResultData 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 OpenProtocolMessageLastTighteningResultData)) {
+      return false;
+    }
+    OpenProtocolMessageLastTighteningResultData that =
+        (OpenProtocolMessageLastTighteningResultData) 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
new file mode 100644
index 0000000000..fe74f84be2
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev1.java
@@ -0,0 +1,1333 @@
+/*
+ * 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 OpenProtocolMessageLastTighteningResultDataRev1
+    extends OpenProtocolMessageLastTighteningResultData implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 1;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDCELLID = 1;
+  public static final Integer BLOCKIDCHANNELID = 2;
+  public static final Integer BLOCKIDTORQUECONTROLLERNAME = 3;
+  public static final Integer BLOCKIDVINNUMBER = 4;
+  public static final Integer BLOCKIDJOBID = 5;
+  public static final Integer BLOCKIDPARAMETERSETID = 6;
+  public static final Integer BLOCKIDBATCHSIZE = 7;
+  public static final Integer BLOCKIDBATCHCOUNTER = 8;
+  public static final Integer BLOCKIDTIGHTENINGSTATUS = 9;
+  public static final Integer BLOCKIDTORQUESTATUS = 10;
+  public static final Integer BLOCKIDANGLESTATUS = 11;
+  public static final Integer BLOCKIDTORQUEMINLIMIT = 12;
+  public static final Integer BLOCKIDTORQUEMAXLIMIT = 13;
+  public static final Integer BLOCKIDTORQUEFINALTARGET = 14;
+  public static final Integer BLOCKIDTORQUE = 15;
+  public static final Integer BLOCKIDANGLEMIN = 16;
+  public static final Integer BLOCKIDANGLEMAX = 17;
+  public static final Integer BLOCKIDFINALANGLETARGET = 18;
+  public static final Integer BLOCKIDANGLE = 19;
+  public static final Integer BLOCKIDTIMESTAMP = 20;
+  public static final Integer BLOCKIDDATETIMEOFLASTCHANGEINDPARAMETERSETSETTINGS = 21;
+  public static final Integer BLOCKIDBATCHSTATUS = 22;
+  public static final Integer BLOCKIDTIGHTENINGID = 23;
+
+  // Properties.
+  protected final long cellId;
+  protected final int channelId;
+  protected final String torqueControllerName;
+  protected final String vinNumber;
+  protected final int jobId;
+  protected final long parameterSetId;
+  protected final long batchSize;
+  protected final long batchCounter;
+  protected final TighteningStatus tighteningStatus;
+  protected final Status torqueStatus;
+  protected final Status angleStatus;
+  protected final BigInteger torqueMinLimit;
+  protected final BigInteger torqueMaxLimit;
+  protected final BigInteger torqueFinalTarget;
+  protected final BigInteger torque;
+  protected final BigInteger angleMin;
+  protected final BigInteger angleMax;
+  protected final BigInteger finalAngleTarget;
+  protected final BigInteger angle;
+  protected final String timeStamp;
+  protected final String dateTimeOfLastChangeIndParameterSetSettings;
+  protected final BatchStatus batchStatus;
+  protected final BigInteger tighteningId;
+
+  public OpenProtocolMessageLastTighteningResultDataRev1(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      long cellId,
+      int channelId,
+      String torqueControllerName,
+      String vinNumber,
+      int jobId,
+      long parameterSetId,
+      long batchSize,
+      long batchCounter,
+      TighteningStatus tighteningStatus,
+      Status torqueStatus,
+      Status angleStatus,
+      BigInteger torqueMinLimit,
+      BigInteger torqueMaxLimit,
+      BigInteger torqueFinalTarget,
+      BigInteger torque,
+      BigInteger angleMin,
+      BigInteger angleMax,
+      BigInteger finalAngleTarget,
+      BigInteger angle,
+      String timeStamp,
+      String dateTimeOfLastChangeIndParameterSetSettings,
+      BatchStatus batchStatus,
+      BigInteger tighteningId) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.cellId = cellId;
+    this.channelId = channelId;
+    this.torqueControllerName = torqueControllerName;
+    this.vinNumber = vinNumber;
+    this.jobId = jobId;
+    this.parameterSetId = parameterSetId;
+    this.batchSize = batchSize;
+    this.batchCounter = batchCounter;
+    this.tighteningStatus = tighteningStatus;
+    this.torqueStatus = torqueStatus;
+    this.angleStatus = angleStatus;
+    this.torqueMinLimit = torqueMinLimit;
+    this.torqueMaxLimit = torqueMaxLimit;
+    this.torqueFinalTarget = torqueFinalTarget;
+    this.torque = torque;
+    this.angleMin = angleMin;
+    this.angleMax = angleMax;
+    this.finalAngleTarget = finalAngleTarget;
+    this.angle = angle;
+    this.timeStamp = timeStamp;
+    this.dateTimeOfLastChangeIndParameterSetSettings = dateTimeOfLastChangeIndParameterSetSettings;
+    this.batchStatus = batchStatus;
+    this.tighteningId = tighteningId;
+  }
+
+  public long getCellId() {
+    return cellId;
+  }
+
+  public int getChannelId() {
+    return channelId;
+  }
+
+  public String getTorqueControllerName() {
+    return torqueControllerName;
+  }
+
+  public String getVinNumber() {
+    return vinNumber;
+  }
+
+  public int getJobId() {
+    return jobId;
+  }
+
+  public long getParameterSetId() {
+    return parameterSetId;
+  }
+
+  public long getBatchSize() {
+    return batchSize;
+  }
+
+  public long getBatchCounter() {
+    return batchCounter;
+  }
+
+  public TighteningStatus getTighteningStatus() {
+    return tighteningStatus;
+  }
+
+  public Status getTorqueStatus() {
+    return torqueStatus;
+  }
+
+  public Status getAngleStatus() {
+    return angleStatus;
+  }
+
+  public BigInteger getTorqueMinLimit() {
+    return torqueMinLimit;
+  }
+
+  public BigInteger getTorqueMaxLimit() {
+    return torqueMaxLimit;
+  }
+
+  public BigInteger getTorqueFinalTarget() {
+    return torqueFinalTarget;
+  }
+
+  public BigInteger getTorque() {
+    return torque;
+  }
+
+  public BigInteger getAngleMin() {
+    return angleMin;
+  }
+
+  public BigInteger getAngleMax() {
+    return angleMax;
+  }
+
+  public BigInteger getFinalAngleTarget() {
+    return finalAngleTarget;
+  }
+
+  public BigInteger getAngle() {
+    return angle;
+  }
+
+  public String getTimeStamp() {
+    return timeStamp;
+  }
+
+  public String getDateTimeOfLastChangeIndParameterSetSettings() {
+    return dateTimeOfLastChangeIndParameterSetSettings;
+  }
+
+  public BatchStatus getBatchStatus() {
+    return batchStatus;
+  }
+
+  public BigInteger getTighteningId() {
+    return tighteningId;
+  }
+
+  public int getBlockIdCellId() {
+    return BLOCKIDCELLID;
+  }
+
+  public int getBlockIdChannelId() {
+    return BLOCKIDCHANNELID;
+  }
+
+  public int getBlockIdTorqueControllerName() {
+    return BLOCKIDTORQUECONTROLLERNAME;
+  }
+
+  public int getBlockIdVinNumber() {
+    return BLOCKIDVINNUMBER;
+  }
+
+  public int getBlockIdJobId() {
+    return BLOCKIDJOBID;
+  }
+
+  public int getBlockIdParameterSetId() {
+    return BLOCKIDPARAMETERSETID;
+  }
+
+  public int getBlockIdBatchSize() {
+    return BLOCKIDBATCHSIZE;
+  }
+
+  public int getBlockIdBatchCounter() {
+    return BLOCKIDBATCHCOUNTER;
+  }
+
+  public int getBlockIdTighteningStatus() {
+    return BLOCKIDTIGHTENINGSTATUS;
+  }
+
+  public int getBlockIdTorqueStatus() {
+    return BLOCKIDTORQUESTATUS;
+  }
+
+  public int getBlockIdAngleStatus() {
+    return BLOCKIDANGLESTATUS;
+  }
+
+  public int getBlockIdTorqueMinLimit() {
+    return BLOCKIDTORQUEMINLIMIT;
+  }
+
+  public int getBlockIdTorqueMaxLimit() {
+    return BLOCKIDTORQUEMAXLIMIT;
+  }
+
+  public int getBlockIdTorqueFinalTarget() {
+    return BLOCKIDTORQUEFINALTARGET;
+  }
+
+  public int getBlockIdTorque() {
+    return BLOCKIDTORQUE;
+  }
+
+  public int getBlockIdAngleMin() {
+    return BLOCKIDANGLEMIN;
+  }
+
+  public int getBlockIdAngleMax() {
+    return BLOCKIDANGLEMAX;
+  }
+
+  public int getBlockIdFinalAngleTarget() {
+    return BLOCKIDFINALANGLETARGET;
+  }
+
+  public int getBlockIdAngle() {
+    return BLOCKIDANGLE;
+  }
+
+  public int getBlockIdTimeStamp() {
+    return BLOCKIDTIMESTAMP;
+  }
+
+  public int getBlockIdDateTimeOfLastChangeIndParameterSetSettings() {
+    return BLOCKIDDATETIMEOFLASTCHANGEINDPARAMETERSETSETTINGS;
+  }
+
+  public int getBlockIdBatchStatus() {
+    return BLOCKIDBATCHSTATUS;
+  }
+
+  public int getBlockIdTighteningId() {
+    return BLOCKIDTIGHTENINGID;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageLastTighteningResultDataChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageLastTighteningResultDataRev1");
+
+    // Const Field (blockIdCellId)
+    writeConstField(
+        "blockIdCellId",
+        BLOCKIDCELLID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (cellId)
+    writeSimpleField(
+        "cellId", cellId, writeUnsignedLong(writeBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdChannelId)
+    writeConstField(
+        "blockIdChannelId",
+        BLOCKIDCHANNELID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (channelId)
+    writeSimpleField(
+        "channelId",
+        channelId,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueControllerName)
+    writeConstField(
+        "blockIdTorqueControllerName",
+        BLOCKIDTORQUECONTROLLERNAME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueControllerName)
+    writeSimpleField(
+        "torqueControllerName",
+        torqueControllerName,
+        writeString(writeBuffer, 200),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdVinNumber)
+    writeConstField(
+        "blockIdVinNumber",
+        BLOCKIDVINNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (vinNumber)
+    writeSimpleField(
+        "vinNumber", vinNumber, writeString(writeBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobId)
+    writeConstField(
+        "blockIdJobId",
+        BLOCKIDJOBID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobId)
+    writeSimpleField(
+        "jobId", jobId, writeUnsignedInt(writeBuffer, 16), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdParameterSetId)
+    writeConstField(
+        "blockIdParameterSetId",
+        BLOCKIDPARAMETERSETID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (parameterSetId)
+    writeSimpleField(
+        "parameterSetId",
+        parameterSetId,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchSize)
+    writeConstField(
+        "blockIdBatchSize",
+        BLOCKIDBATCHSIZE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchSize)
+    writeSimpleField(
+        "batchSize",
+        batchSize,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchCounter)
+    writeConstField(
+        "blockIdBatchCounter",
+        BLOCKIDBATCHCOUNTER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchCounter)
+    writeSimpleField(
+        "batchCounter",
+        batchCounter,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningStatus)
+    writeConstField(
+        "blockIdTighteningStatus",
+        BLOCKIDTIGHTENINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (tighteningStatus)
+    writeSimpleEnumField(
+        "tighteningStatus",
+        "TighteningStatus",
+        tighteningStatus,
+        new DataWriterEnumDefault<>(
+            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueStatus)
+    writeConstField(
+        "blockIdTorqueStatus",
+        BLOCKIDTORQUESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueStatus)
+    writeSimpleEnumField(
+        "torqueStatus",
+        "Status",
+        torqueStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleStatus)
+    writeConstField(
+        "blockIdAngleStatus",
+        BLOCKIDANGLESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleStatus)
+    writeSimpleEnumField(
+        "angleStatus",
+        "Status",
+        angleStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueMinLimit)
+    writeConstField(
+        "blockIdTorqueMinLimit",
+        BLOCKIDTORQUEMINLIMIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueMinLimit)
+    writeSimpleField(
+        "torqueMinLimit",
+        torqueMinLimit,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueMaxLimit)
+    writeConstField(
+        "blockIdTorqueMaxLimit",
+        BLOCKIDTORQUEMAXLIMIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueMaxLimit)
+    writeSimpleField(
+        "torqueMaxLimit",
+        torqueMaxLimit,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueFinalTarget)
+    writeConstField(
+        "blockIdTorqueFinalTarget",
+        BLOCKIDTORQUEFINALTARGET,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueFinalTarget)
+    writeSimpleField(
+        "torqueFinalTarget",
+        torqueFinalTarget,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorque)
+    writeConstField(
+        "blockIdTorque",
+        BLOCKIDTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torque)
+    writeSimpleField(
+        "torque",
+        torque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleMin)
+    writeConstField(
+        "blockIdAngleMin",
+        BLOCKIDANGLEMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleMin)
+    writeSimpleField(
+        "angleMin",
+        angleMin,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleMax)
+    writeConstField(
+        "blockIdAngleMax",
+        BLOCKIDANGLEMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleMax)
+    writeSimpleField(
+        "angleMax",
+        angleMax,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdFinalAngleTarget)
+    writeConstField(
+        "blockIdFinalAngleTarget",
+        BLOCKIDFINALANGLETARGET,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (finalAngleTarget)
+    writeSimpleField(
+        "finalAngleTarget",
+        finalAngleTarget,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngle)
+    writeConstField(
+        "blockIdAngle",
+        BLOCKIDANGLE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angle)
+    writeSimpleField(
+        "angle", angle, writeUnsignedBigInteger(writeBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTimeStamp)
+    writeConstField(
+        "blockIdTimeStamp",
+        BLOCKIDTIMESTAMP,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (timeStamp)
+    writeSimpleField(
+        "timeStamp", timeStamp, writeString(writeBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdDateTimeOfLastChangeIndParameterSetSettings)
+    writeConstField(
+        "blockIdDateTimeOfLastChangeIndParameterSetSettings",
+        BLOCKIDDATETIMEOFLASTCHANGEINDPARAMETERSETSETTINGS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (dateTimeOfLastChangeIndParameterSetSettings)
+    writeSimpleField(
+        "dateTimeOfLastChangeIndParameterSetSettings",
+        dateTimeOfLastChangeIndParameterSetSettings,
+        writeString(writeBuffer, 152),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchStatus)
+    writeConstField(
+        "blockIdBatchStatus",
+        BLOCKIDBATCHSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchStatus)
+    writeSimpleEnumField(
+        "batchStatus",
+        "BatchStatus",
+        batchStatus,
+        new DataWriterEnumDefault<>(
+            BatchStatus::getValue, BatchStatus::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningId)
+    writeConstField(
+        "blockIdTighteningId",
+        BLOCKIDTIGHTENINGID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (tighteningId)
+    writeSimpleField(
+        "tighteningId",
+        tighteningId,
+        writeUnsignedBigInteger(writeBuffer, 80),
+        WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageLastTighteningResultDataRev1");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageLastTighteningResultDataRev1 _value = this;
+
+    // Const Field (blockIdCellId)
+    lengthInBits += 16;
+
+    // Simple field (cellId)
+    lengthInBits += 32;
+
+    // Const Field (blockIdChannelId)
+    lengthInBits += 16;
+
+    // Simple field (channelId)
+    lengthInBits += 16;
+
+    // Const Field (blockIdTorqueControllerName)
+    lengthInBits += 16;
+
+    // Simple field (torqueControllerName)
+    lengthInBits += 200;
+
+    // Const Field (blockIdVinNumber)
+    lengthInBits += 16;
+
+    // Simple field (vinNumber)
+    lengthInBits += 200;
+
+    // Const Field (blockIdJobId)
+    lengthInBits += 16;
+
+    // Simple field (jobId)
+    lengthInBits += 16;
+
+    // Const Field (blockIdParameterSetId)
+    lengthInBits += 16;
+
+    // Simple field (parameterSetId)
+    lengthInBits += 24;
+
+    // Const Field (blockIdBatchSize)
+    lengthInBits += 16;
+
+    // Simple field (batchSize)
+    lengthInBits += 32;
+
+    // Const Field (blockIdBatchCounter)
+    lengthInBits += 16;
+
+    // Simple field (batchCounter)
+    lengthInBits += 32;
+
+    // Const Field (blockIdTighteningStatus)
+    lengthInBits += 16;
+
+    // Simple field (tighteningStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTorqueStatus)
+    lengthInBits += 16;
+
+    // Simple field (torqueStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdAngleStatus)
+    lengthInBits += 16;
+
+    // Simple field (angleStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTorqueMinLimit)
+    lengthInBits += 16;
+
+    // Simple field (torqueMinLimit)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorqueMaxLimit)
+    lengthInBits += 16;
+
+    // Simple field (torqueMaxLimit)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorqueFinalTarget)
+    lengthInBits += 16;
+
+    // Simple field (torqueFinalTarget)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorque)
+    lengthInBits += 16;
+
+    // Simple field (torque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdAngleMin)
+    lengthInBits += 16;
+
+    // Simple field (angleMin)
+    lengthInBits += 40;
+
+    // Const Field (blockIdAngleMax)
+    lengthInBits += 16;
+
+    // Simple field (angleMax)
+    lengthInBits += 40;
+
+    // Const Field (blockIdFinalAngleTarget)
+    lengthInBits += 16;
+
+    // Simple field (finalAngleTarget)
+    lengthInBits += 40;
+
+    // Const Field (blockIdAngle)
+    lengthInBits += 16;
+
+    // Simple field (angle)
+    lengthInBits += 40;
+
+    // Const Field (blockIdTimeStamp)
+    lengthInBits += 16;
+
+    // Simple field (timeStamp)
+    lengthInBits += 152;
+
+    // Const Field (blockIdDateTimeOfLastChangeIndParameterSetSettings)
+    lengthInBits += 16;
+
+    // Simple field (dateTimeOfLastChangeIndParameterSetSettings)
+    lengthInBits += 152;
+
+    // Const Field (blockIdBatchStatus)
+    lengthInBits += 16;
+
+    // Simple field (batchStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTighteningId)
+    lengthInBits += 16;
+
+    // Simple field (tighteningId)
+    lengthInBits += 80;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageLastTighteningResultDataBuilder
+      staticParseOpenProtocolMessageLastTighteningResultDataBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageLastTighteningResultDataRev1");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    int blockIdCellId =
+        readConstField(
+            "blockIdCellId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDCELLID,
+            WithOption.WithEncoding("ASCII"));
+
+    long cellId =
+        readSimpleField(
+            "cellId", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdChannelId =
+        readConstField(
+            "blockIdChannelId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDCHANNELID,
+            WithOption.WithEncoding("ASCII"));
+
+    int channelId =
+        readSimpleField(
+            "channelId", readUnsignedInt(readBuffer, 16), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueControllerName =
+        readConstField(
+            "blockIdTorqueControllerName",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTORQUECONTROLLERNAME,
+            WithOption.WithEncoding("ASCII"));
+
+    String torqueControllerName =
+        readSimpleField(
+            "torqueControllerName", readString(readBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    int blockIdVinNumber =
+        readConstField(
+            "blockIdVinNumber",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDVINNUMBER,
+            WithOption.WithEncoding("ASCII"));
+
+    String vinNumber =
+        readSimpleField("vinNumber", readString(readBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobId =
+        readConstField(
+            "blockIdJobId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDJOBID,
+            WithOption.WithEncoding("ASCII"));
+
+    int jobId =
+        readSimpleField("jobId", readUnsignedInt(readBuffer, 16), WithOption.WithEncoding("ASCII"));
+
+    int blockIdParameterSetId =
+        readConstField(
+            "blockIdParameterSetId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDPARAMETERSETID,
+            WithOption.WithEncoding("ASCII"));
+
+    long parameterSetId =
+        readSimpleField(
+            "parameterSetId", readUnsignedLong(readBuffer, 24), WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchSize =
+        readConstField(
+            "blockIdBatchSize",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDBATCHSIZE,
+            WithOption.WithEncoding("ASCII"));
+
+    long batchSize =
+        readSimpleField(
+            "batchSize", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchCounter =
+        readConstField(
+            "blockIdBatchCounter",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDBATCHCOUNTER,
+            WithOption.WithEncoding("ASCII"));
+
+    long batchCounter =
+        readSimpleField(
+            "batchCounter", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTighteningStatus =
+        readConstField(
+            "blockIdTighteningStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTIGHTENINGSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    TighteningStatus tighteningStatus =
+        readEnumField(
+            "tighteningStatus",
+            "TighteningStatus",
+            new DataReaderEnumDefault<>(
+                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueStatus =
+        readConstField(
+            "blockIdTorqueStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTORQUESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status torqueStatus =
+        readEnumField(
+            "torqueStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngleStatus =
+        readConstField(
+            "blockIdAngleStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDANGLESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status angleStatus =
+        readEnumField(
+            "angleStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueMinLimit =
+        readConstField(
+            "blockIdTorqueMinLimit",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTORQUEMINLIMIT,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torqueMinLimit =
+        readSimpleField(
+            "torqueMinLimit",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueMaxLimit =
+        readConstField(
+            "blockIdTorqueMaxLimit",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTORQUEMAXLIMIT,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torqueMaxLimit =
+        readSimpleField(
+            "torqueMaxLimit",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueFinalTarget =
+        readConstField(
+            "blockIdTorqueFinalTarget",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTORQUEFINALTARGET,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torqueFinalTarget =
+        readSimpleField(
+            "torqueFinalTarget",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorque =
+        readConstField(
+            "blockIdTorque",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTORQUE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torque =
+        readSimpleField(
+            "torque", readUnsignedBigInteger(readBuffer, 48), WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngleMin =
+        readConstField(
+            "blockIdAngleMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDANGLEMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger angleMin =
+        readSimpleField(
+            "angleMin", readUnsignedBigInteger(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngleMax =
+        readConstField(
+            "blockIdAngleMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDANGLEMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger angleMax =
+        readSimpleField(
+            "angleMax", readUnsignedBigInteger(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdFinalAngleTarget =
+        readConstField(
+            "blockIdFinalAngleTarget",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDFINALANGLETARGET,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger finalAngleTarget =
+        readSimpleField(
+            "finalAngleTarget",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngle =
+        readConstField(
+            "blockIdAngle",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDANGLE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger angle =
+        readSimpleField(
+            "angle", readUnsignedBigInteger(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTimeStamp =
+        readConstField(
+            "blockIdTimeStamp",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTIMESTAMP,
+            WithOption.WithEncoding("ASCII"));
+
+    String timeStamp =
+        readSimpleField("timeStamp", readString(readBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    int blockIdDateTimeOfLastChangeIndParameterSetSettings =
+        readConstField(
+            "blockIdDateTimeOfLastChangeIndParameterSetSettings",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1
+                .BLOCKIDDATETIMEOFLASTCHANGEINDPARAMETERSETSETTINGS,
+            WithOption.WithEncoding("ASCII"));
+
+    String dateTimeOfLastChangeIndParameterSetSettings =
+        readSimpleField(
+            "dateTimeOfLastChangeIndParameterSetSettings",
+            readString(readBuffer, 152),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchStatus =
+        readConstField(
+            "blockIdBatchStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDBATCHSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    BatchStatus batchStatus =
+        readEnumField(
+            "batchStatus",
+            "BatchStatus",
+            new DataReaderEnumDefault<>(
+                BatchStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTighteningId =
+        readConstField(
+            "blockIdTighteningId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev1.BLOCKIDTIGHTENINGID,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger tighteningId =
+        readSimpleField(
+            "tighteningId",
+            readUnsignedBigInteger(readBuffer, 80),
+            WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageLastTighteningResultDataRev1");
+    // Create the instance
+    return new OpenProtocolMessageLastTighteningResultDataRev1BuilderImpl(
+        cellId,
+        channelId,
+        torqueControllerName,
+        vinNumber,
+        jobId,
+        parameterSetId,
+        batchSize,
+        batchCounter,
+        tighteningStatus,
+        torqueStatus,
+        angleStatus,
+        torqueMinLimit,
+        torqueMaxLimit,
+        torqueFinalTarget,
+        torque,
+        angleMin,
+        angleMax,
+        finalAngleTarget,
+        angle,
+        timeStamp,
+        dateTimeOfLastChangeIndParameterSetSettings,
+        batchStatus,
+        tighteningId);
+  }
+
+  public static class OpenProtocolMessageLastTighteningResultDataRev1BuilderImpl
+      implements OpenProtocolMessageLastTighteningResultData
+          .OpenProtocolMessageLastTighteningResultDataBuilder {
+    private final long cellId;
+    private final int channelId;
+    private final String torqueControllerName;
+    private final String vinNumber;
+    private final int jobId;
+    private final long parameterSetId;
+    private final long batchSize;
+    private final long batchCounter;
+    private final TighteningStatus tighteningStatus;
+    private final Status torqueStatus;
+    private final Status angleStatus;
+    private final BigInteger torqueMinLimit;
+    private final BigInteger torqueMaxLimit;
+    private final BigInteger torqueFinalTarget;
+    private final BigInteger torque;
+    private final BigInteger angleMin;
+    private final BigInteger angleMax;
+    private final BigInteger finalAngleTarget;
+    private final BigInteger angle;
+    private final String timeStamp;
+    private final String dateTimeOfLastChangeIndParameterSetSettings;
+    private final BatchStatus batchStatus;
+    private final BigInteger tighteningId;
+
+    public OpenProtocolMessageLastTighteningResultDataRev1BuilderImpl(
+        long cellId,
+        int channelId,
+        String torqueControllerName,
+        String vinNumber,
+        int jobId,
+        long parameterSetId,
+        long batchSize,
+        long batchCounter,
+        TighteningStatus tighteningStatus,
+        Status torqueStatus,
+        Status angleStatus,
+        BigInteger torqueMinLimit,
+        BigInteger torqueMaxLimit,
+        BigInteger torqueFinalTarget,
+        BigInteger torque,
+        BigInteger angleMin,
+        BigInteger angleMax,
+        BigInteger finalAngleTarget,
+        BigInteger angle,
+        String timeStamp,
+        String dateTimeOfLastChangeIndParameterSetSettings,
+        BatchStatus batchStatus,
+        BigInteger tighteningId) {
+      this.cellId = cellId;
+      this.channelId = channelId;
+      this.torqueControllerName = torqueControllerName;
+      this.vinNumber = vinNumber;
+      this.jobId = jobId;
+      this.parameterSetId = parameterSetId;
+      this.batchSize = batchSize;
+      this.batchCounter = batchCounter;
+      this.tighteningStatus = tighteningStatus;
+      this.torqueStatus = torqueStatus;
+      this.angleStatus = angleStatus;
+      this.torqueMinLimit = torqueMinLimit;
+      this.torqueMaxLimit = torqueMaxLimit;
+      this.torqueFinalTarget = torqueFinalTarget;
+      this.torque = torque;
+      this.angleMin = angleMin;
+      this.angleMax = angleMax;
+      this.finalAngleTarget = finalAngleTarget;
+      this.angle = angle;
+      this.timeStamp = timeStamp;
+      this.dateTimeOfLastChangeIndParameterSetSettings =
+          dateTimeOfLastChangeIndParameterSetSettings;
+      this.batchStatus = batchStatus;
+      this.tighteningId = tighteningId;
+    }
+
+    public OpenProtocolMessageLastTighteningResultDataRev1 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageLastTighteningResultDataRev1
+          openProtocolMessageLastTighteningResultDataRev1 =
+              new OpenProtocolMessageLastTighteningResultDataRev1(
+                  midRevision,
+                  noAckFlag,
+                  targetStationId,
+                  targetSpindleId,
+                  sequenceNumber,
+                  numberOfMessageParts,
+                  messagePartNumber,
+                  cellId,
+                  channelId,
+                  torqueControllerName,
+                  vinNumber,
+                  jobId,
+                  parameterSetId,
+                  batchSize,
+                  batchCounter,
+                  tighteningStatus,
+                  torqueStatus,
+                  angleStatus,
+                  torqueMinLimit,
+                  torqueMaxLimit,
+                  torqueFinalTarget,
+                  torque,
+                  angleMin,
+                  angleMax,
+                  finalAngleTarget,
+                  angle,
+                  timeStamp,
+                  dateTimeOfLastChangeIndParameterSetSettings,
+                  batchStatus,
+                  tighteningId);
+      return openProtocolMessageLastTighteningResultDataRev1;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageLastTighteningResultDataRev1)) {
+      return false;
+    }
+    OpenProtocolMessageLastTighteningResultDataRev1 that =
+        (OpenProtocolMessageLastTighteningResultDataRev1) o;
+    return (getCellId() == that.getCellId())
+        && (getChannelId() == that.getChannelId())
+        && (getTorqueControllerName() == that.getTorqueControllerName())
+        && (getVinNumber() == that.getVinNumber())
+        && (getJobId() == that.getJobId())
+        && (getParameterSetId() == that.getParameterSetId())
+        && (getBatchSize() == that.getBatchSize())
+        && (getBatchCounter() == that.getBatchCounter())
+        && (getTighteningStatus() == that.getTighteningStatus())
+        && (getTorqueStatus() == that.getTorqueStatus())
+        && (getAngleStatus() == that.getAngleStatus())
+        && (getTorqueMinLimit() == that.getTorqueMinLimit())
+        && (getTorqueMaxLimit() == that.getTorqueMaxLimit())
+        && (getTorqueFinalTarget() == that.getTorqueFinalTarget())
+        && (getTorque() == that.getTorque())
+        && (getAngleMin() == that.getAngleMin())
+        && (getAngleMax() == that.getAngleMax())
+        && (getFinalAngleTarget() == that.getFinalAngleTarget())
+        && (getAngle() == that.getAngle())
+        && (getTimeStamp() == that.getTimeStamp())
+        && (getDateTimeOfLastChangeIndParameterSetSettings()
+            == that.getDateTimeOfLastChangeIndParameterSetSettings())
+        && (getBatchStatus() == that.getBatchStatus())
+        && (getTighteningId() == that.getTighteningId())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getCellId(),
+        getChannelId(),
+        getTorqueControllerName(),
+        getVinNumber(),
+        getJobId(),
+        getParameterSetId(),
+        getBatchSize(),
+        getBatchCounter(),
+        getTighteningStatus(),
+        getTorqueStatus(),
+        getAngleStatus(),
+        getTorqueMinLimit(),
+        getTorqueMaxLimit(),
+        getTorqueFinalTarget(),
+        getTorque(),
+        getAngleMin(),
+        getAngleMax(),
+        getFinalAngleTarget(),
+        getAngle(),
+        getTimeStamp(),
+        getDateTimeOfLastChangeIndParameterSetSettings(),
+        getBatchStatus(),
+        getTighteningId());
+  }
+
+  @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/OpenProtocolMessageLastTighteningResultDataRev2.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev2.java
new file mode 100644
index 0000000000..90fa8c5e74
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev2.java
@@ -0,0 +1,2484 @@
+/*
+ * 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 OpenProtocolMessageLastTighteningResultDataRev2
+    extends OpenProtocolMessageLastTighteningResultData implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 2;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDCELLID = 1;
+  public static final Integer BLOCKIDCHANNELID = 2;
+  public static final Integer BLOCKIDTORQUECONTROLLERNAME = 3;
+  public static final Integer BLOCKIDVINNUMBER = 4;
+  public static final Integer BLOCKIDJOBID = 5;
+  public static final Integer BLOCKIDPARAMETERSETNUMBER = 6;
+  public static final Integer BLOCKIDSTRATEGY = 7;
+  public static final Integer BLOCKIDSTRATEGYOPTIONS = 8;
+  public static final Integer BLOCKIDBATCHSIZE = 9;
+  public static final Integer BLOCKIDBATCHCOUNTER = 10;
+  public static final Integer BLOCKIDTIGHTENINGSTATUS = 11;
+  public static final Integer BLOCKIDBATCHSTATUS = 12;
+  public static final Integer BLOCKIDTORQUESTATUS = 13;
+  public static final Integer BLOCKIDANGLESTATUS = 14;
+  public static final Integer BLOCKIDRUNDOWNANGLESTATUS = 15;
+  public static final Integer BLOCKIDCURRENTMONITORINGSTATUS = 16;
+  public static final Integer BLOCKIDSELFTAPSTATUS = 17;
+  public static final Integer BLOCKIDPREVAILTORQUEMONITORINGSTATUS = 18;
+  public static final Integer BLOCKIDPREVAILTORQUECOMPENSATESTATUS = 19;
+  public static final Integer BLOCKIDTIGHTENINGERRORSTATUS = 20;
+  public static final Integer BLOCKIDTORQUEMINLIMIT = 21;
+  public static final Integer BLOCKIDTORQUEMAXLIMIT = 22;
+  public static final Integer BLOCKIDTORQUEFINALTARGET = 23;
+  public static final Integer BLOCKIDTORQUE = 24;
+  public static final Integer BLOCKIDANGLEMIN = 25;
+  public static final Integer BLOCKIDANGLEMAX = 26;
+  public static final Integer BLOCKIDFINALANGLETARGET = 27;
+  public static final Integer BLOCKIDANGLE = 28;
+  public static final Integer BLOCKIDRUNDOWNANGLEMIN = 29;
+  public static final Integer BLOCKIDRUNDOWNANGLEMAX = 30;
+  public static final Integer BLOCKIDRUNDOWNANGLE = 31;
+  public static final Integer BLOCKIDCURRENTMONITORINGMIN = 32;
+  public static final Integer BLOCKIDCURRENTMONITORINGMAX = 33;
+  public static final Integer BLOCKIDCURRENTMONITORINGVALUE = 34;
+  public static final Integer BLOCKIDSELFTAPMIN = 35;
+  public static final Integer BLOCKIDSELFTAPMAX = 36;
+  public static final Integer BLOCKIDSELFTAPTORQUE = 37;
+  public static final Integer BLOCKIDPREVAILTORQUEMONITORINGMIN = 38;
+  public static final Integer BLOCKIDPREVAILTORQUEMONITORINGMAX = 39;
+  public static final Integer BLOCKIDPREVAILTORQUE = 40;
+  public static final Integer BLOCKIDTIGHTENINGID = 41;
+  public static final Integer BLOCKIDJOBSEQUENCENUMBER = 42;
+  public static final Integer BLOCKIDSYNCTIGHTENINGID = 43;
+  public static final Integer BLOCKIDTOOLSERIALNUMBER = 44;
+  public static final Integer BLOCKIDTIMESTAMP = 45;
+  public static final Integer BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS = 46;
+
+  // Properties.
+  protected final long cellId;
+  protected final int channelId;
+  protected final String torqueControllerName;
+  protected final String vinNumber;
+  protected final long jobId;
+  protected final long parameterSetNumber;
+  protected final Strategy strategy;
+  protected final long batchSize;
+  protected final long batchCounter;
+  protected final TighteningStatus tighteningStatus;
+  protected final BatchStatus batchStatus;
+  protected final Status torqueStatus;
+  protected final Status angleStatus;
+  protected final Status rundownAngleStatus;
+  protected final Status currentMonitoringStatus;
+  protected final Status selfTapStatus;
+  protected final Status prevailTorqueMonitoringStatus;
+  protected final Status prevailTorqueCompensateStatus;
+  protected final BigInteger torqueMinLimit;
+  protected final BigInteger torqueMaxLimit;
+  protected final BigInteger torqueFinalTarget;
+  protected final BigInteger torque;
+  protected final BigInteger angleMin;
+  protected final BigInteger angleMax;
+  protected final BigInteger finalAngleTarget;
+  protected final BigInteger angle;
+  protected final BigInteger rundownAngleMin;
+  protected final BigInteger rundownAngleMax;
+  protected final BigInteger rundownAngle;
+  protected final long currentMonitoringMin;
+  protected final long currentMonitoringMax;
+  protected final long currentMonitoringValue;
+  protected final BigInteger selfTapMin;
+  protected final BigInteger selfTapMax;
+  protected final BigInteger selfTapTorque;
+  protected final BigInteger prevailTorqueMonitoringMin;
+  protected final BigInteger prevailTorqueMonitoringMax;
+  protected final BigInteger prevailTorque;
+  protected final BigInteger tighteningId;
+  protected final BigInteger jobSequenceNumber;
+  protected final BigInteger syncTighteningId;
+  protected final String toolSerialNumber;
+  protected final String timeStamp;
+  protected final String dateTimeOfLastChangeIndParameterSetSettings;
+
+  public OpenProtocolMessageLastTighteningResultDataRev2(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      long cellId,
+      int channelId,
+      String torqueControllerName,
+      String vinNumber,
+      long jobId,
+      long parameterSetNumber,
+      Strategy strategy,
+      long batchSize,
+      long batchCounter,
+      TighteningStatus tighteningStatus,
+      BatchStatus batchStatus,
+      Status torqueStatus,
+      Status angleStatus,
+      Status rundownAngleStatus,
+      Status currentMonitoringStatus,
+      Status selfTapStatus,
+      Status prevailTorqueMonitoringStatus,
+      Status prevailTorqueCompensateStatus,
+      BigInteger torqueMinLimit,
+      BigInteger torqueMaxLimit,
+      BigInteger torqueFinalTarget,
+      BigInteger torque,
+      BigInteger angleMin,
+      BigInteger angleMax,
+      BigInteger finalAngleTarget,
+      BigInteger angle,
+      BigInteger rundownAngleMin,
+      BigInteger rundownAngleMax,
+      BigInteger rundownAngle,
+      long currentMonitoringMin,
+      long currentMonitoringMax,
+      long currentMonitoringValue,
+      BigInteger selfTapMin,
+      BigInteger selfTapMax,
+      BigInteger selfTapTorque,
+      BigInteger prevailTorqueMonitoringMin,
+      BigInteger prevailTorqueMonitoringMax,
+      BigInteger prevailTorque,
+      BigInteger tighteningId,
+      BigInteger jobSequenceNumber,
+      BigInteger syncTighteningId,
+      String toolSerialNumber,
+      String timeStamp,
+      String dateTimeOfLastChangeIndParameterSetSettings) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.cellId = cellId;
+    this.channelId = channelId;
+    this.torqueControllerName = torqueControllerName;
+    this.vinNumber = vinNumber;
+    this.jobId = jobId;
+    this.parameterSetNumber = parameterSetNumber;
+    this.strategy = strategy;
+    this.batchSize = batchSize;
+    this.batchCounter = batchCounter;
+    this.tighteningStatus = tighteningStatus;
+    this.batchStatus = batchStatus;
+    this.torqueStatus = torqueStatus;
+    this.angleStatus = angleStatus;
+    this.rundownAngleStatus = rundownAngleStatus;
+    this.currentMonitoringStatus = currentMonitoringStatus;
+    this.selfTapStatus = selfTapStatus;
+    this.prevailTorqueMonitoringStatus = prevailTorqueMonitoringStatus;
+    this.prevailTorqueCompensateStatus = prevailTorqueCompensateStatus;
+    this.torqueMinLimit = torqueMinLimit;
+    this.torqueMaxLimit = torqueMaxLimit;
+    this.torqueFinalTarget = torqueFinalTarget;
+    this.torque = torque;
+    this.angleMin = angleMin;
+    this.angleMax = angleMax;
+    this.finalAngleTarget = finalAngleTarget;
+    this.angle = angle;
+    this.rundownAngleMin = rundownAngleMin;
+    this.rundownAngleMax = rundownAngleMax;
+    this.rundownAngle = rundownAngle;
+    this.currentMonitoringMin = currentMonitoringMin;
+    this.currentMonitoringMax = currentMonitoringMax;
+    this.currentMonitoringValue = currentMonitoringValue;
+    this.selfTapMin = selfTapMin;
+    this.selfTapMax = selfTapMax;
+    this.selfTapTorque = selfTapTorque;
+    this.prevailTorqueMonitoringMin = prevailTorqueMonitoringMin;
+    this.prevailTorqueMonitoringMax = prevailTorqueMonitoringMax;
+    this.prevailTorque = prevailTorque;
+    this.tighteningId = tighteningId;
+    this.jobSequenceNumber = jobSequenceNumber;
+    this.syncTighteningId = syncTighteningId;
+    this.toolSerialNumber = toolSerialNumber;
+    this.timeStamp = timeStamp;
+    this.dateTimeOfLastChangeIndParameterSetSettings = dateTimeOfLastChangeIndParameterSetSettings;
+  }
+
+  public long getCellId() {
+    return cellId;
+  }
+
+  public int getChannelId() {
+    return channelId;
+  }
+
+  public String getTorqueControllerName() {
+    return torqueControllerName;
+  }
+
+  public String getVinNumber() {
+    return vinNumber;
+  }
+
+  public long getJobId() {
+    return jobId;
+  }
+
+  public long getParameterSetNumber() {
+    return parameterSetNumber;
+  }
+
+  public Strategy getStrategy() {
+    return strategy;
+  }
+
+  public long getBatchSize() {
+    return batchSize;
+  }
+
+  public long getBatchCounter() {
+    return batchCounter;
+  }
+
+  public TighteningStatus getTighteningStatus() {
+    return tighteningStatus;
+  }
+
+  public BatchStatus getBatchStatus() {
+    return batchStatus;
+  }
+
+  public Status getTorqueStatus() {
+    return torqueStatus;
+  }
+
+  public Status getAngleStatus() {
+    return angleStatus;
+  }
+
+  public Status getRundownAngleStatus() {
+    return rundownAngleStatus;
+  }
+
+  public Status getCurrentMonitoringStatus() {
+    return currentMonitoringStatus;
+  }
+
+  public Status getSelfTapStatus() {
+    return selfTapStatus;
+  }
+
+  public Status getPrevailTorqueMonitoringStatus() {
+    return prevailTorqueMonitoringStatus;
+  }
+
+  public Status getPrevailTorqueCompensateStatus() {
+    return prevailTorqueCompensateStatus;
+  }
+
+  public BigInteger getTorqueMinLimit() {
+    return torqueMinLimit;
+  }
+
+  public BigInteger getTorqueMaxLimit() {
+    return torqueMaxLimit;
+  }
+
+  public BigInteger getTorqueFinalTarget() {
+    return torqueFinalTarget;
+  }
+
+  public BigInteger getTorque() {
+    return torque;
+  }
+
+  public BigInteger getAngleMin() {
+    return angleMin;
+  }
+
+  public BigInteger getAngleMax() {
+    return angleMax;
+  }
+
+  public BigInteger getFinalAngleTarget() {
+    return finalAngleTarget;
+  }
+
+  public BigInteger getAngle() {
+    return angle;
+  }
+
+  public BigInteger getRundownAngleMin() {
+    return rundownAngleMin;
+  }
+
+  public BigInteger getRundownAngleMax() {
+    return rundownAngleMax;
+  }
+
+  public BigInteger getRundownAngle() {
+    return rundownAngle;
+  }
+
+  public long getCurrentMonitoringMin() {
+    return currentMonitoringMin;
+  }
+
+  public long getCurrentMonitoringMax() {
+    return currentMonitoringMax;
+  }
+
+  public long getCurrentMonitoringValue() {
+    return currentMonitoringValue;
+  }
+
+  public BigInteger getSelfTapMin() {
+    return selfTapMin;
+  }
+
+  public BigInteger getSelfTapMax() {
+    return selfTapMax;
+  }
+
+  public BigInteger getSelfTapTorque() {
+    return selfTapTorque;
+  }
+
+  public BigInteger getPrevailTorqueMonitoringMin() {
+    return prevailTorqueMonitoringMin;
+  }
+
+  public BigInteger getPrevailTorqueMonitoringMax() {
+    return prevailTorqueMonitoringMax;
+  }
+
+  public BigInteger getPrevailTorque() {
+    return prevailTorque;
+  }
+
+  public BigInteger getTighteningId() {
+    return tighteningId;
+  }
+
+  public BigInteger getJobSequenceNumber() {
+    return jobSequenceNumber;
+  }
+
+  public BigInteger getSyncTighteningId() {
+    return syncTighteningId;
+  }
+
+  public String getToolSerialNumber() {
+    return toolSerialNumber;
+  }
+
+  public String getTimeStamp() {
+    return timeStamp;
+  }
+
+  public String getDateTimeOfLastChangeIndParameterSetSettings() {
+    return dateTimeOfLastChangeIndParameterSetSettings;
+  }
+
+  public int getBlockIdCellId() {
+    return BLOCKIDCELLID;
+  }
+
+  public int getBlockIdChannelId() {
+    return BLOCKIDCHANNELID;
+  }
+
+  public int getBlockIdTorqueControllerName() {
+    return BLOCKIDTORQUECONTROLLERNAME;
+  }
+
+  public int getBlockIdVinNumber() {
+    return BLOCKIDVINNUMBER;
+  }
+
+  public int getBlockIdJobId() {
+    return BLOCKIDJOBID;
+  }
+
+  public int getBlockIdParameterSetNumber() {
+    return BLOCKIDPARAMETERSETNUMBER;
+  }
+
+  public int getBlockIdStrategy() {
+    return BLOCKIDSTRATEGY;
+  }
+
+  public int getBlockIdStrategyOptions() {
+    return BLOCKIDSTRATEGYOPTIONS;
+  }
+
+  public int getBlockIdBatchSize() {
+    return BLOCKIDBATCHSIZE;
+  }
+
+  public int getBlockIdBatchCounter() {
+    return BLOCKIDBATCHCOUNTER;
+  }
+
+  public int getBlockIdTighteningStatus() {
+    return BLOCKIDTIGHTENINGSTATUS;
+  }
+
+  public int getBlockIdBatchStatus() {
+    return BLOCKIDBATCHSTATUS;
+  }
+
+  public int getBlockIdTorqueStatus() {
+    return BLOCKIDTORQUESTATUS;
+  }
+
+  public int getBlockIdAngleStatus() {
+    return BLOCKIDANGLESTATUS;
+  }
+
+  public int getBlockIdRundownAngleStatus() {
+    return BLOCKIDRUNDOWNANGLESTATUS;
+  }
+
+  public int getBlockIdCurrentMonitoringStatus() {
+    return BLOCKIDCURRENTMONITORINGSTATUS;
+  }
+
+  public int getBlockIdSelfTapStatus() {
+    return BLOCKIDSELFTAPSTATUS;
+  }
+
+  public int getBlockIdPrevailTorqueMonitoringStatus() {
+    return BLOCKIDPREVAILTORQUEMONITORINGSTATUS;
+  }
+
+  public int getBlockIdPrevailTorqueCompensateStatus() {
+    return BLOCKIDPREVAILTORQUECOMPENSATESTATUS;
+  }
+
+  public int getBlockIdTighteningErrorStatus() {
+    return BLOCKIDTIGHTENINGERRORSTATUS;
+  }
+
+  public int getBlockIdTorqueMinLimit() {
+    return BLOCKIDTORQUEMINLIMIT;
+  }
+
+  public int getBlockIdTorqueMaxLimit() {
+    return BLOCKIDTORQUEMAXLIMIT;
+  }
+
+  public int getBlockIdTorqueFinalTarget() {
+    return BLOCKIDTORQUEFINALTARGET;
+  }
+
+  public int getBlockIdTorque() {
+    return BLOCKIDTORQUE;
+  }
+
+  public int getBlockIdAngleMin() {
+    return BLOCKIDANGLEMIN;
+  }
+
+  public int getBlockIdAngleMax() {
+    return BLOCKIDANGLEMAX;
+  }
+
+  public int getBlockIdFinalAngleTarget() {
+    return BLOCKIDFINALANGLETARGET;
+  }
+
+  public int getBlockIdAngle() {
+    return BLOCKIDANGLE;
+  }
+
+  public int getBlockIdRundownAngleMin() {
+    return BLOCKIDRUNDOWNANGLEMIN;
+  }
+
+  public int getBlockIdRundownAngleMax() {
+    return BLOCKIDRUNDOWNANGLEMAX;
+  }
+
+  public int getBlockIdRundownAngle() {
+    return BLOCKIDRUNDOWNANGLE;
+  }
+
+  public int getBlockIdCurrentMonitoringMin() {
+    return BLOCKIDCURRENTMONITORINGMIN;
+  }
+
+  public int getBlockIdCurrentMonitoringMax() {
+    return BLOCKIDCURRENTMONITORINGMAX;
+  }
+
+  public int getBlockIdCurrentMonitoringValue() {
+    return BLOCKIDCURRENTMONITORINGVALUE;
+  }
+
+  public int getBlockIdSelfTapMin() {
+    return BLOCKIDSELFTAPMIN;
+  }
+
+  public int getBlockIdSelfTapMax() {
+    return BLOCKIDSELFTAPMAX;
+  }
+
+  public int getBlockIdSelfTapTorque() {
+    return BLOCKIDSELFTAPTORQUE;
+  }
+
+  public int getBlockIdPrevailTorqueMonitoringMin() {
+    return BLOCKIDPREVAILTORQUEMONITORINGMIN;
+  }
+
+  public int getBlockIdPrevailTorqueMonitoringMax() {
+    return BLOCKIDPREVAILTORQUEMONITORINGMAX;
+  }
+
+  public int getBlockIdPrevailTorque() {
+    return BLOCKIDPREVAILTORQUE;
+  }
+
+  public int getBlockIdTighteningId() {
+    return BLOCKIDTIGHTENINGID;
+  }
+
+  public int getBlockIdJobSequenceNumber() {
+    return BLOCKIDJOBSEQUENCENUMBER;
+  }
+
+  public int getBlockIdSyncTighteningId() {
+    return BLOCKIDSYNCTIGHTENINGID;
+  }
+
+  public int getBlockIdToolSerialNumber() {
+    return BLOCKIDTOOLSERIALNUMBER;
+  }
+
+  public int getBlockIdTimeStamp() {
+    return BLOCKIDTIMESTAMP;
+  }
+
+  public int getBlockIdDateTimeOfLastChangeInParameterSetSettings() {
+    return BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageLastTighteningResultDataChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageLastTighteningResultDataRev2");
+
+    // Const Field (blockIdCellId)
+    writeConstField(
+        "blockIdCellId",
+        BLOCKIDCELLID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (cellId)
+    writeSimpleField(
+        "cellId", cellId, writeUnsignedLong(writeBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdChannelId)
+    writeConstField(
+        "blockIdChannelId",
+        BLOCKIDCHANNELID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (channelId)
+    writeSimpleField(
+        "channelId",
+        channelId,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueControllerName)
+    writeConstField(
+        "blockIdTorqueControllerName",
+        BLOCKIDTORQUECONTROLLERNAME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueControllerName)
+    writeSimpleField(
+        "torqueControllerName",
+        torqueControllerName,
+        writeString(writeBuffer, 200),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdVinNumber)
+    writeConstField(
+        "blockIdVinNumber",
+        BLOCKIDVINNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (vinNumber)
+    writeSimpleField(
+        "vinNumber", vinNumber, writeString(writeBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    // 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 (blockIdParameterSetNumber)
+    writeConstField(
+        "blockIdParameterSetNumber",
+        BLOCKIDPARAMETERSETNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (parameterSetNumber)
+    writeSimpleField(
+        "parameterSetNumber",
+        parameterSetNumber,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdStrategy)
+    writeConstField(
+        "blockIdStrategy",
+        BLOCKIDSTRATEGY,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (strategy)
+    writeSimpleEnumField(
+        "strategy",
+        "Strategy",
+        strategy,
+        new DataWriterEnumDefault<>(
+            Strategy::getValue, Strategy::name, writeUnsignedInt(writeBuffer, 16)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdStrategyOptions)
+    writeConstField(
+        "blockIdStrategyOptions",
+        BLOCKIDSTRATEGYOPTIONS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchSize)
+    writeConstField(
+        "blockIdBatchSize",
+        BLOCKIDBATCHSIZE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchSize)
+    writeSimpleField(
+        "batchSize",
+        batchSize,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchCounter)
+    writeConstField(
+        "blockIdBatchCounter",
+        BLOCKIDBATCHCOUNTER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchCounter)
+    writeSimpleField(
+        "batchCounter",
+        batchCounter,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningStatus)
+    writeConstField(
+        "blockIdTighteningStatus",
+        BLOCKIDTIGHTENINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (tighteningStatus)
+    writeSimpleEnumField(
+        "tighteningStatus",
+        "TighteningStatus",
+        tighteningStatus,
+        new DataWriterEnumDefault<>(
+            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchStatus)
+    writeConstField(
+        "blockIdBatchStatus",
+        BLOCKIDBATCHSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchStatus)
+    writeSimpleEnumField(
+        "batchStatus",
+        "BatchStatus",
+        batchStatus,
+        new DataWriterEnumDefault<>(
+            BatchStatus::getValue, BatchStatus::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueStatus)
+    writeConstField(
+        "blockIdTorqueStatus",
+        BLOCKIDTORQUESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueStatus)
+    writeSimpleEnumField(
+        "torqueStatus",
+        "Status",
+        torqueStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleStatus)
+    writeConstField(
+        "blockIdAngleStatus",
+        BLOCKIDANGLESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleStatus)
+    writeSimpleEnumField(
+        "angleStatus",
+        "Status",
+        angleStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngleStatus)
+    writeConstField(
+        "blockIdRundownAngleStatus",
+        BLOCKIDRUNDOWNANGLESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngleStatus)
+    writeSimpleEnumField(
+        "rundownAngleStatus",
+        "Status",
+        rundownAngleStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringStatus)
+    writeConstField(
+        "blockIdCurrentMonitoringStatus",
+        BLOCKIDCURRENTMONITORINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringStatus)
+    writeSimpleEnumField(
+        "currentMonitoringStatus",
+        "Status",
+        currentMonitoringStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapStatus)
+    writeConstField(
+        "blockIdSelfTapStatus",
+        BLOCKIDSELFTAPSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapStatus)
+    writeSimpleEnumField(
+        "selfTapStatus",
+        "Status",
+        selfTapStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueMonitoringStatus)
+    writeConstField(
+        "blockIdPrevailTorqueMonitoringStatus",
+        BLOCKIDPREVAILTORQUEMONITORINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueMonitoringStatus)
+    writeSimpleEnumField(
+        "prevailTorqueMonitoringStatus",
+        "Status",
+        prevailTorqueMonitoringStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueCompensateStatus)
+    writeConstField(
+        "blockIdPrevailTorqueCompensateStatus",
+        BLOCKIDPREVAILTORQUECOMPENSATESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueCompensateStatus)
+    writeSimpleEnumField(
+        "prevailTorqueCompensateStatus",
+        "Status",
+        prevailTorqueCompensateStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningErrorStatus)
+    writeConstField(
+        "blockIdTighteningErrorStatus",
+        BLOCKIDTIGHTENINGERRORSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueMinLimit)
+    writeConstField(
+        "blockIdTorqueMinLimit",
+        BLOCKIDTORQUEMINLIMIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueMinLimit)
+    writeSimpleField(
+        "torqueMinLimit",
+        torqueMinLimit,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueMaxLimit)
+    writeConstField(
+        "blockIdTorqueMaxLimit",
+        BLOCKIDTORQUEMAXLIMIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueMaxLimit)
+    writeSimpleField(
+        "torqueMaxLimit",
+        torqueMaxLimit,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueFinalTarget)
+    writeConstField(
+        "blockIdTorqueFinalTarget",
+        BLOCKIDTORQUEFINALTARGET,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueFinalTarget)
+    writeSimpleField(
+        "torqueFinalTarget",
+        torqueFinalTarget,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorque)
+    writeConstField(
+        "blockIdTorque",
+        BLOCKIDTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torque)
+    writeSimpleField(
+        "torque",
+        torque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleMin)
+    writeConstField(
+        "blockIdAngleMin",
+        BLOCKIDANGLEMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleMin)
+    writeSimpleField(
+        "angleMin",
+        angleMin,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleMax)
+    writeConstField(
+        "blockIdAngleMax",
+        BLOCKIDANGLEMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleMax)
+    writeSimpleField(
+        "angleMax",
+        angleMax,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdFinalAngleTarget)
+    writeConstField(
+        "blockIdFinalAngleTarget",
+        BLOCKIDFINALANGLETARGET,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (finalAngleTarget)
+    writeSimpleField(
+        "finalAngleTarget",
+        finalAngleTarget,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngle)
+    writeConstField(
+        "blockIdAngle",
+        BLOCKIDANGLE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angle)
+    writeSimpleField(
+        "angle", angle, writeUnsignedBigInteger(writeBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngleMin)
+    writeConstField(
+        "blockIdRundownAngleMin",
+        BLOCKIDRUNDOWNANGLEMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngleMin)
+    writeSimpleField(
+        "rundownAngleMin",
+        rundownAngleMin,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngleMax)
+    writeConstField(
+        "blockIdRundownAngleMax",
+        BLOCKIDRUNDOWNANGLEMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngleMax)
+    writeSimpleField(
+        "rundownAngleMax",
+        rundownAngleMax,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngle)
+    writeConstField(
+        "blockIdRundownAngle",
+        BLOCKIDRUNDOWNANGLE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngle)
+    writeSimpleField(
+        "rundownAngle",
+        rundownAngle,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringMin)
+    writeConstField(
+        "blockIdCurrentMonitoringMin",
+        BLOCKIDCURRENTMONITORINGMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringMin)
+    writeSimpleField(
+        "currentMonitoringMin",
+        currentMonitoringMin,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringMax)
+    writeConstField(
+        "blockIdCurrentMonitoringMax",
+        BLOCKIDCURRENTMONITORINGMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringMax)
+    writeSimpleField(
+        "currentMonitoringMax",
+        currentMonitoringMax,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringValue)
+    writeConstField(
+        "blockIdCurrentMonitoringValue",
+        BLOCKIDCURRENTMONITORINGVALUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringValue)
+    writeSimpleField(
+        "currentMonitoringValue",
+        currentMonitoringValue,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapMin)
+    writeConstField(
+        "blockIdSelfTapMin",
+        BLOCKIDSELFTAPMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapMin)
+    writeSimpleField(
+        "selfTapMin",
+        selfTapMin,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapMax)
+    writeConstField(
+        "blockIdSelfTapMax",
+        BLOCKIDSELFTAPMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapMax)
+    writeSimpleField(
+        "selfTapMax",
+        selfTapMax,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapTorque)
+    writeConstField(
+        "blockIdSelfTapTorque",
+        BLOCKIDSELFTAPTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapTorque)
+    writeSimpleField(
+        "selfTapTorque",
+        selfTapTorque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueMonitoringMin)
+    writeConstField(
+        "blockIdPrevailTorqueMonitoringMin",
+        BLOCKIDPREVAILTORQUEMONITORINGMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueMonitoringMin)
+    writeSimpleField(
+        "prevailTorqueMonitoringMin",
+        prevailTorqueMonitoringMin,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueMonitoringMax)
+    writeConstField(
+        "blockIdPrevailTorqueMonitoringMax",
+        BLOCKIDPREVAILTORQUEMONITORINGMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueMonitoringMax)
+    writeSimpleField(
+        "prevailTorqueMonitoringMax",
+        prevailTorqueMonitoringMax,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorque)
+    writeConstField(
+        "blockIdPrevailTorque",
+        BLOCKIDPREVAILTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorque)
+    writeSimpleField(
+        "prevailTorque",
+        prevailTorque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningId)
+    writeConstField(
+        "blockIdTighteningId",
+        BLOCKIDTIGHTENINGID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (tighteningId)
+    writeSimpleField(
+        "tighteningId",
+        tighteningId,
+        writeUnsignedBigInteger(writeBuffer, 80),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobSequenceNumber)
+    writeConstField(
+        "blockIdJobSequenceNumber",
+        BLOCKIDJOBSEQUENCENUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobSequenceNumber)
+    writeSimpleField(
+        "jobSequenceNumber",
+        jobSequenceNumber,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSyncTighteningId)
+    writeConstField(
+        "blockIdSyncTighteningId",
+        BLOCKIDSYNCTIGHTENINGID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (syncTighteningId)
+    writeSimpleField(
+        "syncTighteningId",
+        syncTighteningId,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdToolSerialNumber)
+    writeConstField(
+        "blockIdToolSerialNumber",
+        BLOCKIDTOOLSERIALNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (toolSerialNumber)
+    writeSimpleField(
+        "toolSerialNumber",
+        toolSerialNumber,
+        writeString(writeBuffer, 112),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTimeStamp)
+    writeConstField(
+        "blockIdTimeStamp",
+        BLOCKIDTIMESTAMP,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (timeStamp)
+    writeSimpleField(
+        "timeStamp", timeStamp, writeString(writeBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdDateTimeOfLastChangeInParameterSetSettings)
+    writeConstField(
+        "blockIdDateTimeOfLastChangeInParameterSetSettings",
+        BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (dateTimeOfLastChangeIndParameterSetSettings)
+    writeSimpleField(
+        "dateTimeOfLastChangeIndParameterSetSettings",
+        dateTimeOfLastChangeIndParameterSetSettings,
+        writeString(writeBuffer, 152),
+        WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageLastTighteningResultDataRev2");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageLastTighteningResultDataRev2 _value = this;
+
+    // Const Field (blockIdCellId)
+    lengthInBits += 16;
+
+    // Simple field (cellId)
+    lengthInBits += 32;
+
+    // Const Field (blockIdChannelId)
+    lengthInBits += 16;
+
+    // Simple field (channelId)
+    lengthInBits += 16;
+
+    // Const Field (blockIdTorqueControllerName)
+    lengthInBits += 16;
+
+    // Simple field (torqueControllerName)
+    lengthInBits += 200;
+
+    // Const Field (blockIdVinNumber)
+    lengthInBits += 16;
+
+    // Simple field (vinNumber)
+    lengthInBits += 200;
+
+    // Const Field (blockIdJobId)
+    lengthInBits += 16;
+
+    // Simple field (jobId)
+    lengthInBits += 32;
+
+    // Const Field (blockIdParameterSetNumber)
+    lengthInBits += 16;
+
+    // Simple field (parameterSetNumber)
+    lengthInBits += 24;
+
+    // Const Field (blockIdStrategy)
+    lengthInBits += 16;
+
+    // Simple field (strategy)
+    lengthInBits += 16;
+
+    // Const Field (blockIdStrategyOptions)
+    lengthInBits += 16;
+
+    // Const Field (blockIdBatchSize)
+    lengthInBits += 16;
+
+    // Simple field (batchSize)
+    lengthInBits += 32;
+
+    // Const Field (blockIdBatchCounter)
+    lengthInBits += 16;
+
+    // Simple field (batchCounter)
+    lengthInBits += 32;
+
+    // Const Field (blockIdTighteningStatus)
+    lengthInBits += 16;
+
+    // Simple field (tighteningStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdBatchStatus)
+    lengthInBits += 16;
+
+    // Simple field (batchStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTorqueStatus)
+    lengthInBits += 16;
+
+    // Simple field (torqueStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdAngleStatus)
+    lengthInBits += 16;
+
+    // Simple field (angleStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdRundownAngleStatus)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngleStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdCurrentMonitoringStatus)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdSelfTapStatus)
+    lengthInBits += 16;
+
+    // Simple field (selfTapStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdPrevailTorqueMonitoringStatus)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueMonitoringStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdPrevailTorqueCompensateStatus)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueCompensateStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTighteningErrorStatus)
+    lengthInBits += 16;
+
+    // Const Field (blockIdTorqueMinLimit)
+    lengthInBits += 16;
+
+    // Simple field (torqueMinLimit)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorqueMaxLimit)
+    lengthInBits += 16;
+
+    // Simple field (torqueMaxLimit)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorqueFinalTarget)
+    lengthInBits += 16;
+
+    // Simple field (torqueFinalTarget)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorque)
+    lengthInBits += 16;
+
+    // Simple field (torque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdAngleMin)
+    lengthInBits += 16;
+
+    // Simple field (angleMin)
+    lengthInBits += 40;
+
+    // Const Field (blockIdAngleMax)
+    lengthInBits += 16;
+
+    // Simple field (angleMax)
+    lengthInBits += 40;
+
+    // Const Field (blockIdFinalAngleTarget)
+    lengthInBits += 16;
+
+    // Simple field (finalAngleTarget)
+    lengthInBits += 40;
+
+    // Const Field (blockIdAngle)
+    lengthInBits += 16;
+
+    // Simple field (angle)
+    lengthInBits += 40;
+
+    // Const Field (blockIdRundownAngleMin)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngleMin)
+    lengthInBits += 40;
+
+    // Const Field (blockIdRundownAngleMax)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngleMax)
+    lengthInBits += 40;
+
+    // Const Field (blockIdRundownAngle)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngle)
+    lengthInBits += 40;
+
+    // Const Field (blockIdCurrentMonitoringMin)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringMin)
+    lengthInBits += 24;
+
+    // Const Field (blockIdCurrentMonitoringMax)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringMax)
+    lengthInBits += 24;
+
+    // Const Field (blockIdCurrentMonitoringValue)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringValue)
+    lengthInBits += 24;
+
+    // Const Field (blockIdSelfTapMin)
+    lengthInBits += 16;
+
+    // Simple field (selfTapMin)
+    lengthInBits += 48;
+
+    // Const Field (blockIdSelfTapMax)
+    lengthInBits += 16;
+
+    // Simple field (selfTapMax)
+    lengthInBits += 48;
+
+    // Const Field (blockIdSelfTapTorque)
+    lengthInBits += 16;
+
+    // Simple field (selfTapTorque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdPrevailTorqueMonitoringMin)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueMonitoringMin)
+    lengthInBits += 48;
+
+    // Const Field (blockIdPrevailTorqueMonitoringMax)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueMonitoringMax)
+    lengthInBits += 48;
+
+    // Const Field (blockIdPrevailTorque)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTighteningId)
+    lengthInBits += 16;
+
+    // Simple field (tighteningId)
+    lengthInBits += 80;
+
+    // Const Field (blockIdJobSequenceNumber)
+    lengthInBits += 16;
+
+    // Simple field (jobSequenceNumber)
+    lengthInBits += 40;
+
+    // Const Field (blockIdSyncTighteningId)
+    lengthInBits += 16;
+
+    // Simple field (syncTighteningId)
+    lengthInBits += 40;
+
+    // Const Field (blockIdToolSerialNumber)
+    lengthInBits += 16;
+
+    // Simple field (toolSerialNumber)
+    lengthInBits += 112;
+
+    // Const Field (blockIdTimeStamp)
+    lengthInBits += 16;
+
+    // Simple field (timeStamp)
+    lengthInBits += 152;
+
+    // Const Field (blockIdDateTimeOfLastChangeInParameterSetSettings)
+    lengthInBits += 16;
+
+    // Simple field (dateTimeOfLastChangeIndParameterSetSettings)
+    lengthInBits += 152;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageLastTighteningResultDataBuilder
+      staticParseOpenProtocolMessageLastTighteningResultDataBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageLastTighteningResultDataRev2");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    int blockIdCellId =
+        readConstField(
+            "blockIdCellId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDCELLID,
+            WithOption.WithEncoding("ASCII"));
+
+    long cellId =
+        readSimpleField(
+            "cellId", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdChannelId =
+        readConstField(
+            "blockIdChannelId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDCHANNELID,
+            WithOption.WithEncoding("ASCII"));
+
+    int channelId =
+        readSimpleField(
+            "channelId", readUnsignedInt(readBuffer, 16), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueControllerName =
+        readConstField(
+            "blockIdTorqueControllerName",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTORQUECONTROLLERNAME,
+            WithOption.WithEncoding("ASCII"));
+
+    String torqueControllerName =
+        readSimpleField(
+            "torqueControllerName", readString(readBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    int blockIdVinNumber =
+        readConstField(
+            "blockIdVinNumber",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDVINNUMBER,
+            WithOption.WithEncoding("ASCII"));
+
+    String vinNumber =
+        readSimpleField("vinNumber", readString(readBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobId =
+        readConstField(
+            "blockIdJobId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDJOBID,
+            WithOption.WithEncoding("ASCII"));
+
+    long jobId =
+        readSimpleField(
+            "jobId", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdParameterSetNumber =
+        readConstField(
+            "blockIdParameterSetNumber",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDPARAMETERSETNUMBER,
+            WithOption.WithEncoding("ASCII"));
+
+    long parameterSetNumber =
+        readSimpleField(
+            "parameterSetNumber",
+            readUnsignedLong(readBuffer, 24),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdStrategy =
+        readConstField(
+            "blockIdStrategy",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDSTRATEGY,
+            WithOption.WithEncoding("ASCII"));
+
+    Strategy strategy =
+        readEnumField(
+            "strategy",
+            "Strategy",
+            new DataReaderEnumDefault<>(Strategy::enumForValue, readUnsignedInt(readBuffer, 16)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdStrategyOptions =
+        readConstField(
+            "blockIdStrategyOptions",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDSTRATEGYOPTIONS,
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchSize =
+        readConstField(
+            "blockIdBatchSize",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDBATCHSIZE,
+            WithOption.WithEncoding("ASCII"));
+
+    long batchSize =
+        readSimpleField(
+            "batchSize", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchCounter =
+        readConstField(
+            "blockIdBatchCounter",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDBATCHCOUNTER,
+            WithOption.WithEncoding("ASCII"));
+
+    long batchCounter =
+        readSimpleField(
+            "batchCounter", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTighteningStatus =
+        readConstField(
+            "blockIdTighteningStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTIGHTENINGSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    TighteningStatus tighteningStatus =
+        readEnumField(
+            "tighteningStatus",
+            "TighteningStatus",
+            new DataReaderEnumDefault<>(
+                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchStatus =
+        readConstField(
+            "blockIdBatchStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDBATCHSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    BatchStatus batchStatus =
+        readEnumField(
+            "batchStatus",
+            "BatchStatus",
+            new DataReaderEnumDefault<>(
+                BatchStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueStatus =
+        readConstField(
+            "blockIdTorqueStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTORQUESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status torqueStatus =
+        readEnumField(
+            "torqueStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngleStatus =
+        readConstField(
+            "blockIdAngleStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDANGLESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status angleStatus =
+        readEnumField(
+            "angleStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdRundownAngleStatus =
+        readConstField(
+            "blockIdRundownAngleStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDRUNDOWNANGLESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status rundownAngleStatus =
+        readEnumField(
+            "rundownAngleStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdCurrentMonitoringStatus =
+        readConstField(
+            "blockIdCurrentMonitoringStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDCURRENTMONITORINGSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status currentMonitoringStatus =
+        readEnumField(
+            "currentMonitoringStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdSelfTapStatus =
+        readConstField(
+            "blockIdSelfTapStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDSELFTAPSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status selfTapStatus =
+        readEnumField(
+            "selfTapStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorqueMonitoringStatus =
+        readConstField(
+            "blockIdPrevailTorqueMonitoringStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDPREVAILTORQUEMONITORINGSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status prevailTorqueMonitoringStatus =
+        readEnumField(
+            "prevailTorqueMonitoringStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorqueCompensateStatus =
+        readConstField(
+            "blockIdPrevailTorqueCompensateStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDPREVAILTORQUECOMPENSATESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status prevailTorqueCompensateStatus =
+        readEnumField(
+            "prevailTorqueCompensateStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTighteningErrorStatus =
+        readConstField(
+            "blockIdTighteningErrorStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTIGHTENINGERRORSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueMinLimit =
+        readConstField(
+            "blockIdTorqueMinLimit",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTORQUEMINLIMIT,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torqueMinLimit =
+        readSimpleField(
+            "torqueMinLimit",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueMaxLimit =
+        readConstField(
+            "blockIdTorqueMaxLimit",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTORQUEMAXLIMIT,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torqueMaxLimit =
+        readSimpleField(
+            "torqueMaxLimit",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueFinalTarget =
+        readConstField(
+            "blockIdTorqueFinalTarget",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTORQUEFINALTARGET,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torqueFinalTarget =
+        readSimpleField(
+            "torqueFinalTarget",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorque =
+        readConstField(
+            "blockIdTorque",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTORQUE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torque =
+        readSimpleField(
+            "torque", readUnsignedBigInteger(readBuffer, 48), WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngleMin =
+        readConstField(
+            "blockIdAngleMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDANGLEMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger angleMin =
+        readSimpleField(
+            "angleMin", readUnsignedBigInteger(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngleMax =
+        readConstField(
+            "blockIdAngleMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDANGLEMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger angleMax =
+        readSimpleField(
+            "angleMax", readUnsignedBigInteger(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdFinalAngleTarget =
+        readConstField(
+            "blockIdFinalAngleTarget",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDFINALANGLETARGET,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger finalAngleTarget =
+        readSimpleField(
+            "finalAngleTarget",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngle =
+        readConstField(
+            "blockIdAngle",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDANGLE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger angle =
+        readSimpleField(
+            "angle", readUnsignedBigInteger(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdRundownAngleMin =
+        readConstField(
+            "blockIdRundownAngleMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDRUNDOWNANGLEMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger rundownAngleMin =
+        readSimpleField(
+            "rundownAngleMin",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdRundownAngleMax =
+        readConstField(
+            "blockIdRundownAngleMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDRUNDOWNANGLEMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger rundownAngleMax =
+        readSimpleField(
+            "rundownAngleMax",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdRundownAngle =
+        readConstField(
+            "blockIdRundownAngle",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDRUNDOWNANGLE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger rundownAngle =
+        readSimpleField(
+            "rundownAngle",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdCurrentMonitoringMin =
+        readConstField(
+            "blockIdCurrentMonitoringMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDCURRENTMONITORINGMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    long currentMonitoringMin =
+        readSimpleField(
+            "currentMonitoringMin",
+            readUnsignedLong(readBuffer, 24),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdCurrentMonitoringMax =
+        readConstField(
+            "blockIdCurrentMonitoringMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDCURRENTMONITORINGMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    long currentMonitoringMax =
+        readSimpleField(
+            "currentMonitoringMax",
+            readUnsignedLong(readBuffer, 24),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdCurrentMonitoringValue =
+        readConstField(
+            "blockIdCurrentMonitoringValue",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDCURRENTMONITORINGVALUE,
+            WithOption.WithEncoding("ASCII"));
+
+    long currentMonitoringValue =
+        readSimpleField(
+            "currentMonitoringValue",
+            readUnsignedLong(readBuffer, 24),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdSelfTapMin =
+        readConstField(
+            "blockIdSelfTapMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDSELFTAPMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger selfTapMin =
+        readSimpleField(
+            "selfTapMin", readUnsignedBigInteger(readBuffer, 48), WithOption.WithEncoding("ASCII"));
+
+    int blockIdSelfTapMax =
+        readConstField(
+            "blockIdSelfTapMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDSELFTAPMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger selfTapMax =
+        readSimpleField(
+            "selfTapMax", readUnsignedBigInteger(readBuffer, 48), WithOption.WithEncoding("ASCII"));
+
+    int blockIdSelfTapTorque =
+        readConstField(
+            "blockIdSelfTapTorque",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDSELFTAPTORQUE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger selfTapTorque =
+        readSimpleField(
+            "selfTapTorque",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorqueMonitoringMin =
+        readConstField(
+            "blockIdPrevailTorqueMonitoringMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDPREVAILTORQUEMONITORINGMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger prevailTorqueMonitoringMin =
+        readSimpleField(
+            "prevailTorqueMonitoringMin",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorqueMonitoringMax =
+        readConstField(
+            "blockIdPrevailTorqueMonitoringMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDPREVAILTORQUEMONITORINGMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger prevailTorqueMonitoringMax =
+        readSimpleField(
+            "prevailTorqueMonitoringMax",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorque =
+        readConstField(
+            "blockIdPrevailTorque",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDPREVAILTORQUE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger prevailTorque =
+        readSimpleField(
+            "prevailTorque",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTighteningId =
+        readConstField(
+            "blockIdTighteningId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTIGHTENINGID,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger tighteningId =
+        readSimpleField(
+            "tighteningId",
+            readUnsignedBigInteger(readBuffer, 80),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobSequenceNumber =
+        readConstField(
+            "blockIdJobSequenceNumber",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDJOBSEQUENCENUMBER,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger jobSequenceNumber =
+        readSimpleField(
+            "jobSequenceNumber",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdSyncTighteningId =
+        readConstField(
+            "blockIdSyncTighteningId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDSYNCTIGHTENINGID,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger syncTighteningId =
+        readSimpleField(
+            "syncTighteningId",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdToolSerialNumber =
+        readConstField(
+            "blockIdToolSerialNumber",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTOOLSERIALNUMBER,
+            WithOption.WithEncoding("ASCII"));
+
+    String toolSerialNumber =
+        readSimpleField(
+            "toolSerialNumber", readString(readBuffer, 112), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTimeStamp =
+        readConstField(
+            "blockIdTimeStamp",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2.BLOCKIDTIMESTAMP,
+            WithOption.WithEncoding("ASCII"));
+
+    String timeStamp =
+        readSimpleField("timeStamp", readString(readBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    int blockIdDateTimeOfLastChangeInParameterSetSettings =
+        readConstField(
+            "blockIdDateTimeOfLastChangeInParameterSetSettings",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev2
+                .BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS,
+            WithOption.WithEncoding("ASCII"));
+
+    String dateTimeOfLastChangeIndParameterSetSettings =
+        readSimpleField(
+            "dateTimeOfLastChangeIndParameterSetSettings",
+            readString(readBuffer, 152),
+            WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageLastTighteningResultDataRev2");
+    // Create the instance
+    return new OpenProtocolMessageLastTighteningResultDataRev2BuilderImpl(
+        cellId,
+        channelId,
+        torqueControllerName,
+        vinNumber,
+        jobId,
+        parameterSetNumber,
+        strategy,
+        batchSize,
+        batchCounter,
+        tighteningStatus,
+        batchStatus,
+        torqueStatus,
+        angleStatus,
+        rundownAngleStatus,
+        currentMonitoringStatus,
+        selfTapStatus,
+        prevailTorqueMonitoringStatus,
+        prevailTorqueCompensateStatus,
+        torqueMinLimit,
+        torqueMaxLimit,
+        torqueFinalTarget,
+        torque,
+        angleMin,
+        angleMax,
+        finalAngleTarget,
+        angle,
+        rundownAngleMin,
+        rundownAngleMax,
+        rundownAngle,
+        currentMonitoringMin,
+        currentMonitoringMax,
+        currentMonitoringValue,
+        selfTapMin,
+        selfTapMax,
+        selfTapTorque,
+        prevailTorqueMonitoringMin,
+        prevailTorqueMonitoringMax,
+        prevailTorque,
+        tighteningId,
+        jobSequenceNumber,
+        syncTighteningId,
+        toolSerialNumber,
+        timeStamp,
+        dateTimeOfLastChangeIndParameterSetSettings);
+  }
+
+  public static class OpenProtocolMessageLastTighteningResultDataRev2BuilderImpl
+      implements OpenProtocolMessageLastTighteningResultData
+          .OpenProtocolMessageLastTighteningResultDataBuilder {
+    private final long cellId;
+    private final int channelId;
+    private final String torqueControllerName;
+    private final String vinNumber;
+    private final long jobId;
+    private final long parameterSetNumber;
+    private final Strategy strategy;
+    private final long batchSize;
+    private final long batchCounter;
+    private final TighteningStatus tighteningStatus;
+    private final BatchStatus batchStatus;
+    private final Status torqueStatus;
+    private final Status angleStatus;
+    private final Status rundownAngleStatus;
+    private final Status currentMonitoringStatus;
+    private final Status selfTapStatus;
+    private final Status prevailTorqueMonitoringStatus;
+    private final Status prevailTorqueCompensateStatus;
+    private final BigInteger torqueMinLimit;
+    private final BigInteger torqueMaxLimit;
+    private final BigInteger torqueFinalTarget;
+    private final BigInteger torque;
+    private final BigInteger angleMin;
+    private final BigInteger angleMax;
+    private final BigInteger finalAngleTarget;
+    private final BigInteger angle;
+    private final BigInteger rundownAngleMin;
+    private final BigInteger rundownAngleMax;
+    private final BigInteger rundownAngle;
+    private final long currentMonitoringMin;
+    private final long currentMonitoringMax;
+    private final long currentMonitoringValue;
+    private final BigInteger selfTapMin;
+    private final BigInteger selfTapMax;
+    private final BigInteger selfTapTorque;
+    private final BigInteger prevailTorqueMonitoringMin;
+    private final BigInteger prevailTorqueMonitoringMax;
+    private final BigInteger prevailTorque;
+    private final BigInteger tighteningId;
+    private final BigInteger jobSequenceNumber;
+    private final BigInteger syncTighteningId;
+    private final String toolSerialNumber;
+    private final String timeStamp;
+    private final String dateTimeOfLastChangeIndParameterSetSettings;
+
+    public OpenProtocolMessageLastTighteningResultDataRev2BuilderImpl(
+        long cellId,
+        int channelId,
+        String torqueControllerName,
+        String vinNumber,
+        long jobId,
+        long parameterSetNumber,
+        Strategy strategy,
+        long batchSize,
+        long batchCounter,
+        TighteningStatus tighteningStatus,
+        BatchStatus batchStatus,
+        Status torqueStatus,
+        Status angleStatus,
+        Status rundownAngleStatus,
+        Status currentMonitoringStatus,
+        Status selfTapStatus,
+        Status prevailTorqueMonitoringStatus,
+        Status prevailTorqueCompensateStatus,
+        BigInteger torqueMinLimit,
+        BigInteger torqueMaxLimit,
+        BigInteger torqueFinalTarget,
+        BigInteger torque,
+        BigInteger angleMin,
+        BigInteger angleMax,
+        BigInteger finalAngleTarget,
+        BigInteger angle,
+        BigInteger rundownAngleMin,
+        BigInteger rundownAngleMax,
+        BigInteger rundownAngle,
+        long currentMonitoringMin,
+        long currentMonitoringMax,
+        long currentMonitoringValue,
+        BigInteger selfTapMin,
+        BigInteger selfTapMax,
+        BigInteger selfTapTorque,
+        BigInteger prevailTorqueMonitoringMin,
+        BigInteger prevailTorqueMonitoringMax,
+        BigInteger prevailTorque,
+        BigInteger tighteningId,
+        BigInteger jobSequenceNumber,
+        BigInteger syncTighteningId,
+        String toolSerialNumber,
+        String timeStamp,
+        String dateTimeOfLastChangeIndParameterSetSettings) {
+      this.cellId = cellId;
+      this.channelId = channelId;
+      this.torqueControllerName = torqueControllerName;
+      this.vinNumber = vinNumber;
+      this.jobId = jobId;
+      this.parameterSetNumber = parameterSetNumber;
+      this.strategy = strategy;
+      this.batchSize = batchSize;
+      this.batchCounter = batchCounter;
+      this.tighteningStatus = tighteningStatus;
+      this.batchStatus = batchStatus;
+      this.torqueStatus = torqueStatus;
+      this.angleStatus = angleStatus;
+      this.rundownAngleStatus = rundownAngleStatus;
+      this.currentMonitoringStatus = currentMonitoringStatus;
+      this.selfTapStatus = selfTapStatus;
+      this.prevailTorqueMonitoringStatus = prevailTorqueMonitoringStatus;
+      this.prevailTorqueCompensateStatus = prevailTorqueCompensateStatus;
+      this.torqueMinLimit = torqueMinLimit;
+      this.torqueMaxLimit = torqueMaxLimit;
+      this.torqueFinalTarget = torqueFinalTarget;
+      this.torque = torque;
+      this.angleMin = angleMin;
+      this.angleMax = angleMax;
+      this.finalAngleTarget = finalAngleTarget;
+      this.angle = angle;
+      this.rundownAngleMin = rundownAngleMin;
+      this.rundownAngleMax = rundownAngleMax;
+      this.rundownAngle = rundownAngle;
+      this.currentMonitoringMin = currentMonitoringMin;
+      this.currentMonitoringMax = currentMonitoringMax;
+      this.currentMonitoringValue = currentMonitoringValue;
+      this.selfTapMin = selfTapMin;
+      this.selfTapMax = selfTapMax;
+      this.selfTapTorque = selfTapTorque;
+      this.prevailTorqueMonitoringMin = prevailTorqueMonitoringMin;
+      this.prevailTorqueMonitoringMax = prevailTorqueMonitoringMax;
+      this.prevailTorque = prevailTorque;
+      this.tighteningId = tighteningId;
+      this.jobSequenceNumber = jobSequenceNumber;
+      this.syncTighteningId = syncTighteningId;
+      this.toolSerialNumber = toolSerialNumber;
+      this.timeStamp = timeStamp;
+      this.dateTimeOfLastChangeIndParameterSetSettings =
+          dateTimeOfLastChangeIndParameterSetSettings;
+    }
+
+    public OpenProtocolMessageLastTighteningResultDataRev2 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageLastTighteningResultDataRev2
+          openProtocolMessageLastTighteningResultDataRev2 =
+              new OpenProtocolMessageLastTighteningResultDataRev2(
+                  midRevision,
+                  noAckFlag,
+                  targetStationId,
+                  targetSpindleId,
+                  sequenceNumber,
+                  numberOfMessageParts,
+                  messagePartNumber,
+                  cellId,
+                  channelId,
+                  torqueControllerName,
+                  vinNumber,
+                  jobId,
+                  parameterSetNumber,
+                  strategy,
+                  batchSize,
+                  batchCounter,
+                  tighteningStatus,
+                  batchStatus,
+                  torqueStatus,
+                  angleStatus,
+                  rundownAngleStatus,
+                  currentMonitoringStatus,
+                  selfTapStatus,
+                  prevailTorqueMonitoringStatus,
+                  prevailTorqueCompensateStatus,
+                  torqueMinLimit,
+                  torqueMaxLimit,
+                  torqueFinalTarget,
+                  torque,
+                  angleMin,
+                  angleMax,
+                  finalAngleTarget,
+                  angle,
+                  rundownAngleMin,
+                  rundownAngleMax,
+                  rundownAngle,
+                  currentMonitoringMin,
+                  currentMonitoringMax,
+                  currentMonitoringValue,
+                  selfTapMin,
+                  selfTapMax,
+                  selfTapTorque,
+                  prevailTorqueMonitoringMin,
+                  prevailTorqueMonitoringMax,
+                  prevailTorque,
+                  tighteningId,
+                  jobSequenceNumber,
+                  syncTighteningId,
+                  toolSerialNumber,
+                  timeStamp,
+                  dateTimeOfLastChangeIndParameterSetSettings);
+      return openProtocolMessageLastTighteningResultDataRev2;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageLastTighteningResultDataRev2)) {
+      return false;
+    }
+    OpenProtocolMessageLastTighteningResultDataRev2 that =
+        (OpenProtocolMessageLastTighteningResultDataRev2) o;
+    return (getCellId() == that.getCellId())
+        && (getChannelId() == that.getChannelId())
+        && (getTorqueControllerName() == that.getTorqueControllerName())
+        && (getVinNumber() == that.getVinNumber())
+        && (getJobId() == that.getJobId())
+        && (getParameterSetNumber() == that.getParameterSetNumber())
+        && (getStrategy() == that.getStrategy())
+        && (getBatchSize() == that.getBatchSize())
+        && (getBatchCounter() == that.getBatchCounter())
+        && (getTighteningStatus() == that.getTighteningStatus())
+        && (getBatchStatus() == that.getBatchStatus())
+        && (getTorqueStatus() == that.getTorqueStatus())
+        && (getAngleStatus() == that.getAngleStatus())
+        && (getRundownAngleStatus() == that.getRundownAngleStatus())
+        && (getCurrentMonitoringStatus() == that.getCurrentMonitoringStatus())
+        && (getSelfTapStatus() == that.getSelfTapStatus())
+        && (getPrevailTorqueMonitoringStatus() == that.getPrevailTorqueMonitoringStatus())
+        && (getPrevailTorqueCompensateStatus() == that.getPrevailTorqueCompensateStatus())
+        && (getTorqueMinLimit() == that.getTorqueMinLimit())
+        && (getTorqueMaxLimit() == that.getTorqueMaxLimit())
+        && (getTorqueFinalTarget() == that.getTorqueFinalTarget())
+        && (getTorque() == that.getTorque())
+        && (getAngleMin() == that.getAngleMin())
+        && (getAngleMax() == that.getAngleMax())
+        && (getFinalAngleTarget() == that.getFinalAngleTarget())
+        && (getAngle() == that.getAngle())
+        && (getRundownAngleMin() == that.getRundownAngleMin())
+        && (getRundownAngleMax() == that.getRundownAngleMax())
+        && (getRundownAngle() == that.getRundownAngle())
+        && (getCurrentMonitoringMin() == that.getCurrentMonitoringMin())
+        && (getCurrentMonitoringMax() == that.getCurrentMonitoringMax())
+        && (getCurrentMonitoringValue() == that.getCurrentMonitoringValue())
+        && (getSelfTapMin() == that.getSelfTapMin())
+        && (getSelfTapMax() == that.getSelfTapMax())
+        && (getSelfTapTorque() == that.getSelfTapTorque())
+        && (getPrevailTorqueMonitoringMin() == that.getPrevailTorqueMonitoringMin())
+        && (getPrevailTorqueMonitoringMax() == that.getPrevailTorqueMonitoringMax())
+        && (getPrevailTorque() == that.getPrevailTorque())
+        && (getTighteningId() == that.getTighteningId())
+        && (getJobSequenceNumber() == that.getJobSequenceNumber())
+        && (getSyncTighteningId() == that.getSyncTighteningId())
+        && (getToolSerialNumber() == that.getToolSerialNumber())
+        && (getTimeStamp() == that.getTimeStamp())
+        && (getDateTimeOfLastChangeIndParameterSetSettings()
+            == that.getDateTimeOfLastChangeIndParameterSetSettings())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getCellId(),
+        getChannelId(),
+        getTorqueControllerName(),
+        getVinNumber(),
+        getJobId(),
+        getParameterSetNumber(),
+        getStrategy(),
+        getBatchSize(),
+        getBatchCounter(),
+        getTighteningStatus(),
+        getBatchStatus(),
+        getTorqueStatus(),
+        getAngleStatus(),
+        getRundownAngleStatus(),
+        getCurrentMonitoringStatus(),
+        getSelfTapStatus(),
+        getPrevailTorqueMonitoringStatus(),
+        getPrevailTorqueCompensateStatus(),
+        getTorqueMinLimit(),
+        getTorqueMaxLimit(),
+        getTorqueFinalTarget(),
+        getTorque(),
+        getAngleMin(),
+        getAngleMax(),
+        getFinalAngleTarget(),
+        getAngle(),
+        getRundownAngleMin(),
+        getRundownAngleMax(),
+        getRundownAngle(),
+        getCurrentMonitoringMin(),
+        getCurrentMonitoringMax(),
+        getCurrentMonitoringValue(),
+        getSelfTapMin(),
+        getSelfTapMax(),
+        getSelfTapTorque(),
+        getPrevailTorqueMonitoringMin(),
+        getPrevailTorqueMonitoringMax(),
+        getPrevailTorque(),
+        getTighteningId(),
+        getJobSequenceNumber(),
+        getSyncTighteningId(),
+        getToolSerialNumber(),
+        getTimeStamp(),
+        getDateTimeOfLastChangeIndParameterSetSettings());
+  }
+
+  @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/OpenProtocolMessageLastTighteningResultDataRev3.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev3.java
new file mode 100644
index 0000000000..b9fd7b5d9a
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev3.java
@@ -0,0 +1,2643 @@
+/*
+ * 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 OpenProtocolMessageLastTighteningResultDataRev3
+    extends OpenProtocolMessageLastTighteningResultData implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 3;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDCELLID = 1;
+  public static final Integer BLOCKIDCHANNELID = 2;
+  public static final Integer BLOCKIDTORQUECONTROLLERNAME = 3;
+  public static final Integer BLOCKIDVINNUMBER = 4;
+  public static final Integer BLOCKIDJOBID = 5;
+  public static final Integer BLOCKIDPARAMETERSETNUMBER = 6;
+  public static final Integer BLOCKIDSTRATEGY = 7;
+  public static final Integer BLOCKIDSTRATEGYOPTIONS = 8;
+  public static final Integer BLOCKIDBATCHSIZE = 9;
+  public static final Integer BLOCKIDBATCHCOUNTER = 10;
+  public static final Integer BLOCKIDTIGHTENINGSTATUS = 11;
+  public static final Integer BLOCKIDBATCHSTATUS = 12;
+  public static final Integer BLOCKIDTORQUESTATUS = 13;
+  public static final Integer BLOCKIDANGLESTATUS = 14;
+  public static final Integer BLOCKIDRUNDOWNANGLESTATUS = 15;
+  public static final Integer BLOCKIDCURRENTMONITORINGSTATUS = 16;
+  public static final Integer BLOCKIDSELFTAPSTATUS = 17;
+  public static final Integer BLOCKIDPREVAILTORQUEMONITORINGSTATUS = 18;
+  public static final Integer BLOCKIDPREVAILTORQUECOMPENSATESTATUS = 19;
+  public static final Integer BLOCKIDTIGHTENINGERRORSTATUS = 20;
+  public static final Integer BLOCKIDTORQUEMINLIMIT = 21;
+  public static final Integer BLOCKIDTORQUEMAXLIMIT = 22;
+  public static final Integer BLOCKIDTORQUEFINALTARGET = 23;
+  public static final Integer BLOCKIDTORQUE = 24;
+  public static final Integer BLOCKIDANGLEMIN = 25;
+  public static final Integer BLOCKIDANGLEMAX = 26;
+  public static final Integer BLOCKIDFINALANGLETARGET = 27;
+  public static final Integer BLOCKIDANGLE = 28;
+  public static final Integer BLOCKIDRUNDOWNANGLEMIN = 29;
+  public static final Integer BLOCKIDRUNDOWNANGLEMAX = 30;
+  public static final Integer BLOCKIDRUNDOWNANGLE = 31;
+  public static final Integer BLOCKIDCURRENTMONITORINGMIN = 32;
+  public static final Integer BLOCKIDCURRENTMONITORINGMAX = 33;
+  public static final Integer BLOCKIDCURRENTMONITORINGVALUE = 34;
+  public static final Integer BLOCKIDSELFTAPMIN = 35;
+  public static final Integer BLOCKIDSELFTAPMAX = 36;
+  public static final Integer BLOCKIDSELFTAPTORQUE = 37;
+  public static final Integer BLOCKIDPREVAILTORQUEMONITORINGMIN = 38;
+  public static final Integer BLOCKIDPREVAILTORQUEMONITORINGMAX = 39;
+  public static final Integer BLOCKIDPREVAILTORQUE = 40;
+  public static final Integer BLOCKIDTIGHTENINGID = 41;
+  public static final Integer BLOCKIDJOBSEQUENCENUMBER = 42;
+  public static final Integer BLOCKIDSYNCTIGHTENINGID = 43;
+  public static final Integer BLOCKIDTOOLSERIALNUMBER = 44;
+  public static final Integer BLOCKIDTIMESTAMP = 45;
+  public static final Integer BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS = 46;
+  public static final Integer BLOCKIDPARAMETERSETNAME = 47;
+  public static final Integer BLOCKIDTORQUEVALUEUNIT = 48;
+  public static final Integer BLOCKIDRESULTTYPE = 49;
+
+  // Properties.
+  protected final long cellId;
+  protected final int channelId;
+  protected final String torqueControllerName;
+  protected final String vinNumber;
+  protected final long jobId;
+  protected final long parameterSetNumber;
+  protected final Strategy strategy;
+  protected final long batchSize;
+  protected final long batchCounter;
+  protected final TighteningStatus tighteningStatus;
+  protected final BatchStatus batchStatus;
+  protected final Status torqueStatus;
+  protected final Status angleStatus;
+  protected final Status rundownAngleStatus;
+  protected final Status currentMonitoringStatus;
+  protected final Status selfTapStatus;
+  protected final Status prevailTorqueMonitoringStatus;
+  protected final Status prevailTorqueCompensateStatus;
+  protected final BigInteger torqueMinLimit;
+  protected final BigInteger torqueMaxLimit;
+  protected final BigInteger torqueFinalTarget;
+  protected final BigInteger torque;
+  protected final BigInteger angleMin;
+  protected final BigInteger angleMax;
+  protected final BigInteger finalAngleTarget;
+  protected final BigInteger angle;
+  protected final BigInteger rundownAngleMin;
+  protected final BigInteger rundownAngleMax;
+  protected final BigInteger rundownAngle;
+  protected final long currentMonitoringMin;
+  protected final long currentMonitoringMax;
+  protected final long currentMonitoringValue;
+  protected final BigInteger selfTapMin;
+  protected final BigInteger selfTapMax;
+  protected final BigInteger selfTapTorque;
+  protected final BigInteger prevailTorqueMonitoringMin;
+  protected final BigInteger prevailTorqueMonitoringMax;
+  protected final BigInteger prevailTorque;
+  protected final BigInteger tighteningId;
+  protected final BigInteger jobSequenceNumber;
+  protected final BigInteger syncTighteningId;
+  protected final String toolSerialNumber;
+  protected final String timeStamp;
+  protected final String dateTimeOfLastChangeIndParameterSetSettings;
+  protected final String parameterSetName;
+  protected final Unit torqueValueUnit;
+  protected final ResultType resultType;
+
+  public OpenProtocolMessageLastTighteningResultDataRev3(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      long cellId,
+      int channelId,
+      String torqueControllerName,
+      String vinNumber,
+      long jobId,
+      long parameterSetNumber,
+      Strategy strategy,
+      long batchSize,
+      long batchCounter,
+      TighteningStatus tighteningStatus,
+      BatchStatus batchStatus,
+      Status torqueStatus,
+      Status angleStatus,
+      Status rundownAngleStatus,
+      Status currentMonitoringStatus,
+      Status selfTapStatus,
+      Status prevailTorqueMonitoringStatus,
+      Status prevailTorqueCompensateStatus,
+      BigInteger torqueMinLimit,
+      BigInteger torqueMaxLimit,
+      BigInteger torqueFinalTarget,
+      BigInteger torque,
+      BigInteger angleMin,
+      BigInteger angleMax,
+      BigInteger finalAngleTarget,
+      BigInteger angle,
+      BigInteger rundownAngleMin,
+      BigInteger rundownAngleMax,
+      BigInteger rundownAngle,
+      long currentMonitoringMin,
+      long currentMonitoringMax,
+      long currentMonitoringValue,
+      BigInteger selfTapMin,
+      BigInteger selfTapMax,
+      BigInteger selfTapTorque,
+      BigInteger prevailTorqueMonitoringMin,
+      BigInteger prevailTorqueMonitoringMax,
+      BigInteger prevailTorque,
+      BigInteger tighteningId,
+      BigInteger jobSequenceNumber,
+      BigInteger syncTighteningId,
+      String toolSerialNumber,
+      String timeStamp,
+      String dateTimeOfLastChangeIndParameterSetSettings,
+      String parameterSetName,
+      Unit torqueValueUnit,
+      ResultType resultType) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.cellId = cellId;
+    this.channelId = channelId;
+    this.torqueControllerName = torqueControllerName;
+    this.vinNumber = vinNumber;
+    this.jobId = jobId;
+    this.parameterSetNumber = parameterSetNumber;
+    this.strategy = strategy;
+    this.batchSize = batchSize;
+    this.batchCounter = batchCounter;
+    this.tighteningStatus = tighteningStatus;
+    this.batchStatus = batchStatus;
+    this.torqueStatus = torqueStatus;
+    this.angleStatus = angleStatus;
+    this.rundownAngleStatus = rundownAngleStatus;
+    this.currentMonitoringStatus = currentMonitoringStatus;
+    this.selfTapStatus = selfTapStatus;
+    this.prevailTorqueMonitoringStatus = prevailTorqueMonitoringStatus;
+    this.prevailTorqueCompensateStatus = prevailTorqueCompensateStatus;
+    this.torqueMinLimit = torqueMinLimit;
+    this.torqueMaxLimit = torqueMaxLimit;
+    this.torqueFinalTarget = torqueFinalTarget;
+    this.torque = torque;
+    this.angleMin = angleMin;
+    this.angleMax = angleMax;
+    this.finalAngleTarget = finalAngleTarget;
+    this.angle = angle;
+    this.rundownAngleMin = rundownAngleMin;
+    this.rundownAngleMax = rundownAngleMax;
+    this.rundownAngle = rundownAngle;
+    this.currentMonitoringMin = currentMonitoringMin;
+    this.currentMonitoringMax = currentMonitoringMax;
+    this.currentMonitoringValue = currentMonitoringValue;
+    this.selfTapMin = selfTapMin;
+    this.selfTapMax = selfTapMax;
+    this.selfTapTorque = selfTapTorque;
+    this.prevailTorqueMonitoringMin = prevailTorqueMonitoringMin;
+    this.prevailTorqueMonitoringMax = prevailTorqueMonitoringMax;
+    this.prevailTorque = prevailTorque;
+    this.tighteningId = tighteningId;
+    this.jobSequenceNumber = jobSequenceNumber;
+    this.syncTighteningId = syncTighteningId;
+    this.toolSerialNumber = toolSerialNumber;
+    this.timeStamp = timeStamp;
+    this.dateTimeOfLastChangeIndParameterSetSettings = dateTimeOfLastChangeIndParameterSetSettings;
+    this.parameterSetName = parameterSetName;
+    this.torqueValueUnit = torqueValueUnit;
+    this.resultType = resultType;
+  }
+
+  public long getCellId() {
+    return cellId;
+  }
+
+  public int getChannelId() {
+    return channelId;
+  }
+
+  public String getTorqueControllerName() {
+    return torqueControllerName;
+  }
+
+  public String getVinNumber() {
+    return vinNumber;
+  }
+
+  public long getJobId() {
+    return jobId;
+  }
+
+  public long getParameterSetNumber() {
+    return parameterSetNumber;
+  }
+
+  public Strategy getStrategy() {
+    return strategy;
+  }
+
+  public long getBatchSize() {
+    return batchSize;
+  }
+
+  public long getBatchCounter() {
+    return batchCounter;
+  }
+
+  public TighteningStatus getTighteningStatus() {
+    return tighteningStatus;
+  }
+
+  public BatchStatus getBatchStatus() {
+    return batchStatus;
+  }
+
+  public Status getTorqueStatus() {
+    return torqueStatus;
+  }
+
+  public Status getAngleStatus() {
+    return angleStatus;
+  }
+
+  public Status getRundownAngleStatus() {
+    return rundownAngleStatus;
+  }
+
+  public Status getCurrentMonitoringStatus() {
+    return currentMonitoringStatus;
+  }
+
+  public Status getSelfTapStatus() {
+    return selfTapStatus;
+  }
+
+  public Status getPrevailTorqueMonitoringStatus() {
+    return prevailTorqueMonitoringStatus;
+  }
+
+  public Status getPrevailTorqueCompensateStatus() {
+    return prevailTorqueCompensateStatus;
+  }
+
+  public BigInteger getTorqueMinLimit() {
+    return torqueMinLimit;
+  }
+
+  public BigInteger getTorqueMaxLimit() {
+    return torqueMaxLimit;
+  }
+
+  public BigInteger getTorqueFinalTarget() {
+    return torqueFinalTarget;
+  }
+
+  public BigInteger getTorque() {
+    return torque;
+  }
+
+  public BigInteger getAngleMin() {
+    return angleMin;
+  }
+
+  public BigInteger getAngleMax() {
+    return angleMax;
+  }
+
+  public BigInteger getFinalAngleTarget() {
+    return finalAngleTarget;
+  }
+
+  public BigInteger getAngle() {
+    return angle;
+  }
+
+  public BigInteger getRundownAngleMin() {
+    return rundownAngleMin;
+  }
+
+  public BigInteger getRundownAngleMax() {
+    return rundownAngleMax;
+  }
+
+  public BigInteger getRundownAngle() {
+    return rundownAngle;
+  }
+
+  public long getCurrentMonitoringMin() {
+    return currentMonitoringMin;
+  }
+
+  public long getCurrentMonitoringMax() {
+    return currentMonitoringMax;
+  }
+
+  public long getCurrentMonitoringValue() {
+    return currentMonitoringValue;
+  }
+
+  public BigInteger getSelfTapMin() {
+    return selfTapMin;
+  }
+
+  public BigInteger getSelfTapMax() {
+    return selfTapMax;
+  }
+
+  public BigInteger getSelfTapTorque() {
+    return selfTapTorque;
+  }
+
+  public BigInteger getPrevailTorqueMonitoringMin() {
+    return prevailTorqueMonitoringMin;
+  }
+
+  public BigInteger getPrevailTorqueMonitoringMax() {
+    return prevailTorqueMonitoringMax;
+  }
+
+  public BigInteger getPrevailTorque() {
+    return prevailTorque;
+  }
+
+  public BigInteger getTighteningId() {
+    return tighteningId;
+  }
+
+  public BigInteger getJobSequenceNumber() {
+    return jobSequenceNumber;
+  }
+
+  public BigInteger getSyncTighteningId() {
+    return syncTighteningId;
+  }
+
+  public String getToolSerialNumber() {
+    return toolSerialNumber;
+  }
+
+  public String getTimeStamp() {
+    return timeStamp;
+  }
+
+  public String getDateTimeOfLastChangeIndParameterSetSettings() {
+    return dateTimeOfLastChangeIndParameterSetSettings;
+  }
+
+  public String getParameterSetName() {
+    return parameterSetName;
+  }
+
+  public Unit getTorqueValueUnit() {
+    return torqueValueUnit;
+  }
+
+  public ResultType getResultType() {
+    return resultType;
+  }
+
+  public int getBlockIdCellId() {
+    return BLOCKIDCELLID;
+  }
+
+  public int getBlockIdChannelId() {
+    return BLOCKIDCHANNELID;
+  }
+
+  public int getBlockIdTorqueControllerName() {
+    return BLOCKIDTORQUECONTROLLERNAME;
+  }
+
+  public int getBlockIdVinNumber() {
+    return BLOCKIDVINNUMBER;
+  }
+
+  public int getBlockIdJobId() {
+    return BLOCKIDJOBID;
+  }
+
+  public int getBlockIdParameterSetNumber() {
+    return BLOCKIDPARAMETERSETNUMBER;
+  }
+
+  public int getBlockIdStrategy() {
+    return BLOCKIDSTRATEGY;
+  }
+
+  public int getBlockIdStrategyOptions() {
+    return BLOCKIDSTRATEGYOPTIONS;
+  }
+
+  public int getBlockIdBatchSize() {
+    return BLOCKIDBATCHSIZE;
+  }
+
+  public int getBlockIdBatchCounter() {
+    return BLOCKIDBATCHCOUNTER;
+  }
+
+  public int getBlockIdTighteningStatus() {
+    return BLOCKIDTIGHTENINGSTATUS;
+  }
+
+  public int getBlockIdBatchStatus() {
+    return BLOCKIDBATCHSTATUS;
+  }
+
+  public int getBlockIdTorqueStatus() {
+    return BLOCKIDTORQUESTATUS;
+  }
+
+  public int getBlockIdAngleStatus() {
+    return BLOCKIDANGLESTATUS;
+  }
+
+  public int getBlockIdRundownAngleStatus() {
+    return BLOCKIDRUNDOWNANGLESTATUS;
+  }
+
+  public int getBlockIdCurrentMonitoringStatus() {
+    return BLOCKIDCURRENTMONITORINGSTATUS;
+  }
+
+  public int getBlockIdSelfTapStatus() {
+    return BLOCKIDSELFTAPSTATUS;
+  }
+
+  public int getBlockIdPrevailTorqueMonitoringStatus() {
+    return BLOCKIDPREVAILTORQUEMONITORINGSTATUS;
+  }
+
+  public int getBlockIdPrevailTorqueCompensateStatus() {
+    return BLOCKIDPREVAILTORQUECOMPENSATESTATUS;
+  }
+
+  public int getBlockIdTighteningErrorStatus() {
+    return BLOCKIDTIGHTENINGERRORSTATUS;
+  }
+
+  public int getBlockIdTorqueMinLimit() {
+    return BLOCKIDTORQUEMINLIMIT;
+  }
+
+  public int getBlockIdTorqueMaxLimit() {
+    return BLOCKIDTORQUEMAXLIMIT;
+  }
+
+  public int getBlockIdTorqueFinalTarget() {
+    return BLOCKIDTORQUEFINALTARGET;
+  }
+
+  public int getBlockIdTorque() {
+    return BLOCKIDTORQUE;
+  }
+
+  public int getBlockIdAngleMin() {
+    return BLOCKIDANGLEMIN;
+  }
+
+  public int getBlockIdAngleMax() {
+    return BLOCKIDANGLEMAX;
+  }
+
+  public int getBlockIdFinalAngleTarget() {
+    return BLOCKIDFINALANGLETARGET;
+  }
+
+  public int getBlockIdAngle() {
+    return BLOCKIDANGLE;
+  }
+
+  public int getBlockIdRundownAngleMin() {
+    return BLOCKIDRUNDOWNANGLEMIN;
+  }
+
+  public int getBlockIdRundownAngleMax() {
+    return BLOCKIDRUNDOWNANGLEMAX;
+  }
+
+  public int getBlockIdRundownAngle() {
+    return BLOCKIDRUNDOWNANGLE;
+  }
+
+  public int getBlockIdCurrentMonitoringMin() {
+    return BLOCKIDCURRENTMONITORINGMIN;
+  }
+
+  public int getBlockIdCurrentMonitoringMax() {
+    return BLOCKIDCURRENTMONITORINGMAX;
+  }
+
+  public int getBlockIdCurrentMonitoringValue() {
+    return BLOCKIDCURRENTMONITORINGVALUE;
+  }
+
+  public int getBlockIdSelfTapMin() {
+    return BLOCKIDSELFTAPMIN;
+  }
+
+  public int getBlockIdSelfTapMax() {
+    return BLOCKIDSELFTAPMAX;
+  }
+
+  public int getBlockIdSelfTapTorque() {
+    return BLOCKIDSELFTAPTORQUE;
+  }
+
+  public int getBlockIdPrevailTorqueMonitoringMin() {
+    return BLOCKIDPREVAILTORQUEMONITORINGMIN;
+  }
+
+  public int getBlockIdPrevailTorqueMonitoringMax() {
+    return BLOCKIDPREVAILTORQUEMONITORINGMAX;
+  }
+
+  public int getBlockIdPrevailTorque() {
+    return BLOCKIDPREVAILTORQUE;
+  }
+
+  public int getBlockIdTighteningId() {
+    return BLOCKIDTIGHTENINGID;
+  }
+
+  public int getBlockIdJobSequenceNumber() {
+    return BLOCKIDJOBSEQUENCENUMBER;
+  }
+
+  public int getBlockIdSyncTighteningId() {
+    return BLOCKIDSYNCTIGHTENINGID;
+  }
+
+  public int getBlockIdToolSerialNumber() {
+    return BLOCKIDTOOLSERIALNUMBER;
+  }
+
+  public int getBlockIdTimeStamp() {
+    return BLOCKIDTIMESTAMP;
+  }
+
+  public int getBlockIdDateTimeOfLastChangeInParameterSetSettings() {
+    return BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS;
+  }
+
+  public int getBlockIdParameterSetName() {
+    return BLOCKIDPARAMETERSETNAME;
+  }
+
+  public int getBlockIdTorqueValueUnit() {
+    return BLOCKIDTORQUEVALUEUNIT;
+  }
+
+  public int getBlockIdResultType() {
+    return BLOCKIDRESULTTYPE;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageLastTighteningResultDataChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageLastTighteningResultDataRev3");
+
+    // Const Field (blockIdCellId)
+    writeConstField(
+        "blockIdCellId",
+        BLOCKIDCELLID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (cellId)
+    writeSimpleField(
+        "cellId", cellId, writeUnsignedLong(writeBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdChannelId)
+    writeConstField(
+        "blockIdChannelId",
+        BLOCKIDCHANNELID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (channelId)
+    writeSimpleField(
+        "channelId",
+        channelId,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueControllerName)
+    writeConstField(
+        "blockIdTorqueControllerName",
+        BLOCKIDTORQUECONTROLLERNAME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueControllerName)
+    writeSimpleField(
+        "torqueControllerName",
+        torqueControllerName,
+        writeString(writeBuffer, 200),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdVinNumber)
+    writeConstField(
+        "blockIdVinNumber",
+        BLOCKIDVINNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (vinNumber)
+    writeSimpleField(
+        "vinNumber", vinNumber, writeString(writeBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    // 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 (blockIdParameterSetNumber)
+    writeConstField(
+        "blockIdParameterSetNumber",
+        BLOCKIDPARAMETERSETNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (parameterSetNumber)
+    writeSimpleField(
+        "parameterSetNumber",
+        parameterSetNumber,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdStrategy)
+    writeConstField(
+        "blockIdStrategy",
+        BLOCKIDSTRATEGY,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (strategy)
+    writeSimpleEnumField(
+        "strategy",
+        "Strategy",
+        strategy,
+        new DataWriterEnumDefault<>(
+            Strategy::getValue, Strategy::name, writeUnsignedInt(writeBuffer, 16)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdStrategyOptions)
+    writeConstField(
+        "blockIdStrategyOptions",
+        BLOCKIDSTRATEGYOPTIONS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchSize)
+    writeConstField(
+        "blockIdBatchSize",
+        BLOCKIDBATCHSIZE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchSize)
+    writeSimpleField(
+        "batchSize",
+        batchSize,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchCounter)
+    writeConstField(
+        "blockIdBatchCounter",
+        BLOCKIDBATCHCOUNTER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchCounter)
+    writeSimpleField(
+        "batchCounter",
+        batchCounter,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningStatus)
+    writeConstField(
+        "blockIdTighteningStatus",
+        BLOCKIDTIGHTENINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (tighteningStatus)
+    writeSimpleEnumField(
+        "tighteningStatus",
+        "TighteningStatus",
+        tighteningStatus,
+        new DataWriterEnumDefault<>(
+            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchStatus)
+    writeConstField(
+        "blockIdBatchStatus",
+        BLOCKIDBATCHSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchStatus)
+    writeSimpleEnumField(
+        "batchStatus",
+        "BatchStatus",
+        batchStatus,
+        new DataWriterEnumDefault<>(
+            BatchStatus::getValue, BatchStatus::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueStatus)
+    writeConstField(
+        "blockIdTorqueStatus",
+        BLOCKIDTORQUESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueStatus)
+    writeSimpleEnumField(
+        "torqueStatus",
+        "Status",
+        torqueStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleStatus)
+    writeConstField(
+        "blockIdAngleStatus",
+        BLOCKIDANGLESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleStatus)
+    writeSimpleEnumField(
+        "angleStatus",
+        "Status",
+        angleStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngleStatus)
+    writeConstField(
+        "blockIdRundownAngleStatus",
+        BLOCKIDRUNDOWNANGLESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngleStatus)
+    writeSimpleEnumField(
+        "rundownAngleStatus",
+        "Status",
+        rundownAngleStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringStatus)
+    writeConstField(
+        "blockIdCurrentMonitoringStatus",
+        BLOCKIDCURRENTMONITORINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringStatus)
+    writeSimpleEnumField(
+        "currentMonitoringStatus",
+        "Status",
+        currentMonitoringStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapStatus)
+    writeConstField(
+        "blockIdSelfTapStatus",
+        BLOCKIDSELFTAPSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapStatus)
+    writeSimpleEnumField(
+        "selfTapStatus",
+        "Status",
+        selfTapStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueMonitoringStatus)
+    writeConstField(
+        "blockIdPrevailTorqueMonitoringStatus",
+        BLOCKIDPREVAILTORQUEMONITORINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueMonitoringStatus)
+    writeSimpleEnumField(
+        "prevailTorqueMonitoringStatus",
+        "Status",
+        prevailTorqueMonitoringStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueCompensateStatus)
+    writeConstField(
+        "blockIdPrevailTorqueCompensateStatus",
+        BLOCKIDPREVAILTORQUECOMPENSATESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueCompensateStatus)
+    writeSimpleEnumField(
+        "prevailTorqueCompensateStatus",
+        "Status",
+        prevailTorqueCompensateStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningErrorStatus)
+    writeConstField(
+        "blockIdTighteningErrorStatus",
+        BLOCKIDTIGHTENINGERRORSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueMinLimit)
+    writeConstField(
+        "blockIdTorqueMinLimit",
+        BLOCKIDTORQUEMINLIMIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueMinLimit)
+    writeSimpleField(
+        "torqueMinLimit",
+        torqueMinLimit,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueMaxLimit)
+    writeConstField(
+        "blockIdTorqueMaxLimit",
+        BLOCKIDTORQUEMAXLIMIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueMaxLimit)
+    writeSimpleField(
+        "torqueMaxLimit",
+        torqueMaxLimit,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueFinalTarget)
+    writeConstField(
+        "blockIdTorqueFinalTarget",
+        BLOCKIDTORQUEFINALTARGET,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueFinalTarget)
+    writeSimpleField(
+        "torqueFinalTarget",
+        torqueFinalTarget,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorque)
+    writeConstField(
+        "blockIdTorque",
+        BLOCKIDTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torque)
+    writeSimpleField(
+        "torque",
+        torque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleMin)
+    writeConstField(
+        "blockIdAngleMin",
+        BLOCKIDANGLEMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleMin)
+    writeSimpleField(
+        "angleMin",
+        angleMin,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleMax)
+    writeConstField(
+        "blockIdAngleMax",
+        BLOCKIDANGLEMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleMax)
+    writeSimpleField(
+        "angleMax",
+        angleMax,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdFinalAngleTarget)
+    writeConstField(
+        "blockIdFinalAngleTarget",
+        BLOCKIDFINALANGLETARGET,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (finalAngleTarget)
+    writeSimpleField(
+        "finalAngleTarget",
+        finalAngleTarget,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngle)
+    writeConstField(
+        "blockIdAngle",
+        BLOCKIDANGLE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angle)
+    writeSimpleField(
+        "angle", angle, writeUnsignedBigInteger(writeBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngleMin)
+    writeConstField(
+        "blockIdRundownAngleMin",
+        BLOCKIDRUNDOWNANGLEMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngleMin)
+    writeSimpleField(
+        "rundownAngleMin",
+        rundownAngleMin,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngleMax)
+    writeConstField(
+        "blockIdRundownAngleMax",
+        BLOCKIDRUNDOWNANGLEMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngleMax)
+    writeSimpleField(
+        "rundownAngleMax",
+        rundownAngleMax,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngle)
+    writeConstField(
+        "blockIdRundownAngle",
+        BLOCKIDRUNDOWNANGLE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngle)
+    writeSimpleField(
+        "rundownAngle",
+        rundownAngle,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringMin)
+    writeConstField(
+        "blockIdCurrentMonitoringMin",
+        BLOCKIDCURRENTMONITORINGMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringMin)
+    writeSimpleField(
+        "currentMonitoringMin",
+        currentMonitoringMin,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringMax)
+    writeConstField(
+        "blockIdCurrentMonitoringMax",
+        BLOCKIDCURRENTMONITORINGMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringMax)
+    writeSimpleField(
+        "currentMonitoringMax",
+        currentMonitoringMax,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringValue)
+    writeConstField(
+        "blockIdCurrentMonitoringValue",
+        BLOCKIDCURRENTMONITORINGVALUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringValue)
+    writeSimpleField(
+        "currentMonitoringValue",
+        currentMonitoringValue,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapMin)
+    writeConstField(
+        "blockIdSelfTapMin",
+        BLOCKIDSELFTAPMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapMin)
+    writeSimpleField(
+        "selfTapMin",
+        selfTapMin,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapMax)
+    writeConstField(
+        "blockIdSelfTapMax",
+        BLOCKIDSELFTAPMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapMax)
+    writeSimpleField(
+        "selfTapMax",
+        selfTapMax,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapTorque)
+    writeConstField(
+        "blockIdSelfTapTorque",
+        BLOCKIDSELFTAPTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapTorque)
+    writeSimpleField(
+        "selfTapTorque",
+        selfTapTorque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueMonitoringMin)
+    writeConstField(
+        "blockIdPrevailTorqueMonitoringMin",
+        BLOCKIDPREVAILTORQUEMONITORINGMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueMonitoringMin)
+    writeSimpleField(
+        "prevailTorqueMonitoringMin",
+        prevailTorqueMonitoringMin,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueMonitoringMax)
+    writeConstField(
+        "blockIdPrevailTorqueMonitoringMax",
+        BLOCKIDPREVAILTORQUEMONITORINGMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueMonitoringMax)
+    writeSimpleField(
+        "prevailTorqueMonitoringMax",
+        prevailTorqueMonitoringMax,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorque)
+    writeConstField(
+        "blockIdPrevailTorque",
+        BLOCKIDPREVAILTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorque)
+    writeSimpleField(
+        "prevailTorque",
+        prevailTorque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningId)
+    writeConstField(
+        "blockIdTighteningId",
+        BLOCKIDTIGHTENINGID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (tighteningId)
+    writeSimpleField(
+        "tighteningId",
+        tighteningId,
+        writeUnsignedBigInteger(writeBuffer, 80),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobSequenceNumber)
+    writeConstField(
+        "blockIdJobSequenceNumber",
+        BLOCKIDJOBSEQUENCENUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobSequenceNumber)
+    writeSimpleField(
+        "jobSequenceNumber",
+        jobSequenceNumber,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSyncTighteningId)
+    writeConstField(
+        "blockIdSyncTighteningId",
+        BLOCKIDSYNCTIGHTENINGID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (syncTighteningId)
+    writeSimpleField(
+        "syncTighteningId",
+        syncTighteningId,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdToolSerialNumber)
+    writeConstField(
+        "blockIdToolSerialNumber",
+        BLOCKIDTOOLSERIALNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (toolSerialNumber)
+    writeSimpleField(
+        "toolSerialNumber",
+        toolSerialNumber,
+        writeString(writeBuffer, 112),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTimeStamp)
+    writeConstField(
+        "blockIdTimeStamp",
+        BLOCKIDTIMESTAMP,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (timeStamp)
+    writeSimpleField(
+        "timeStamp", timeStamp, writeString(writeBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdDateTimeOfLastChangeInParameterSetSettings)
+    writeConstField(
+        "blockIdDateTimeOfLastChangeInParameterSetSettings",
+        BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (dateTimeOfLastChangeIndParameterSetSettings)
+    writeSimpleField(
+        "dateTimeOfLastChangeIndParameterSetSettings",
+        dateTimeOfLastChangeIndParameterSetSettings,
+        writeString(writeBuffer, 152),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdParameterSetName)
+    writeConstField(
+        "blockIdParameterSetName",
+        BLOCKIDPARAMETERSETNAME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (parameterSetName)
+    writeSimpleField(
+        "parameterSetName",
+        parameterSetName,
+        writeString(writeBuffer, 200),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueValueUnit)
+    writeConstField(
+        "blockIdTorqueValueUnit",
+        BLOCKIDTORQUEVALUEUNIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueValueUnit)
+    writeSimpleEnumField(
+        "torqueValueUnit",
+        "Unit",
+        torqueValueUnit,
+        new DataWriterEnumDefault<>(Unit::getValue, Unit::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdResultType)
+    writeConstField(
+        "blockIdResultType",
+        BLOCKIDRESULTTYPE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (resultType)
+    writeSimpleEnumField(
+        "resultType",
+        "ResultType",
+        resultType,
+        new DataWriterEnumDefault<>(
+            ResultType::getValue, ResultType::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageLastTighteningResultDataRev3");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageLastTighteningResultDataRev3 _value = this;
+
+    // Const Field (blockIdCellId)
+    lengthInBits += 16;
+
+    // Simple field (cellId)
+    lengthInBits += 32;
+
+    // Const Field (blockIdChannelId)
+    lengthInBits += 16;
+
+    // Simple field (channelId)
+    lengthInBits += 16;
+
+    // Const Field (blockIdTorqueControllerName)
+    lengthInBits += 16;
+
+    // Simple field (torqueControllerName)
+    lengthInBits += 200;
+
+    // Const Field (blockIdVinNumber)
+    lengthInBits += 16;
+
+    // Simple field (vinNumber)
+    lengthInBits += 200;
+
+    // Const Field (blockIdJobId)
+    lengthInBits += 16;
+
+    // Simple field (jobId)
+    lengthInBits += 32;
+
+    // Const Field (blockIdParameterSetNumber)
+    lengthInBits += 16;
+
+    // Simple field (parameterSetNumber)
+    lengthInBits += 24;
+
+    // Const Field (blockIdStrategy)
+    lengthInBits += 16;
+
+    // Simple field (strategy)
+    lengthInBits += 16;
+
+    // Const Field (blockIdStrategyOptions)
+    lengthInBits += 16;
+
+    // Const Field (blockIdBatchSize)
+    lengthInBits += 16;
+
+    // Simple field (batchSize)
+    lengthInBits += 32;
+
+    // Const Field (blockIdBatchCounter)
+    lengthInBits += 16;
+
+    // Simple field (batchCounter)
+    lengthInBits += 32;
+
+    // Const Field (blockIdTighteningStatus)
+    lengthInBits += 16;
+
+    // Simple field (tighteningStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdBatchStatus)
+    lengthInBits += 16;
+
+    // Simple field (batchStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTorqueStatus)
+    lengthInBits += 16;
+
+    // Simple field (torqueStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdAngleStatus)
+    lengthInBits += 16;
+
+    // Simple field (angleStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdRundownAngleStatus)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngleStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdCurrentMonitoringStatus)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdSelfTapStatus)
+    lengthInBits += 16;
+
+    // Simple field (selfTapStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdPrevailTorqueMonitoringStatus)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueMonitoringStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdPrevailTorqueCompensateStatus)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueCompensateStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTighteningErrorStatus)
+    lengthInBits += 16;
+
+    // Const Field (blockIdTorqueMinLimit)
+    lengthInBits += 16;
+
+    // Simple field (torqueMinLimit)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorqueMaxLimit)
+    lengthInBits += 16;
+
+    // Simple field (torqueMaxLimit)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorqueFinalTarget)
+    lengthInBits += 16;
+
+    // Simple field (torqueFinalTarget)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorque)
+    lengthInBits += 16;
+
+    // Simple field (torque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdAngleMin)
+    lengthInBits += 16;
+
+    // Simple field (angleMin)
+    lengthInBits += 40;
+
+    // Const Field (blockIdAngleMax)
+    lengthInBits += 16;
+
+    // Simple field (angleMax)
+    lengthInBits += 40;
+
+    // Const Field (blockIdFinalAngleTarget)
+    lengthInBits += 16;
+
+    // Simple field (finalAngleTarget)
+    lengthInBits += 40;
+
+    // Const Field (blockIdAngle)
+    lengthInBits += 16;
+
+    // Simple field (angle)
+    lengthInBits += 40;
+
+    // Const Field (blockIdRundownAngleMin)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngleMin)
+    lengthInBits += 40;
+
+    // Const Field (blockIdRundownAngleMax)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngleMax)
+    lengthInBits += 40;
+
+    // Const Field (blockIdRundownAngle)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngle)
+    lengthInBits += 40;
+
+    // Const Field (blockIdCurrentMonitoringMin)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringMin)
+    lengthInBits += 24;
+
+    // Const Field (blockIdCurrentMonitoringMax)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringMax)
+    lengthInBits += 24;
+
+    // Const Field (blockIdCurrentMonitoringValue)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringValue)
+    lengthInBits += 24;
+
+    // Const Field (blockIdSelfTapMin)
+    lengthInBits += 16;
+
+    // Simple field (selfTapMin)
+    lengthInBits += 48;
+
+    // Const Field (blockIdSelfTapMax)
+    lengthInBits += 16;
+
+    // Simple field (selfTapMax)
+    lengthInBits += 48;
+
+    // Const Field (blockIdSelfTapTorque)
+    lengthInBits += 16;
+
+    // Simple field (selfTapTorque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdPrevailTorqueMonitoringMin)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueMonitoringMin)
+    lengthInBits += 48;
+
+    // Const Field (blockIdPrevailTorqueMonitoringMax)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueMonitoringMax)
+    lengthInBits += 48;
+
+    // Const Field (blockIdPrevailTorque)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTighteningId)
+    lengthInBits += 16;
+
+    // Simple field (tighteningId)
+    lengthInBits += 80;
+
+    // Const Field (blockIdJobSequenceNumber)
+    lengthInBits += 16;
+
+    // Simple field (jobSequenceNumber)
+    lengthInBits += 40;
+
+    // Const Field (blockIdSyncTighteningId)
+    lengthInBits += 16;
+
+    // Simple field (syncTighteningId)
+    lengthInBits += 40;
+
+    // Const Field (blockIdToolSerialNumber)
+    lengthInBits += 16;
+
+    // Simple field (toolSerialNumber)
+    lengthInBits += 112;
+
+    // Const Field (blockIdTimeStamp)
+    lengthInBits += 16;
+
+    // Simple field (timeStamp)
+    lengthInBits += 152;
+
+    // Const Field (blockIdDateTimeOfLastChangeInParameterSetSettings)
+    lengthInBits += 16;
+
+    // Simple field (dateTimeOfLastChangeIndParameterSetSettings)
+    lengthInBits += 152;
+
+    // Const Field (blockIdParameterSetName)
+    lengthInBits += 16;
+
+    // Simple field (parameterSetName)
+    lengthInBits += 200;
+
+    // Const Field (blockIdTorqueValueUnit)
+    lengthInBits += 16;
+
+    // Simple field (torqueValueUnit)
+    lengthInBits += 8;
+
+    // Const Field (blockIdResultType)
+    lengthInBits += 16;
+
+    // Simple field (resultType)
+    lengthInBits += 8;
+
+    return lengthInBits;
+  }
+
+  public static OpenProtocolMessageLastTighteningResultDataBuilder
+      staticParseOpenProtocolMessageLastTighteningResultDataBuilder(
+          ReadBuffer readBuffer, Long revision) throws ParseException {
+    readBuffer.pullContext("OpenProtocolMessageLastTighteningResultDataRev3");
+    PositionAware positionAware = readBuffer;
+    int startPos = positionAware.getPos();
+    int curPos;
+
+    int blockIdCellId =
+        readConstField(
+            "blockIdCellId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDCELLID,
+            WithOption.WithEncoding("ASCII"));
+
+    long cellId =
+        readSimpleField(
+            "cellId", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdChannelId =
+        readConstField(
+            "blockIdChannelId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDCHANNELID,
+            WithOption.WithEncoding("ASCII"));
+
+    int channelId =
+        readSimpleField(
+            "channelId", readUnsignedInt(readBuffer, 16), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueControllerName =
+        readConstField(
+            "blockIdTorqueControllerName",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTORQUECONTROLLERNAME,
+            WithOption.WithEncoding("ASCII"));
+
+    String torqueControllerName =
+        readSimpleField(
+            "torqueControllerName", readString(readBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    int blockIdVinNumber =
+        readConstField(
+            "blockIdVinNumber",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDVINNUMBER,
+            WithOption.WithEncoding("ASCII"));
+
+    String vinNumber =
+        readSimpleField("vinNumber", readString(readBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobId =
+        readConstField(
+            "blockIdJobId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDJOBID,
+            WithOption.WithEncoding("ASCII"));
+
+    long jobId =
+        readSimpleField(
+            "jobId", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdParameterSetNumber =
+        readConstField(
+            "blockIdParameterSetNumber",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDPARAMETERSETNUMBER,
+            WithOption.WithEncoding("ASCII"));
+
+    long parameterSetNumber =
+        readSimpleField(
+            "parameterSetNumber",
+            readUnsignedLong(readBuffer, 24),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdStrategy =
+        readConstField(
+            "blockIdStrategy",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDSTRATEGY,
+            WithOption.WithEncoding("ASCII"));
+
+    Strategy strategy =
+        readEnumField(
+            "strategy",
+            "Strategy",
+            new DataReaderEnumDefault<>(Strategy::enumForValue, readUnsignedInt(readBuffer, 16)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdStrategyOptions =
+        readConstField(
+            "blockIdStrategyOptions",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDSTRATEGYOPTIONS,
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchSize =
+        readConstField(
+            "blockIdBatchSize",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDBATCHSIZE,
+            WithOption.WithEncoding("ASCII"));
+
+    long batchSize =
+        readSimpleField(
+            "batchSize", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchCounter =
+        readConstField(
+            "blockIdBatchCounter",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDBATCHCOUNTER,
+            WithOption.WithEncoding("ASCII"));
+
+    long batchCounter =
+        readSimpleField(
+            "batchCounter", readUnsignedLong(readBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTighteningStatus =
+        readConstField(
+            "blockIdTighteningStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTIGHTENINGSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    TighteningStatus tighteningStatus =
+        readEnumField(
+            "tighteningStatus",
+            "TighteningStatus",
+            new DataReaderEnumDefault<>(
+                TighteningStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdBatchStatus =
+        readConstField(
+            "blockIdBatchStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDBATCHSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    BatchStatus batchStatus =
+        readEnumField(
+            "batchStatus",
+            "BatchStatus",
+            new DataReaderEnumDefault<>(
+                BatchStatus::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueStatus =
+        readConstField(
+            "blockIdTorqueStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTORQUESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status torqueStatus =
+        readEnumField(
+            "torqueStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngleStatus =
+        readConstField(
+            "blockIdAngleStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDANGLESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status angleStatus =
+        readEnumField(
+            "angleStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdRundownAngleStatus =
+        readConstField(
+            "blockIdRundownAngleStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDRUNDOWNANGLESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status rundownAngleStatus =
+        readEnumField(
+            "rundownAngleStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdCurrentMonitoringStatus =
+        readConstField(
+            "blockIdCurrentMonitoringStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDCURRENTMONITORINGSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status currentMonitoringStatus =
+        readEnumField(
+            "currentMonitoringStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdSelfTapStatus =
+        readConstField(
+            "blockIdSelfTapStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDSELFTAPSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status selfTapStatus =
+        readEnumField(
+            "selfTapStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorqueMonitoringStatus =
+        readConstField(
+            "blockIdPrevailTorqueMonitoringStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDPREVAILTORQUEMONITORINGSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status prevailTorqueMonitoringStatus =
+        readEnumField(
+            "prevailTorqueMonitoringStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorqueCompensateStatus =
+        readConstField(
+            "blockIdPrevailTorqueCompensateStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDPREVAILTORQUECOMPENSATESTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    Status prevailTorqueCompensateStatus =
+        readEnumField(
+            "prevailTorqueCompensateStatus",
+            "Status",
+            new DataReaderEnumDefault<>(Status::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTighteningErrorStatus =
+        readConstField(
+            "blockIdTighteningErrorStatus",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTIGHTENINGERRORSTATUS,
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueMinLimit =
+        readConstField(
+            "blockIdTorqueMinLimit",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTORQUEMINLIMIT,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torqueMinLimit =
+        readSimpleField(
+            "torqueMinLimit",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueMaxLimit =
+        readConstField(
+            "blockIdTorqueMaxLimit",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTORQUEMAXLIMIT,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torqueMaxLimit =
+        readSimpleField(
+            "torqueMaxLimit",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueFinalTarget =
+        readConstField(
+            "blockIdTorqueFinalTarget",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTORQUEFINALTARGET,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torqueFinalTarget =
+        readSimpleField(
+            "torqueFinalTarget",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorque =
+        readConstField(
+            "blockIdTorque",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTORQUE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger torque =
+        readSimpleField(
+            "torque", readUnsignedBigInteger(readBuffer, 48), WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngleMin =
+        readConstField(
+            "blockIdAngleMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDANGLEMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger angleMin =
+        readSimpleField(
+            "angleMin", readUnsignedBigInteger(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngleMax =
+        readConstField(
+            "blockIdAngleMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDANGLEMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger angleMax =
+        readSimpleField(
+            "angleMax", readUnsignedBigInteger(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdFinalAngleTarget =
+        readConstField(
+            "blockIdFinalAngleTarget",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDFINALANGLETARGET,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger finalAngleTarget =
+        readSimpleField(
+            "finalAngleTarget",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdAngle =
+        readConstField(
+            "blockIdAngle",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDANGLE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger angle =
+        readSimpleField(
+            "angle", readUnsignedBigInteger(readBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    int blockIdRundownAngleMin =
+        readConstField(
+            "blockIdRundownAngleMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDRUNDOWNANGLEMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger rundownAngleMin =
+        readSimpleField(
+            "rundownAngleMin",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdRundownAngleMax =
+        readConstField(
+            "blockIdRundownAngleMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDRUNDOWNANGLEMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger rundownAngleMax =
+        readSimpleField(
+            "rundownAngleMax",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdRundownAngle =
+        readConstField(
+            "blockIdRundownAngle",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDRUNDOWNANGLE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger rundownAngle =
+        readSimpleField(
+            "rundownAngle",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdCurrentMonitoringMin =
+        readConstField(
+            "blockIdCurrentMonitoringMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDCURRENTMONITORINGMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    long currentMonitoringMin =
+        readSimpleField(
+            "currentMonitoringMin",
+            readUnsignedLong(readBuffer, 24),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdCurrentMonitoringMax =
+        readConstField(
+            "blockIdCurrentMonitoringMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDCURRENTMONITORINGMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    long currentMonitoringMax =
+        readSimpleField(
+            "currentMonitoringMax",
+            readUnsignedLong(readBuffer, 24),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdCurrentMonitoringValue =
+        readConstField(
+            "blockIdCurrentMonitoringValue",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDCURRENTMONITORINGVALUE,
+            WithOption.WithEncoding("ASCII"));
+
+    long currentMonitoringValue =
+        readSimpleField(
+            "currentMonitoringValue",
+            readUnsignedLong(readBuffer, 24),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdSelfTapMin =
+        readConstField(
+            "blockIdSelfTapMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDSELFTAPMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger selfTapMin =
+        readSimpleField(
+            "selfTapMin", readUnsignedBigInteger(readBuffer, 48), WithOption.WithEncoding("ASCII"));
+
+    int blockIdSelfTapMax =
+        readConstField(
+            "blockIdSelfTapMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDSELFTAPMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger selfTapMax =
+        readSimpleField(
+            "selfTapMax", readUnsignedBigInteger(readBuffer, 48), WithOption.WithEncoding("ASCII"));
+
+    int blockIdSelfTapTorque =
+        readConstField(
+            "blockIdSelfTapTorque",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDSELFTAPTORQUE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger selfTapTorque =
+        readSimpleField(
+            "selfTapTorque",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorqueMonitoringMin =
+        readConstField(
+            "blockIdPrevailTorqueMonitoringMin",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDPREVAILTORQUEMONITORINGMIN,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger prevailTorqueMonitoringMin =
+        readSimpleField(
+            "prevailTorqueMonitoringMin",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorqueMonitoringMax =
+        readConstField(
+            "blockIdPrevailTorqueMonitoringMax",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDPREVAILTORQUEMONITORINGMAX,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger prevailTorqueMonitoringMax =
+        readSimpleField(
+            "prevailTorqueMonitoringMax",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdPrevailTorque =
+        readConstField(
+            "blockIdPrevailTorque",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDPREVAILTORQUE,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger prevailTorque =
+        readSimpleField(
+            "prevailTorque",
+            readUnsignedBigInteger(readBuffer, 48),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdTighteningId =
+        readConstField(
+            "blockIdTighteningId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTIGHTENINGID,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger tighteningId =
+        readSimpleField(
+            "tighteningId",
+            readUnsignedBigInteger(readBuffer, 80),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdJobSequenceNumber =
+        readConstField(
+            "blockIdJobSequenceNumber",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDJOBSEQUENCENUMBER,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger jobSequenceNumber =
+        readSimpleField(
+            "jobSequenceNumber",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdSyncTighteningId =
+        readConstField(
+            "blockIdSyncTighteningId",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDSYNCTIGHTENINGID,
+            WithOption.WithEncoding("ASCII"));
+
+    BigInteger syncTighteningId =
+        readSimpleField(
+            "syncTighteningId",
+            readUnsignedBigInteger(readBuffer, 40),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdToolSerialNumber =
+        readConstField(
+            "blockIdToolSerialNumber",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTOOLSERIALNUMBER,
+            WithOption.WithEncoding("ASCII"));
+
+    String toolSerialNumber =
+        readSimpleField(
+            "toolSerialNumber", readString(readBuffer, 112), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTimeStamp =
+        readConstField(
+            "blockIdTimeStamp",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTIMESTAMP,
+            WithOption.WithEncoding("ASCII"));
+
+    String timeStamp =
+        readSimpleField("timeStamp", readString(readBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    int blockIdDateTimeOfLastChangeInParameterSetSettings =
+        readConstField(
+            "blockIdDateTimeOfLastChangeInParameterSetSettings",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3
+                .BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS,
+            WithOption.WithEncoding("ASCII"));
+
+    String dateTimeOfLastChangeIndParameterSetSettings =
+        readSimpleField(
+            "dateTimeOfLastChangeIndParameterSetSettings",
+            readString(readBuffer, 152),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdParameterSetName =
+        readConstField(
+            "blockIdParameterSetName",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDPARAMETERSETNAME,
+            WithOption.WithEncoding("ASCII"));
+
+    String parameterSetName =
+        readSimpleField(
+            "parameterSetName", readString(readBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    int blockIdTorqueValueUnit =
+        readConstField(
+            "blockIdTorqueValueUnit",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDTORQUEVALUEUNIT,
+            WithOption.WithEncoding("ASCII"));
+
+    Unit torqueValueUnit =
+        readEnumField(
+            "torqueValueUnit",
+            "Unit",
+            new DataReaderEnumDefault<>(Unit::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    int blockIdResultType =
+        readConstField(
+            "blockIdResultType",
+            readUnsignedInt(readBuffer, 16),
+            OpenProtocolMessageLastTighteningResultDataRev3.BLOCKIDRESULTTYPE,
+            WithOption.WithEncoding("ASCII"));
+
+    ResultType resultType =
+        readEnumField(
+            "resultType",
+            "ResultType",
+            new DataReaderEnumDefault<>(ResultType::enumForValue, readUnsignedShort(readBuffer, 8)),
+            WithOption.WithEncoding("ASCII"));
+
+    readBuffer.closeContext("OpenProtocolMessageLastTighteningResultDataRev3");
+    // Create the instance
+    return new OpenProtocolMessageLastTighteningResultDataRev3BuilderImpl(
+        cellId,
+        channelId,
+        torqueControllerName,
+        vinNumber,
+        jobId,
+        parameterSetNumber,
+        strategy,
+        batchSize,
+        batchCounter,
+        tighteningStatus,
+        batchStatus,
+        torqueStatus,
+        angleStatus,
+        rundownAngleStatus,
+        currentMonitoringStatus,
+        selfTapStatus,
+        prevailTorqueMonitoringStatus,
+        prevailTorqueCompensateStatus,
+        torqueMinLimit,
+        torqueMaxLimit,
+        torqueFinalTarget,
+        torque,
+        angleMin,
+        angleMax,
+        finalAngleTarget,
+        angle,
+        rundownAngleMin,
+        rundownAngleMax,
+        rundownAngle,
+        currentMonitoringMin,
+        currentMonitoringMax,
+        currentMonitoringValue,
+        selfTapMin,
+        selfTapMax,
+        selfTapTorque,
+        prevailTorqueMonitoringMin,
+        prevailTorqueMonitoringMax,
+        prevailTorque,
+        tighteningId,
+        jobSequenceNumber,
+        syncTighteningId,
+        toolSerialNumber,
+        timeStamp,
+        dateTimeOfLastChangeIndParameterSetSettings,
+        parameterSetName,
+        torqueValueUnit,
+        resultType);
+  }
+
+  public static class OpenProtocolMessageLastTighteningResultDataRev3BuilderImpl
+      implements OpenProtocolMessageLastTighteningResultData
+          .OpenProtocolMessageLastTighteningResultDataBuilder {
+    private final long cellId;
+    private final int channelId;
+    private final String torqueControllerName;
+    private final String vinNumber;
+    private final long jobId;
+    private final long parameterSetNumber;
+    private final Strategy strategy;
+    private final long batchSize;
+    private final long batchCounter;
+    private final TighteningStatus tighteningStatus;
+    private final BatchStatus batchStatus;
+    private final Status torqueStatus;
+    private final Status angleStatus;
+    private final Status rundownAngleStatus;
+    private final Status currentMonitoringStatus;
+    private final Status selfTapStatus;
+    private final Status prevailTorqueMonitoringStatus;
+    private final Status prevailTorqueCompensateStatus;
+    private final BigInteger torqueMinLimit;
+    private final BigInteger torqueMaxLimit;
+    private final BigInteger torqueFinalTarget;
+    private final BigInteger torque;
+    private final BigInteger angleMin;
+    private final BigInteger angleMax;
+    private final BigInteger finalAngleTarget;
+    private final BigInteger angle;
+    private final BigInteger rundownAngleMin;
+    private final BigInteger rundownAngleMax;
+    private final BigInteger rundownAngle;
+    private final long currentMonitoringMin;
+    private final long currentMonitoringMax;
+    private final long currentMonitoringValue;
+    private final BigInteger selfTapMin;
+    private final BigInteger selfTapMax;
+    private final BigInteger selfTapTorque;
+    private final BigInteger prevailTorqueMonitoringMin;
+    private final BigInteger prevailTorqueMonitoringMax;
+    private final BigInteger prevailTorque;
+    private final BigInteger tighteningId;
+    private final BigInteger jobSequenceNumber;
+    private final BigInteger syncTighteningId;
+    private final String toolSerialNumber;
+    private final String timeStamp;
+    private final String dateTimeOfLastChangeIndParameterSetSettings;
+    private final String parameterSetName;
+    private final Unit torqueValueUnit;
+    private final ResultType resultType;
+
+    public OpenProtocolMessageLastTighteningResultDataRev3BuilderImpl(
+        long cellId,
+        int channelId,
+        String torqueControllerName,
+        String vinNumber,
+        long jobId,
+        long parameterSetNumber,
+        Strategy strategy,
+        long batchSize,
+        long batchCounter,
+        TighteningStatus tighteningStatus,
+        BatchStatus batchStatus,
+        Status torqueStatus,
+        Status angleStatus,
+        Status rundownAngleStatus,
+        Status currentMonitoringStatus,
+        Status selfTapStatus,
+        Status prevailTorqueMonitoringStatus,
+        Status prevailTorqueCompensateStatus,
+        BigInteger torqueMinLimit,
+        BigInteger torqueMaxLimit,
+        BigInteger torqueFinalTarget,
+        BigInteger torque,
+        BigInteger angleMin,
+        BigInteger angleMax,
+        BigInteger finalAngleTarget,
+        BigInteger angle,
+        BigInteger rundownAngleMin,
+        BigInteger rundownAngleMax,
+        BigInteger rundownAngle,
+        long currentMonitoringMin,
+        long currentMonitoringMax,
+        long currentMonitoringValue,
+        BigInteger selfTapMin,
+        BigInteger selfTapMax,
+        BigInteger selfTapTorque,
+        BigInteger prevailTorqueMonitoringMin,
+        BigInteger prevailTorqueMonitoringMax,
+        BigInteger prevailTorque,
+        BigInteger tighteningId,
+        BigInteger jobSequenceNumber,
+        BigInteger syncTighteningId,
+        String toolSerialNumber,
+        String timeStamp,
+        String dateTimeOfLastChangeIndParameterSetSettings,
+        String parameterSetName,
+        Unit torqueValueUnit,
+        ResultType resultType) {
+      this.cellId = cellId;
+      this.channelId = channelId;
+      this.torqueControllerName = torqueControllerName;
+      this.vinNumber = vinNumber;
+      this.jobId = jobId;
+      this.parameterSetNumber = parameterSetNumber;
+      this.strategy = strategy;
+      this.batchSize = batchSize;
+      this.batchCounter = batchCounter;
+      this.tighteningStatus = tighteningStatus;
+      this.batchStatus = batchStatus;
+      this.torqueStatus = torqueStatus;
+      this.angleStatus = angleStatus;
+      this.rundownAngleStatus = rundownAngleStatus;
+      this.currentMonitoringStatus = currentMonitoringStatus;
+      this.selfTapStatus = selfTapStatus;
+      this.prevailTorqueMonitoringStatus = prevailTorqueMonitoringStatus;
+      this.prevailTorqueCompensateStatus = prevailTorqueCompensateStatus;
+      this.torqueMinLimit = torqueMinLimit;
+      this.torqueMaxLimit = torqueMaxLimit;
+      this.torqueFinalTarget = torqueFinalTarget;
+      this.torque = torque;
+      this.angleMin = angleMin;
+      this.angleMax = angleMax;
+      this.finalAngleTarget = finalAngleTarget;
+      this.angle = angle;
+      this.rundownAngleMin = rundownAngleMin;
+      this.rundownAngleMax = rundownAngleMax;
+      this.rundownAngle = rundownAngle;
+      this.currentMonitoringMin = currentMonitoringMin;
+      this.currentMonitoringMax = currentMonitoringMax;
+      this.currentMonitoringValue = currentMonitoringValue;
+      this.selfTapMin = selfTapMin;
+      this.selfTapMax = selfTapMax;
+      this.selfTapTorque = selfTapTorque;
+      this.prevailTorqueMonitoringMin = prevailTorqueMonitoringMin;
+      this.prevailTorqueMonitoringMax = prevailTorqueMonitoringMax;
+      this.prevailTorque = prevailTorque;
+      this.tighteningId = tighteningId;
+      this.jobSequenceNumber = jobSequenceNumber;
+      this.syncTighteningId = syncTighteningId;
+      this.toolSerialNumber = toolSerialNumber;
+      this.timeStamp = timeStamp;
+      this.dateTimeOfLastChangeIndParameterSetSettings =
+          dateTimeOfLastChangeIndParameterSetSettings;
+      this.parameterSetName = parameterSetName;
+      this.torqueValueUnit = torqueValueUnit;
+      this.resultType = resultType;
+    }
+
+    public OpenProtocolMessageLastTighteningResultDataRev3 build(
+        Long midRevision,
+        Short noAckFlag,
+        Integer targetStationId,
+        Integer targetSpindleId,
+        Integer sequenceNumber,
+        Short numberOfMessageParts,
+        Short messagePartNumber) {
+      OpenProtocolMessageLastTighteningResultDataRev3
+          openProtocolMessageLastTighteningResultDataRev3 =
+              new OpenProtocolMessageLastTighteningResultDataRev3(
+                  midRevision,
+                  noAckFlag,
+                  targetStationId,
+                  targetSpindleId,
+                  sequenceNumber,
+                  numberOfMessageParts,
+                  messagePartNumber,
+                  cellId,
+                  channelId,
+                  torqueControllerName,
+                  vinNumber,
+                  jobId,
+                  parameterSetNumber,
+                  strategy,
+                  batchSize,
+                  batchCounter,
+                  tighteningStatus,
+                  batchStatus,
+                  torqueStatus,
+                  angleStatus,
+                  rundownAngleStatus,
+                  currentMonitoringStatus,
+                  selfTapStatus,
+                  prevailTorqueMonitoringStatus,
+                  prevailTorqueCompensateStatus,
+                  torqueMinLimit,
+                  torqueMaxLimit,
+                  torqueFinalTarget,
+                  torque,
+                  angleMin,
+                  angleMax,
+                  finalAngleTarget,
+                  angle,
+                  rundownAngleMin,
+                  rundownAngleMax,
+                  rundownAngle,
+                  currentMonitoringMin,
+                  currentMonitoringMax,
+                  currentMonitoringValue,
+                  selfTapMin,
+                  selfTapMax,
+                  selfTapTorque,
+                  prevailTorqueMonitoringMin,
+                  prevailTorqueMonitoringMax,
+                  prevailTorque,
+                  tighteningId,
+                  jobSequenceNumber,
+                  syncTighteningId,
+                  toolSerialNumber,
+                  timeStamp,
+                  dateTimeOfLastChangeIndParameterSetSettings,
+                  parameterSetName,
+                  torqueValueUnit,
+                  resultType);
+      return openProtocolMessageLastTighteningResultDataRev3;
+    }
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof OpenProtocolMessageLastTighteningResultDataRev3)) {
+      return false;
+    }
+    OpenProtocolMessageLastTighteningResultDataRev3 that =
+        (OpenProtocolMessageLastTighteningResultDataRev3) o;
+    return (getCellId() == that.getCellId())
+        && (getChannelId() == that.getChannelId())
+        && (getTorqueControllerName() == that.getTorqueControllerName())
+        && (getVinNumber() == that.getVinNumber())
+        && (getJobId() == that.getJobId())
+        && (getParameterSetNumber() == that.getParameterSetNumber())
+        && (getStrategy() == that.getStrategy())
+        && (getBatchSize() == that.getBatchSize())
+        && (getBatchCounter() == that.getBatchCounter())
+        && (getTighteningStatus() == that.getTighteningStatus())
+        && (getBatchStatus() == that.getBatchStatus())
+        && (getTorqueStatus() == that.getTorqueStatus())
+        && (getAngleStatus() == that.getAngleStatus())
+        && (getRundownAngleStatus() == that.getRundownAngleStatus())
+        && (getCurrentMonitoringStatus() == that.getCurrentMonitoringStatus())
+        && (getSelfTapStatus() == that.getSelfTapStatus())
+        && (getPrevailTorqueMonitoringStatus() == that.getPrevailTorqueMonitoringStatus())
+        && (getPrevailTorqueCompensateStatus() == that.getPrevailTorqueCompensateStatus())
+        && (getTorqueMinLimit() == that.getTorqueMinLimit())
+        && (getTorqueMaxLimit() == that.getTorqueMaxLimit())
+        && (getTorqueFinalTarget() == that.getTorqueFinalTarget())
+        && (getTorque() == that.getTorque())
+        && (getAngleMin() == that.getAngleMin())
+        && (getAngleMax() == that.getAngleMax())
+        && (getFinalAngleTarget() == that.getFinalAngleTarget())
+        && (getAngle() == that.getAngle())
+        && (getRundownAngleMin() == that.getRundownAngleMin())
+        && (getRundownAngleMax() == that.getRundownAngleMax())
+        && (getRundownAngle() == that.getRundownAngle())
+        && (getCurrentMonitoringMin() == that.getCurrentMonitoringMin())
+        && (getCurrentMonitoringMax() == that.getCurrentMonitoringMax())
+        && (getCurrentMonitoringValue() == that.getCurrentMonitoringValue())
+        && (getSelfTapMin() == that.getSelfTapMin())
+        && (getSelfTapMax() == that.getSelfTapMax())
+        && (getSelfTapTorque() == that.getSelfTapTorque())
+        && (getPrevailTorqueMonitoringMin() == that.getPrevailTorqueMonitoringMin())
+        && (getPrevailTorqueMonitoringMax() == that.getPrevailTorqueMonitoringMax())
+        && (getPrevailTorque() == that.getPrevailTorque())
+        && (getTighteningId() == that.getTighteningId())
+        && (getJobSequenceNumber() == that.getJobSequenceNumber())
+        && (getSyncTighteningId() == that.getSyncTighteningId())
+        && (getToolSerialNumber() == that.getToolSerialNumber())
+        && (getTimeStamp() == that.getTimeStamp())
+        && (getDateTimeOfLastChangeIndParameterSetSettings()
+            == that.getDateTimeOfLastChangeIndParameterSetSettings())
+        && (getParameterSetName() == that.getParameterSetName())
+        && (getTorqueValueUnit() == that.getTorqueValueUnit())
+        && (getResultType() == that.getResultType())
+        && super.equals(that)
+        && true;
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(
+        super.hashCode(),
+        getCellId(),
+        getChannelId(),
+        getTorqueControllerName(),
+        getVinNumber(),
+        getJobId(),
+        getParameterSetNumber(),
+        getStrategy(),
+        getBatchSize(),
+        getBatchCounter(),
+        getTighteningStatus(),
+        getBatchStatus(),
+        getTorqueStatus(),
+        getAngleStatus(),
+        getRundownAngleStatus(),
+        getCurrentMonitoringStatus(),
+        getSelfTapStatus(),
+        getPrevailTorqueMonitoringStatus(),
+        getPrevailTorqueCompensateStatus(),
+        getTorqueMinLimit(),
+        getTorqueMaxLimit(),
+        getTorqueFinalTarget(),
+        getTorque(),
+        getAngleMin(),
+        getAngleMax(),
+        getFinalAngleTarget(),
+        getAngle(),
+        getRundownAngleMin(),
+        getRundownAngleMax(),
+        getRundownAngle(),
+        getCurrentMonitoringMin(),
+        getCurrentMonitoringMax(),
+        getCurrentMonitoringValue(),
+        getSelfTapMin(),
+        getSelfTapMax(),
+        getSelfTapTorque(),
+        getPrevailTorqueMonitoringMin(),
+        getPrevailTorqueMonitoringMax(),
+        getPrevailTorque(),
+        getTighteningId(),
+        getJobSequenceNumber(),
+        getSyncTighteningId(),
+        getToolSerialNumber(),
+        getTimeStamp(),
+        getDateTimeOfLastChangeIndParameterSetSettings(),
+        getParameterSetName(),
+        getTorqueValueUnit(),
+        getResultType());
+  }
+
+  @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/OpenProtocolMessageLastTighteningResultDataRev4.java b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev4.java
new file mode 100644
index 0000000000..14869f947f
--- /dev/null
+++ b/plc4j/drivers/open-protocol/src/main/generated/org/apache/plc4x/java/openprotocol/readwrite/OpenProtocolMessageLastTighteningResultDataRev4.java
@@ -0,0 +1,2793 @@
+/*
+ * 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 OpenProtocolMessageLastTighteningResultDataRev4
+    extends OpenProtocolMessageLastTighteningResultData implements Message {
+
+  // Accessors for discriminator values.
+  public Long getRevision() {
+    return (long) 4;
+  }
+
+  // Constant values.
+  public static final Integer BLOCKIDCELLID = 1;
+  public static final Integer BLOCKIDCHANNELID = 2;
+  public static final Integer BLOCKIDTORQUECONTROLLERNAME = 3;
+  public static final Integer BLOCKIDVINNUMBER = 4;
+  public static final Integer BLOCKIDJOBID = 5;
+  public static final Integer BLOCKIDPARAMETERSETNUMBER = 6;
+  public static final Integer BLOCKIDSTRATEGY = 7;
+  public static final Integer BLOCKIDSTRATEGYOPTIONS = 8;
+  public static final Integer BLOCKIDBATCHSIZE = 9;
+  public static final Integer BLOCKIDBATCHCOUNTER = 10;
+  public static final Integer BLOCKIDTIGHTENINGSTATUS = 11;
+  public static final Integer BLOCKIDBATCHSTATUS = 12;
+  public static final Integer BLOCKIDTORQUESTATUS = 13;
+  public static final Integer BLOCKIDANGLESTATUS = 14;
+  public static final Integer BLOCKIDRUNDOWNANGLESTATUS = 15;
+  public static final Integer BLOCKIDCURRENTMONITORINGSTATUS = 16;
+  public static final Integer BLOCKIDSELFTAPSTATUS = 17;
+  public static final Integer BLOCKIDPREVAILTORQUEMONITORINGSTATUS = 18;
+  public static final Integer BLOCKIDPREVAILTORQUECOMPENSATESTATUS = 19;
+  public static final Integer BLOCKIDTIGHTENINGERRORSTATUS = 20;
+  public static final Integer BLOCKIDTORQUEMINLIMIT = 21;
+  public static final Integer BLOCKIDTORQUEMAXLIMIT = 22;
+  public static final Integer BLOCKIDTORQUEFINALTARGET = 23;
+  public static final Integer BLOCKIDTORQUE = 24;
+  public static final Integer BLOCKIDANGLEMIN = 25;
+  public static final Integer BLOCKIDANGLEMAX = 26;
+  public static final Integer BLOCKIDFINALANGLETARGET = 27;
+  public static final Integer BLOCKIDANGLE = 28;
+  public static final Integer BLOCKIDRUNDOWNANGLEMIN = 29;
+  public static final Integer BLOCKIDRUNDOWNANGLEMAX = 30;
+  public static final Integer BLOCKIDRUNDOWNANGLE = 31;
+  public static final Integer BLOCKIDCURRENTMONITORINGMIN = 32;
+  public static final Integer BLOCKIDCURRENTMONITORINGMAX = 33;
+  public static final Integer BLOCKIDCURRENTMONITORINGVALUE = 34;
+  public static final Integer BLOCKIDSELFTAPMIN = 35;
+  public static final Integer BLOCKIDSELFTAPMAX = 36;
+  public static final Integer BLOCKIDSELFTAPTORQUE = 37;
+  public static final Integer BLOCKIDPREVAILTORQUEMONITORINGMIN = 38;
+  public static final Integer BLOCKIDPREVAILTORQUEMONITORINGMAX = 39;
+  public static final Integer BLOCKIDPREVAILTORQUE = 40;
+  public static final Integer BLOCKIDTIGHTENINGID = 41;
+  public static final Integer BLOCKIDJOBSEQUENCENUMBER = 42;
+  public static final Integer BLOCKIDSYNCTIGHTENINGID = 43;
+  public static final Integer BLOCKIDTOOLSERIALNUMBER = 44;
+  public static final Integer BLOCKIDTIMESTAMP = 45;
+  public static final Integer BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS = 46;
+  public static final Integer BLOCKIDPARAMETERSETNAME = 47;
+  public static final Integer BLOCKIDTORQUEVALUEUNIT = 48;
+  public static final Integer BLOCKIDRESULTTYPE = 49;
+  public static final Integer BLOCKIDIDENTIFIERRESULTPART2 = 50;
+  public static final Integer BLOCKIDIDENTIFIERRESULTPART3 = 51;
+  public static final Integer BLOCKIDIDENTIFIERRESULTPART4 = 52;
+
+  // Properties.
+  protected final long cellId;
+  protected final int channelId;
+  protected final String torqueControllerName;
+  protected final String vinNumber;
+  protected final long jobId;
+  protected final long parameterSetNumber;
+  protected final Strategy strategy;
+  protected final long batchSize;
+  protected final long batchCounter;
+  protected final TighteningStatus tighteningStatus;
+  protected final BatchStatus batchStatus;
+  protected final Status torqueStatus;
+  protected final Status angleStatus;
+  protected final Status rundownAngleStatus;
+  protected final Status currentMonitoringStatus;
+  protected final Status selfTapStatus;
+  protected final Status prevailTorqueMonitoringStatus;
+  protected final Status prevailTorqueCompensateStatus;
+  protected final BigInteger torqueMinLimit;
+  protected final BigInteger torqueMaxLimit;
+  protected final BigInteger torqueFinalTarget;
+  protected final BigInteger torque;
+  protected final BigInteger angleMin;
+  protected final BigInteger angleMax;
+  protected final BigInteger finalAngleTarget;
+  protected final BigInteger angle;
+  protected final BigInteger rundownAngleMin;
+  protected final BigInteger rundownAngleMax;
+  protected final BigInteger rundownAngle;
+  protected final long currentMonitoringMin;
+  protected final long currentMonitoringMax;
+  protected final long currentMonitoringValue;
+  protected final BigInteger selfTapMin;
+  protected final BigInteger selfTapMax;
+  protected final BigInteger selfTapTorque;
+  protected final BigInteger prevailTorqueMonitoringMin;
+  protected final BigInteger prevailTorqueMonitoringMax;
+  protected final BigInteger prevailTorque;
+  protected final BigInteger tighteningId;
+  protected final BigInteger jobSequenceNumber;
+  protected final BigInteger syncTighteningId;
+  protected final String toolSerialNumber;
+  protected final String timeStamp;
+  protected final String dateTimeOfLastChangeIndParameterSetSettings;
+  protected final String parameterSetName;
+  protected final Unit torqueValueUnit;
+  protected final ResultType resultType;
+  protected final String identifierResultPart2;
+  protected final String identifierResultPart3;
+  protected final String identifierResultPart4;
+
+  public OpenProtocolMessageLastTighteningResultDataRev4(
+      Long midRevision,
+      Short noAckFlag,
+      Integer targetStationId,
+      Integer targetSpindleId,
+      Integer sequenceNumber,
+      Short numberOfMessageParts,
+      Short messagePartNumber,
+      long cellId,
+      int channelId,
+      String torqueControllerName,
+      String vinNumber,
+      long jobId,
+      long parameterSetNumber,
+      Strategy strategy,
+      long batchSize,
+      long batchCounter,
+      TighteningStatus tighteningStatus,
+      BatchStatus batchStatus,
+      Status torqueStatus,
+      Status angleStatus,
+      Status rundownAngleStatus,
+      Status currentMonitoringStatus,
+      Status selfTapStatus,
+      Status prevailTorqueMonitoringStatus,
+      Status prevailTorqueCompensateStatus,
+      BigInteger torqueMinLimit,
+      BigInteger torqueMaxLimit,
+      BigInteger torqueFinalTarget,
+      BigInteger torque,
+      BigInteger angleMin,
+      BigInteger angleMax,
+      BigInteger finalAngleTarget,
+      BigInteger angle,
+      BigInteger rundownAngleMin,
+      BigInteger rundownAngleMax,
+      BigInteger rundownAngle,
+      long currentMonitoringMin,
+      long currentMonitoringMax,
+      long currentMonitoringValue,
+      BigInteger selfTapMin,
+      BigInteger selfTapMax,
+      BigInteger selfTapTorque,
+      BigInteger prevailTorqueMonitoringMin,
+      BigInteger prevailTorqueMonitoringMax,
+      BigInteger prevailTorque,
+      BigInteger tighteningId,
+      BigInteger jobSequenceNumber,
+      BigInteger syncTighteningId,
+      String toolSerialNumber,
+      String timeStamp,
+      String dateTimeOfLastChangeIndParameterSetSettings,
+      String parameterSetName,
+      Unit torqueValueUnit,
+      ResultType resultType,
+      String identifierResultPart2,
+      String identifierResultPart3,
+      String identifierResultPart4) {
+    super(
+        midRevision,
+        noAckFlag,
+        targetStationId,
+        targetSpindleId,
+        sequenceNumber,
+        numberOfMessageParts,
+        messagePartNumber);
+    this.cellId = cellId;
+    this.channelId = channelId;
+    this.torqueControllerName = torqueControllerName;
+    this.vinNumber = vinNumber;
+    this.jobId = jobId;
+    this.parameterSetNumber = parameterSetNumber;
+    this.strategy = strategy;
+    this.batchSize = batchSize;
+    this.batchCounter = batchCounter;
+    this.tighteningStatus = tighteningStatus;
+    this.batchStatus = batchStatus;
+    this.torqueStatus = torqueStatus;
+    this.angleStatus = angleStatus;
+    this.rundownAngleStatus = rundownAngleStatus;
+    this.currentMonitoringStatus = currentMonitoringStatus;
+    this.selfTapStatus = selfTapStatus;
+    this.prevailTorqueMonitoringStatus = prevailTorqueMonitoringStatus;
+    this.prevailTorqueCompensateStatus = prevailTorqueCompensateStatus;
+    this.torqueMinLimit = torqueMinLimit;
+    this.torqueMaxLimit = torqueMaxLimit;
+    this.torqueFinalTarget = torqueFinalTarget;
+    this.torque = torque;
+    this.angleMin = angleMin;
+    this.angleMax = angleMax;
+    this.finalAngleTarget = finalAngleTarget;
+    this.angle = angle;
+    this.rundownAngleMin = rundownAngleMin;
+    this.rundownAngleMax = rundownAngleMax;
+    this.rundownAngle = rundownAngle;
+    this.currentMonitoringMin = currentMonitoringMin;
+    this.currentMonitoringMax = currentMonitoringMax;
+    this.currentMonitoringValue = currentMonitoringValue;
+    this.selfTapMin = selfTapMin;
+    this.selfTapMax = selfTapMax;
+    this.selfTapTorque = selfTapTorque;
+    this.prevailTorqueMonitoringMin = prevailTorqueMonitoringMin;
+    this.prevailTorqueMonitoringMax = prevailTorqueMonitoringMax;
+    this.prevailTorque = prevailTorque;
+    this.tighteningId = tighteningId;
+    this.jobSequenceNumber = jobSequenceNumber;
+    this.syncTighteningId = syncTighteningId;
+    this.toolSerialNumber = toolSerialNumber;
+    this.timeStamp = timeStamp;
+    this.dateTimeOfLastChangeIndParameterSetSettings = dateTimeOfLastChangeIndParameterSetSettings;
+    this.parameterSetName = parameterSetName;
+    this.torqueValueUnit = torqueValueUnit;
+    this.resultType = resultType;
+    this.identifierResultPart2 = identifierResultPart2;
+    this.identifierResultPart3 = identifierResultPart3;
+    this.identifierResultPart4 = identifierResultPart4;
+  }
+
+  public long getCellId() {
+    return cellId;
+  }
+
+  public int getChannelId() {
+    return channelId;
+  }
+
+  public String getTorqueControllerName() {
+    return torqueControllerName;
+  }
+
+  public String getVinNumber() {
+    return vinNumber;
+  }
+
+  public long getJobId() {
+    return jobId;
+  }
+
+  public long getParameterSetNumber() {
+    return parameterSetNumber;
+  }
+
+  public Strategy getStrategy() {
+    return strategy;
+  }
+
+  public long getBatchSize() {
+    return batchSize;
+  }
+
+  public long getBatchCounter() {
+    return batchCounter;
+  }
+
+  public TighteningStatus getTighteningStatus() {
+    return tighteningStatus;
+  }
+
+  public BatchStatus getBatchStatus() {
+    return batchStatus;
+  }
+
+  public Status getTorqueStatus() {
+    return torqueStatus;
+  }
+
+  public Status getAngleStatus() {
+    return angleStatus;
+  }
+
+  public Status getRundownAngleStatus() {
+    return rundownAngleStatus;
+  }
+
+  public Status getCurrentMonitoringStatus() {
+    return currentMonitoringStatus;
+  }
+
+  public Status getSelfTapStatus() {
+    return selfTapStatus;
+  }
+
+  public Status getPrevailTorqueMonitoringStatus() {
+    return prevailTorqueMonitoringStatus;
+  }
+
+  public Status getPrevailTorqueCompensateStatus() {
+    return prevailTorqueCompensateStatus;
+  }
+
+  public BigInteger getTorqueMinLimit() {
+    return torqueMinLimit;
+  }
+
+  public BigInteger getTorqueMaxLimit() {
+    return torqueMaxLimit;
+  }
+
+  public BigInteger getTorqueFinalTarget() {
+    return torqueFinalTarget;
+  }
+
+  public BigInteger getTorque() {
+    return torque;
+  }
+
+  public BigInteger getAngleMin() {
+    return angleMin;
+  }
+
+  public BigInteger getAngleMax() {
+    return angleMax;
+  }
+
+  public BigInteger getFinalAngleTarget() {
+    return finalAngleTarget;
+  }
+
+  public BigInteger getAngle() {
+    return angle;
+  }
+
+  public BigInteger getRundownAngleMin() {
+    return rundownAngleMin;
+  }
+
+  public BigInteger getRundownAngleMax() {
+    return rundownAngleMax;
+  }
+
+  public BigInteger getRundownAngle() {
+    return rundownAngle;
+  }
+
+  public long getCurrentMonitoringMin() {
+    return currentMonitoringMin;
+  }
+
+  public long getCurrentMonitoringMax() {
+    return currentMonitoringMax;
+  }
+
+  public long getCurrentMonitoringValue() {
+    return currentMonitoringValue;
+  }
+
+  public BigInteger getSelfTapMin() {
+    return selfTapMin;
+  }
+
+  public BigInteger getSelfTapMax() {
+    return selfTapMax;
+  }
+
+  public BigInteger getSelfTapTorque() {
+    return selfTapTorque;
+  }
+
+  public BigInteger getPrevailTorqueMonitoringMin() {
+    return prevailTorqueMonitoringMin;
+  }
+
+  public BigInteger getPrevailTorqueMonitoringMax() {
+    return prevailTorqueMonitoringMax;
+  }
+
+  public BigInteger getPrevailTorque() {
+    return prevailTorque;
+  }
+
+  public BigInteger getTighteningId() {
+    return tighteningId;
+  }
+
+  public BigInteger getJobSequenceNumber() {
+    return jobSequenceNumber;
+  }
+
+  public BigInteger getSyncTighteningId() {
+    return syncTighteningId;
+  }
+
+  public String getToolSerialNumber() {
+    return toolSerialNumber;
+  }
+
+  public String getTimeStamp() {
+    return timeStamp;
+  }
+
+  public String getDateTimeOfLastChangeIndParameterSetSettings() {
+    return dateTimeOfLastChangeIndParameterSetSettings;
+  }
+
+  public String getParameterSetName() {
+    return parameterSetName;
+  }
+
+  public Unit getTorqueValueUnit() {
+    return torqueValueUnit;
+  }
+
+  public ResultType getResultType() {
+    return resultType;
+  }
+
+  public String getIdentifierResultPart2() {
+    return identifierResultPart2;
+  }
+
+  public String getIdentifierResultPart3() {
+    return identifierResultPart3;
+  }
+
+  public String getIdentifierResultPart4() {
+    return identifierResultPart4;
+  }
+
+  public int getBlockIdCellId() {
+    return BLOCKIDCELLID;
+  }
+
+  public int getBlockIdChannelId() {
+    return BLOCKIDCHANNELID;
+  }
+
+  public int getBlockIdTorqueControllerName() {
+    return BLOCKIDTORQUECONTROLLERNAME;
+  }
+
+  public int getBlockIdVinNumber() {
+    return BLOCKIDVINNUMBER;
+  }
+
+  public int getBlockIdJobId() {
+    return BLOCKIDJOBID;
+  }
+
+  public int getBlockIdParameterSetNumber() {
+    return BLOCKIDPARAMETERSETNUMBER;
+  }
+
+  public int getBlockIdStrategy() {
+    return BLOCKIDSTRATEGY;
+  }
+
+  public int getBlockIdStrategyOptions() {
+    return BLOCKIDSTRATEGYOPTIONS;
+  }
+
+  public int getBlockIdBatchSize() {
+    return BLOCKIDBATCHSIZE;
+  }
+
+  public int getBlockIdBatchCounter() {
+    return BLOCKIDBATCHCOUNTER;
+  }
+
+  public int getBlockIdTighteningStatus() {
+    return BLOCKIDTIGHTENINGSTATUS;
+  }
+
+  public int getBlockIdBatchStatus() {
+    return BLOCKIDBATCHSTATUS;
+  }
+
+  public int getBlockIdTorqueStatus() {
+    return BLOCKIDTORQUESTATUS;
+  }
+
+  public int getBlockIdAngleStatus() {
+    return BLOCKIDANGLESTATUS;
+  }
+
+  public int getBlockIdRundownAngleStatus() {
+    return BLOCKIDRUNDOWNANGLESTATUS;
+  }
+
+  public int getBlockIdCurrentMonitoringStatus() {
+    return BLOCKIDCURRENTMONITORINGSTATUS;
+  }
+
+  public int getBlockIdSelfTapStatus() {
+    return BLOCKIDSELFTAPSTATUS;
+  }
+
+  public int getBlockIdPrevailTorqueMonitoringStatus() {
+    return BLOCKIDPREVAILTORQUEMONITORINGSTATUS;
+  }
+
+  public int getBlockIdPrevailTorqueCompensateStatus() {
+    return BLOCKIDPREVAILTORQUECOMPENSATESTATUS;
+  }
+
+  public int getBlockIdTighteningErrorStatus() {
+    return BLOCKIDTIGHTENINGERRORSTATUS;
+  }
+
+  public int getBlockIdTorqueMinLimit() {
+    return BLOCKIDTORQUEMINLIMIT;
+  }
+
+  public int getBlockIdTorqueMaxLimit() {
+    return BLOCKIDTORQUEMAXLIMIT;
+  }
+
+  public int getBlockIdTorqueFinalTarget() {
+    return BLOCKIDTORQUEFINALTARGET;
+  }
+
+  public int getBlockIdTorque() {
+    return BLOCKIDTORQUE;
+  }
+
+  public int getBlockIdAngleMin() {
+    return BLOCKIDANGLEMIN;
+  }
+
+  public int getBlockIdAngleMax() {
+    return BLOCKIDANGLEMAX;
+  }
+
+  public int getBlockIdFinalAngleTarget() {
+    return BLOCKIDFINALANGLETARGET;
+  }
+
+  public int getBlockIdAngle() {
+    return BLOCKIDANGLE;
+  }
+
+  public int getBlockIdRundownAngleMin() {
+    return BLOCKIDRUNDOWNANGLEMIN;
+  }
+
+  public int getBlockIdRundownAngleMax() {
+    return BLOCKIDRUNDOWNANGLEMAX;
+  }
+
+  public int getBlockIdRundownAngle() {
+    return BLOCKIDRUNDOWNANGLE;
+  }
+
+  public int getBlockIdCurrentMonitoringMin() {
+    return BLOCKIDCURRENTMONITORINGMIN;
+  }
+
+  public int getBlockIdCurrentMonitoringMax() {
+    return BLOCKIDCURRENTMONITORINGMAX;
+  }
+
+  public int getBlockIdCurrentMonitoringValue() {
+    return BLOCKIDCURRENTMONITORINGVALUE;
+  }
+
+  public int getBlockIdSelfTapMin() {
+    return BLOCKIDSELFTAPMIN;
+  }
+
+  public int getBlockIdSelfTapMax() {
+    return BLOCKIDSELFTAPMAX;
+  }
+
+  public int getBlockIdSelfTapTorque() {
+    return BLOCKIDSELFTAPTORQUE;
+  }
+
+  public int getBlockIdPrevailTorqueMonitoringMin() {
+    return BLOCKIDPREVAILTORQUEMONITORINGMIN;
+  }
+
+  public int getBlockIdPrevailTorqueMonitoringMax() {
+    return BLOCKIDPREVAILTORQUEMONITORINGMAX;
+  }
+
+  public int getBlockIdPrevailTorque() {
+    return BLOCKIDPREVAILTORQUE;
+  }
+
+  public int getBlockIdTighteningId() {
+    return BLOCKIDTIGHTENINGID;
+  }
+
+  public int getBlockIdJobSequenceNumber() {
+    return BLOCKIDJOBSEQUENCENUMBER;
+  }
+
+  public int getBlockIdSyncTighteningId() {
+    return BLOCKIDSYNCTIGHTENINGID;
+  }
+
+  public int getBlockIdToolSerialNumber() {
+    return BLOCKIDTOOLSERIALNUMBER;
+  }
+
+  public int getBlockIdTimeStamp() {
+    return BLOCKIDTIMESTAMP;
+  }
+
+  public int getBlockIdDateTimeOfLastChangeInParameterSetSettings() {
+    return BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS;
+  }
+
+  public int getBlockIdParameterSetName() {
+    return BLOCKIDPARAMETERSETNAME;
+  }
+
+  public int getBlockIdTorqueValueUnit() {
+    return BLOCKIDTORQUEVALUEUNIT;
+  }
+
+  public int getBlockIdResultType() {
+    return BLOCKIDRESULTTYPE;
+  }
+
+  public int getBlockIdIdentifierResultPart2() {
+    return BLOCKIDIDENTIFIERRESULTPART2;
+  }
+
+  public int getBlockIdIdentifierResultPart3() {
+    return BLOCKIDIDENTIFIERRESULTPART3;
+  }
+
+  public int getBlockIdIdentifierResultPart4() {
+    return BLOCKIDIDENTIFIERRESULTPART4;
+  }
+
+  @Override
+  protected void serializeOpenProtocolMessageLastTighteningResultDataChild(WriteBuffer writeBuffer)
+      throws SerializationException {
+    PositionAware positionAware = writeBuffer;
+    int startPos = positionAware.getPos();
+    writeBuffer.pushContext("OpenProtocolMessageLastTighteningResultDataRev4");
+
+    // Const Field (blockIdCellId)
+    writeConstField(
+        "blockIdCellId",
+        BLOCKIDCELLID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (cellId)
+    writeSimpleField(
+        "cellId", cellId, writeUnsignedLong(writeBuffer, 32), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdChannelId)
+    writeConstField(
+        "blockIdChannelId",
+        BLOCKIDCHANNELID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (channelId)
+    writeSimpleField(
+        "channelId",
+        channelId,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueControllerName)
+    writeConstField(
+        "blockIdTorqueControllerName",
+        BLOCKIDTORQUECONTROLLERNAME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueControllerName)
+    writeSimpleField(
+        "torqueControllerName",
+        torqueControllerName,
+        writeString(writeBuffer, 200),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdVinNumber)
+    writeConstField(
+        "blockIdVinNumber",
+        BLOCKIDVINNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (vinNumber)
+    writeSimpleField(
+        "vinNumber", vinNumber, writeString(writeBuffer, 200), WithOption.WithEncoding("ASCII"));
+
+    // 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 (blockIdParameterSetNumber)
+    writeConstField(
+        "blockIdParameterSetNumber",
+        BLOCKIDPARAMETERSETNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (parameterSetNumber)
+    writeSimpleField(
+        "parameterSetNumber",
+        parameterSetNumber,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdStrategy)
+    writeConstField(
+        "blockIdStrategy",
+        BLOCKIDSTRATEGY,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (strategy)
+    writeSimpleEnumField(
+        "strategy",
+        "Strategy",
+        strategy,
+        new DataWriterEnumDefault<>(
+            Strategy::getValue, Strategy::name, writeUnsignedInt(writeBuffer, 16)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdStrategyOptions)
+    writeConstField(
+        "blockIdStrategyOptions",
+        BLOCKIDSTRATEGYOPTIONS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchSize)
+    writeConstField(
+        "blockIdBatchSize",
+        BLOCKIDBATCHSIZE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchSize)
+    writeSimpleField(
+        "batchSize",
+        batchSize,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchCounter)
+    writeConstField(
+        "blockIdBatchCounter",
+        BLOCKIDBATCHCOUNTER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchCounter)
+    writeSimpleField(
+        "batchCounter",
+        batchCounter,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningStatus)
+    writeConstField(
+        "blockIdTighteningStatus",
+        BLOCKIDTIGHTENINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (tighteningStatus)
+    writeSimpleEnumField(
+        "tighteningStatus",
+        "TighteningStatus",
+        tighteningStatus,
+        new DataWriterEnumDefault<>(
+            TighteningStatus::getValue, TighteningStatus::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdBatchStatus)
+    writeConstField(
+        "blockIdBatchStatus",
+        BLOCKIDBATCHSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (batchStatus)
+    writeSimpleEnumField(
+        "batchStatus",
+        "BatchStatus",
+        batchStatus,
+        new DataWriterEnumDefault<>(
+            BatchStatus::getValue, BatchStatus::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueStatus)
+    writeConstField(
+        "blockIdTorqueStatus",
+        BLOCKIDTORQUESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueStatus)
+    writeSimpleEnumField(
+        "torqueStatus",
+        "Status",
+        torqueStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleStatus)
+    writeConstField(
+        "blockIdAngleStatus",
+        BLOCKIDANGLESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleStatus)
+    writeSimpleEnumField(
+        "angleStatus",
+        "Status",
+        angleStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngleStatus)
+    writeConstField(
+        "blockIdRundownAngleStatus",
+        BLOCKIDRUNDOWNANGLESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngleStatus)
+    writeSimpleEnumField(
+        "rundownAngleStatus",
+        "Status",
+        rundownAngleStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringStatus)
+    writeConstField(
+        "blockIdCurrentMonitoringStatus",
+        BLOCKIDCURRENTMONITORINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringStatus)
+    writeSimpleEnumField(
+        "currentMonitoringStatus",
+        "Status",
+        currentMonitoringStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapStatus)
+    writeConstField(
+        "blockIdSelfTapStatus",
+        BLOCKIDSELFTAPSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapStatus)
+    writeSimpleEnumField(
+        "selfTapStatus",
+        "Status",
+        selfTapStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueMonitoringStatus)
+    writeConstField(
+        "blockIdPrevailTorqueMonitoringStatus",
+        BLOCKIDPREVAILTORQUEMONITORINGSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueMonitoringStatus)
+    writeSimpleEnumField(
+        "prevailTorqueMonitoringStatus",
+        "Status",
+        prevailTorqueMonitoringStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueCompensateStatus)
+    writeConstField(
+        "blockIdPrevailTorqueCompensateStatus",
+        BLOCKIDPREVAILTORQUECOMPENSATESTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueCompensateStatus)
+    writeSimpleEnumField(
+        "prevailTorqueCompensateStatus",
+        "Status",
+        prevailTorqueCompensateStatus,
+        new DataWriterEnumDefault<>(
+            Status::getValue, Status::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningErrorStatus)
+    writeConstField(
+        "blockIdTighteningErrorStatus",
+        BLOCKIDTIGHTENINGERRORSTATUS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueMinLimit)
+    writeConstField(
+        "blockIdTorqueMinLimit",
+        BLOCKIDTORQUEMINLIMIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueMinLimit)
+    writeSimpleField(
+        "torqueMinLimit",
+        torqueMinLimit,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueMaxLimit)
+    writeConstField(
+        "blockIdTorqueMaxLimit",
+        BLOCKIDTORQUEMAXLIMIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueMaxLimit)
+    writeSimpleField(
+        "torqueMaxLimit",
+        torqueMaxLimit,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueFinalTarget)
+    writeConstField(
+        "blockIdTorqueFinalTarget",
+        BLOCKIDTORQUEFINALTARGET,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueFinalTarget)
+    writeSimpleField(
+        "torqueFinalTarget",
+        torqueFinalTarget,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorque)
+    writeConstField(
+        "blockIdTorque",
+        BLOCKIDTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torque)
+    writeSimpleField(
+        "torque",
+        torque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleMin)
+    writeConstField(
+        "blockIdAngleMin",
+        BLOCKIDANGLEMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleMin)
+    writeSimpleField(
+        "angleMin",
+        angleMin,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngleMax)
+    writeConstField(
+        "blockIdAngleMax",
+        BLOCKIDANGLEMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angleMax)
+    writeSimpleField(
+        "angleMax",
+        angleMax,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdFinalAngleTarget)
+    writeConstField(
+        "blockIdFinalAngleTarget",
+        BLOCKIDFINALANGLETARGET,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (finalAngleTarget)
+    writeSimpleField(
+        "finalAngleTarget",
+        finalAngleTarget,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdAngle)
+    writeConstField(
+        "blockIdAngle",
+        BLOCKIDANGLE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (angle)
+    writeSimpleField(
+        "angle", angle, writeUnsignedBigInteger(writeBuffer, 40), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngleMin)
+    writeConstField(
+        "blockIdRundownAngleMin",
+        BLOCKIDRUNDOWNANGLEMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngleMin)
+    writeSimpleField(
+        "rundownAngleMin",
+        rundownAngleMin,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngleMax)
+    writeConstField(
+        "blockIdRundownAngleMax",
+        BLOCKIDRUNDOWNANGLEMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngleMax)
+    writeSimpleField(
+        "rundownAngleMax",
+        rundownAngleMax,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdRundownAngle)
+    writeConstField(
+        "blockIdRundownAngle",
+        BLOCKIDRUNDOWNANGLE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (rundownAngle)
+    writeSimpleField(
+        "rundownAngle",
+        rundownAngle,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringMin)
+    writeConstField(
+        "blockIdCurrentMonitoringMin",
+        BLOCKIDCURRENTMONITORINGMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringMin)
+    writeSimpleField(
+        "currentMonitoringMin",
+        currentMonitoringMin,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringMax)
+    writeConstField(
+        "blockIdCurrentMonitoringMax",
+        BLOCKIDCURRENTMONITORINGMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringMax)
+    writeSimpleField(
+        "currentMonitoringMax",
+        currentMonitoringMax,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdCurrentMonitoringValue)
+    writeConstField(
+        "blockIdCurrentMonitoringValue",
+        BLOCKIDCURRENTMONITORINGVALUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (currentMonitoringValue)
+    writeSimpleField(
+        "currentMonitoringValue",
+        currentMonitoringValue,
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapMin)
+    writeConstField(
+        "blockIdSelfTapMin",
+        BLOCKIDSELFTAPMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapMin)
+    writeSimpleField(
+        "selfTapMin",
+        selfTapMin,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapMax)
+    writeConstField(
+        "blockIdSelfTapMax",
+        BLOCKIDSELFTAPMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapMax)
+    writeSimpleField(
+        "selfTapMax",
+        selfTapMax,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSelfTapTorque)
+    writeConstField(
+        "blockIdSelfTapTorque",
+        BLOCKIDSELFTAPTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (selfTapTorque)
+    writeSimpleField(
+        "selfTapTorque",
+        selfTapTorque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueMonitoringMin)
+    writeConstField(
+        "blockIdPrevailTorqueMonitoringMin",
+        BLOCKIDPREVAILTORQUEMONITORINGMIN,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueMonitoringMin)
+    writeSimpleField(
+        "prevailTorqueMonitoringMin",
+        prevailTorqueMonitoringMin,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorqueMonitoringMax)
+    writeConstField(
+        "blockIdPrevailTorqueMonitoringMax",
+        BLOCKIDPREVAILTORQUEMONITORINGMAX,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorqueMonitoringMax)
+    writeSimpleField(
+        "prevailTorqueMonitoringMax",
+        prevailTorqueMonitoringMax,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdPrevailTorque)
+    writeConstField(
+        "blockIdPrevailTorque",
+        BLOCKIDPREVAILTORQUE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (prevailTorque)
+    writeSimpleField(
+        "prevailTorque",
+        prevailTorque,
+        writeUnsignedBigInteger(writeBuffer, 48),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTighteningId)
+    writeConstField(
+        "blockIdTighteningId",
+        BLOCKIDTIGHTENINGID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (tighteningId)
+    writeSimpleField(
+        "tighteningId",
+        tighteningId,
+        writeUnsignedBigInteger(writeBuffer, 80),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdJobSequenceNumber)
+    writeConstField(
+        "blockIdJobSequenceNumber",
+        BLOCKIDJOBSEQUENCENUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (jobSequenceNumber)
+    writeSimpleField(
+        "jobSequenceNumber",
+        jobSequenceNumber,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdSyncTighteningId)
+    writeConstField(
+        "blockIdSyncTighteningId",
+        BLOCKIDSYNCTIGHTENINGID,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (syncTighteningId)
+    writeSimpleField(
+        "syncTighteningId",
+        syncTighteningId,
+        writeUnsignedBigInteger(writeBuffer, 40),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdToolSerialNumber)
+    writeConstField(
+        "blockIdToolSerialNumber",
+        BLOCKIDTOOLSERIALNUMBER,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (toolSerialNumber)
+    writeSimpleField(
+        "toolSerialNumber",
+        toolSerialNumber,
+        writeString(writeBuffer, 112),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTimeStamp)
+    writeConstField(
+        "blockIdTimeStamp",
+        BLOCKIDTIMESTAMP,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (timeStamp)
+    writeSimpleField(
+        "timeStamp", timeStamp, writeString(writeBuffer, 152), WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdDateTimeOfLastChangeInParameterSetSettings)
+    writeConstField(
+        "blockIdDateTimeOfLastChangeInParameterSetSettings",
+        BLOCKIDDATETIMEOFLASTCHANGEINPARAMETERSETSETTINGS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (dateTimeOfLastChangeIndParameterSetSettings)
+    writeSimpleField(
+        "dateTimeOfLastChangeIndParameterSetSettings",
+        dateTimeOfLastChangeIndParameterSetSettings,
+        writeString(writeBuffer, 152),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdParameterSetName)
+    writeConstField(
+        "blockIdParameterSetName",
+        BLOCKIDPARAMETERSETNAME,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (parameterSetName)
+    writeSimpleField(
+        "parameterSetName",
+        parameterSetName,
+        writeString(writeBuffer, 200),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdTorqueValueUnit)
+    writeConstField(
+        "blockIdTorqueValueUnit",
+        BLOCKIDTORQUEVALUEUNIT,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (torqueValueUnit)
+    writeSimpleEnumField(
+        "torqueValueUnit",
+        "Unit",
+        torqueValueUnit,
+        new DataWriterEnumDefault<>(Unit::getValue, Unit::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdResultType)
+    writeConstField(
+        "blockIdResultType",
+        BLOCKIDRESULTTYPE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (resultType)
+    writeSimpleEnumField(
+        "resultType",
+        "ResultType",
+        resultType,
+        new DataWriterEnumDefault<>(
+            ResultType::getValue, ResultType::name, writeUnsignedShort(writeBuffer, 8)),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdIdentifierResultPart2)
+    writeConstField(
+        "blockIdIdentifierResultPart2",
+        BLOCKIDIDENTIFIERRESULTPART2,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (identifierResultPart2)
+    writeSimpleField(
+        "identifierResultPart2",
+        identifierResultPart2,
+        writeString(writeBuffer, 200),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdIdentifierResultPart3)
+    writeConstField(
+        "blockIdIdentifierResultPart3",
+        BLOCKIDIDENTIFIERRESULTPART3,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (identifierResultPart3)
+    writeSimpleField(
+        "identifierResultPart3",
+        identifierResultPart3,
+        writeString(writeBuffer, 200),
+        WithOption.WithEncoding("ASCII"));
+
+    // Const Field (blockIdIdentifierResultPart4)
+    writeConstField(
+        "blockIdIdentifierResultPart4",
+        BLOCKIDIDENTIFIERRESULTPART4,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithEncoding("ASCII"));
+
+    // Simple Field (identifierResultPart4)
+    writeSimpleField(
+        "identifierResultPart4",
+        identifierResultPart4,
+        writeString(writeBuffer, 200),
+        WithOption.WithEncoding("ASCII"));
+
+    writeBuffer.popContext("OpenProtocolMessageLastTighteningResultDataRev4");
+  }
+
+  @Override
+  public int getLengthInBytes() {
+    return (int) Math.ceil((float) getLengthInBits() / 8.0);
+  }
+
+  @Override
+  public int getLengthInBits() {
+    int lengthInBits = super.getLengthInBits();
+    OpenProtocolMessageLastTighteningResultDataRev4 _value = this;
+
+    // Const Field (blockIdCellId)
+    lengthInBits += 16;
+
+    // Simple field (cellId)
+    lengthInBits += 32;
+
+    // Const Field (blockIdChannelId)
+    lengthInBits += 16;
+
+    // Simple field (channelId)
+    lengthInBits += 16;
+
+    // Const Field (blockIdTorqueControllerName)
+    lengthInBits += 16;
+
+    // Simple field (torqueControllerName)
+    lengthInBits += 200;
+
+    // Const Field (blockIdVinNumber)
+    lengthInBits += 16;
+
+    // Simple field (vinNumber)
+    lengthInBits += 200;
+
+    // Const Field (blockIdJobId)
+    lengthInBits += 16;
+
+    // Simple field (jobId)
+    lengthInBits += 32;
+
+    // Const Field (blockIdParameterSetNumber)
+    lengthInBits += 16;
+
+    // Simple field (parameterSetNumber)
+    lengthInBits += 24;
+
+    // Const Field (blockIdStrategy)
+    lengthInBits += 16;
+
+    // Simple field (strategy)
+    lengthInBits += 16;
+
+    // Const Field (blockIdStrategyOptions)
+    lengthInBits += 16;
+
+    // Const Field (blockIdBatchSize)
+    lengthInBits += 16;
+
+    // Simple field (batchSize)
+    lengthInBits += 32;
+
+    // Const Field (blockIdBatchCounter)
+    lengthInBits += 16;
+
+    // Simple field (batchCounter)
+    lengthInBits += 32;
+
+    // Const Field (blockIdTighteningStatus)
+    lengthInBits += 16;
+
+    // Simple field (tighteningStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdBatchStatus)
+    lengthInBits += 16;
+
+    // Simple field (batchStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTorqueStatus)
+    lengthInBits += 16;
+
+    // Simple field (torqueStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdAngleStatus)
+    lengthInBits += 16;
+
+    // Simple field (angleStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdRundownAngleStatus)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngleStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdCurrentMonitoringStatus)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdSelfTapStatus)
+    lengthInBits += 16;
+
+    // Simple field (selfTapStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdPrevailTorqueMonitoringStatus)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueMonitoringStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdPrevailTorqueCompensateStatus)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueCompensateStatus)
+    lengthInBits += 8;
+
+    // Const Field (blockIdTighteningErrorStatus)
+    lengthInBits += 16;
+
+    // Const Field (blockIdTorqueMinLimit)
+    lengthInBits += 16;
+
+    // Simple field (torqueMinLimit)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorqueMaxLimit)
+    lengthInBits += 16;
+
+    // Simple field (torqueMaxLimit)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorqueFinalTarget)
+    lengthInBits += 16;
+
+    // Simple field (torqueFinalTarget)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTorque)
+    lengthInBits += 16;
+
+    // Simple field (torque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdAngleMin)
+    lengthInBits += 16;
+
+    // Simple field (angleMin)
+    lengthInBits += 40;
+
+    // Const Field (blockIdAngleMax)
+    lengthInBits += 16;
+
+    // Simple field (angleMax)
+    lengthInBits += 40;
+
+    // Const Field (blockIdFinalAngleTarget)
+    lengthInBits += 16;
+
+    // Simple field (finalAngleTarget)
+    lengthInBits += 40;
+
+    // Const Field (blockIdAngle)
+    lengthInBits += 16;
+
+    // Simple field (angle)
+    lengthInBits += 40;
+
+    // Const Field (blockIdRundownAngleMin)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngleMin)
+    lengthInBits += 40;
+
+    // Const Field (blockIdRundownAngleMax)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngleMax)
+    lengthInBits += 40;
+
+    // Const Field (blockIdRundownAngle)
+    lengthInBits += 16;
+
+    // Simple field (rundownAngle)
+    lengthInBits += 40;
+
+    // Const Field (blockIdCurrentMonitoringMin)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringMin)
+    lengthInBits += 24;
+
+    // Const Field (blockIdCurrentMonitoringMax)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringMax)
+    lengthInBits += 24;
+
+    // Const Field (blockIdCurrentMonitoringValue)
+    lengthInBits += 16;
+
+    // Simple field (currentMonitoringValue)
+    lengthInBits += 24;
+
+    // Const Field (blockIdSelfTapMin)
+    lengthInBits += 16;
+
+    // Simple field (selfTapMin)
+    lengthInBits += 48;
+
+    // Const Field (blockIdSelfTapMax)
+    lengthInBits += 16;
+
+    // Simple field (selfTapMax)
+    lengthInBits += 48;
+
+    // Const Field (blockIdSelfTapTorque)
+    lengthInBits += 16;
+
+    // Simple field (selfTapTorque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdPrevailTorqueMonitoringMin)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueMonitoringMin)
+    lengthInBits += 48;
+
+    // Const Field (blockIdPrevailTorqueMonitoringMax)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorqueMonitoringMax)
+    lengthInBits += 48;
+
+    // Const Field (blockIdPrevailTorque)
+    lengthInBits += 16;
+
+    // Simple field (prevailTorque)
+    lengthInBits += 48;
+
+    // Const Field (blockIdTighteningId)
+    lengthInBits += 16;
+
+    // Simple field (tighteningId)
+    lengthInBits += 80;
+
+    // Const Field (blockIdJobSequenceNumber)
+    lengthInBits += 16;
+
+    // Simple field (jobSequenceNumber)
+    lengthInBits += 40;
+
+    // Const Field (blockIdSyncTighteningId)
+    lengthInBits += 16;
+
+    // Simple field (syncTighteningId)
+    lengthInBits += 40;
+
+    // Const Field (blockIdToolSerialNumber)
+    lengthInBits += 16;
+
+    // Simple field (toolSerialNumber)
+    lengthInBits += 112;
+
+    // Const Field (blockIdTimeStamp)
+    lengthInBits += 16;
+
+    // Simple field (timeStamp)
+    lengthInBits += 152;
+
+    // Const Field (blockIdDateTimeOfLastChangeInParameterSetSettings)
+    lengthInBits += 16;
+
+    // Simple field (dateTimeOfLastChangeIndParameterSetSettings)
+    lengthInBits += 152;
+
+    // Const Field (blockIdParameterSetName)
+    lengthInBits += 16;
+
+    // Simple field (parameterSetName)
+    lengthInBits += 200;
+
+    // Const Field (blockIdTorqueValueUnit)
+    lengthInBits += 16;
+
+    // Simple field (torqueValueUnit)
+    lengthInBits += 8;
+
... 26383 lines suppressed ...