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 2024/04/19 12:14:22 UTC

(plc4x) branch develop updated: chore: Added newly generated files.

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 a807ae7d1e chore: Added newly generated files.
a807ae7d1e is described below

commit a807ae7d1e313abfe34f1548804146582e838a0d
Author: Christofer Dutz <cd...@apache.org>
AuthorDate: Fri Apr 19 14:14:14 2024 +0200

    chore: Added newly generated files.
---
 .../tcp/Modbus-all-datatypes-little-endian.xml     | 3410 ++++++++++++++++++++
 plc4go/spi/testutils/mock_TestingLog_test.go       |  169 +
 2 files changed, 3579 insertions(+)

diff --git a/plc4go/assets/testing/protocols/modbus/tcp/Modbus-all-datatypes-little-endian.xml b/plc4go/assets/testing/protocols/modbus/tcp/Modbus-all-datatypes-little-endian.xml
new file mode 100644
index 0000000000..1c01f46872
--- /dev/null
+++ b/plc4go/assets/testing/protocols/modbus/tcp/Modbus-all-datatypes-little-endian.xml
@@ -0,0 +1,3410 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  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.
+ -->
+<test:driver-testsuite xmlns:test="https://plc4x.apache.org/schemas/driver-testsuite.xsd"
+                       byteOrder="BIG_ENDIAN">
+
+  <name>Modbus All Types</name>
+
+  <protocolName>modbus</protocolName>
+  <outputFlavor>read-write</outputFlavor>
+
+  <driver-name>modbus-tcp</driver-name>
+  <driver-parameters>
+    <parameter>
+      <name>default-payload-byte-order</name>
+      <value>LITTLE_ENDIAN</value>
+    </parameter>
+  </driver-parameters>
+
+  <testcase>
+    <name>Single element read request: holding-register:1:BOOL</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:1:BOOL</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="Send Modbus Read Request">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">0</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="Receive Modbus Read Response">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">5</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0x0100</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">0</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>Single element write request: holding-register:1:BOOL</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:1:BOOL</address>
+              <value>true</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="Send Modbus Write Request">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">9</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">0</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0x0100</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="Receive Modbus Write Response">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">0</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">0</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">BOOL</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcBOOL dataType="bit" bitLength="1">true</PlcBOOL>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>10 Query: Trans: 3; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:2:BYTE</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">1</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">5</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0x2a00</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">1</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">BYTE</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcBYTE dataType="int" bitLength="8">42</PlcBYTE>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>13 Query: Trans: 4; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:2:BYTE</address>
+              <value>42</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">9</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">1</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0x2a00</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">1</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">1</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">BYTE</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcBYTE dataType="int" bitLength="8">42</PlcBYTE>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>16 Query: Trans: 5; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:3:WORD</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">2</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">5</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0xb8a5</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">2</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">WORD</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcWORD dataType="int" bitLength="16">42424</PlcWORD>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>19 Query: Trans: 6; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:3:WORD</address>
+              <value>42424</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">9</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">2</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0xb8a5</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">2</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">2</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">WORD</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcWORD dataType="int" bitLength="16">42424</PlcWORD>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>22 Query: Trans: 7; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:4:DWORD</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">3</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">7</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">4</byteCount>
+                  <value dataType="byte" bitLength="32">0xb888defc</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">3</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">DWORD</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcDWORD dataType="int" bitLength="32">4242442424</PlcDWORD>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>25 Query: Trans: 8; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:4:DWORD</address>
+              <value>4242442424</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">11</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">3</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                  <byteCount dataType="uint" bitLength="8">4</byteCount>
+                  <value dataType="byte" bitLength="32">0xb888defc</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">3</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">3</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">DWORD</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcDWORD dataType="int" bitLength="32">4242442424</PlcDWORD>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>28 Query: Trans: 9; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:10:SINT</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">9</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">5</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0xd600</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">9</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">SINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcSINT dataType="int" bitLength="8">-42</PlcSINT>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>31 Query: Trans: 10; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:10:SINT</address>
+              <value>-42</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">9</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">9</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0xd600</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">9</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">9</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">SINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcSINT dataType="int" bitLength="8">-42</PlcSINT>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>34 Query: Trans: 11; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:11:USINT</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">10</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">5</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0x2a00</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">10</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">USINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcUSINT dataType="int" bitLength="8">42</PlcUSINT>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>37 Query: Trans: 12; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:11:USINT</address>
+              <value>42</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">9</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">10</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0x2a00</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">10</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">10</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">USINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcUSINT dataType="int" bitLength="8">42</PlcUSINT>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>40 Query: Trans: 13; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:12:INT</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">11</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">5</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0x88f6</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">11</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="24" encoding="UTF-8">INT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcINT dataType="int" bitLength="16">-2424</PlcINT>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>43 Query: Trans: 14; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:12:INT</address>
+              <value>-2424</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">9</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">11</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0x88f6</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">11</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">11</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="24" encoding="UTF-8">INT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcINT dataType="int" bitLength="16">-2424</PlcINT>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>46 Query: Trans: 15; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:13:UINT</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">12</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">5</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0xb8a5</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">12</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">UINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcUINT dataType="int" bitLength="16">42424</PlcUINT>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>49 Query: Trans: 16; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:13:UINT</address>
+              <value>42424</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">9</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">12</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                  <byteCount dataType="uint" bitLength="8">2</byteCount>
+                  <value dataType="byte" bitLength="16">0xb8a5</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">12</startingAddress>
+                  <quantity dataType="uint" bitLength="16">1</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">12</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">UINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcUINT dataType="int" bitLength="16">42424</PlcUINT>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>52 Query: Trans: 17; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:14:DINT</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">13</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">7</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">4</byteCount>
+                  <value dataType="byte" bitLength="32">0x489f8cf1</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">13</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">DINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcDINT dataType="int" bitLength="32">-242442424</PlcDINT>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>55 Query: Trans: 18; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:14:DINT</address>
+              <value>-242442424</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">11</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">13</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                  <byteCount dataType="uint" bitLength="8">4</byteCount>
+                  <value dataType="byte" bitLength="32">0x489f8cf1</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">13</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">13</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">DINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcDINT dataType="int" bitLength="32">-242442424</PlcDINT>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>58 Query: Trans: 19; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:16:UDINT</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">15</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">7</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">4</byteCount>
+                  <value dataType="byte" bitLength="32">0xb888defc</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">15</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">UDINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcUDINT dataType="int" bitLength="32">4242442424</PlcUDINT>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>61 Query: Trans: 20; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:16:UDINT</address>
+              <value>4242442424</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">11</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">15</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                  <byteCount dataType="uint" bitLength="8">4</byteCount>
+                  <value dataType="byte" bitLength="32">0xb888defc</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">15</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">15</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">UDINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcUDINT dataType="int" bitLength="32">4242442424</PlcUDINT>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>64 Query: Trans: 21; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:18:LINT</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">17</startingAddress>
+                  <quantity dataType="uint" bitLength="16">4</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">11</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">8</byteCount>
+                  <value dataType="byte" bitLength="64">0x4eb6fbb217d11fc5</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">17</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">LINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcLINT dataType="int" bitLength="64">-4242442424242424242</PlcLINT>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>67 Query: Trans: 22; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:18:LINT</address>
+              <value>-4242442424242424242</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">15</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">17</startingAddress>
+                  <quantity dataType="uint" bitLength="16">4</quantity>
+                  <byteCount dataType="uint" bitLength="8">8</byteCount>
+                  <value dataType="byte" bitLength="64">0x4eb6fbb217d11fc5</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">17</startingAddress>
+                  <quantity dataType="uint" bitLength="16">4</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">17</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">LINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcLINT dataType="int" bitLength="64">-4242442424242424242</PlcLINT>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>70 Query: Trans: 23; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:22:ULINT</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">21</startingAddress>
+                  <quantity dataType="uint" bitLength="16">4</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">11</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">8</byteCount>
+                  <value dataType="byte" bitLength="64">0xb249044de82ee03a</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">21</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">ULINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcULINT dataType="int" bitLength="64">4242442424242424242</PlcULINT>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>73 Query: Trans: 24; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:22:ULINT</address>
+              <value>4242442424242424242</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">15</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">21</startingAddress>
+                  <quantity dataType="uint" bitLength="16">4</quantity>
+                  <byteCount dataType="uint" bitLength="8">8</byteCount>
+                  <value dataType="byte" bitLength="64">0xb249044de82ee03a</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">21</startingAddress>
+                  <quantity dataType="uint" bitLength="16">4</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">21</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">ULINT</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcULINT dataType="int" bitLength="64">4242442424242424242</PlcULINT>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>76 Query: Trans: 25; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:26:REAL</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">25</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">7</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">4</byteCount>
+                  <value dataType="byte" bitLength="32">0xdc0f4940</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">25</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcREAL dataType="float" bitLength="32">3.1415929794311523</PlcREAL>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>79 Query: Trans: 26; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:26:REAL</address>
+              <value>3.141593</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">11</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">25</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                  <byteCount dataType="uint" bitLength="8">4</byteCount>
+                  <value dataType="byte" bitLength="32">0xdc0f4940</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">25</startingAddress>
+                  <quantity dataType="uint" bitLength="16">2</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">25</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="32" encoding="UTF-8">REAL</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcREAL dataType="float" bitLength="32">3.1415929794311523</PlcREAL>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>82 Query: Trans: 27; Unit: 1, Func: 3: Read Holding Registers</name>
+    <steps>
+      <api-request name="Receive Read Request from application">
+        <TestReadRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestTag">
+              <name>hurz</name>
+              <address>holding-register:28:LREAL</address>
+            </tag>
+          </tags>
+        </TestReadRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">27</startingAddress>
+                  <quantity dataType="uint" bitLength="16">4</quantity>
+                </ModbusPDUReadHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">11</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+                <ModbusPDUReadHoldingRegistersResponse>
+                  <byteCount dataType="uint" bitLength="8">8</byteCount>
+                  <value dataType="byte" bitLength="64">0xcf5f148b0abf0540</value>
+                </ModbusPDUReadHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Read Response to application">
+        <PlcReadResponse>
+          <request>
+            <PlcReadRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">27</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">LREAL</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+            </PlcReadRequest>
+          </request>
+          <values isList="true">
+            <hurz>
+              <ResponseItem>
+                <code dataType="string" bitLength="16" encoding="UTF-8">OK</code>
+                <value>
+                  <PlcLREAL dataType="float" bitLength="64">2.71828182846</PlcLREAL>
+                </value>
+              </ResponseItem>
+            </hurz>
+          </values>
+        </PlcReadResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <testcase>
+    <name>85 Query: Trans: 28; Unit: 1, Func: 16: Write Multiple Registers</name>
+    <steps>
+      <api-request name="Receive Write Request from application">
+        <TestWriteRequest>
+          <tags isList="true">
+            <tag className="org.apache.plc4x.test.driver.internal.api.TestValueTag">
+              <name>hurz</name>
+              <address>holding-register:28:LREAL</address>
+              <value>2.71828182846</value>
+            </tag>
+          </tags>
+        </TestWriteRequest>
+      </api-request>
+      <outgoing-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>false</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">15</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersRequest>
+                  <startingAddress dataType="uint" bitLength="16">27</startingAddress>
+                  <quantity dataType="uint" bitLength="16">4</quantity>
+                  <byteCount dataType="uint" bitLength="8">8</byteCount>
+                  <value dataType="byte" bitLength="64">0xcf5f148b0abf0540</value>
+                </ModbusPDUWriteMultipleHoldingRegistersRequest>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </outgoing-plc-message>
+      <incoming-plc-message name="">
+        <parser-arguments>
+          <driverType>MODBUS_TCP</driverType>
+          <response>true</response>
+        </parser-arguments>
+        <ModbusADU>
+          <ModbusTcpADU>
+            <transactionIdentifier dataType="uint" bitLength="16">1</transactionIdentifier>
+            <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+            <length dataType="uint" bitLength="16">6</length>
+            <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+            <pdu>
+              <ModbusPDU>
+                <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+                <functionFlag dataType="uint" bitLength="7">16</functionFlag>
+                <ModbusPDUWriteMultipleHoldingRegistersResponse>
+                  <startingAddress dataType="uint" bitLength="16">27</startingAddress>
+                  <quantity dataType="uint" bitLength="16">4</quantity>
+                </ModbusPDUWriteMultipleHoldingRegistersResponse>
+              </ModbusPDU>
+            </pdu>
+          </ModbusTcpADU>
+        </ModbusADU>
+      </incoming-plc-message>
+      <api-response name="Report Write Response to application">
+        <PlcWriteResponse>
+          <request>
+            <PlcWriteRequest>
+              <PlcTagRequest>
+                <tags isList="true">
+                  <hurz>
+                    <ModbusTagHoldingRegister>
+                      <address dataType="uint" bitLength="16">27</address>
+                      <numberOfElements dataType="uint" bitLength="16">1</numberOfElements>
+                      <dataType dataType="string" bitLength="40" encoding="UTF-8">LREAL</dataType>
+                    </ModbusTagHoldingRegister>
+                  </hurz>
+                </tags>
+              </PlcTagRequest>
+              <values isList="true">
+                <hurz>
+                  <PlcLREAL dataType="float" bitLength="64">2.71828182846</PlcLREAL>
+                </hurz>
+              </values>
+            </PlcWriteRequest>
+          </request>
+          <responseCodes isList="true">
+            <hurz>
+              <ResponseCode dataType="uint" bitLength="8" stringRepresentation="OK">1</ResponseCode>
+            </hurz>
+          </responseCodes>
+        </PlcWriteResponse>
+      </api-response>
+    </steps>
+  </testcase>
+
+  <!--testcase>
+    <name>88 Query: Trans: 29; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>001d000000060103001b0004</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">29</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">27</startingAddress>
+                <quantity dataType="uint" bitLength="16">4</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>89 Response: Trans: 29; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>001d0000000b0103084005bf0a8b145fcf</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">29</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">11</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">8</byteCount>
+                <value dataType="byte" bitLength="64">0x4005bf0a8b145fcf</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>91 Query: Trans: 30; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>001e00000006010300090001</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">30</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">9</startingAddress>
+                <quantity dataType="uint" bitLength="16">1</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>92 Response: Trans: 30; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>001e0000000501030200d6</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">30</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">5</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">2</byteCount>
+                <value dataType="byte" bitLength="16">0x00d6</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>94 Query: Trans: 31; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>001f00000006010300000001</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">31</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">0</startingAddress>
+                <quantity dataType="uint" bitLength="16">1</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>95 Response: Trans: 31; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>001f000000050103020001</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">31</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">5</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">2</byteCount>
+                <value dataType="byte" bitLength="16">0x0001</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>97 Query: Trans: 32; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002000000006010300150004</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">32</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">21</startingAddress>
+                <quantity dataType="uint" bitLength="16">4</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>98 Response: Trans: 32; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>00200000000b0103083ae02ee84d0449b2</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">32</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">11</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">8</byteCount>
+                <value dataType="byte" bitLength="64">0x3ae02ee84d0449b2</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>100 Query: Trans: 33; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>0021000000060103000a0001</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">33</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">10</startingAddress>
+                <quantity dataType="uint" bitLength="16">1</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>101 Response: Trans: 33; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002100000005010302002a</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">33</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">5</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">2</byteCount>
+                <value dataType="byte" bitLength="16">0x002a</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>103 Query: Trans: 34; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>0022000000060103000b0001</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">34</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">11</startingAddress>
+                <quantity dataType="uint" bitLength="16">1</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>104 Response: Trans: 34; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002200000005010302f688</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">34</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">5</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">2</byteCount>
+                <value dataType="byte" bitLength="16">0xf688</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>106 Query: Trans: 35; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>0023000000060103000f0002</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">35</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">15</startingAddress>
+                <quantity dataType="uint" bitLength="16">2</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>107 Response: Trans: 35; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002300000007010304fcde88b8</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">35</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">7</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">4</byteCount>
+                <value dataType="byte" bitLength="32">0xfcde88b8</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>109 Query: Trans: 36; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002400000006010300010001</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">36</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">1</startingAddress>
+                <quantity dataType="uint" bitLength="16">1</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>110 Response: Trans: 36; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002400000005010302002a</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">36</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">5</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">2</byteCount>
+                <value dataType="byte" bitLength="16">0x002a</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>112 Query: Trans: 37; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002500000006010300110004</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">37</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">17</startingAddress>
+                <quantity dataType="uint" bitLength="16">4</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>113 Response: Trans: 37; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>00250000000b010308c51fd117b2fbb64e</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">37</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">11</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">8</byteCount>
+                <value dataType="byte" bitLength="64">0xc51fd117b2fbb64e</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>115 Query: Trans: 38; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002600000006010300190002</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">38</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">25</startingAddress>
+                <quantity dataType="uint" bitLength="16">2</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>116 Response: Trans: 38; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>00260000000701030440490fdc</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">38</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">7</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">4</byteCount>
+                <value dataType="byte" bitLength="32">0x40490fdc</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>118 Query: Trans: 39; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>0027000000060103000c0001</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">39</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">12</startingAddress>
+                <quantity dataType="uint" bitLength="16">1</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>119 Response: Trans: 39; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002700000005010302a5b8</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">39</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">5</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">2</byteCount>
+                <value dataType="byte" bitLength="16">0xa5b8</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>121 Query: Trans: 40; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>0028000000060103000d0002</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">40</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">13</startingAddress>
+                <quantity dataType="uint" bitLength="16">2</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>122 Response: Trans: 40; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002800000007010304f18c9f48</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">40</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">7</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">4</byteCount>
+                <value dataType="byte" bitLength="32">0xf18c9f48</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>124 Query: Trans: 41; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002900000006010300020001</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">41</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">2</startingAddress>
+                <quantity dataType="uint" bitLength="16">1</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>125 Response: Trans: 41; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002900000005010302a5b8</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">41</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">5</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">2</byteCount>
+                <value dataType="byte" bitLength="16">0xa5b8</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>127 Query: Trans: 42; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002a00000006010300030002</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">42</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">6</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersRequest>
+                <startingAddress dataType="uint" bitLength="16">3</startingAddress>
+                <quantity dataType="uint" bitLength="16">2</quantity>
+              </ModbusPDUReadHoldingRegistersRequest>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>128 Response: Trans: 42; Unit: 1, Func: 3: Read Holding Registers</name>
+    <raw>002a00000007010304fcde88b8</raw>
+    <root-type>ModbusADU</root-type>
+    <xml>
+      <ModbusADU>
+        <ModbusTcpADU>
+          <transactionIdentifier dataType="uint" bitLength="16">42</transactionIdentifier>
+          <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier>
+          <length dataType="uint" bitLength="16">7</length>
+          <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier>
+          <pdu>
+            <ModbusPDU>
+              <errorFlag dataType="bit" bitLength="1">false</errorFlag>
+              <functionFlag dataType="uint" bitLength="7">3</functionFlag>
+              <ModbusPDUReadHoldingRegistersResponse>
+                <byteCount dataType="uint" bitLength="8">4</byteCount>
+                <value dataType="byte" bitLength="32">0xfcde88b8</value>
+              </ModbusPDUReadHoldingRegistersResponse>
+            </ModbusPDU>
+          </pdu>
+        </ModbusTcpADU>
+      </ModbusADU>
+    </xml>
+  </testcase-->
+
+</test:driver-testsuite>
\ No newline at end of file
diff --git a/plc4go/spi/testutils/mock_TestingLog_test.go b/plc4go/spi/testutils/mock_TestingLog_test.go
new file mode 100644
index 0000000000..00d875de48
--- /dev/null
+++ b/plc4go/spi/testutils/mock_TestingLog_test.go
@@ -0,0 +1,169 @@
+/*
+ * 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.
+ */
+
+// Code generated by mockery v2.42.2. DO NOT EDIT.
+
+package testutils
+
+import mock "github.com/stretchr/testify/mock"
+
+// MockTestingLog is an autogenerated mock type for the TestingLog type
+type MockTestingLog struct {
+	mock.Mock
+}
+
+type MockTestingLog_Expecter struct {
+	mock *mock.Mock
+}
+
+func (_m *MockTestingLog) EXPECT() *MockTestingLog_Expecter {
+	return &MockTestingLog_Expecter{mock: &_m.Mock}
+}
+
+// Helper provides a mock function with given fields:
+func (_m *MockTestingLog) Helper() {
+	_m.Called()
+}
+
+// MockTestingLog_Helper_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Helper'
+type MockTestingLog_Helper_Call struct {
+	*mock.Call
+}
+
+// Helper is a helper method to define mock.On call
+func (_e *MockTestingLog_Expecter) Helper() *MockTestingLog_Helper_Call {
+	return &MockTestingLog_Helper_Call{Call: _e.mock.On("Helper")}
+}
+
+func (_c *MockTestingLog_Helper_Call) Run(run func()) *MockTestingLog_Helper_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run()
+	})
+	return _c
+}
+
+func (_c *MockTestingLog_Helper_Call) Return() *MockTestingLog_Helper_Call {
+	_c.Call.Return()
+	return _c
+}
+
+func (_c *MockTestingLog_Helper_Call) RunAndReturn(run func()) *MockTestingLog_Helper_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
+// Log provides a mock function with given fields: args
+func (_m *MockTestingLog) Log(args ...interface{}) {
+	var _ca []interface{}
+	_ca = append(_ca, args...)
+	_m.Called(_ca...)
+}
+
+// MockTestingLog_Log_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Log'
+type MockTestingLog_Log_Call struct {
+	*mock.Call
+}
+
+// Log is a helper method to define mock.On call
+//   - args ...interface{}
+func (_e *MockTestingLog_Expecter) Log(args ...interface{}) *MockTestingLog_Log_Call {
+	return &MockTestingLog_Log_Call{Call: _e.mock.On("Log",
+		append([]interface{}{}, args...)...)}
+}
+
+func (_c *MockTestingLog_Log_Call) Run(run func(args ...interface{})) *MockTestingLog_Log_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		variadicArgs := make([]interface{}, len(args)-0)
+		for i, a := range args[0:] {
+			if a != nil {
+				variadicArgs[i] = a.(interface{})
+			}
+		}
+		run(variadicArgs...)
+	})
+	return _c
+}
+
+func (_c *MockTestingLog_Log_Call) Return() *MockTestingLog_Log_Call {
+	_c.Call.Return()
+	return _c
+}
+
+func (_c *MockTestingLog_Log_Call) RunAndReturn(run func(...interface{})) *MockTestingLog_Log_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
+// Logf provides a mock function with given fields: format, args
+func (_m *MockTestingLog) Logf(format string, args ...interface{}) {
+	var _ca []interface{}
+	_ca = append(_ca, format)
+	_ca = append(_ca, args...)
+	_m.Called(_ca...)
+}
+
+// MockTestingLog_Logf_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Logf'
+type MockTestingLog_Logf_Call struct {
+	*mock.Call
+}
+
+// Logf is a helper method to define mock.On call
+//   - format string
+//   - args ...interface{}
+func (_e *MockTestingLog_Expecter) Logf(format interface{}, args ...interface{}) *MockTestingLog_Logf_Call {
+	return &MockTestingLog_Logf_Call{Call: _e.mock.On("Logf",
+		append([]interface{}{format}, args...)...)}
+}
+
+func (_c *MockTestingLog_Logf_Call) Run(run func(format string, args ...interface{})) *MockTestingLog_Logf_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		variadicArgs := make([]interface{}, len(args)-1)
+		for i, a := range args[1:] {
+			if a != nil {
+				variadicArgs[i] = a.(interface{})
+			}
+		}
+		run(args[0].(string), variadicArgs...)
+	})
+	return _c
+}
+
+func (_c *MockTestingLog_Logf_Call) Return() *MockTestingLog_Logf_Call {
+	_c.Call.Return()
+	return _c
+}
+
+func (_c *MockTestingLog_Logf_Call) RunAndReturn(run func(string, ...interface{})) *MockTestingLog_Logf_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
+// NewMockTestingLog creates a new instance of MockTestingLog. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+// The first argument is typically a *testing.T value.
+func NewMockTestingLog(t interface {
+	mock.TestingT
+	Cleanup(func())
+}) *MockTestingLog {
+	mock := &MockTestingLog{}
+	mock.Mock.Test(t)
+
+	t.Cleanup(func() { mock.AssertExpectations(t) })
+
+	return mock
+}