You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2020/09/26 15:52:38 UTC

[plc4x] branch develop updated (4442cc3 -> 898cd93)

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

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


    from 4442cc3  Merge branch 'develop' of https://gitbox.apache.org/repos/asf/plc4x into feature/plc4c
     add 2d2c176  Cast to PLCValue within data-io-template
     add 5d54f43  Modbus.spec Sample Change
     add 0dad0a0  Add Datatype to ModbusField classes
     add 3239c78  Add sample PLCValue classes based on IEC 61131 datatypes.
     add 18247a4  Tidied up the IEC type classes INT and UINT.
     add 06bc37a  Fixed support for PLCLists for INT and UINT datatypes
     add 2028dcf  Cleaned up, it now supports BOOL, INT, UINT and REAL values.
     add 7432353  Test cases for some Encoding and Modbus Field methods.
     add 926116b  Add support for DINT data types
     add 67081d9  Included cast in data-io-template for value in if statement. This is to avoid needlessly casting it.
     add 1c2e2b6  Added test cases for negative REAL numbers.
     add 147aaab  Added most of the other datatypes and support in Modbus
     add c9d6ffa  Modbus now supports all numeric and string and char datatypes
     add 4e9ec88  Feature/Modbus Datatype - IEC 61131
     new 4e4c155  Change the data-io template to use DataType Instead of List
     new 83957d3  Tidying up.
     new 199c784  Merge branch 'develop' of https://github.com/apache/plc4x into Feature/ModbusDataType
     new 4c75216  Modbus Write Extended Register Support
     new 46941a9  Feature/Modbus Write Extended Registers
     new df0adc8  - Continued Ben's great work towards this. - Refactored the existing Java type based PlcValues to a more generic IEC 61131-3 based type system. - Got everything working, all tests to pass etc and did some testing of S7 and Modbus reading.
     new e6312e2  - Undid a mess I created ;-)
     new d108a8f  - A bit of housekeeping.
     new cb80703  - Made the driver catch exceptions and report them better.
     new 898cd93  - A bit of housekeeping.

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


Summary of changes:
 RELEASE_NOTES                                      |   14 +-
 .../resources/templates/java/data-io-template.ftlh |   18 +-
 .../org/apache/plc4x/java/api/value/PlcBOOL.java   |  295 ++++
 .../org/apache/plc4x/java/api/value/PlcBYTE.java   |  202 +++
 .../apache/plc4x/java/api/value/PlcBoolean.java    |  168 --
 .../org/apache/plc4x/java/api/value/PlcByte.java   |  168 --
 .../org/apache/plc4x/java/api/value/PlcCHAR.java   |  224 +++
 .../org/apache/plc4x/java/api/value/PlcDINT.java   |  283 +++
 .../org/apache/plc4x/java/api/value/PlcDWORD.java  |  205 +++
 .../{PlcSimpleValue.java => PlcIECValue.java}      |   12 +-
 .../org/apache/plc4x/java/api/value/PlcINT.java    |  285 +++
 .../apache/plc4x/java/api/value/PlcInteger.java    |  168 --
 .../org/apache/plc4x/java/api/value/PlcLINT.java   |  281 +++
 .../api/value/{PlcDouble.java => PlcLREAL.java}    |  110 +-
 .../org/apache/plc4x/java/api/value/PlcLWORD.java  |  218 +++
 .../org/apache/plc4x/java/api/value/PlcLong.java   |  168 --
 .../java/api/value/{PlcFloat.java => PlcREAL.java} |  109 +-
 .../org/apache/plc4x/java/api/value/PlcSINT.java   |  290 ++++
 .../org/apache/plc4x/java/api/value/PlcShort.java  |  168 --
 .../org/apache/plc4x/java/api/value/PlcUDINT.java  |  314 ++++
 .../org/apache/plc4x/java/api/value/PlcUINT.java   |  295 ++++
 .../org/apache/plc4x/java/api/value/PlcULINT.java  |  326 ++++
 .../org/apache/plc4x/java/api/value/PlcUSINT.java  |  310 ++++
 .../org/apache/plc4x/java/api/value/PlcValues.java |   56 +-
 .../org/apache/plc4x/java/api/value/PlcWCHAR.java  |  205 +++
 .../org/apache/plc4x/java/api/value/PlcWORD.java   |  187 ++
 .../java/abeth/protocol/AbEthProtocolLogic.java    |    7 +-
 .../java/abeth/protocol/Plc4xAbEthProtocol.java    |    4 +-
 .../plc4x/java/ads/field/AdsFieldHandler.java      |   81 +-
 .../plc4x/java/ads/protocol/AdsProtocolLogic.java  |   31 +-
 .../attic/protocol/util/LittleEndianDecoder.java   |   62 +-
 .../src/test/resources/testsuite/AdsDriverIT.xml   |   12 +-
 .../java/eip/readwrite/field/EipFieldHandler.java  |   12 +-
 .../eip/readwrite/protocol/EipProtocolLogic.java   |   22 +-
 .../resources/testsuite/EIPDriverTestsuite.xml     |    2 +-
 .../readwrite/field/FirmataFieldHandler.java       |   13 +-
 .../readwrite/protocol/FirmataProtocolLogic.java   |   11 +-
 .../java/knxnetip/field/KnxNetIpFieldHandler.java  |    1 -
 .../java/modbus/field/ModbusExtendedRegister.java  |   22 +-
 .../plc4x/java/modbus/field/ModbusField.java       |   32 +-
 .../plc4x/java/modbus/field/ModbusFieldCoil.java   |   22 +-
 .../modbus/field/ModbusFieldDiscreteInput.java     |   22 +-
 .../java/modbus/field/ModbusFieldHandler.java      | 1813 +++++++++++++++++++-
 .../modbus/field/ModbusFieldHoldingRegister.java   |   22 +-
 .../modbus/field/ModbusFieldInputRegister.java     |   22 +-
 .../java/modbus/protocol/ModbusProtocolLogic.java  |  288 +++-
 .../apache/plc4x/java/modbus/ModbusEncodeTest.java |  178 ++
 .../plc4x/java/modbus/ModbusFieldDataTypeTest.java |   98 ++
 .../apache/plc4x/java/modbus/ModbusFieldTest.java  |   71 +
 .../test/resources/testsuite/ModbusTestsuite.xml   |   57 +
 .../opcua/connection/OpcuaTcpPlcConnection.java    |   26 +-
 .../java/opcua/protocol/OpcuaPlcFieldHandler.java  |   14 +-
 .../plc4x/java/s7/readwrite/field/S7Field.java     |    4 +-
 .../java/s7/readwrite/field/S7PlcFieldHandler.java |   14 +-
 .../s7/src/test/resources/testsuite/S7DriverIT.xml |    2 +-
 .../simulated/field/SimulatedFieldHandler.java     |   14 +-
 .../simulated/connection/SimulatedDeviceTest.java  |    4 +-
 .../watertank/service/WaterTankService.java        |    4 +-
 .../plc4x/edgent/PlcConnectionAdapterTest.java     |    1 -
 .../plc4x/java/spi/generation/ReadBuffer.java      |   24 +-
 .../java/spi/messages/DefaultPlcReadResponse.java  |    2 +-
 .../java/opm/PlcEntityManagerComplexTest.java      |    4 +-
 .../org/apache/plc4x/java/scraper/ScraperTest.java |    6 +-
 .../triggeredscraper/TriggeredScraperImplTest.java |   16 +-
 .../ads/src/main/resources/protocols/ads/ads.mspec |   60 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |   28 +-
 .../main/resources/protocols/modbus/modbus.mspec   |  137 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |   30 +-
 .../java/examples/helloinflux/HelloInflux.java     |   22 +-
 .../plc4c/generated-sources/modbus/src/data_item.c |  248 ++-
 .../modbus_pdu_write_file_record_request_item.c    |   12 +-
 .../modbus_pdu_write_file_record_response_item.c   |   14 +-
 sandbox/plc4c/generated-sources/s7/src/data_item.c |   30 +-
 .../plc4x/java/bacnetip/ede/model/Datapoint.java   |   20 +-
 .../bacnetip/protocol/BacNetIpProtocolLogic.java   |    6 +-
 .../plc4x/java/df1/protocol/Plc4XDf1Protocol.java  |    6 +-
 src/site/asciidoc/users/protocols/modbus.adoc      |    7 +-
 77 files changed, 7426 insertions(+), 1313 deletions(-)
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBOOL.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBYTE.java
 delete mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBoolean.java
 delete mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcByte.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcCHAR.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDINT.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDWORD.java
 copy plc4j/api/src/main/java/org/apache/plc4x/java/api/value/{PlcSimpleValue.java => PlcIECValue.java} (88%)
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcINT.java
 delete mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcInteger.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLINT.java
 rename plc4j/api/src/main/java/org/apache/plc4x/java/api/value/{PlcDouble.java => PlcLREAL.java} (51%)
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLWORD.java
 delete mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLong.java
 rename plc4j/api/src/main/java/org/apache/plc4x/java/api/value/{PlcFloat.java => PlcREAL.java} (50%)
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcSINT.java
 delete mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcShort.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUDINT.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUINT.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcULINT.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUSINT.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWCHAR.java
 create mode 100644 plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWORD.java
 create mode 100644 plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusEncodeTest.java
 create mode 100644 plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusFieldDataTypeTest.java
 create mode 100644 plc4j/drivers/modbus/src/test/java/org/apache/plc4x/java/modbus/ModbusFieldTest.java


[plc4x] 04/10: Modbus Write Extended Register Support

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

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

commit 4c7521693d3b5efbcc8801595fc205743aadac04
Author: hutcheb <be...@gmail.com>
AuthorDate: Tue Sep 22 06:47:55 2020 -0400

    Modbus Write Extended Register Support
---
 .../java/modbus/protocol/ModbusProtocolLogic.java  | 30 +++++++++++++++++++++-
 .../main/resources/protocols/modbus/modbus.mspec   |  8 +++---
 2 files changed, 33 insertions(+), 5 deletions(-)

diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
index d28a86a..75078af 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
@@ -240,7 +240,7 @@ public class ModbusProtocolLogic extends Plc4xProtocolBase<ModbusTcpADU> impleme
             short group2_file_number;
             ModbusPDUReadFileRecordRequestItem[] itemArray;
 
-            if ((group1_address + extendedRegister.getLengthWords()) < FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH) {
+            if ((group1_address + extendedRegister.getLengthWords()) <= FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH) {
               //If request doesn't span file records, use a single group
               group1_quantity = extendedRegister.getLengthWords();
               ModbusPDUReadFileRecordRequestItem group1 = new ModbusPDUReadFileRecordRequestItem((short) 6, group1_file_number, group1_address, group1_quantity);
@@ -268,6 +268,34 @@ public class ModbusProtocolLogic extends Plc4xProtocolBase<ModbusTcpADU> impleme
             ModbusFieldHoldingRegister holdingRegister = (ModbusFieldHoldingRegister) field;
             return new ModbusPDUWriteMultipleHoldingRegistersRequest(holdingRegister.getAddress(),
                 holdingRegister.getLengthWords(), fromPlcValue(plcValue));
+        } else if(field instanceof ModbusExtendedRegister) {
+            ModbusExtendedRegister extendedRegister = (ModbusExtendedRegister) field;
+            int group1_address = extendedRegister.getAddress() % FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH;
+            int group2_address = 0;
+            int group1_quantity, group2_quantity;
+            byte[] plcValue1, plcValue2;
+            short group1_file_number = (short) (Math.floor(extendedRegister.getAddress() / FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH) + 1);
+            short group2_file_number;
+            ModbusPDUWriteFileRecordRequestItem[] itemArray;
+
+            if ((group1_address + extendedRegister.getLengthWords()) <= FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH) {
+              //If request doesn't span file records, use a single group
+              group1_quantity = extendedRegister.getLengthWords();
+              ModbusPDUWriteFileRecordRequestItem group1 = new ModbusPDUWriteFileRecordRequestItem((short) 6, group1_file_number, group1_address, fromPlcValue(plcValue));
+              itemArray = new ModbusPDUWriteFileRecordRequestItem[] {group1};
+            } else {
+              //If it doesn span a file record. e.g. 609998[10] request 2 words in first group and 8 in second.
+              group1_quantity = FC_EXTENDED_REGISTERS_FILE_RECORD_LENGTH - group1_address;
+              group2_quantity = extendedRegister.getLengthWords() - group1_quantity;
+              group2_file_number = (short) (group1_file_number + 1);
+
+              plcValue1 = ArrayUtils.subarray(fromPlcValue(plcValue), 0, group1_quantity);
+              plcValue2 = ArrayUtils.subarray(fromPlcValue(plcValue), group1_quantity, fromPlcValue(plcValue).length);
+              ModbusPDUWriteFileRecordRequestItem group1 = new ModbusPDUWriteFileRecordRequestItem((short) 6, group1_file_number, group1_address, plcValue1);
+              ModbusPDUWriteFileRecordRequestItem group2 = new ModbusPDUWriteFileRecordRequestItem((short) 6, group2_file_number, group2_address, plcValue2);
+              itemArray = new ModbusPDUWriteFileRecordRequestItem[] {group1, group2};
+            }
+            return new ModbusPDUWriteFileRecordRequest(itemArray);
         }
         throw new PlcRuntimeException("Unsupported write field type " + field.getClass().getName());
     }
diff --git a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
index 99c019a..339069b 100644
--- a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
+++ b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
@@ -256,16 +256,16 @@
     [simple     uint 8     'referenceType']
     [simple     uint 16    'fileNumber']
     [simple     uint 16    'recordNumber']
-    [implicit   uint 16    'recordLength'   '(COUNT(recordData) * 2) / 2']
-    [array      uint 16    'recordData'     length  'recordLength * 2']
+    [implicit   uint 16    'recordLength'   'COUNT(recordData) / 2']
+    [array      int 8      'recordData'     length  'recordLength']
 ]
 
 [type 'ModbusPDUWriteFileRecordResponseItem'
     [simple     uint 8     'referenceType']
     [simple     uint 16    'fileNumber']
     [simple     uint 16    'recordNumber']
-    [implicit   uint 16    'recordLength'   '(COUNT(recordData) * 2) / 2']
-    [array      uint 16    'recordData'     length  'recordLength * 2']
+    [implicit   uint 16    'recordLength'   'COUNT(recordData) / 2']
+    [array      int 8      'recordData'     length  'recordLength']
 ]
 
 [dataIo 'DataItem' [uint 8 'dataType', uint 8 'numberOfValues']


[plc4x] 09/10: - Made the driver catch exceptions and report them better.

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

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

commit cb80703f09a918637817903b114941c9096718a7
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sat Sep 26 17:44:35 2020 +0200

    - Made the driver catch exceptions and report them better.
---
 .../plc4x/java/ads/protocol/AdsProtocolLogic.java  | 31 +++++++++++++---------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java
index e324f9e..69a00ec 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/protocol/AdsProtocolLogic.java
@@ -316,7 +316,7 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements
                 }).toArray(PlcValue[]::new);
                 return new ResponseItem<>(PlcResponseCode.OK, PlcValues.of(resultItems));
             }
-        } catch (ParseException e) {
+        } catch (Exception e) {
             LOGGER.warn(String.format("Error parsing field item of type: '%s'", field.getAdsDataType()), e);
             return new ResponseItem<>(PlcResponseCode.INTERNAL_ERROR, null);
         }
@@ -601,18 +601,23 @@ public class AdsProtocolLogic extends Plc4xProtocolBase<AmsTCPPacket> implements
             .check(adsDataResponse -> adsDataResponse instanceof AdsReadWriteResponse)
             .unwrap(adsDataResponse -> (AdsReadWriteResponse) adsDataResponse)
             .handle(responseAdsData -> {
-                ReadBuffer readBuffer = new ReadBuffer(responseAdsData.getData(), true);
-                try {
-                    // Read the handle.
-                    long handle = readBuffer.readUnsignedLong(32);
-
-                    DirectAdsField directAdsField = new DirectAdsField(
-                        ReservedIndexGroups.ADSIGRP_SYM_VALBYHND.getValue(), handle,
-                        symbolicAdsField.getAdsDataType(), symbolicAdsField.getNumberOfElements());
-                    symbolicFieldMapping.put(symbolicAdsField, directAdsField);
-                    future.complete(null);
-                } catch (ParseException e) {
-                    future.completeExceptionally(e);
+                if(responseAdsData.getResult() != ReturnCode.OK) {
+                    future.completeExceptionally(new PlcException("Couldn't retrieve handle for symbolic field " +
+                        symbolicAdsField.getSymbolicField() + " got return code " + responseAdsData.getResult().name()));
+                } else {
+                    ReadBuffer readBuffer = new ReadBuffer(responseAdsData.getData(), true);
+                    try {
+                        // Read the handle.
+                        long handle = readBuffer.readUnsignedLong(32);
+
+                        DirectAdsField directAdsField = new DirectAdsField(
+                            ReservedIndexGroups.ADSIGRP_SYM_VALBYHND.getValue(), handle,
+                            symbolicAdsField.getAdsDataType(), symbolicAdsField.getNumberOfElements());
+                        symbolicFieldMapping.put(symbolicAdsField, directAdsField);
+                        future.complete(null);
+                    } catch (ParseException e) {
+                        future.completeExceptionally(e);
+                    }
                 }
                 transaction.endRequest();
             }));


[plc4x] 03/10: Merge branch 'develop' of https://github.com/apache/plc4x into Feature/ModbusDataType

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

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

commit 199c7844c0f6fe0ccd0d27e122385ec5e1cd2079
Merge: 83957d3 4442cc3
Author: hutcheb <be...@gmail.com>
AuthorDate: Tue Sep 22 05:10:42 2020 -0400

    Merge branch 'develop' of https://github.com/apache/plc4x into Feature/ModbusDataType

 RELEASE_NOTES                                      |  12 +-
 .../BaseFreemarkerLanguageTemplateHelper.java      |   4 +-
 .../apache/plc4x/language/c/CLanguageOutput.java   |   4 +-
 .../plc4x/language/c/CLanguageTemplateHelper.java  | 137 ++++--
 .../resources/templates/c/data-io-template-c.ftlh  | 245 ++++++++++
 ...num-template-h.ftlh => data-io-template-h.ftlh} |  47 +-
 .../resources/templates/c/enum-template-c.ftlh     |  36 +-
 .../resources/templates/c/enum-template-h.ftlh     |   5 +
 .../resources/templates/c/pojo-template-c.ftlh     |  66 +--
 .../resources/templates/c/pojo-template-h.ftlh     |   4 +-
 .../plugins/codegenerator/language/mspec/MSpec.g4  |   6 +-
 .../definitions/DefaultDataIoTypeDefinition.java   |   2 -
 .../java/abeth/protocol/AbEthProtocolLogic.java    |   6 +-
 .../plc4x/java/ads/protocol/AdsProtocolLogic.java  |  21 +-
 .../plc4x/java/knxnetip/ets5/Ets5Parser.java       |  21 +-
 .../plc4x/java/knxnetip/ets5/model/Ets5Model.java  |   8 +-
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |  18 +-
 .../plc4x/java/s7/readwrite/field/S7Field.java     |  44 +-
 .../s7/readwrite/protocol/S7ProtocolLogic.java     |  24 +-
 .../org/apache/plc4x/nifi/Plc4xSinkProcessor.java  |   2 +-
 .../apache/plc4x/nifi/Plc4xSourceProcessor.java    |   2 +-
 .../plc4x/java/spi/generation/ReadBuffer.java      |   8 +-
 .../connectionpool/PooledPlcDriverManager.java     |   2 +-
 pom.xml                                            |  22 +-
 .../main/resources/protocols/modbus/modbus.mspec   |   2 +-
 sandbox/plc4c/api/include/plc4c/connection.h       |  10 +-
 sandbox/plc4c/api/include/plc4c/data.h             |  35 +-
 sandbox/plc4c/api/include/plc4c/read.h             |   1 +
 sandbox/plc4c/api/include/plc4c/types.h            |   7 +
 sandbox/plc4c/drivers/modbus/CMakeLists.txt        |  17 +-
 .../drivers/modbus/include/plc4c/driver_modbus.h   |   6 +-
 .../{driver_modbus.h => driver_modbus_packets.h}   |  21 +-
 .../plc4c/{driver_modbus.h => driver_modbus_sm.h}  |  23 +-
 .../include/plc4c/driver_s7_encode_decode.h}       |  12 +-
 sandbox/plc4c/drivers/modbus/src/driver_modbus.c   |  16 +-
 .../modbus/src/driver_modbus_encode_decode.c       | 110 +++++
 .../drivers/modbus/src/driver_modbus_packets.c     | 142 ++++++
 .../drivers/modbus/src/driver_modbus_sm_connect.c  |  51 ++
 .../modbus/src/driver_modbus_sm_disconnect.c       |  74 +++
 .../drivers/modbus/src/driver_modbus_sm_read.c     | 119 +++++
 .../drivers/modbus/src/driver_modbus_sm_write.c    | 121 +++++
 sandbox/plc4c/drivers/s7/CMakeLists.txt            |  11 +-
 sandbox/plc4c/drivers/s7/include/plc4c/driver_s7.h |  59 +++
 .../include/plc4c/driver_s7_encode_decode.h}       |  23 +-
 .../drivers/s7/include/plc4c/driver_s7_packets.h   |  53 +++
 .../include/plc4c/driver_s7_sm.h}                  |  23 +-
 sandbox/plc4c/drivers/s7/src/driver_s7.c           |  90 +++-
 .../plc4c/drivers/s7/src/driver_s7_encode_decode.c | 346 ++++++++++++++
 sandbox/plc4c/drivers/s7/src/driver_s7_packets.c   | 524 +++++++++++++++++++++
 .../plc4c/drivers/s7/src/driver_s7_sm_connect.c    | 348 ++++++++++++++
 .../plc4c/drivers/s7/src/driver_s7_sm_disconnect.c |  81 ++++
 sandbox/plc4c/drivers/s7/src/driver_s7_sm_read.c   | 207 ++++++++
 sandbox/plc4c/drivers/s7/src/driver_s7_sm_write.c  | 122 +++++
 .../plc4c/drivers/s7/test/s7_address_parser_test.c | 110 +++++
 sandbox/plc4c/drivers/s7/test/s7_test.c            |   7 +-
 .../simulated/include/plc4c/driver_simulated.h     |   6 +-
 .../plc4c/drivers/simulated/src/driver_simulated.c |  15 +-
 sandbox/plc4c/examples/hello-world/CMakeLists.txt  |  11 +-
 .../plc4c/examples/hello-world/src/hello_world.c   |  59 ++-
 .../include/data_item.h}                           |  27 +-
 .../{includes => include}/modbus_constants.h       |   4 +-
 .../modbus/{includes => include}/modbus_pdu.h      |   4 +-
 .../modbus_pdu_read_file_record_request_item.h     |   4 +-
 .../modbus_pdu_read_file_record_response_item.h    |   4 +-
 .../modbus_pdu_write_file_record_request_item.h    |   4 +-
 .../modbus_pdu_write_file_record_response_item.h   |   4 +-
 .../{includes => include}/modbus_serial_adu.h      |   4 +-
 .../modbus/{includes => include}/modbus_tcp_adu.h  |   4 +-
 .../plc4c/generated-sources/modbus/src/data_item.c |  96 ++++
 .../modbus/src/modbus_constants.c                  |  10 +-
 .../generated-sources/modbus/src/modbus_pdu.c      | 341 +++++++-------
 .../src/modbus_pdu_read_file_record_request_item.c |  22 +-
 .../modbus_pdu_read_file_record_response_item.c    |  22 +-
 .../modbus_pdu_write_file_record_request_item.c    |  30 +-
 .../modbus_pdu_write_file_record_response_item.c   |  30 +-
 .../modbus/src/modbus_serial_adu.c                 |  26 +-
 .../generated-sources/modbus/src/modbus_tcp_adu.c  |  26 +-
 .../s7/{includes => include}/cotp_packet.h         |   4 +-
 .../s7/{includes => include}/cotp_parameter.h      |   4 +-
 .../s7/{includes => include}/cotp_protocol_class.h |   5 +
 .../s7/{includes => include}/cotp_tpdu_size.h      |   5 +
 .../data_item.h}                                   |  27 +-
 .../data_transport_error_code.h                    |   5 +
 .../s7/{includes => include}/data_transport_size.h |   5 +
 .../s7/{includes => include}/device_group.h        |   5 +
 .../s7/{includes => include}/memory_area.h         |   5 +
 .../s7/{includes => include}/s7_address.h          |   4 +-
 .../s7/{includes => include}/s7_message.h          |   4 +-
 .../s7/{includes => include}/s7_parameter.h        |   4 +-
 .../s7_parameter_user_data_item.h                  |   4 +-
 .../s7/{includes => include}/s7_payload.h          |   4 +-
 .../s7_payload_user_data_item.h                    |   4 +-
 .../s7_var_payload_data_item.h                     |   4 +-
 .../s7_var_payload_status_item.h                   |   4 +-
 .../s7_var_request_parameter_item.h                |   4 +-
 .../s7/{includes => include}/szl_data_tree_item.h  |   4 +-
 .../s7/{includes => include}/szl_id.h              |   4 +-
 .../{includes => include}/szl_module_type_class.h  |   5 +
 .../s7/{includes => include}/szl_sublist.h         |   5 +
 .../s7/{includes => include}/tpkt_packet.h         |   4 +-
 .../s7/{includes => include}/transport_size.h      |   5 +
 .../plc4c/generated-sources/s7/src/cotp_packet.c   |  94 ++--
 .../generated-sources/s7/src/cotp_parameter.c      |  35 +-
 .../generated-sources/s7/src/cotp_protocol_class.c |  46 ++
 .../generated-sources/s7/src/cotp_tpdu_size.c      |  58 +++
 sandbox/plc4c/generated-sources/s7/src/data_item.c | 256 ++++++++++
 .../s7/src/data_transport_error_code.c             |  52 ++
 .../generated-sources/s7/src/data_transport_size.c |  58 +++
 .../plc4c/generated-sources/s7/src/device_group.c  |  34 ++
 .../plc4c/generated-sources/s7/src/memory_area.c   |  70 +++
 .../plc4c/generated-sources/s7/src/s7_address.c    |  38 +-
 .../plc4c/generated-sources/s7/src/s7_message.c    |  54 +--
 .../plc4c/generated-sources/s7/src/s7_parameter.c  |  64 +--
 .../s7/src/s7_parameter_user_data_item.c           |  46 +-
 .../plc4c/generated-sources/s7/src/s7_payload.c    |  30 +-
 .../s7/src/s7_payload_user_data_item.c             |  40 +-
 .../s7/src/s7_var_payload_data_item.c              |  29 +-
 .../s7/src/s7_var_payload_status_item.c            |  10 +-
 .../s7/src/s7_var_request_parameter_item.c         |  18 +-
 .../generated-sources/s7/src/szl_data_tree_item.c  |  27 +-
 sandbox/plc4c/generated-sources/s7/src/szl_id.c    |  18 +-
 .../s7/src/szl_module_type_class.c                 |  40 ++
 .../plc4c/generated-sources/s7/src/szl_sublist.c   | 130 +++++
 .../plc4c/generated-sources/s7/src/tpkt_packet.c   |  22 +-
 .../generated-sources/s7/src/transport_size.c      | 112 +++++
 sandbox/plc4c/spi/include/plc4c/spi/read_buffer.h  |   7 +
 .../plc4c/spi/include/plc4c/spi/types_private.h    |  72 ++-
 sandbox/plc4c/spi/src/connection.c                 |   5 +
 sandbox/plc4c/spi/src/data.c                       |  95 +++-
 sandbox/plc4c/spi/src/evaluation_helper.c          |   4 +
 sandbox/plc4c/spi/src/read.c                       |  24 +-
 sandbox/plc4c/spi/src/system.c                     |  41 +-
 sandbox/plc4c/spi/src/utils/list.c                 |   3 +-
 sandbox/plc4c/spi/src/write.c                      |   9 +-
 .../plc4c/transports/dummy/src/transport_dummy.c   |   5 +
 sandbox/plc4c/transports/serial/CMakeLists.txt     |   4 +-
 .../plc4c/transports/serial/src/transport_serial.c |  24 +
 sandbox/plc4c/transports/tcp/CMakeLists.txt        |   4 +-
 .../transports/tcp/include/plc4c/transport_tcp.h   |   8 +
 sandbox/plc4c/transports/tcp/src/transport_tcp.c   | 124 +++++
 .../asciidoc/developers/release/build-tools.adoc   |  36 +-
 src/site/asciidoc/users/preparing-issues.adoc      |  19 +
 src/site/asciidoc/users/protocols/modbus.adoc      | 119 ++++-
 143 files changed, 5437 insertions(+), 945 deletions(-)



[plc4x] 08/10: - A bit of housekeeping.

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

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

commit d108a8f29ef6a3656a38fe845a50ae159f8d0279
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Fri Sep 25 17:47:46 2020 +0200

    - A bit of housekeeping.
---
 .../plc4x/java/modbus/field/ModbusExtendedRegister.java       |  4 ++--
 .../java/org/apache/plc4x/java/modbus/field/ModbusField.java  | 11 +++--------
 .../org/apache/plc4x/java/modbus/field/ModbusFieldCoil.java   |  4 ++--
 .../plc4x/java/modbus/field/ModbusFieldDiscreteInput.java     |  4 ++--
 .../apache/plc4x/java/modbus/field/ModbusFieldHandler.java    |  2 +-
 .../plc4x/java/modbus/field/ModbusFieldHoldingRegister.java   |  4 ++--
 .../plc4x/java/modbus/field/ModbusFieldInputRegister.java     |  4 ++--
 .../plc4x/java/modbus/protocol/ModbusProtocolLogic.java       |  1 -
 8 files changed, 14 insertions(+), 20 deletions(-)

diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusExtendedRegister.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusExtendedRegister.java
index 07557ac..7edf48f 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusExtendedRegister.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusExtendedRegister.java
@@ -41,7 +41,7 @@ public class ModbusExtendedRegister extends ModbusField {
             ADDRESS_SHORT_PATTERN.matcher(addressString).matches();
     }
 
-    public static Matcher getMatcher(String addressString) throws PlcInvalidFieldException {
+    public static Matcher getMatcher(String addressString) {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (matcher.matches()) {
           return matcher;
@@ -66,7 +66,7 @@ public class ModbusExtendedRegister extends ModbusField {
         }
 
         String quantityString = matcher.group("quantity");
-        Integer quantity = quantityString != null ? Integer.valueOf(quantityString) : 1;
+        int quantity = quantityString != null ? Integer.parseInt(quantityString) : 1;
         if ((address + quantity) > REGISTER_MAXADDRESS) {
             throw new IllegalArgumentException("Last requested address is out of range, should be between 0 and " + REGISTER_MAXADDRESS + ". Was " + (address + (quantity - 1)));
         }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
index 13795f4..01c37e5 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
@@ -22,14 +22,9 @@ import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.modbus.readwrite.types.*;
 
-import org.apache.commons.lang3.ArrayUtils;
-
 import java.util.Objects;
-import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import java.lang.*;
-
 public abstract class ModbusField implements PlcField {
 
     public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>\\d+)(:(?<datatype>[a-zA-Z_]+))?(\\[(?<quantity>\\d+)])?");
@@ -43,7 +38,7 @@ public abstract class ModbusField implements PlcField {
 
     private final String dataType;
 
-    public static ModbusField of(String addressString) throws PlcInvalidFieldException {
+    public static ModbusField of(String addressString) {
         if(ModbusFieldCoil.matches(addressString)) {
             return ModbusFieldCoil.of(addressString);
         }
@@ -84,7 +79,7 @@ public abstract class ModbusField implements PlcField {
     }
 
     public int getLengthBytes() {
-        return (int) (quantity * ModbusDataType.valueOf(dataType).getDataTypeSize());
+        return quantity * ModbusDataType.valueOf(dataType).getDataTypeSize();
     }
 
     public int getLengthWords() {
@@ -96,7 +91,7 @@ public abstract class ModbusField implements PlcField {
     }
 
     public int getDataTypeSize() {
-        return (int) ModbusDataType.valueOf(dataType).getDataTypeSize();
+        return ModbusDataType.valueOf(dataType).getDataTypeSize();
     }
 
     @Override
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldCoil.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldCoil.java
index 37188e6..4ee760f 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldCoil.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldCoil.java
@@ -41,7 +41,7 @@ public class ModbusFieldCoil extends ModbusField {
             ADDRESS_SHORT_PATTERN.matcher(addressString).matches();
     }
 
-    public static Matcher getMatcher(String addressString) throws PlcInvalidFieldException {
+    public static Matcher getMatcher(String addressString) {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (matcher.matches()) {
           return matcher;
@@ -66,7 +66,7 @@ public class ModbusFieldCoil extends ModbusField {
         }
 
         String quantityString = matcher.group("quantity");
-        Integer quantity = quantityString != null ? Integer.valueOf(quantityString) : 1;
+        int quantity = quantityString != null ? Integer.parseInt(quantityString) : 1;
         if ((address + quantity) > REGISTER_MAXADDRESS) {
             throw new IllegalArgumentException("Last requested address is out of range, should be between " + PROTOCOL_ADDRESS_OFFSET + " and " + REGISTER_MAXADDRESS + ". Was " + (address + PROTOCOL_ADDRESS_OFFSET + (quantity - 1)));
         }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java
index 551be36..1823d0c 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java
@@ -41,7 +41,7 @@ public class ModbusFieldDiscreteInput extends ModbusField {
             ADDRESS_SHORT_PATTERN.matcher(addressString).matches();
     }
 
-    public static Matcher getMatcher(String addressString) throws PlcInvalidFieldException {
+    public static Matcher getMatcher(String addressString) {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (matcher.matches()) {
           return matcher;
@@ -66,7 +66,7 @@ public class ModbusFieldDiscreteInput extends ModbusField {
         }
 
         String quantityString = matcher.group("quantity");
-        Integer quantity = quantityString != null ? Integer.valueOf(quantityString) : 1;
+        int quantity = quantityString != null ? Integer.parseInt(quantityString) : 1;
         if ((address + quantity) > REGISTER_MAX_ADDRESS) {
             throw new IllegalArgumentException("Last requested address is out of range, should be between " + PROTOCOL_ADDRESS_OFFSET + " and " + REGISTER_MAX_ADDRESS + ". Was " + (address + PROTOCOL_ADDRESS_OFFSET + (quantity - 1)));
         }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHandler.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHandler.java
index 6eca84f..87c199d 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHandler.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHandler.java
@@ -36,7 +36,7 @@ import java.util.List;
 public class ModbusFieldHandler extends DefaultPlcFieldHandler {
 
     @Override
-    public PlcField createField(String fieldQuery) throws PlcInvalidFieldException {
+    public PlcField createField(String fieldQuery) {
         if (ModbusFieldDiscreteInput.matches(fieldQuery)) {
             return ModbusFieldDiscreteInput.of(fieldQuery);
         } else if (ModbusFieldHoldingRegister.matches(fieldQuery)) {
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHoldingRegister.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHoldingRegister.java
index dae3ce7..f99061f 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHoldingRegister.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHoldingRegister.java
@@ -41,7 +41,7 @@ public class ModbusFieldHoldingRegister extends ModbusField {
             ADDRESS_SHORT_PATTERN.matcher(addressString).matches();
     }
 
-    public static Matcher getMatcher(String addressString) throws PlcInvalidFieldException {
+    public static Matcher getMatcher(String addressString) {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (matcher.matches()) {
           return matcher;
@@ -65,7 +65,7 @@ public class ModbusFieldHoldingRegister extends ModbusField {
         }
 
         String quantityString = matcher.group("quantity");
-        Integer quantity = quantityString != null ? Integer.valueOf(quantityString) : 1;
+        int quantity = quantityString != null ? Integer.parseInt(quantityString) : 1;
         if ((address + quantity) > REGISTER_MAXADDRESS) {
             throw new IllegalArgumentException("Last requested address is out of range, should be between " + PROTOCOL_ADDRESS_OFFSET + " and " + REGISTER_MAXADDRESS + ". Was " + (address + PROTOCOL_ADDRESS_OFFSET + (quantity - 1)));
         }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldInputRegister.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldInputRegister.java
index 199ccb2..6cb3062 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldInputRegister.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldInputRegister.java
@@ -41,7 +41,7 @@ public class ModbusFieldInputRegister extends ModbusField {
             ADDRESS_SHORT_PATTERN.matcher(addressString).matches();
     }
 
-    public static Matcher getMatcher(String addressString) throws PlcInvalidFieldException {
+    public static Matcher getMatcher(String addressString) {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (matcher.matches()) {
           return matcher;
@@ -65,7 +65,7 @@ public class ModbusFieldInputRegister extends ModbusField {
         }
 
         String quantityString = matcher.group("quantity");
-        Integer quantity = quantityString != null ? Integer.valueOf(quantityString) : 1;
+        int quantity = quantityString != null ? Integer.parseInt(quantityString) : 1;
         if ((address + quantity) > REGISTER_MAXADDRESS) {
             throw new IllegalArgumentException("Last requested address is out of range, should be between " + PROTOCOL_ADDRESS_OFFSET + " and " + REGISTER_MAXADDRESS + ". Was " + (address + PROTOCOL_ADDRESS_OFFSET + (quantity - 1)));
         }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
index 75078af..c4d4abd 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/protocol/ModbusProtocolLogic.java
@@ -53,7 +53,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicInteger;
-import java.lang.*;
 
 public class ModbusProtocolLogic extends Plc4xProtocolBase<ModbusTcpADU> implements HasConfiguration<ModbusConfiguration> {
 


[plc4x] 06/10: - Continued Ben's great work towards this. - Refactored the existing Java type based PlcValues to a more generic IEC 61131-3 based type system. - Got everything working, all tests to pass etc and did some testing of S7 and Modbus reading.

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

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

commit df0adc85dbd47779b170c3b3aff1a61231afb29b
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Fri Sep 25 17:08:24 2020 +0200

    - Continued Ben's great work towards this.
    - Refactored the existing Java type based PlcValues to a more generic IEC 61131-3 based type system.
    - Got everything working, all tests to pass etc and did some testing of S7 and Modbus reading.
---
 RELEASE_NOTES                                      |  14 +-
 .../org/apache/plc4x/java/api/value/PlcBOOL.java   |  39 ++--
 .../apache/plc4x/java/api/value/PlcBoolean.java    | 168 --------------
 .../org/apache/plc4x/java/api/value/PlcByte.java   | 256 ++++++++++++---------
 .../org/apache/plc4x/java/api/value/PlcCHAR.java   |   6 +-
 .../org/apache/plc4x/java/api/value/PlcDINT.java   | 136 +++++++++--
 .../org/apache/plc4x/java/api/value/PlcDWORD.java  |  24 +-
 .../org/apache/plc4x/java/api/value/PlcDouble.java | 168 --------------
 .../org/apache/plc4x/java/api/value/PlcFloat.java  | 168 --------------
 .../apache/plc4x/java/api/value/PlcIECValue.java   |   1 -
 .../org/apache/plc4x/java/api/value/PlcINT.java    | 139 +++++++++--
 .../apache/plc4x/java/api/value/PlcInteger.java    | 168 --------------
 .../org/apache/plc4x/java/api/value/PlcLINT.java   | 138 +++++++++--
 .../org/apache/plc4x/java/api/value/PlcLREAL.java  | 135 +++++++++--
 .../org/apache/plc4x/java/api/value/PlcLWORD.java  |   8 +-
 .../org/apache/plc4x/java/api/value/PlcLong.java   | 168 --------------
 .../org/apache/plc4x/java/api/value/PlcREAL.java   | 135 +++++++++--
 .../org/apache/plc4x/java/api/value/PlcSINT.java   | 137 +++++++++--
 .../org/apache/plc4x/java/api/value/PlcShort.java  | 168 --------------
 .../org/apache/plc4x/java/api/value/PlcUDINT.java  | 137 +++++++++--
 .../org/apache/plc4x/java/api/value/PlcUINT.java   | 132 +++++++++--
 .../org/apache/plc4x/java/api/value/PlcULINT.java  | 120 +++++++++-
 .../org/apache/plc4x/java/api/value/PlcUSINT.java  | 136 +++++++++--
 .../org/apache/plc4x/java/api/value/PlcValues.java |  56 ++---
 .../org/apache/plc4x/java/api/value/PlcWCHAR.java  |  26 +--
 .../org/apache/plc4x/java/api/value/PlcWORD.java   |  22 +-
 .../java/abeth/protocol/AbEthProtocolLogic.java    |   7 +-
 .../java/abeth/protocol/Plc4xAbEthProtocol.java    |   4 +-
 .../plc4x/java/ads/field/AdsFieldHandler.java      |  81 +++----
 .../attic/protocol/util/LittleEndianDecoder.java   |  62 ++---
 .../src/test/resources/testsuite/AdsDriverIT.xml   |  12 +-
 .../java/eip/readwrite/field/EipFieldHandler.java  |  12 +-
 .../eip/readwrite/protocol/EipProtocolLogic.java   |  22 +-
 .../resources/testsuite/EIPDriverTestsuite.xml     |   2 +-
 .../readwrite/field/FirmataFieldHandler.java       |  13 +-
 .../readwrite/protocol/FirmataProtocolLogic.java   |  11 +-
 .../java/knxnetip/field/KnxNetIpFieldHandler.java  |   1 -
 .../plc4x/java/modbus/field/ModbusField.java       |   4 +-
 .../modbus/field/ModbusFieldDiscreteInput.java     |  10 +-
 .../opcua/connection/OpcuaTcpPlcConnection.java    |  26 +--
 .../java/opcua/protocol/OpcuaPlcFieldHandler.java  |  14 +-
 .../plc4x/java/s7/readwrite/field/S7Field.java     |   4 +-
 .../java/s7/readwrite/field/S7PlcFieldHandler.java |  14 +-
 .../s7/src/test/resources/testsuite/S7DriverIT.xml |   2 +-
 .../simulated/field/SimulatedFieldHandler.java     |  14 +-
 .../simulated/connection/SimulatedDeviceTest.java  |   4 +-
 .../watertank/service/WaterTankService.java        |   4 +-
 .../plc4x/edgent/PlcConnectionAdapterTest.java     |   1 -
 .../java/spi/messages/DefaultPlcReadResponse.java  |   2 +-
 .../java/opm/PlcEntityManagerComplexTest.java      |   4 +-
 .../org/apache/plc4x/java/scraper/ScraperTest.java |   6 +-
 .../triggeredscraper/TriggeredScraperImplTest.java |  16 +-
 .../ads/src/main/resources/protocols/ads/ads.mspec |  58 ++---
 .../resources/protocols/knxnetip/knxnetip.mspec    |  28 +--
 .../main/resources/protocols/modbus/modbus.mspec   |   4 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |  30 +--
 .../java/examples/helloinflux/HelloInflux.java     |  22 +-
 .../plc4c/generated-sources/modbus/src/data_item.c | 248 +++++++++++++++++++-
 .../modbus_pdu_write_file_record_request_item.c    |  12 +-
 .../modbus_pdu_write_file_record_response_item.c   |  14 +-
 sandbox/plc4c/generated-sources/s7/src/data_item.c |  30 +--
 .../plc4x/java/bacnetip/ede/model/Datapoint.java   |  20 +-
 .../bacnetip/protocol/BacNetIpProtocolLogic.java   |   6 +-
 .../plc4x/java/df1/protocol/Plc4XDf1Protocol.java  |   6 +-
 64 files changed, 1986 insertions(+), 1649 deletions(-)

diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index cc1d79b..0d578d2 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -9,10 +9,14 @@ a particular topic.
 New Features
 ------------
 
-The KNXnet/IP Driver now supports writing of values.
+- The KNXnet/IP Driver now supports writing of values.
 
-The Modbus driver now supports more common notations of
-Modbus addresses using a pure-numeric notation.
+- The Modbus driver now supports more common notations of
+  Modbus addresses using a pure-numeric notation.
+
+- Especially the Modbus driver has been enhanced to read
+  more complex types such as REAL, DINT, ... not just BOOL
+  and INT
 
 Incompatible changes
 --------------------
@@ -30,6 +34,10 @@ Incompatible changes
   Read an array of 3 Strings where each is max 10 chars long:
   %DB2:30:STRING(10)[3]
 
+- The PLCValue types have been refactored to align with the types
+  defined in IEC 61131-3 (https://en.wikipedia.org/wiki/IEC_61131-3)
+  directly using the older Java types (PlcBoolean) is no longer
+  possible.
 
 Bug Fixes
 ---------
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBOOL.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBOOL.java
index b56ab22..ebc973b 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBOOL.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBOOL.java
@@ -25,8 +25,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -44,8 +42,8 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
 
     public PlcBOOL(Byte value) {
         super();
-        if (value >= minValue && value <= maxValue) {
-            this.value = ((value != null) && value >= 1) ? true : false;
+        if ((value != null) && (value >= minValue && value <= maxValue)) {
+            this.value = value >= 1;
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -56,8 +54,8 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
 
     public PlcBOOL(Short value) {
         super();
-        if (value >= minValue && value <= maxValue) {
-            this.value = ((value != null) && value >= 1) ? true : false;
+        if ((value != null) && (value >= minValue && value <= maxValue)) {
+            this.value = value >= 1;
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -68,8 +66,8 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
 
     public PlcBOOL(Integer value) {
         super();
-        if (value >= minValue && value <= maxValue) {
-            this.value = ((value != null) && value >= 1) ? true : false;
+        if ((value != null) && (value >= minValue && value <= maxValue)) {
+            this.value = value >= 1;
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -80,8 +78,8 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
 
     public PlcBOOL(Long value) {
         super();
-        if (value >= minValue && value <= maxValue) {
-            this.value = ((value != null) && value >= 1) ? true : false;
+        if ((value != null) && (value >= minValue && value <= maxValue)) {
+            this.value = value >= 1;
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -92,8 +90,8 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
 
     public PlcBOOL(Float value) {
         super();
-        if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = ((value != null) && value >= 1) ? true : false;
+        if ((value != null) && (value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
+            this.value = value >= 1;
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -104,8 +102,8 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
 
     public PlcBOOL(Double value) {
         super();
-        if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = ((value != null) && value >= 1) ? true : false;
+        if ((value != null) && (value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
+            this.value = value >= 1;
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -116,8 +114,8 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
 
     public PlcBOOL(BigInteger value) {
         super();
-        if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = ((value != null) && (value.compareTo(BigInteger.valueOf(maxValue)) >= 0)) ? true : false;
+        if ((value != null) && (value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
+            this.value = value.compareTo(BigInteger.valueOf(maxValue)) >= 0;
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -128,8 +126,8 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
 
     public PlcBOOL(BigDecimal value) {
         super();
-        if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = ((value != null) && (value.compareTo(BigDecimal.valueOf(maxValue)) >= 0)) ? true : false;
+        if ((value != null) && (value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
+            this.value = value.compareTo(BigDecimal.valueOf(maxValue)) >= 0;
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -141,8 +139,7 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
     public PlcBOOL(String value) {
         super();
         try {
-             boolean val = Boolean.parseBoolean(value);
-             this.value = val;
+             this.value = Boolean.parseBoolean(value);
              this.isNullable = false;
         }
         catch(Exception e) {
@@ -171,6 +168,7 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
         return (value != null) && value;
     }
 
+    @JsonIgnore
     public boolean getBOOL() {
         return (value != null) && value;
     }
@@ -283,6 +281,7 @@ public class PlcBOOL extends PlcIECValue<Boolean> {
         return toString();
     }
 
+    @JsonIgnore
     public byte[] getBytes() {
         return ((value != null) && value) ? new byte[] {0x01} : new byte[] {0x00};
     }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBoolean.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBoolean.java
deleted file mode 100644
index 9f6164a..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBoolean.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.api.value;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class PlcBoolean extends PlcSimpleValue<Boolean> {
-
-    public PlcBoolean(Boolean value) {
-        super(value, true);
-    }
-
-    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
-    public PlcBoolean(@JsonProperty("value") boolean value) {
-        super(value, false);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBoolean() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean getBoolean() {
-        return (value != null) && value;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isByte() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public byte getByte() {
-        return (byte) (((value != null) && value) ? 1 : 0);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isShort() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public short getShort() {
-        return (short) (((value != null) && value) ? 1 : 0);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public int getInteger() {
-        return ((value != null) && value) ? 1 : 0;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isLong() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public long getLong() {
-        return ((value != null) && value) ? 1 : 0;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigInteger getBigInteger() {
-        return value ? BigInteger.ONE : BigInteger.ZERO;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isFloat() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public float getFloat() {
-        return ((value != null) && value) ? 1.0f : 0.0f;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isDouble() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public double getDouble() {
-        return ((value != null) && value) ? 1.0 : 0.0;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigDecimal() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigDecimal getBigDecimal() {
-        return value ? BigDecimal.ONE : BigDecimal.ZERO;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isString() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public String getString() {
-        return toString();
-    }
-
-    @Override
-    @JsonIgnore
-    public String toString() {
-        return Boolean.toString(value);
-    }
-
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcByte.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcByte.java
index ac215c3..00475ef 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcByte.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcByte.java
@@ -23,44 +23,150 @@ import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class PlcByte extends PlcSimpleValue<Byte> {
-
-    public PlcByte(Byte value) {
-        super(value, true);
+public class PlcBYTE extends PlcIECValue<Short> {
+
+    static Short minValue = 0;
+    static Short maxValue = (short) Byte.MAX_VALUE * 2 + 1;
+
+    public PlcBYTE(Boolean value) {
+        super();
+        this.value = value ? Short.valueOf((short) 1) : Short.valueOf((short) 0);
+        this.isNullable = false;
+    }
+
+    public PlcBYTE(Byte value) {
+        super();
+        if ((value >= minValue) && (value <= maxValue)) {
+            this.value = value.shortValue();
+            this.isNullable = false;
+        } else {
+            throw new PlcInvalidFieldException("Value of type " + value +
+              " is out of range " + minValue + " - " + maxValue + " for a " +
+              this.getClass().getSimpleName() + " Value");
+        }
+    }
+
+    public PlcBYTE(Short value) {
+        super();
+        if ((value >= minValue) && (value <= maxValue)) {
+            this.value = value;
+            this.isNullable = false;
+        } else {
+            throw new PlcInvalidFieldException("Value of type " + value +
+              " is out of range " + minValue + " - " + maxValue + " for a " +
+              this.getClass().getSimpleName() + " Value");
+        }
+    }
+
+    public PlcBYTE(Integer value) {
+        super();
+        if ((value >= minValue) && (value <= maxValue)) {
+            this.value = value.shortValue();
+            this.isNullable = false;
+        } else {
+            throw new PlcInvalidFieldException("Value of type " + value +
+              " is out of range " + minValue + " - " + maxValue + " for a " +
+              this.getClass().getSimpleName() + " Value");
+        }
+    }
+
+    public PlcBYTE(Long value) {
+        super();
+        if ((value >= minValue) && (value <= maxValue)) {
+            this.value = value.shortValue();
+            this.isNullable = false;
+        } else {
+            throw new PlcInvalidFieldException("Value of type " + value +
+              " is out of range " + minValue + " - " + maxValue + " for a " +
+              this.getClass().getSimpleName() + " Value");
+        }
+    }
+
+    public PlcBYTE(Float value) {
+        super();
+        if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
+            this.value = value.shortValue();
+            this.isNullable = false;
+        } else {
+            throw new PlcInvalidFieldException("Value of type " + value +
+              " is out of range " + minValue + " - " + maxValue + " or has decimal places for a " +
+              this.getClass().getSimpleName() + " Value");
+        }
+    }
+
+    public PlcBYTE(Double value) {
+        super();
+        if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
+            this.value = value.shortValue();
+            this.isNullable = false;
+        } else {
+            throw new PlcInvalidFieldException("Value of type " + value +
+              " is out of range " + minValue + " - " + maxValue + " or has decimal places for a " +
+              this.getClass().getSimpleName() + " Value");
+        }
+    }
+
+    public PlcBYTE(BigInteger value) {
+        super();
+        if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
+            this.value = value.shortValue();
+            this.isNullable = true;
+        } else {
+          throw new PlcInvalidFieldException("Value of type " + value +
+            " is out of range " + minValue + " - " + maxValue + " for a " +
+            this.getClass().getSimpleName() + " Value");
+        }
+    }
+
+    public PlcBYTE(BigDecimal value) {
+        super();
+        if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
+            this.value = value.shortValue();
+            this.isNullable = true;
+        } else {
+          throw new PlcInvalidFieldException("Value of type " + value +
+            " is out of range " + minValue + " - " + maxValue + " for a " +
+            this.getClass().getSimpleName() + " Value");
+        }
+    }
+
+    public PlcBYTE(String value) {
+        super();
+        try {
+            short val = Short.parseShort(value);
+            if ((val >= minValue) && (val <= maxValue)) {
+                this.value = val;
+                this.isNullable = false;
+            } else {
+                throw new PlcInvalidFieldException("Value of type " + value +
+                  " is out of range " + minValue + " - " + maxValue + " for a " +
+                  this.getClass().getSimpleName() + " Value");
+            }
+        }
+        catch(Exception e) {
+            throw new PlcInvalidFieldException("Value of type " + value +
+              " is out of range " + minValue + " - " + maxValue + " for a " +
+              this.getClass().getSimpleName() + " Value");
+        }
     }
 
     @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
-    public PlcByte(@JsonProperty("value") byte value) {
-        super(value, false);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBoolean() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean getBoolean() {
-        return (value != null) && !value.equals((byte) 0);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isByte() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public byte getByte() {
-        return value;
+    public PlcBYTE(@JsonProperty("value") short value) {
+        super();
+        if ((value >= minValue) && (value <= maxValue)) {
+            this.value = value;
+            this.isNullable = false;
+        } else {
+            throw new PlcInvalidFieldException("Value of type " + value +
+              " is out of range " + minValue + " - " + maxValue + " for a " +
+              this.getClass().getSimpleName() + " Value");
+        }
     }
 
     @Override
@@ -72,97 +178,25 @@ public class PlcByte extends PlcSimpleValue<Byte> {
     @Override
     @JsonIgnore
     public short getShort() {
-        return value.shortValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public int getInteger() {
-        return value.intValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isLong() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public long getLong() {
-        return value.longValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigInteger getBigInteger() {
-        return BigInteger.valueOf((long) value);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isFloat() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public float getFloat() {
-        return value.floatValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isDouble() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public double getDouble() {
-        return value.doubleValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigDecimal() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigDecimal getBigDecimal() {
-        return new BigDecimal(value);
+        return value;
     }
 
-    @Override
     @JsonIgnore
-    public boolean isString() {
-        return true;
+    public short getBYTE() {
+        return value;
     }
 
     @Override
     @JsonIgnore
-    public String getString() {
-        return toString();
+    public String toString() {
+        return Short.toString(value);
     }
 
-    @Override
     @JsonIgnore
-    public String toString() {
-        return Integer.toString(value);
+    public byte[] getBytes() {
+        byte[] bytes = new byte[1];
+        bytes[0] = (byte)(value & 0xff);
+        return bytes;
     }
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcCHAR.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcCHAR.java
index b39a63e..52e5ff7 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcCHAR.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcCHAR.java
@@ -40,7 +40,7 @@ public class PlcCHAR extends PlcIECValue<Short> {
 
     public PlcCHAR(Boolean value) {
         super();
-        this.value = value ? new Short((short) 1) : new Short((short) 0);
+        this.value = value ? Short.valueOf((short) 1) : Short.valueOf((short) 0);
         this.isNullable = false;
     }
 
@@ -48,7 +48,7 @@ public class PlcCHAR extends PlcIECValue<Short> {
         super();
         Integer val = (int) value;
         if ((val >= minValue) && (val <= maxValue)) {
-            this.value = (Short) val.shortValue();
+            this.value = val.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Character '" + Character.toString(value) + "', Value " + val +
@@ -198,6 +198,7 @@ public class PlcCHAR extends PlcIECValue<Short> {
         return Character.toString(Character.valueOf((char) ((short) value)));
     }
 
+    @JsonIgnore
     public short getCHAR() {
         return value;
     }
@@ -213,6 +214,7 @@ public class PlcCHAR extends PlcIECValue<Short> {
         return Character.toString(Character.valueOf((char) ((short) value)));
     }
 
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[1];
         bytes[0] = (byte)(value & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDINT.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDINT.java
index e10a475..009a5c5 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDINT.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDINT.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcDINT extends PlcIECValue<Integer> {
@@ -46,13 +42,13 @@ public class PlcDINT extends PlcIECValue<Integer> {
 
     public PlcDINT(Byte value) {
         super();
-        this.value = (Integer) value.intValue();
+        this.value = value.intValue();
         this.isNullable = false;
     }
 
     public PlcDINT(Short value) {
         super();
-        this.value = (Integer) value.intValue();
+        this.value = value.intValue();
         this.isNullable = false;
     }
 
@@ -65,7 +61,7 @@ public class PlcDINT extends PlcIECValue<Integer> {
     public PlcDINT(Long value) {
         super();
         if (value >= minValue && value <= maxValue) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -77,7 +73,7 @@ public class PlcDINT extends PlcIECValue<Integer> {
     public PlcDINT(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -89,7 +85,7 @@ public class PlcDINT extends PlcIECValue<Integer> {
     public PlcDINT(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -101,7 +97,7 @@ public class PlcDINT extends PlcIECValue<Integer> {
     public PlcDINT(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -113,7 +109,7 @@ public class PlcDINT extends PlcIECValue<Integer> {
     public PlcDINT(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -125,8 +121,7 @@ public class PlcDINT extends PlcIECValue<Integer> {
     public PlcDINT(String value) {
         super();
         try {
-            Integer val = Integer.parseInt(value);
-            this.value = val;
+            this.value = Integer.parseInt(value);
             this.isNullable = false;
         }
         catch(Exception e) {
@@ -143,6 +138,43 @@ public class PlcDINT extends PlcIECValue<Integer> {
       this.isNullable = false;
     }
 
+
+    @Override
+    @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isByte() {
+        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public byte getByte() {
+        return value.byteValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isShort() {
+        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public short getShort() {
+        return value.shortValue();
+    }
+
     @Override
     @JsonIgnore
     public boolean isInteger() {
@@ -155,8 +187,76 @@ public class PlcDINT extends PlcIECValue<Integer> {
         return value;
     }
 
-    public int getDINT() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isLong() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public long getLong() {
+        return value.longValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigInteger getBigInteger() {
+        return BigInteger.valueOf(getLong());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isFloat() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public float getFloat() {
+        return value.floatValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isDouble() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public double getDouble() {
+        return value.doubleValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return BigDecimal.valueOf(getFloat());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
@@ -165,6 +265,12 @@ public class PlcDINT extends PlcIECValue<Integer> {
         return Integer.toString(value);
     }
 
+    @JsonIgnore
+    public int getDINT() {
+        return value;
+    }
+
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[4];
         bytes[0] = (byte)((value >> 24) & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDWORD.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDWORD.java
index 0f00d1d..ac10274 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDWORD.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDWORD.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcDWORD extends PlcIECValue<Long> {
@@ -47,7 +43,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
     public PlcDWORD(Byte value) {
         super();
         if (value >= minValue && value <= maxValue) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -59,7 +55,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
     public PlcDWORD(Short value) {
         super();
         if (value >= minValue && value <= maxValue) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -71,7 +67,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
     public PlcDWORD(Integer value) {
         super();
         if (value >= minValue && value <= maxValue) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -83,7 +79,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
     public PlcDWORD(Long value) {
         super();
         if (value >= minValue && value <= maxValue) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -95,7 +91,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
     public PlcDWORD(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -107,7 +103,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
     public PlcDWORD(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -119,7 +115,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
     public PlcDWORD(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -131,7 +127,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
     public PlcDWORD(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -143,7 +139,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
     public PlcDWORD(String value) {
         super();
         try {
-            Long val = Long.parseLong(value);
+            long val = Long.parseLong(value);
             if (val >= minValue && val <= maxValue) {
                 this.value = val;
                 this.isNullable = false;
@@ -185,6 +181,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
         return value;
     }
 
+    @JsonIgnore
     public long getDWORD() {
         return value;
     }
@@ -195,6 +192,7 @@ public class PlcDWORD extends PlcIECValue<Long> {
         return Long.toString(value);
     }
 
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[4];
         bytes[0] = (byte)((value >> 24) & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDouble.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDouble.java
deleted file mode 100644
index 1ba0990..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcDouble.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.api.value;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class PlcDouble extends PlcSimpleValue<Double> {
-
-    public PlcDouble(Double value) {
-        super(value, true);
-    }
-
-    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
-    public PlcDouble(@JsonProperty("value") double value) {
-        super(value, false);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBoolean() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean getBoolean() {
-        return (value != null) && !value.equals(0.0);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isByte() {
-        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public byte getByte() {
-        return value.byteValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isShort() {
-        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public short getShort() {
-        return value.shortValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isInteger() {
-        return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public int getInteger() {
-        return value.intValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isLong() {
-        return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public long getLong() {
-        return value.longValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigInteger getBigInteger() {
-        return BigInteger.valueOf(value.longValue());
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isFloat() {
-        return (value != null) && (value <= Float.MAX_VALUE) && (value >= -Float.MAX_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public float getFloat() {
-        return value.floatValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isDouble() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public double getDouble() {
-        return value;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigDecimal() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigDecimal getBigDecimal() {
-        return new BigDecimal(value);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isString() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public String getString() {
-        return toString();
-    }
-
-    @Override
-    @JsonIgnore
-    public String toString() {
-        return Double.toString(value);
-    }
-
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcFloat.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcFloat.java
deleted file mode 100644
index 6e126f3..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcFloat.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.api.value;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class PlcFloat extends PlcSimpleValue<Float> {
-
-    public PlcFloat(Float value) {
-        super(value, true);
-    }
-
-    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
-    public PlcFloat(@JsonProperty("value") float value) {
-        super(value, false);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBoolean() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean getBoolean() {
-        return (value != null) && !value.equals(0.0F);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isByte() {
-        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public byte getByte() {
-        return value.byteValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isShort() {
-        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public short getShort() {
-        return value.shortValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isInteger() {
-        return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public int getInteger() {
-        return value.intValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isLong() {
-        return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public long getLong() {
-        return value.longValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigInteger getBigInteger() {
-        return BigInteger.valueOf(value.longValue());
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isFloat() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public float getFloat() {
-        return value;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isDouble() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public double getDouble() {
-        return value.doubleValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigDecimal() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigDecimal getBigDecimal() {
-        return new BigDecimal(value);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isString() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public String getString() {
-        return toString();
-    }
-
-    @Override
-    @JsonIgnore
-    public String toString() {
-        return Float.toString(value);
-    }
-
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcIECValue.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcIECValue.java
index 3a01dca..9eeb1a7 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcIECValue.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcIECValue.java
@@ -20,7 +20,6 @@
 package org.apache.plc4x.java.api.value;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import org.apache.plc4x.java.api.value.*;
 
 public abstract class PlcIECValue<T> extends PlcValueAdapter {
 
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcINT.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcINT.java
index a5f540d..b270260 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcINT.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcINT.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcINT extends PlcIECValue<Short> {
@@ -40,13 +36,13 @@ public class PlcINT extends PlcIECValue<Short> {
 
     public PlcINT(Boolean value) {
         super();
-        this.value = value ? new Short((short) 1) : new Short((short) 0);
+        this.value = value ? Short.valueOf((short) 1) : Short.valueOf((short) 0);
         this.isNullable = false;
     }
 
     public PlcINT(Byte value) {
         super();
-        this.value = (Short) value.shortValue();
+        this.value = value.shortValue();
         this.isNullable = false;
     }
 
@@ -59,7 +55,7 @@ public class PlcINT extends PlcIECValue<Short> {
     public PlcINT(Integer value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -71,7 +67,7 @@ public class PlcINT extends PlcIECValue<Short> {
     public PlcINT(Long value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -83,7 +79,7 @@ public class PlcINT extends PlcIECValue<Short> {
     public PlcINT(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -95,7 +91,7 @@ public class PlcINT extends PlcIECValue<Short> {
     public PlcINT(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -107,7 +103,7 @@ public class PlcINT extends PlcIECValue<Short> {
     public PlcINT(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -119,7 +115,7 @@ public class PlcINT extends PlcIECValue<Short> {
     public PlcINT(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -131,8 +127,7 @@ public class PlcINT extends PlcIECValue<Short> {
     public PlcINT(String value) {
         super();
         try {
-            Short val = Short.valueOf(value).shortValue();
-            this.value = val;
+            this.value = Short.valueOf(value);
             this.isNullable = false;
         }
         catch(Exception e) {
@@ -150,6 +145,30 @@ public class PlcINT extends PlcIECValue<Short> {
 
     @Override
     @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isByte() {
+        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public byte getByte() {
+        return value.byteValue();
+    }
+
+    @Override
+    @JsonIgnore
     public boolean isShort() {
         return true;
     }
@@ -160,16 +179,102 @@ public class PlcINT extends PlcIECValue<Short> {
         return value;
     }
 
-    public short getINT() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public int getInteger() {
+        return value.intValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isLong() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public long getLong() {
+        return value.longValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigInteger getBigInteger() {
+        return BigInteger.valueOf(getLong());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isFloat() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public float getFloat() {
+        return value.floatValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isDouble() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public double getDouble() {
+        return value.doubleValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return BigDecimal.valueOf(getFloat());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
     @JsonIgnore
     public String toString() {
-        return Short.toString(value);
+        return Integer.toString(value);
+    }
+
+    @JsonIgnore
+    public short getINT() {
+        return value;
     }
 
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[2];
         bytes[0] = (byte)((value >> 8) & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcInteger.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcInteger.java
deleted file mode 100644
index 5b6fd02..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcInteger.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.api.value;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class PlcInteger extends PlcSimpleValue<Integer> {
-
-    public PlcInteger(Integer value) {
-        super(value, true);
-    }
-
-    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
-    public PlcInteger(@JsonProperty("value") int value) {
-        super(value, false);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBoolean() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean getBoolean() {
-        return (value != null) && !value.equals(0);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isByte() {
-        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public byte getByte() {
-        return value.byteValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isShort() {
-        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public short getShort() {
-        return value.shortValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public int getInteger() {
-        return value;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isLong() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public long getLong() {
-        return value.longValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigInteger getBigInteger() {
-        return BigInteger.valueOf((long) value);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isFloat() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public float getFloat() {
-        return value.floatValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isDouble() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public double getDouble() {
-        return value.doubleValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigDecimal() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigDecimal getBigDecimal() {
-        return new BigDecimal(value);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isString() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public String getString() {
-        return toString();
-    }
-
-    @Override
-    @JsonIgnore
-    public String toString() {
-        return Integer.toString(value);
-    }
-
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLINT.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLINT.java
index 33605f4..2aaf5de 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLINT.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLINT.java
@@ -25,18 +25,14 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcLINT extends PlcIECValue<Long> {
 
     static Long minValue = (long) 0;
-    static Long maxValue = (long) Long.MAX_VALUE;
+    static Long maxValue = Long.MAX_VALUE;
 
     public PlcLINT(Boolean value) {
         super();
@@ -46,19 +42,19 @@ public class PlcLINT extends PlcIECValue<Long> {
 
     public PlcLINT(Byte value) {
         super();
-        this.value = (Long) value.longValue();
+        this.value = value.longValue();
         this.isNullable = false;
     }
 
     public PlcLINT(Short value) {
         super();
-        this.value = (Long) value.longValue();
+        this.value = value.longValue();
         this.isNullable = false;
     }
 
     public PlcLINT(Integer value) {
         super();
-        this.value = (Long) value.longValue();
+        this.value = value.longValue();
         this.isNullable = false;
     }
 
@@ -71,7 +67,7 @@ public class PlcLINT extends PlcIECValue<Long> {
     public PlcLINT(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -83,7 +79,7 @@ public class PlcLINT extends PlcIECValue<Long> {
     public PlcLINT(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -95,7 +91,7 @@ public class PlcLINT extends PlcIECValue<Long> {
     public PlcLINT(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -107,7 +103,7 @@ public class PlcLINT extends PlcIECValue<Long> {
     public PlcLINT(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -119,8 +115,7 @@ public class PlcLINT extends PlcIECValue<Long> {
     public PlcLINT(String value) {
         super();
         try {
-            Long val = Long.parseLong(value);
-            this.value = val;
+            this.value = Long.parseLong(value);
             this.isNullable = false;
         }
         catch(Exception e) {
@@ -137,6 +132,55 @@ public class PlcLINT extends PlcIECValue<Long> {
         this.isNullable = false;
     }
 
+
+    @Override
+    @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isByte() {
+        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public byte getByte() {
+        return value.byteValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isShort() {
+        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public short getShort() {
+        return value.shortValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isInteger() {
+        return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public int getInteger() {
+        return value.intValue();
+    }
+
     @Override
     @JsonIgnore
     public boolean isLong() {
@@ -149,8 +193,64 @@ public class PlcLINT extends PlcIECValue<Long> {
         return value;
     }
 
-    public long getLINT() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isBigInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigInteger getBigInteger() {
+        return BigInteger.valueOf(value);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isFloat() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public float getFloat() {
+        return value.floatValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isDouble() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public double getDouble() {
+        return value.doubleValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return BigDecimal.valueOf(getDouble());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
@@ -159,6 +259,12 @@ public class PlcLINT extends PlcIECValue<Long> {
         return Long.toString(value);
     }
 
+    @JsonIgnore
+    public long getLINT() {
+        return value;
+    }
+
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[8];
         bytes[0] = (byte)((value >> 56) & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLREAL.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLREAL.java
index f2b44ee..3bc90f5 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLREAL.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLREAL.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcLREAL extends PlcIECValue<Double> {
@@ -46,25 +42,25 @@ public class PlcLREAL extends PlcIECValue<Double> {
 
     public PlcLREAL(Byte value) {
         super();
-        this.value = (Double) value.doubleValue();
+        this.value = value.doubleValue();
         this.isNullable = false;
     }
 
     public PlcLREAL(Short value) {
         super();
-        this.value = (Double) value.doubleValue();
+        this.value = value.doubleValue();
         this.isNullable = false;
     }
 
     public PlcLREAL(Integer value) {
         super();
-        this.value = (Double) value.doubleValue();
+        this.value = value.doubleValue();
         this.isNullable = false;
     }
 
     public PlcLREAL(Float value) {
         super();
-        this.value = (Double) value.doubleValue();
+        this.value = value.doubleValue();
         this.isNullable = false;
     }
 
@@ -78,7 +74,7 @@ public class PlcLREAL extends PlcIECValue<Double> {
         super();
         BigDecimal val = new BigDecimal(value);
         if ((val.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (val.compareTo(BigDecimal.valueOf(maxValue)) <= 0)) {
-            this.value = (Double) val.doubleValue();
+            this.value = val.doubleValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -90,7 +86,7 @@ public class PlcLREAL extends PlcIECValue<Double> {
     public PlcLREAL(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Double) value.doubleValue();
+            this.value = value.doubleValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -102,8 +98,7 @@ public class PlcLREAL extends PlcIECValue<Double> {
     public PlcLREAL(String value) {
         super();
         try {
-            Double val = Double.parseDouble(value);
-            this.value = val;
+            this.value = Double.parseDouble(value);
             this.isNullable = false;
         }
         catch(Exception e) {
@@ -116,12 +111,96 @@ public class PlcLREAL extends PlcIECValue<Double> {
     @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
     public PlcLREAL(@JsonProperty("value") double value) {
         super();
-        this.value = new Double(value);
+        this.value = value;
         this.isNullable = false;
     }
 
     @Override
     @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isByte() {
+        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public byte getByte() {
+        return value.byteValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isShort() {
+        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public short getShort() {
+        return value.shortValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isInteger() {
+        return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public int getInteger() {
+        return value.intValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isLong() {
+        return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public long getLong() {
+        return value.longValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigInteger getBigInteger() {
+        return BigInteger.valueOf(getLong());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isFloat() {
+        return (value != null) && (value <= Float.MAX_VALUE) && (value >= -Float.MAX_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public float getFloat() {
+        return value.floatValue();
+    }
+
+    @Override
+    @JsonIgnore
     public boolean isDouble() {
         return true;
     }
@@ -132,8 +211,28 @@ public class PlcLREAL extends PlcIECValue<Double> {
         return value;
     }
 
-    public double getLREAL() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return new BigDecimal(value);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
@@ -142,6 +241,12 @@ public class PlcLREAL extends PlcIECValue<Double> {
         return Double.toString(value);
     }
 
+    @JsonIgnore
+    public double getLREAL() {
+        return value;
+    }
+
+    @JsonIgnore
     public byte[] getBytes() {
         long longBits =  Double.doubleToRawLongBits(value);
         byte[] bytes = new byte[8];
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLWORD.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLWORD.java
index 00ef191..63d0552 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLWORD.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLWORD.java
@@ -19,18 +19,12 @@
 
 package org.apache.plc4x.java.api.value;
 
-import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcLWORD extends PlcIECValue<BigInteger> {
@@ -196,6 +190,7 @@ public class PlcLWORD extends PlcIECValue<BigInteger> {
         return value;
     }
 
+    @JsonIgnore
     public BigInteger getLWORD() {
         return value;
     }
@@ -206,6 +201,7 @@ public class PlcLWORD extends PlcIECValue<BigInteger> {
         return value.toString();
     }
 
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] tmp = value.toByteArray();
         byte[] bytes = new byte[8];
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLong.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLong.java
deleted file mode 100644
index af2cf1e..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcLong.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.api.value;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class PlcLong extends PlcSimpleValue<Long> {
-
-    public PlcLong(Long value) {
-        super(value, true);
-    }
-
-    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
-    public PlcLong(@JsonProperty("value") long value) {
-        super(value, false);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBoolean() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean getBoolean() {
-        return (value != null) && !value.equals(0L);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isByte() {
-        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public byte getByte() {
-        return value.byteValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isShort() {
-        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public short getShort() {
-        return value.shortValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isInteger() {
-        return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public int getInteger() {
-        return value.intValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isLong() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public long getLong() {
-        return value;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigInteger getBigInteger() {
-        return BigInteger.valueOf(value);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isFloat() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public float getFloat() {
-        return value.floatValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isDouble() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public double getDouble() {
-        return value.doubleValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigDecimal() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigDecimal getBigDecimal() {
-        return new BigDecimal(value);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isString() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public String getString() {
-        return toString();
-    }
-
-    @Override
-    @JsonIgnore
-    public String toString() {
-        return Long.toString(value);
-    }
-
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcREAL.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcREAL.java
index a54ba52..9e2a668 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcREAL.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcREAL.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcREAL extends PlcIECValue<Float> {
@@ -46,19 +42,19 @@ public class PlcREAL extends PlcIECValue<Float> {
 
     public PlcREAL(Byte value) {
         super();
-        this.value = (Float) value.floatValue();
+        this.value = value.floatValue();
         this.isNullable = false;
     }
 
     public PlcREAL(Short value) {
         super();
-        this.value = (Float) value.floatValue();
+        this.value = value.floatValue();
         this.isNullable = false;
     }
 
     public PlcREAL(Integer value) {
         super();
-        this.value = (Float) value.floatValue();
+        this.value = value.floatValue();
         this.isNullable = false;
     }
 
@@ -71,7 +67,7 @@ public class PlcREAL extends PlcIECValue<Float> {
     public PlcREAL(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Float) value.floatValue();
+            this.value = value.floatValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -84,7 +80,7 @@ public class PlcREAL extends PlcIECValue<Float> {
         super();
         BigDecimal val = new BigDecimal(value);
         if ((val.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (val.compareTo(BigDecimal.valueOf(maxValue)) <= 0)) {
-            this.value = (Float) val.floatValue();
+            this.value = val.floatValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -96,7 +92,7 @@ public class PlcREAL extends PlcIECValue<Float> {
     public PlcREAL(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Float) value.floatValue();
+            this.value = value.floatValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -108,8 +104,7 @@ public class PlcREAL extends PlcIECValue<Float> {
     public PlcREAL(String value) {
         super();
         try {
-            Float val = Float.parseFloat(value);
-            this.value = val;
+            this.value = Float.parseFloat(value);
             this.isNullable = false;
         }
         catch(Exception e) {
@@ -122,12 +117,84 @@ public class PlcREAL extends PlcIECValue<Float> {
     @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
     public PlcREAL(@JsonProperty("value") float value) {
         super();
-        this.value = new Float(value);
+        this.value = value;
         this.isNullable = false;
     }
 
     @Override
     @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isByte() {
+        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public byte getByte() {
+        return value.byteValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isShort() {
+        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public short getShort() {
+        return value.shortValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isInteger() {
+        return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public int getInteger() {
+        return value.intValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isLong() {
+        return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public long getLong() {
+        return value.longValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigInteger getBigInteger() {
+        return BigInteger.valueOf(getLong());
+    }
+
+    @Override
+    @JsonIgnore
     public boolean isFloat() {
         return true;
     }
@@ -138,8 +205,40 @@ public class PlcREAL extends PlcIECValue<Float> {
         return value;
     }
 
-    public float getREAL() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isDouble() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public double getDouble() {
+        return value.doubleValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return BigDecimal.valueOf(getDouble());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
@@ -148,6 +247,12 @@ public class PlcREAL extends PlcIECValue<Float> {
         return Float.toString(value);
     }
 
+    @JsonIgnore
+    public float getREAL() {
+        return value;
+    }
+
+    @JsonIgnore
     public byte[] getBytes() {
         int intBits =  Float.floatToIntBits(value);
 	      return new byte[] { (byte) (intBits >> 24), (byte) (intBits >> 16), (byte) (intBits >> 8), (byte) (intBits) };
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcSINT.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcSINT.java
index 7b87ad4..0e2fe98 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcSINT.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcSINT.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcSINT extends PlcIECValue<Byte> {
@@ -40,7 +36,7 @@ public class PlcSINT extends PlcIECValue<Byte> {
 
     public PlcSINT(Boolean value) {
         super();
-        this.value = value ? new Byte((byte) 1) : new Byte((byte) 0);
+        this.value = value ? Byte.valueOf((byte) 1) : Byte.valueOf((byte) 0);
         this.isNullable = false;
     }
 
@@ -53,7 +49,7 @@ public class PlcSINT extends PlcIECValue<Byte> {
     public PlcSINT(Short value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Byte) value.byteValue();
+            this.value = value.byteValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -65,7 +61,7 @@ public class PlcSINT extends PlcIECValue<Byte> {
     public PlcSINT(Integer value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Byte) value.byteValue();
+            this.value = value.byteValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -77,7 +73,7 @@ public class PlcSINT extends PlcIECValue<Byte> {
     public PlcSINT(Long value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Byte) value.byteValue();
+            this.value = value.byteValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -89,7 +85,7 @@ public class PlcSINT extends PlcIECValue<Byte> {
     public PlcSINT(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Byte) value.byteValue();
+            this.value = value.byteValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -101,7 +97,7 @@ public class PlcSINT extends PlcIECValue<Byte> {
     public PlcSINT(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Byte) value.byteValue();
+            this.value = value.byteValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -113,7 +109,7 @@ public class PlcSINT extends PlcIECValue<Byte> {
     public PlcSINT(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Byte) value.byteValue();
+            this.value = value.byteValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -125,7 +121,7 @@ public class PlcSINT extends PlcIECValue<Byte> {
     public PlcSINT(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Byte) value.byteValue();
+            this.value = value.byteValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -137,8 +133,7 @@ public class PlcSINT extends PlcIECValue<Byte> {
     public PlcSINT(String value) {
         super();
         try {
-            Byte val = Byte.valueOf(value).byteValue();
-            this.value = val;
+            this.value = Byte.valueOf(value);
             this.isNullable = false;
         }
         catch(Exception e) {
@@ -156,6 +151,18 @@ public class PlcSINT extends PlcIECValue<Byte> {
 
     @Override
     @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
     public boolean isByte() {
         return true;
     }
@@ -166,8 +173,100 @@ public class PlcSINT extends PlcIECValue<Byte> {
         return value;
     }
 
-    public byte getSINT() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isShort() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public short getShort() {
+        return value.shortValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public int getInteger() {
+        return value.intValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isLong() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public long getLong() {
+        return value.longValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigInteger getBigInteger() {
+        return BigInteger.valueOf(getLong());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isFloat() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public float getFloat() {
+        return value.floatValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isDouble() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public double getDouble() {
+        return value.doubleValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return BigDecimal.valueOf(getFloat());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
@@ -176,6 +275,12 @@ public class PlcSINT extends PlcIECValue<Byte> {
         return Byte.toString(value);
     }
 
+    @JsonIgnore
+    public byte getSINT() {
+        return value;
+    }
+
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[1];
         bytes[0] = (byte)(value & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcShort.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcShort.java
deleted file mode 100644
index c4f7dc1..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcShort.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.api.value;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class PlcShort extends PlcSimpleValue<Short> {
-
-    public PlcShort(Short value) {
-        super(value, true);
-    }
-
-    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
-    public PlcShort(@JsonProperty("value") short value) {
-        super(value, false);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBoolean() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean getBoolean() {
-        return (value != null) && !value.equals((short) 0);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isByte() {
-        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
-    }
-
-    @Override
-    @JsonIgnore
-    public byte getByte() {
-        return value.byteValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isShort() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public short getShort() {
-        return value;
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public int getInteger() {
-        return value.intValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isLong() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public long getLong() {
-        return value.longValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigInteger() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigInteger getBigInteger() {
-        return BigInteger.valueOf((long) value);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isFloat() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public float getFloat() {
-        return value.floatValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isDouble() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public double getDouble() {
-        return value.doubleValue();
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isBigDecimal() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public BigDecimal getBigDecimal() {
-        return new BigDecimal(value);
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isString() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public String getString() {
-        return toString();
-    }
-
-    @Override
-    @JsonIgnore
-    public String toString() {
-        return Integer.toString(value);
-    }
-
-}
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUDINT.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUDINT.java
index ea3c53a..3ad65ca 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUDINT.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUDINT.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcUDINT extends PlcIECValue<Long> {
@@ -47,7 +43,7 @@ public class PlcUDINT extends PlcIECValue<Long> {
     public PlcUDINT(Byte value) {
         super();
         if (value >= minValue && value <= maxValue) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -59,7 +55,7 @@ public class PlcUDINT extends PlcIECValue<Long> {
     public PlcUDINT(Short value) {
         super();
         if (value >= minValue && value <= maxValue) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -71,7 +67,7 @@ public class PlcUDINT extends PlcIECValue<Long> {
     public PlcUDINT(Integer value) {
         super();
         if (value >= minValue && value <= maxValue) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -83,7 +79,7 @@ public class PlcUDINT extends PlcIECValue<Long> {
     public PlcUDINT(Long value) {
         super();
         if (value >= minValue && value <= maxValue) {
-            this.value = (Long) value.longValue();
+            this.value = value;
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -95,7 +91,7 @@ public class PlcUDINT extends PlcIECValue<Long> {
     public PlcUDINT(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -107,7 +103,7 @@ public class PlcUDINT extends PlcIECValue<Long> {
     public PlcUDINT(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -119,7 +115,7 @@ public class PlcUDINT extends PlcIECValue<Long> {
     public PlcUDINT(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -131,7 +127,7 @@ public class PlcUDINT extends PlcIECValue<Long> {
     public PlcUDINT(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Long) value.longValue();
+            this.value = value.longValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -143,7 +139,7 @@ public class PlcUDINT extends PlcIECValue<Long> {
     public PlcUDINT(String value) {
         super();
         try {
-            Long val = Long.parseLong(value);
+            long val = Long.parseLong(value);
             if (val >= minValue && val <= maxValue) {
                 this.value = val;
                 this.isNullable = false;
@@ -173,6 +169,55 @@ public class PlcUDINT extends PlcIECValue<Long> {
       }
     }
 
+
+    @Override
+    @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isByte() {
+        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public byte getByte() {
+        return value.byteValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isShort() {
+        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public short getShort() {
+        return value.shortValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isInteger() {
+        return (value != null) && (value <= Integer.MAX_VALUE) && (value >= Integer.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public int getInteger() {
+        return value.intValue();
+    }
+
     @Override
     @JsonIgnore
     public boolean isLong() {
@@ -185,8 +230,64 @@ public class PlcUDINT extends PlcIECValue<Long> {
         return value;
     }
 
-    public long getUDINT() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isBigInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigInteger getBigInteger() {
+        return BigInteger.valueOf(value);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isFloat() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public float getFloat() {
+        return value.floatValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isDouble() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public double getDouble() {
+        return value.doubleValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return BigDecimal.valueOf(getDouble());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
@@ -195,6 +296,12 @@ public class PlcUDINT extends PlcIECValue<Long> {
         return Long.toString(value);
     }
 
+    @JsonIgnore
+    public long getUDINT() {
+        return value;
+    }
+
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[4];
         bytes[0] = (byte)((value >> 24) & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUINT.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUINT.java
index 02a65d1..cae28b6 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUINT.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUINT.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcUINT extends PlcIECValue<Integer> {
@@ -53,7 +49,7 @@ public class PlcUINT extends PlcIECValue<Integer> {
     public PlcUINT(Short value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new IllegalArgumentException("Value of type " + value + " is out of range " + minValue + " - " + maxValue + " for a PLCUINT Value");
@@ -73,7 +69,7 @@ public class PlcUINT extends PlcIECValue<Integer> {
     public PlcUINT(Long value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -85,7 +81,7 @@ public class PlcUINT extends PlcIECValue<Integer> {
     public PlcUINT(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -97,7 +93,7 @@ public class PlcUINT extends PlcIECValue<Integer> {
     public PlcUINT(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -109,7 +105,7 @@ public class PlcUINT extends PlcIECValue<Integer> {
     public PlcUINT(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -121,7 +117,7 @@ public class PlcUINT extends PlcIECValue<Integer> {
     public PlcUINT(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -133,7 +129,7 @@ public class PlcUINT extends PlcIECValue<Integer> {
     public PlcUINT(String value) {
         super();
         try {
-            Integer val = Integer.parseInt(value);
+            int val = Integer.parseInt(value);
             if ((val >= minValue) && (val <= maxValue)) {
                 this.value = val;
                 this.isNullable = false;
@@ -159,6 +155,42 @@ public class PlcUINT extends PlcIECValue<Integer> {
 
     @Override
     @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isByte() {
+        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public byte getByte() {
+        return value.byteValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isShort() {
+        return (value != null) && (value <= Short.MAX_VALUE) && (value >= Short.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public short getShort() {
+        return value.shortValue();
+    }
+
+    @Override
+    @JsonIgnore
     public boolean isInteger() {
         return true;
     }
@@ -169,8 +201,76 @@ public class PlcUINT extends PlcIECValue<Integer> {
         return value;
     }
 
-    public int getUINT() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isLong() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public long getLong() {
+        return value.longValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigInteger getBigInteger() {
+        return BigInteger.valueOf(getLong());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isFloat() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public float getFloat() {
+        return value.floatValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isDouble() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public double getDouble() {
+        return value.doubleValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return BigDecimal.valueOf(getFloat());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
@@ -179,6 +279,12 @@ public class PlcUINT extends PlcIECValue<Integer> {
         return Integer.toString(value);
     }
 
+    @JsonIgnore
+    public int getUINT() {
+        return value;
+    }
+
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[2];
         bytes[0] = (byte)((value >> 8) & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcULINT.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcULINT.java
index 628f016..74b19e6 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcULINT.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcULINT.java
@@ -19,18 +19,12 @@
 
 package org.apache.plc4x.java.api.value;
 
-import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcULINT extends PlcIECValue<BigInteger> {
@@ -186,6 +180,66 @@ public class PlcULINT extends PlcIECValue<BigInteger> {
 
     @Override
     @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isByte() {
+        return (value != null) && (value.compareTo(BigInteger.valueOf(Byte.MAX_VALUE)) <= 0) && (value.compareTo(BigInteger.valueOf(Byte.MIN_VALUE)) >= 0);
+    }
+
+    @Override
+    @JsonIgnore
+    public byte getByte() {
+        return value.byteValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isShort() {
+        return (value != null) && (value.compareTo(BigInteger.valueOf(Short.MAX_VALUE)) <= 0) && (value.compareTo(BigInteger.valueOf(Short.MIN_VALUE)) >= 0);
+    }
+
+    @Override
+    @JsonIgnore
+    public short getShort() {
+        return value.shortValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isInteger() {
+        return (value != null) && (value.compareTo(BigInteger.valueOf(Integer.MAX_VALUE)) <= 0) && (value.compareTo(BigInteger.valueOf(Integer.MIN_VALUE)) >= 0);
+    }
+
+    @Override
+    @JsonIgnore
+    public int getInteger() {
+        return value.intValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isLong() {
+        return (value != null) && (value.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) <= 0) && (value.compareTo(BigInteger.valueOf(Long.MIN_VALUE)) >= 0);
+    }
+
+    @Override
+    @JsonIgnore
+    public long getLong() {
+        return value.longValue();
+    }
+
+    @Override
+    @JsonIgnore
     public boolean isBigInteger() {
         return true;
     }
@@ -196,8 +250,52 @@ public class PlcULINT extends PlcIECValue<BigInteger> {
         return value;
     }
 
-    public BigInteger getULINT() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isFloat() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public float getFloat() {
+        return value.floatValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isDouble() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public double getDouble() {
+        return value.doubleValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return new BigDecimal(value);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
@@ -206,6 +304,12 @@ public class PlcULINT extends PlcIECValue<BigInteger> {
         return value.toString();
     }
 
+    @JsonIgnore
+    public BigInteger getULINT() {
+        return value;
+    }
+
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] tmp = value.toByteArray();
         byte[] bytes = new byte[8];
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUSINT.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUSINT.java
index c992859..aa8cba6 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUSINT.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcUSINT.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcUSINT extends PlcIECValue<Short> {
@@ -40,7 +36,7 @@ public class PlcUSINT extends PlcIECValue<Short> {
 
     public PlcUSINT(Boolean value) {
         super();
-        this.value = value ? new Short((short) 1) : new Short((short) 0);
+        this.value = value ? Short.valueOf((short) 1) : Short.valueOf((short) 0);
         this.isNullable = false;
     }
 
@@ -59,7 +55,7 @@ public class PlcUSINT extends PlcIECValue<Short> {
     public PlcUSINT(Short value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Short) value.shortValue();
+            this.value = value;
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -71,7 +67,7 @@ public class PlcUSINT extends PlcIECValue<Short> {
     public PlcUSINT(Integer value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -83,7 +79,7 @@ public class PlcUSINT extends PlcIECValue<Short> {
     public PlcUSINT(Long value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -95,7 +91,7 @@ public class PlcUSINT extends PlcIECValue<Short> {
     public PlcUSINT(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -107,7 +103,7 @@ public class PlcUSINT extends PlcIECValue<Short> {
     public PlcUSINT(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -119,7 +115,7 @@ public class PlcUSINT extends PlcIECValue<Short> {
     public PlcUSINT(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -131,7 +127,7 @@ public class PlcUSINT extends PlcIECValue<Short> {
     public PlcUSINT(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -143,7 +139,7 @@ public class PlcUSINT extends PlcIECValue<Short> {
     public PlcUSINT(String value) {
         super();
         try {
-            Short val = Short.valueOf(value).shortValue();
+            short val = Short.parseShort(value);
             if ((val >= minValue) && (val <= maxValue)) {
                 this.value = val;
                 this.isNullable = false;
@@ -175,6 +171,30 @@ public class PlcUSINT extends PlcIECValue<Short> {
 
     @Override
     @JsonIgnore
+    public boolean isBoolean() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean getBoolean() {
+        return (value != null) && !value.equals(0);
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isByte() {
+        return (value != null) && (value <= Byte.MAX_VALUE) && (value >= Byte.MIN_VALUE);
+    }
+
+    @Override
+    @JsonIgnore
+    public byte getByte() {
+        return value.byteValue();
+    }
+
+    @Override
+    @JsonIgnore
     public boolean isShort() {
         return true;
     }
@@ -185,8 +205,88 @@ public class PlcUSINT extends PlcIECValue<Short> {
         return value;
     }
 
-    public short getUSINT() {
-        return value;
+    @Override
+    @JsonIgnore
+    public boolean isInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public int getInteger() {
+        return value.intValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isLong() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public long getLong() {
+        return value.longValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigInteger() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigInteger getBigInteger() {
+        return BigInteger.valueOf(getLong());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isFloat() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public float getFloat() {
+        return value.floatValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isDouble() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public double getDouble() {
+        return value.doubleValue();
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isBigDecimal() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public BigDecimal getBigDecimal() {
+        return BigDecimal.valueOf(getFloat());
+    }
+
+    @Override
+    @JsonIgnore
+    public boolean isString() {
+        return true;
+    }
+
+    @Override
+    @JsonIgnore
+    public String getString() {
+        return toString();
     }
 
     @Override
@@ -195,6 +295,12 @@ public class PlcUSINT extends PlcIECValue<Short> {
         return Short.toString(value);
     }
 
+    @JsonIgnore
+    public short getUSINT() {
+        return value;
+    }
+
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[1];
         bytes[0] = (byte)(value & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcValues.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcValues.java
index 599402d..f746245 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcValues.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcValues.java
@@ -40,17 +40,17 @@ public class PlcValues {
     private static final Logger LOGGER = LoggerFactory.getLogger(PlcValues.class);
 
     public static PlcValue of(Boolean b) {
-        return new PlcBoolean(b);
+        return new PlcBOOL(b);
     }
 
     public static PlcValue of(boolean b) {
-        return new PlcBoolean(b);
+        return new PlcBOOL(b);
     }
 
     public static PlcValue of(Boolean[] b) {
         if(b != null) {
             if(b.length == 1) {
-                return new PlcBoolean(b[0]);
+                return new PlcBOOL(b[0]);
             } else if(b.length > 1) {
                 return new PlcList(Arrays.asList(b));
             }
@@ -61,7 +61,7 @@ public class PlcValues {
     public static PlcValue of(boolean[] b) {
         if(b != null) {
             if(b.length == 1) {
-                return new PlcBoolean(b[0]);
+                return new PlcBOOL(b[0]);
             } else if(b.length > 1) {
                 return new PlcList(Arrays.asList(b));
             }
@@ -70,17 +70,17 @@ public class PlcValues {
     }
 
     public static PlcValue of(Byte i) {
-        return new PlcInteger(i);
+        return new PlcSINT(i);
     }
 
     public static PlcValue of(byte i) {
-        return new PlcInteger(i);
+        return new PlcSINT(i);
     }
 
     public static PlcValue of(Byte[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcInteger(i[0]);
+                return new PlcSINT(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -91,7 +91,7 @@ public class PlcValues {
     public static PlcValue of(byte[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcInteger(i[0]);
+                return new PlcSINT(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -100,17 +100,17 @@ public class PlcValues {
     }
 
     public static PlcValue of(Short i) {
-        return new PlcInteger(i);
+        return new PlcINT(i);
     }
 
     public static PlcValue of(short i) {
-        return new PlcInteger(i);
+        return new PlcINT(i);
     }
 
     public static PlcValue of(Short[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcInteger(i[0]);
+                return new PlcINT(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -121,7 +121,7 @@ public class PlcValues {
     public static PlcValue of(short[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcInteger(i[0]);
+                return new PlcINT(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -130,17 +130,17 @@ public class PlcValues {
     }
 
     public static PlcValue of(Integer i) {
-        return new PlcInteger(i);
+        return new PlcDINT(i);
     }
 
     public static PlcValue of(int i) {
-        return new PlcInteger(i);
+        return new PlcDINT(i);
     }
 
     public static PlcValue of(Integer[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcInteger(i[0]);
+                return new PlcDINT(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -151,7 +151,7 @@ public class PlcValues {
     public static PlcValue of(int[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcInteger(i[0]);
+                return new PlcDINT(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -160,17 +160,17 @@ public class PlcValues {
     }
 
     public static PlcValue of(Long i) {
-        return new PlcLong(i);
+        return new PlcLINT(i);
     }
 
     public static PlcValue of(long i) {
-        return new PlcLong(i);
+        return new PlcLINT(i);
     }
 
     public static PlcValue of(Long[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcLong(i[0]);
+                return new PlcLINT(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -181,7 +181,7 @@ public class PlcValues {
     public static PlcValue of(long[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcLong(i[0]);
+                return new PlcLINT(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -205,17 +205,17 @@ public class PlcValues {
     }
 
     public static PlcValue of(Float i) {
-        return new PlcFloat(i);
+        return new PlcREAL(i);
     }
 
     public static PlcValue of(float i) {
-        return new PlcFloat(i);
+        return new PlcREAL(i);
     }
 
     public static PlcValue of(Float[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcFloat(i[0]);
+                return new PlcREAL(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -226,7 +226,7 @@ public class PlcValues {
     public static PlcValue of(float[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcFloat(i[0]);
+                return new PlcREAL(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -235,17 +235,17 @@ public class PlcValues {
     }
 
     public static PlcValue of(Double i) {
-        return new PlcDouble(i);
+        return new PlcLREAL(i);
     }
 
     public static PlcValue of(double i) {
-        return new PlcDouble(i);
+        return new PlcLREAL(i);
     }
 
     public static PlcValue of(Double[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcDouble(i[0]);
+                return new PlcLREAL(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
@@ -256,7 +256,7 @@ public class PlcValues {
     public static PlcValue of(double[] i) {
         if(i != null) {
             if(i.length == 1) {
-                return new PlcDouble(i[0]);
+                return new PlcLREAL(i[0]);
             } else if(i.length > 1) {
                 return new PlcList(Arrays.asList(i));
             }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWCHAR.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWCHAR.java
index 3c44e9d..44d8e6d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWCHAR.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWCHAR.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcWCHAR extends PlcIECValue<Integer> {
@@ -52,7 +48,7 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
 
     public PlcWCHAR(Character value) {
         super();
-        Integer val = (int) value;
+        int val = (int) value;
         if ((val >= minValue) && (val <= maxValue)) {
             this.value = val;
             this.isNullable = false;
@@ -66,7 +62,7 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
     public PlcWCHAR(Short value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new IllegalArgumentException("Value of type " + value + " is out of range " + minValue + " - " + maxValue + " for a PLCWCHAR Value");
@@ -86,7 +82,7 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
     public PlcWCHAR(Long value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -98,7 +94,7 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
     public PlcWCHAR(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -110,7 +106,7 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
     public PlcWCHAR(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -122,7 +118,7 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
     public PlcWCHAR(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -134,7 +130,7 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
     public PlcWCHAR(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -146,7 +142,7 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
     public PlcWCHAR(String value) {
         super();
         try {
-            Integer val = Integer.parseInt(value);
+            int val = Integer.parseInt(value);
             if ((val >= minValue) && (val <= maxValue)) {
                 this.value = val;
                 this.isNullable = false;
@@ -182,21 +178,23 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
         return value;
     }
 
+    @JsonIgnore
     public int getWCHAR() {
         return value;
     }
 
     @Override
     public Object getObject() {
-        return Character.toString(Character.valueOf((char) ((int) value)));
+        return Character.toString((char) ((int) value));
     }
 
     @Override
     @JsonIgnore
     public String toString() {
-        return Character.toString(Character.valueOf((char) ((int) value)));
+        return Character.toString((char) ((int) value));
     }
 
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[2];
         bytes[0] = (byte)((value >> 8) & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWORD.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWORD.java
index 8597b60..c243495 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWORD.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWORD.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcWORD extends PlcIECValue<Integer> {
@@ -46,14 +42,14 @@ public class PlcWORD extends PlcIECValue<Integer> {
 
     public PlcWORD(Byte value) {
         super();
-        this.value = (Integer) value.intValue();
+        this.value = value.intValue();
         this.isNullable = false;
     }
 
     public PlcWORD(Short value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new IllegalArgumentException("Value of type " + value + " is out of range " + minValue + " - " + maxValue + " for a PLCUINT Value");
@@ -73,7 +69,7 @@ public class PlcWORD extends PlcIECValue<Integer> {
     public PlcWORD(Long value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -85,7 +81,7 @@ public class PlcWORD extends PlcIECValue<Integer> {
     public PlcWORD(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -97,7 +93,7 @@ public class PlcWORD extends PlcIECValue<Integer> {
     public PlcWORD(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -109,7 +105,7 @@ public class PlcWORD extends PlcIECValue<Integer> {
     public PlcWORD(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -121,7 +117,7 @@ public class PlcWORD extends PlcIECValue<Integer> {
     public PlcWORD(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Integer) value.intValue();
+            this.value = value.intValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -133,7 +129,7 @@ public class PlcWORD extends PlcIECValue<Integer> {
     public PlcWORD(String value) {
         super();
         try {
-            Integer val = Integer.parseInt(value);
+            int val = Integer.parseInt(value);
             if ((val >= minValue) && (val <= maxValue)) {
                 this.value = val;
                 this.isNullable = false;
@@ -169,6 +165,7 @@ public class PlcWORD extends PlcIECValue<Integer> {
         return value;
     }
 
+    @JsonIgnore
     public int getWORD() {
         return value;
     }
@@ -179,6 +176,7 @@ public class PlcWORD extends PlcIECValue<Integer> {
         return Integer.toString(value);
     }
 
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[2];
         bytes[0] = (byte)((value >> 8) & 0xff);
diff --git a/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/AbEthProtocolLogic.java b/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/AbEthProtocolLogic.java
index d9e38b6..0583e96 100644
--- a/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/AbEthProtocolLogic.java
+++ b/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/AbEthProtocolLogic.java
@@ -26,10 +26,7 @@ import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.PlcResponse;
 import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.api.value.PlcInteger;
-import org.apache.plc4x.java.api.value.PlcList;
-import org.apache.plc4x.java.api.value.PlcValue;
-import org.apache.plc4x.java.api.value.PlcValues;
+import org.apache.plc4x.java.api.value.*;
 import org.apache.plc4x.java.spi.ConversationContext;
 import org.apache.plc4x.java.spi.Plc4xProtocolBase;
 import org.apache.plc4x.java.spi.configuration.HasConfiguration;
@@ -158,7 +155,7 @@ public class AbEthProtocolLogic extends Plc4xProtocolBase<CIPEncapsulationPacket
                                 DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
                                 short[] data = df1PTLR.getData();
                                 if(data.length == 1) {
-                                    plcValue = new PlcInteger(data[0]);
+                                    plcValue = new PlcINT(data[0]);
                                 } else {
                                     plcValue = new PlcList(Arrays.asList(data));
                                 }
diff --git a/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java b/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
index 24391c4..3658ec8 100644
--- a/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
+++ b/plc4j/drivers/ab-eth/src/main/java/org/apache/plc4x/java/abeth/protocol/Plc4xAbEthProtocol.java
@@ -179,7 +179,7 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
                                 DF1CommandResponseMessageProtectedTypedLogicalRead df1PTLR = (DF1CommandResponseMessageProtectedTypedLogicalRead) plcReadResponse.getResponse();
                                 short[] data = df1PTLR.getData();
                                 if(data.length == 1) {
-                                    plcValue = new PlcInteger(data[0]);
+                                    plcValue = new PlcINT(data[0]);
                                 } else {
                                     plcValue = new PlcList(Arrays.asList(data));
                                 }
@@ -243,7 +243,7 @@ public class Plc4xAbEthProtocol extends PlcMessageToMessageCodec<CIPEncapsulatio
 
     private PlcValue decodeReadResponseUnsignedBytePlcValue(AbEthField field, ByteBuf data) {
         Short[] shorts = null;//readAllValues(Short.class, field, i -> data.readUnsignedByte());
-        return new PlcInteger(1/*shorts*/);
+        return new PlcSINT(1/*shorts*/);
     }
 
 }
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/AdsFieldHandler.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/AdsFieldHandler.java
index 82b19f8..cb022dd 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/AdsFieldHandler.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/AdsFieldHandler.java
@@ -464,9 +464,9 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
             case BIT:
             case BIT8: {
                 if (values.length == 1) {
-                    return new PlcBoolean(Boolean.valueOf(stringValues[0]));
+                    return new PlcBOOL(Boolean.valueOf(stringValues[0]));
                 } else {
-                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcBoolean(Boolean.valueOf(s))).collect(Collectors.toList()));
+                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcBOOL(Boolean.valueOf(s))).collect(Collectors.toList()));
                 }
             }
             case BYTE:
@@ -484,9 +484,9 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
             case SINT:
             case INT8: {
                 if (values.length == 1) {
-                    return new PlcByte(Byte.valueOf(stringValues[0]));
+                    return new PlcSINT(Byte.valueOf(stringValues[0]));
                 } else {
-                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcByte(Byte.valueOf(s))).collect(Collectors.toList()));
+                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcSINT(Byte.valueOf(s))).collect(Collectors.toList()));
                 }
             }
 
@@ -495,9 +495,9 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
             case INT:
             case INT16: {
                 if (values.length == 1) {
-                    return new PlcShort(Short.valueOf(stringValues[0]));
+                    return new PlcINT(Short.valueOf(stringValues[0]));
                 } else {
-                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcShort(Short.valueOf(s))).collect(Collectors.toList()));
+                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcINT(Short.valueOf(s))).collect(Collectors.toList()));
                 }
             }
 
@@ -506,9 +506,9 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
             case DINT:
             case INT32: {
                 if (values.length == 1) {
-                    return new PlcInteger(Integer.valueOf(stringValues[0]));
+                    return new PlcDINT(Integer.valueOf(stringValues[0]));
                 } else {
-                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcInteger(Integer.valueOf(s))).collect(Collectors.toList()));
+                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcDINT(Integer.valueOf(s))).collect(Collectors.toList()));
                 }
             }
 
@@ -517,36 +517,36 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
             case LINT:
             case INT64: {
                 if (values.length == 1) {
-                    return new PlcLong(Long.valueOf(stringValues[0]));
+                    return new PlcLINT(Long.valueOf(stringValues[0]));
                 } else {
-                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcLong(Long.valueOf(s))).collect(Collectors.toList()));
+                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcLINT(Long.valueOf(s))).collect(Collectors.toList()));
                 }
             }
 
             case ULINT:
             case UINT64: {
                 if (values.length == 1) {
-                    return new PlcBigInteger(new BigInteger(stringValues[0]));
+                    return new PlcULINT(new BigInteger(stringValues[0]));
                 } else {
-                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcBigInteger(new BigInteger(s))).collect(Collectors.toList()));
+                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcULINT(new BigInteger(s))).collect(Collectors.toList()));
                 }
             }
 
             case REAL:
             case FLOAT: {
                 if (values.length == 1) {
-                    return new PlcFloat(Float.valueOf(stringValues[0]));
+                    return new PlcREAL(Float.valueOf(stringValues[0]));
                 } else {
-                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcFloat(Float.valueOf(s))).collect(Collectors.toList()));
+                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcREAL(Float.valueOf(s))).collect(Collectors.toList()));
                 }
             }
 
             case LREAL:
             case DOUBLE: {
                 if (values.length == 1) {
-                    return new PlcDouble(Double.valueOf(stringValues[0]));
+                    return new PlcLREAL(Double.valueOf(stringValues[0]));
                 } else {
-                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcDouble(Double.valueOf(s))).collect(Collectors.toList()));
+                    return new PlcList(Arrays.stream(stringValues).map(s -> new PlcLREAL(Double.valueOf(s))).collect(Collectors.toList()));
                 }
             }
 
@@ -775,60 +775,63 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
             }
         }
         if(booleanValues.size() == 1) {
-            return new PlcBoolean(booleanValues.get(0));
+            return new PlcBOOL(booleanValues.get(0));
         } else {
             return new PlcList(booleanValues);
         }
     }
 
     private PlcValue internalEncodeInteger(PlcField field, Object[] values) {
+        // TODO: Review and double check this method.
         AdsField adsField = (AdsField) field;
         Class<? extends PlcValue> fieldType;
         switch (adsField.getAdsDataType()) {
             case BYTE:
-                fieldType = PlcInteger.class;
-                break;
             case WORD:
-                fieldType = PlcList.class;
-                break;
             case DWORD:
-                fieldType = PlcList.class;
+                fieldType = PlcBOOL.class;
                 break;
             case SINT:
-                fieldType = PlcInteger.class;
+                fieldType = PlcSINT.class;
                 break;
             case USINT:
-                fieldType = PlcLong.class;
+                fieldType = PlcUSINT.class;
                 break;
             case INT:
-                fieldType = PlcInteger.class;
+                fieldType = PlcINT.class;
                 break;
             case UINT:
-                fieldType = PlcInteger.class;
+                fieldType = PlcUINT.class;
                 break;
             case DINT:
-                fieldType = PlcInteger.class;
+                fieldType = PlcDINT.class;
                 break;
             case UDINT:
-                fieldType = PlcLong.class;
+                fieldType = PlcUDINT.class;
                 break;
             case LINT:
-                fieldType = PlcLong.class;
+                fieldType = PlcLINT.class;
                 break;
             case ULINT:
-                fieldType = PlcBigInteger.class;
+                fieldType = PlcULINT.class;
                 break;
             case INT32:
-                fieldType = PlcInteger.class;
+                fieldType = PlcDINT.class;
                 break;
             case INT64:
-                fieldType = PlcLong.class;
+                fieldType = PlcLINT.class;
+                break;
+            case FLOAT:
+                fieldType = PlcREAL.class;
+                break;
+            case DOUBLE:
+                fieldType = PlcLREAL.class;
                 break;
             default:
                 throw new IllegalArgumentException(
                     "Cannot assign integer values to " + adsField.getAdsDataType().name() + " fields.");
         }
-        if (fieldType == PlcLong.class) {
+        if (fieldType == PlcREAL.class) {
             Long[] longValues = new Long[values.length];
             for (int i = 0; i < values.length; i++) {
                 if (!((values[i] instanceof Byte) || (values[i] instanceof Short) ||
@@ -845,7 +848,7 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
                 longValues[i] = value.longValue();
             }
             if(longValues.length == 1) {
-                return new PlcLong(longValues[0]);
+                return new PlcREAL(longValues[0]);
             } else {
                 return new PlcList(Arrays.asList(longValues));
             }
@@ -882,16 +885,16 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
         AdsDataType adsDataType = adsField.getAdsDataType();
         switch (adsDataType) {
             case REAL:
-                fieldType = PlcFloat.class;
+                fieldType = PlcREAL.class;
                 break;
             case LREAL:
-                fieldType = PlcDouble.class;
+                fieldType = PlcLREAL.class;
                 break;
             default:
                 throw new IllegalArgumentException(
                     "Cannot assign floating point values to " + adsDataType.name() + " fields.");
         }
-        if (fieldType == PlcDouble.class) {
+        if (fieldType == PlcLREAL.class) {
             Double[] floatingPointValues = new Double[values.length];
             for (int i = 0; i < values.length; i++) {
                 if (values[i] instanceof Float) {
@@ -910,7 +913,7 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
                 }*/
             }
             if(floatingPointValues.length == 1) {
-                return new PlcDouble(floatingPointValues[0]);
+                return new PlcLREAL(floatingPointValues[0]);
             } else {
                 return new PlcList(Arrays.asList(floatingPointValues));
             }
@@ -939,7 +942,7 @@ public class AdsFieldHandler extends DefaultPlcFieldHandler {
                 }*/
             }
             if(floatingPointValues.length == 1) {
-                return new PlcFloat(floatingPointValues[0]);
+                return new PlcREAL(floatingPointValues[0]);
             } else {
                 return new PlcList(Arrays.asList(floatingPointValues));
             }
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/amsads/attic/protocol/util/LittleEndianDecoder.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/amsads/attic/protocol/util/LittleEndianDecoder.java
index 24858fe..49d86e4 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/amsads/attic/protocol/util/LittleEndianDecoder.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/amsads/attic/protocol/util/LittleEndianDecoder.java
@@ -53,7 +53,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte != 0);
                 }
                 if(values.size() == 1) {
-                    return new PlcBoolean(values.get(0));
+                    return new PlcBOOL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -65,7 +65,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte != 0);
                 }
                 if(values.size() == 1) {
-                    return new PlcBoolean(values.get(0));
+                    return new PlcBOOL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -77,7 +77,8 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    // TODO: Double-Check this ...
+                    return new PlcBOOL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -89,7 +90,8 @@ public class LittleEndianDecoder {
                     values.offer(aLong);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    // TODO: Double-Check this ...
+                    return new PlcBOOL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -101,7 +103,8 @@ public class LittleEndianDecoder {
                     values.offer(aLong);
                 }
                 if(values.size() == 1) {
-                    return new PlcLong(values.get(0));
+                    // TODO: Double-Check this ...
+                    return new PlcBOOL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -113,7 +116,7 @@ public class LittleEndianDecoder {
                     values.offer(aLong);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcSINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -125,7 +128,7 @@ public class LittleEndianDecoder {
                     values.offer(aLong);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -137,7 +140,7 @@ public class LittleEndianDecoder {
                     values.offer(intLE);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcDINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -149,7 +152,7 @@ public class LittleEndianDecoder {
                     values.offer(longLE);
                 }
                 if(values.size() == 1) {
-                    return new PlcLong(values.get(0));
+                    return new PlcLINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -161,7 +164,7 @@ public class LittleEndianDecoder {
                     values.offer(aLong);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcUSINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -173,7 +176,7 @@ public class LittleEndianDecoder {
                     values.offer(aLong);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcUINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -185,7 +188,7 @@ public class LittleEndianDecoder {
                     values.offer(aLong);
                 }
                 if(values.size() == 1) {
-                    return new PlcLong(values.get(0));
+                    return new PlcUDINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -201,7 +204,7 @@ public class LittleEndianDecoder {
                     values.offer(bigInteger);
                 }
                 if(values.size() == 1) {
-                    return new PlcBigInteger(values.get(0));
+                    return new PlcULINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -215,7 +218,7 @@ public class LittleEndianDecoder {
                     values.offer(aLong);
                 }
                 if(values.size() == 1) {
-                    return new PlcFloat(values.get(0));
+                    return new PlcREAL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -229,7 +232,7 @@ public class LittleEndianDecoder {
                     values.offer(aLong);
                 }
                 if(values.size() == 1) {
-                    return new PlcDouble(values.get(0));
+                    return new PlcLREAL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -241,7 +244,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte != 0);
                 }
                 if(values.size() == 1) {
-                    return new PlcBoolean(values.get(0));
+                    return new PlcBOOL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -253,7 +256,8 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    // TODO: Double-Check this ...
+                    return new PlcBOOL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -265,7 +269,8 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    // TODO: Double-Check this ...
+                    return new PlcBOOL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -277,7 +282,8 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcLong(values.get(0));
+                    // TODO: Double-Check this ...
+                    return new PlcBOOL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -289,7 +295,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcSINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -301,7 +307,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcUSINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -313,7 +319,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -325,7 +331,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcUINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -337,7 +343,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcInteger(values.get(0));
+                    return new PlcDINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -349,7 +355,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcLong(values.get(0));
+                    return new PlcUDINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -361,7 +367,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcLong(values.get(0));
+                    return new PlcLINT(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -375,7 +381,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcFloat(values.get(0));
+                    return new PlcREAL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
@@ -389,7 +395,7 @@ public class LittleEndianDecoder {
                     values.offer(aByte);
                 }
                 if(values.size() == 1) {
-                    return new PlcDouble(values.get(0));
+                    return new PlcLREAL(values.get(0));
                 } else {
                     return new PlcList(values);
                 }
diff --git a/plc4j/drivers/ads/src/test/resources/testsuite/AdsDriverIT.xml b/plc4j/drivers/ads/src/test/resources/testsuite/AdsDriverIT.xml
index 6eb1f65..b1f91f8 100644
--- a/plc4j/drivers/ads/src/test/resources/testsuite/AdsDriverIT.xml
+++ b/plc4j/drivers/ads/src/test/resources/testsuite/AdsDriverIT.xml
@@ -156,7 +156,7 @@
           </request>
           <hurz>
             <code>OK</code>
-            <value className="org.apache.plc4x.java.api.value.PlcBoolean">
+            <value className="org.apache.plc4x.java.api.value.PlcBOOL">
               <object>true</object>
             </value>
           </hurz>
@@ -303,13 +303,13 @@
           </request>
           <hurz1>
             <code>OK</code>
-            <value className="org.apache.plc4x.java.api.value.PlcBoolean">
+            <value className="org.apache.plc4x.java.api.value.PlcBOOL">
               <object>true</object>
             </value>
           </hurz1>
           <hurz2>
             <code>OK</code>
-            <value className="org.apache.plc4x.java.api.value.PlcBoolean">
+            <value className="org.apache.plc4x.java.api.value.PlcBOOL">
               <object>true</object>
             </value>
           </hurz2>
@@ -520,7 +520,7 @@
           </request>
           <hurz1>
             <code>OK</code>
-            <value className="org.apache.plc4x.java.api.value.PlcBoolean">
+            <value className="org.apache.plc4x.java.api.value.PlcBOOL">
               <object>false</object>
             </value>
           </hurz1>
@@ -730,7 +730,7 @@
           </request>
           <hurz1>
             <code>OK</code>
-            <value className="org.apache.plc4x.java.api.value.PlcBoolean">
+            <value className="org.apache.plc4x.java.api.value.PlcBOOL">
               <object>false</object>
             </value>
           </hurz1>
@@ -843,7 +843,7 @@
           </request>
           <hurz1>
             <code>OK</code>
-            <value className="org.apache.plc4x.java.api.value.PlcBoolean">
+            <value className="org.apache.plc4x.java.api.value.PlcBOOL">
               <object>false</object>
             </value>
           </hurz1>
diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipFieldHandler.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipFieldHandler.java
index 3afffbf..f3bd99b 100644
--- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipFieldHandler.java
+++ b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipFieldHandler.java
@@ -192,7 +192,7 @@ public class EipFieldHandler implements PlcFieldHandler {
             }
         }
         if(booleanValues.size() == 1) {
-            return new PlcBoolean(booleanValues.get(0));
+            return new PlcBOOL(booleanValues.get(0));
         } else {
             return new PlcList(booleanValues);
         }
@@ -210,28 +210,28 @@ public class EipFieldHandler implements PlcFieldHandler {
             case SINT:
                 minValue = BigInteger.valueOf(Byte.MIN_VALUE);
                 maxValue = BigInteger.valueOf(Byte.MAX_VALUE);
-                fieldType = PlcByte.class;
+                fieldType = PlcSINT.class;
                 valueType = Byte.class;
                 castedValues = new Byte[values.length];
                 break;
             case INT:
                 minValue = BigInteger.valueOf(Short.MIN_VALUE);
                 maxValue = BigInteger.valueOf(Short.MAX_VALUE);
-                fieldType = PlcShort.class;
+                fieldType = PlcINT.class;
                 valueType = Short.class;
                 castedValues = new Short[values.length];
                 break;
             case DINT:
                 minValue = BigInteger.valueOf(Integer.MIN_VALUE);
                 maxValue = BigInteger.valueOf(Integer.MAX_VALUE);
-                fieldType = PlcInteger.class;
+                fieldType = PlcDINT.class;
                 valueType= Integer.class;
                 castedValues = new Integer[values.length];
                 break;
             case LINT:
                 minValue = BigInteger.valueOf(Long.MIN_VALUE);
                 maxValue = BigInteger.valueOf(Long.MAX_VALUE);
-                fieldType = PlcLong.class;
+                fieldType = PlcLINT.class;
                 valueType= Long.class;
                 castedValues = new Long[values.length];
                 break;
@@ -292,7 +292,7 @@ public class EipFieldHandler implements PlcFieldHandler {
         if (eipField.getType() == CIPDataTypeCode.REAL) {
             minValue = (double) -Float.MAX_VALUE;
             maxValue = (double) Float.MAX_VALUE;
-            fieldType = PlcFloat.class;
+            fieldType = PlcREAL.class;
             valueType = Float.class;
             castedValues = new Float[values.length];
         } else {
diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java
index 7516160..d811314 100644
--- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java
+++ b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java
@@ -326,17 +326,23 @@ public class EipProtocolLogic extends Plc4xProtocolBase<EipPacket> implements Ha
             for (int i = 0; i < nb; i++) {
                 switch (type) {
                     case DINT:
+                        list.add(new PlcDINT(Integer.reverseBytes(data.getInt(index))));
+                        index += type.getSize();
+                        break;
                     case INT:
+                        list.add(new PlcINT(Integer.reverseBytes(data.getInt(index))));
+                        index += type.getSize();
+                        break;
                     case SINT:
-                        list.add(new PlcInteger(Integer.reverseBytes(data.getInt(index))));
+                        list.add(new PlcSINT(Integer.reverseBytes(data.getInt(index))));
                         index += type.getSize();
                         break;
                     case REAL:
-                        list.add(new PlcDouble(swap(data.getFloat(index))));
+                        list.add(new PlcLREAL(swap(data.getFloat(index))));
                         index += type.getSize();
                         break;
                     case BOOL:
-                        list.add(new PlcBoolean(data.getBoolean(index)));
+                        list.add(new PlcBOOL(data.getBoolean(index)));
                         index += type.getSize();
                     default:
                         return null;
@@ -346,15 +352,15 @@ public class EipProtocolLogic extends Plc4xProtocolBase<EipPacket> implements Ha
         } else {
             switch (type) {
                 case SINT:
-                    return new PlcByte(data.getByte(0));
+                    return new PlcSINT(data.getByte(0));
                 case INT:
-                    return new PlcInteger(Short.reverseBytes(data.getShort(0)));
+                    return new PlcINT(Short.reverseBytes(data.getShort(0)));
                 case DINT:
-                    return new PlcInteger(Integer.reverseBytes(data.getInt(0)));
+                    return new PlcDINT(Integer.reverseBytes(data.getInt(0)));
                 case REAL:
-                    return new PlcDouble(swap(data.getFloat(0)));
+                    return new PlcREAL(swap(data.getFloat(0)));
                 case BOOL:
-                    return new PlcBoolean(data.getBoolean(0));
+                    return new PlcBOOL(data.getBoolean(0));
                 default:
                     return null;
             }
diff --git a/plc4j/drivers/eip/src/test/resources/testsuite/EIPDriverTestsuite.xml b/plc4j/drivers/eip/src/test/resources/testsuite/EIPDriverTestsuite.xml
index f7593ef..67884fc 100644
--- a/plc4j/drivers/eip/src/test/resources/testsuite/EIPDriverTestsuite.xml
+++ b/plc4j/drivers/eip/src/test/resources/testsuite/EIPDriverTestsuite.xml
@@ -140,7 +140,7 @@
           </request>
           <hurz>
             <code>OK</code>
-            <value className="org.apache.plc4x.java.api.value.PlcInteger">
+            <value className="org.apache.plc4x.java.api.value.PlcDINT">
               <object>369229824</object>
             </value>
           </hurz>
diff --git a/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/field/FirmataFieldHandler.java b/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/field/FirmataFieldHandler.java
index d84781a..af9d697 100644
--- a/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/field/FirmataFieldHandler.java
+++ b/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/field/FirmataFieldHandler.java
@@ -20,10 +20,7 @@ package org.apache.plc4x.java.firmata.readwrite.field;
 
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.model.PlcField;
-import org.apache.plc4x.java.api.value.PlcBoolean;
-import org.apache.plc4x.java.api.value.PlcList;
-import org.apache.plc4x.java.api.value.PlcShort;
-import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.api.value.*;
 import org.apache.plc4x.java.spi.connection.DefaultPlcFieldHandler;
 
 import java.util.ArrayList;
@@ -82,7 +79,7 @@ public class FirmataFieldHandler extends DefaultPlcFieldHandler {
             }
         }
         if(booleanValues.size() == 1) {
-            return new PlcBoolean(booleanValues.get(0));
+            return new PlcBOOL(booleanValues.get(0));
         } else {
             return new PlcList(booleanValues);
         }
@@ -101,16 +98,16 @@ public class FirmataFieldHandler extends DefaultPlcFieldHandler {
             if((numberValue.intValue() < Short.MIN_VALUE) || (numberValue.intValue() > Short.MAX_VALUE)) {
                 throw new PlcInvalidFieldException("Value of " + numberValue.toString() + " exceeds the boundaries of a short value.");
             }
-            return new PlcShort(numberValue.shortValue());
+            return new PlcINT(numberValue.shortValue());
         } else {
-            List<PlcShort> shorts = new ArrayList<>(values.length);
+            List<PlcINT> shorts = new ArrayList<>(values.length);
             for (Object value : values) {
                 Number numberValue = (Number) value;
                 // Intentionally checking the next larger type.
                 if((numberValue.intValue() < Short.MIN_VALUE) || (numberValue.intValue() > Short.MAX_VALUE)) {
                     throw new PlcInvalidFieldException("Value of " + numberValue.toString() + " exceeds the boundaries of a short value.");
                 }
-                shorts.add(new PlcShort(((Number) value).shortValue()));
+                shorts.add(new PlcINT(((Number) value).shortValue()));
             }
             return new PlcList(shorts);
         }
diff --git a/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/protocol/FirmataProtocolLogic.java b/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/protocol/FirmataProtocolLogic.java
index 5a60ee7..9651aea 100644
--- a/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/protocol/FirmataProtocolLogic.java
+++ b/plc4j/drivers/firmata/src/main/java/org/apache/plc4x/java/firmata/readwrite/protocol/FirmataProtocolLogic.java
@@ -24,10 +24,7 @@ import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
 import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.api.value.PlcBoolean;
-import org.apache.plc4x.java.api.value.PlcInteger;
-import org.apache.plc4x.java.api.value.PlcList;
-import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.api.value.*;
 import org.apache.plc4x.java.firmata.readwrite.*;
 import org.apache.plc4x.java.firmata.readwrite.context.FirmataDriverContext;
 import org.apache.plc4x.java.firmata.readwrite.field.FirmataField;
@@ -214,11 +211,11 @@ public class FirmataProtocolLogic extends Plc4xProtocolBase<FirmataMessage> impl
                             List<PlcValue> values = new ArrayList<>(analogField.getQuantity());
                             for(int i = analogField.getAddress(); i < analogField.getAddress() + analogField.getQuantity(); i++) {
                                 if(analogValues.containsKey(i)) {
-                                    values.add(new PlcInteger(analogValues.get(i).intValue()));
+                                    values.add(new PlcDINT(analogValues.get(i).intValue()));
                                 }
                                 // This could be the case if only some of the requested array values are available
                                 else {
-                                    values.add(new PlcInteger(-1));
+                                    values.add(new PlcDINT(-1));
                                 }
                             }
                             sendUpdateEvents(consumer, subscriptionHandle.getName(), values);
@@ -251,7 +248,7 @@ public class FirmataProtocolLogic extends Plc4xProtocolBase<FirmataMessage> impl
                         if(digitalField.getBitSet().intersects(changedBits)) {
                             List<PlcValue> values = new ArrayList<>(digitalField.getBitSet().cardinality());
                             for(int i = 0; i < digitalField.getBitSet().length(); i++) {
-                                values.add(new PlcBoolean(bitValues.get(i)));
+                                values.add(new PlcBOOL(bitValues.get(i)));
                             }
                             sendUpdateEvents(consumer, subscriptionHandle.getName(), values);
                         }
diff --git a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/field/KnxNetIpFieldHandler.java b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/field/KnxNetIpFieldHandler.java
index 2a49fd0..2bcb443 100644
--- a/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/field/KnxNetIpFieldHandler.java
+++ b/plc4j/drivers/knxnetip/src/main/java/org/apache/plc4x/java/knxnetip/field/KnxNetIpFieldHandler.java
@@ -20,7 +20,6 @@ package org.apache.plc4x.java.knxnetip.field;
 
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.model.PlcField;
-import org.apache.plc4x.java.api.value.PlcBoolean;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.api.value.PlcValues;
 import org.apache.plc4x.java.spi.connection.DefaultPlcFieldHandler;
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
index bf6d933..117f014 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
@@ -32,8 +32,8 @@ import java.lang.*;
 
 public abstract class ModbusField implements PlcField {
 
-    public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>\\d+):?(?<datatype>[a-zA-Z_]+)?(\\[(?<quantity>\\d+)])?");
-    public static final Pattern FIXED_DIGIT_MODBUS_PATTERN = Pattern.compile("(?<address>\\d{4,5}):?(?<datatype>[a-zA-Z_]+)?(\\[(?<quantity>\\d+)])?");
+    public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>\\d+)(\\[(?<quantity>\\d+)])?(:(?<datatype>[a-zA-Z_]+))?");
+    public static final Pattern FIXED_DIGIT_MODBUS_PATTERN = Pattern.compile("(?<address>\\d{4,5})?(\\[(?<quantity>\\d+)])?(:(?<datatype>[a-zA-Z_]+))?");
 
     protected static final int PROTOCOL_ADDRESS_OFFSET = 1;
 
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java
index 0f390d1..551be36 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java
@@ -29,7 +29,7 @@ public class ModbusFieldDiscreteInput extends ModbusField {
     public static final Pattern ADDRESS_SHORTER_PATTERN = Pattern.compile("1" + ModbusField.FIXED_DIGIT_MODBUS_PATTERN);
     public static final Pattern ADDRESS_SHORT_PATTERN = Pattern.compile("1x" + ModbusField.FIXED_DIGIT_MODBUS_PATTERN);
 
-    protected static final int REGISTER_MAXADDRESS = 65535;
+    protected static final int REGISTER_MAX_ADDRESS = 65535;
 
     public ModbusFieldDiscreteInput(int address, Integer quantity, String datatype) {
         super(address, quantity, datatype.toUpperCase());
@@ -61,14 +61,14 @@ public class ModbusFieldDiscreteInput extends ModbusField {
     public static ModbusFieldDiscreteInput of(String addressString) {
         Matcher matcher = getMatcher(addressString);
         int address = Integer.parseInt(matcher.group("address")) - PROTOCOL_ADDRESS_OFFSET;
-        if (address > REGISTER_MAXADDRESS) {
-            throw new IllegalArgumentException("Address must be less than or equal to " + REGISTER_MAXADDRESS + ". Was " + (address + PROTOCOL_ADDRESS_OFFSET));
+        if (address > REGISTER_MAX_ADDRESS) {
+            throw new IllegalArgumentException("Address must be less than or equal to " + REGISTER_MAX_ADDRESS + ". Was " + (address + PROTOCOL_ADDRESS_OFFSET));
         }
 
         String quantityString = matcher.group("quantity");
         Integer quantity = quantityString != null ? Integer.valueOf(quantityString) : 1;
-        if ((address + quantity) > REGISTER_MAXADDRESS) {
-            throw new IllegalArgumentException("Last requested address is out of range, should be between " + PROTOCOL_ADDRESS_OFFSET + " and " + REGISTER_MAXADDRESS + ". Was " + (address + PROTOCOL_ADDRESS_OFFSET + (quantity - 1)));
+        if ((address + quantity) > REGISTER_MAX_ADDRESS) {
+            throw new IllegalArgumentException("Last requested address is out of range, should be between " + PROTOCOL_ADDRESS_OFFSET + " and " + REGISTER_MAX_ADDRESS + ". Was " + (address + PROTOCOL_ADDRESS_OFFSET + (quantity - 1)));
         }
 
         String datatypeTemp = matcher.group("datatype");
diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
index 7eefcb3..d2f52c7 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
@@ -116,7 +116,7 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
         Object objValue = value.getValue().getValue();
 
         if (typeNode.equals(Identifiers.Boolean)) {
-            return new PlcBoolean((Boolean) objValue);
+            return new PlcBOOL((Boolean) objValue);
         /*} else if (typeNode.equals(Identifiers.ByteString)) {
             byte[] array = ((ByteString) objValue).bytes();
             Byte[] byteArry = new Byte[array.length];
@@ -128,29 +128,29 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
             }
             return new DefaultByteArrayPlcValue(byteArry);*/
         } else if (typeNode.equals(Identifiers.Integer)) {
-            return new PlcInteger((Integer) objValue);
+            return new PlcDINT((Integer) objValue);
         } else if (typeNode.equals(Identifiers.Int16)) {
-            return new PlcInteger((Short) objValue);
+            return new PlcINT((Short) objValue);
         } else if (typeNode.equals(Identifiers.Int32)) {
-            return new PlcInteger((Integer) objValue);
+            return new PlcDINT((Integer) objValue);
         } else if (typeNode.equals(Identifiers.Int64)) {
-            return new PlcLong((Long) objValue);
+            return new PlcLINT((Long) objValue);
         } else if (typeNode.equals(Identifiers.UInteger)) {
-            return new PlcLong((Long) objValue);
+            return new PlcLINT((Long) objValue);
         } else if (typeNode.equals(Identifiers.UInt16)) {
-            return new PlcInteger(((UShort) objValue).intValue());
+            return new PlcUINT(((UShort) objValue).intValue());
         } else if (typeNode.equals(Identifiers.UInt32)) {
-            return new PlcLong(((UInteger) objValue).longValue());
+            return new PlcUDINT(((UInteger) objValue).longValue());
         } else if (typeNode.equals(Identifiers.UInt64)) {
-            return new PlcBigInteger(new BigInteger(objValue.toString()));
+            return new PlcULINT(new BigInteger(objValue.toString()));
         } else if (typeNode.equals(Identifiers.Byte)) {
-            return new PlcInteger(Short.valueOf(objValue.toString()));
+            return new PlcINT(Short.valueOf(objValue.toString()));
         } else if (typeNode.equals(Identifiers.Float)) {
-            return new PlcFloat((Float) objValue);
+            return new PlcREAL((Float) objValue);
         } else if (typeNode.equals(Identifiers.Double)) {
-            return new PlcDouble((Double) objValue);
+            return new PlcLREAL((Double) objValue);
         } else if (typeNode.equals(Identifiers.SByte)) {
-            return new PlcInteger((Byte) objValue);
+            return new PlcSINT((Byte) objValue);
         } else {
             return new PlcString(objValue.toString());
         }
diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaPlcFieldHandler.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaPlcFieldHandler.java
index b9ccd8b..848f0c0 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaPlcFieldHandler.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaPlcFieldHandler.java
@@ -61,7 +61,7 @@ public class OpcuaPlcFieldHandler extends DefaultPlcFieldHandler {
             resultSet.add((Boolean) item);
         }
         if(resultSet.size() == 1) {
-            return new PlcBoolean(resultSet.get(0));
+            return new PlcBOOL(resultSet.get(0));
         } else {
             return new PlcList(resultSet);
         }
@@ -75,7 +75,7 @@ public class OpcuaPlcFieldHandler extends DefaultPlcFieldHandler {
             resultSet.add((Byte) item);
         }
         if(resultSet.size() == 1) {
-            return new PlcInteger(resultSet.get(0));
+            return new PlcSINT(resultSet.get(0));
         } else {
             return new PlcList(resultSet);
         }
@@ -89,7 +89,7 @@ public class OpcuaPlcFieldHandler extends DefaultPlcFieldHandler {
             resultSet.add((Short) item);
         }
         if(resultSet.size() == 1) {
-            return new PlcInteger(resultSet.get(0));
+            return new PlcINT(resultSet.get(0));
         } else {
             return new PlcList(resultSet);
         }
@@ -103,7 +103,7 @@ public class OpcuaPlcFieldHandler extends DefaultPlcFieldHandler {
             resultSet.add((Integer) item);
         }
         if(resultSet.size() == 1) {
-            return new PlcInteger(resultSet.get(0));
+            return new PlcDINT(resultSet.get(0));
         } else {
             return new PlcList(resultSet);
         }
@@ -131,7 +131,7 @@ public class OpcuaPlcFieldHandler extends DefaultPlcFieldHandler {
             resultSet.add((Long) item);
         }
         if(resultSet.size() == 1) {
-            return new PlcLong(resultSet.get(0));
+            return new PlcLINT(resultSet.get(0));
         } else {
             return new PlcList(resultSet);
         }
@@ -145,7 +145,7 @@ public class OpcuaPlcFieldHandler extends DefaultPlcFieldHandler {
             resultSet.add((Float) item);
         }
         if(resultSet.size() == 1) {
-            return new PlcFloat(resultSet.get(0));
+            return new PlcREAL(resultSet.get(0));
         } else {
             return new PlcList(resultSet);
         }
@@ -160,7 +160,7 @@ public class OpcuaPlcFieldHandler extends DefaultPlcFieldHandler {
             resultSet.add((Double) item);
         }
         if(resultSet.size() == 1) {
-            return new PlcDouble(resultSet.get(0));
+            return new PlcLREAL(resultSet.get(0));
         } else {
             return new PlcList(resultSet);
         }
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
index c0d15b2..f118c03 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
@@ -55,10 +55,10 @@ public class S7Field implements PlcField {
         Pattern.compile("^%DB(?<blockNumber>\\d{1,5}):(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:(?<dataType>[a-zA-Z_]+)(\\[(?<numElements>\\d+)])?");
 
     private static final Pattern DATA_BLOCK_STRING_ADDRESS_PATTERN =
-        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}).DB(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7}):STRING\\((?<stringLength>\\d{1,3})\\)(\\[(?<numElements>\\d+)])?");
+        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}).DB(?<transferSizeCode>[XBWD]?)(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:STRING\\((?<stringLength>\\d{1,3})\\)(\\[(?<numElements>\\d+)])?");
 
     private static final Pattern DATA_BLOCK_STRING_SHORT_PATTERN =
-        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}):(?<byteOffset>\\d{1,7}):STRING\\((?<stringLength>\\d{1,3})\\)(\\[(?<numElements>\\d+)])?");
+        Pattern.compile("^%DB(?<blockNumber>\\d{1,5}):(?<byteOffset>\\d{1,7})(.(?<bitOffset>[0-7]))?:STRING\\((?<stringLength>\\d{1,3})\\)(\\[(?<numElements>\\d+)])?");
 
     private static final Pattern PLC_PROXY_ADDRESS_PATTERN =
         Pattern.compile("[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}");
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7PlcFieldHandler.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7PlcFieldHandler.java
index a233bed..745d67c 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7PlcFieldHandler.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7PlcFieldHandler.java
@@ -284,7 +284,7 @@ public class S7PlcFieldHandler extends DefaultPlcFieldHandler {
             }
         }
         if(booleanValues.size() == 1) {
-            return new PlcBoolean(booleanValues.get(0));
+            return new PlcBOOL(booleanValues.get(0));
         } else {
             return new PlcList(booleanValues);
         }
@@ -403,13 +403,13 @@ public class S7PlcFieldHandler extends DefaultPlcFieldHandler {
         // Create the field item.
         if(integerValues.size() == 1) {
             if (valueType == Byte.class) {
-                return new PlcByte((Byte) integerValues.get(0));
+                return new PlcSINT((Byte) integerValues.get(0));
             } else if (valueType == Short.class) {
-                return new PlcShort((Short) integerValues.get(0));
+                return new PlcINT((Short) integerValues.get(0));
             } else if (valueType == Integer.class) {
-                return new PlcInteger((Integer) integerValues.get(0));
+                return new PlcDINT((Integer) integerValues.get(0));
             } else if (valueType == Long.class) {
-                return new PlcLong((Long) integerValues.get(0));
+                return new PlcLINT((Long) integerValues.get(0));
             } else {
                 return new PlcBigInteger((BigInteger) integerValues.get(0));
             }
@@ -478,9 +478,9 @@ public class S7PlcFieldHandler extends DefaultPlcFieldHandler {
         // Create the field item.
         if(floatingPointValues.size() == 1) {
             if (valueType == Float.class) {
-                return new PlcFloat((Float) floatingPointValues.get(0));
+                return new PlcREAL((Float) floatingPointValues.get(0));
             } else {
-                return new PlcDouble((Double) floatingPointValues.get(0));
+                return new PlcLREAL((Double) floatingPointValues.get(0));
             }
         } else {
             return new PlcList(floatingPointValues);
diff --git a/plc4j/drivers/s7/src/test/resources/testsuite/S7DriverIT.xml b/plc4j/drivers/s7/src/test/resources/testsuite/S7DriverIT.xml
index f4ab523..baa2eb0 100644
--- a/plc4j/drivers/s7/src/test/resources/testsuite/S7DriverIT.xml
+++ b/plc4j/drivers/s7/src/test/resources/testsuite/S7DriverIT.xml
@@ -296,7 +296,7 @@
           </request>
           <hurz>
             <code>OK</code>
-            <value className="org.apache.plc4x.java.api.value.PlcBoolean">
+            <value className="org.apache.plc4x.java.api.value.PlcBOOL">
               <object>true</object>
             </value>
           </hurz>
diff --git a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/field/SimulatedFieldHandler.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/field/SimulatedFieldHandler.java
index fccd057..205f7d8 100644
--- a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/field/SimulatedFieldHandler.java
+++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/field/SimulatedFieldHandler.java
@@ -47,7 +47,7 @@ public class SimulatedFieldHandler implements PlcFieldHandler {
         SimulatedField testField = (SimulatedField) field;
         if (testField.getDataType() == Boolean.class) {
             if(values.length == 1) {
-                return new PlcBoolean((Boolean) values[0]);
+                return new PlcBOOL((Boolean) values[0]);
             } else {
                 return new PlcList(Arrays.asList(values));
             }
@@ -60,7 +60,7 @@ public class SimulatedFieldHandler implements PlcFieldHandler {
         SimulatedField testField = (SimulatedField) field;
         if (testField.getDataType() == Byte.class) {
             if(values.length == 1) {
-                return new PlcInteger((Byte) values[0]);
+                return new PlcSINT((Byte) values[0]);
             } else {
                 return new PlcList(Arrays.asList(values));
             }
@@ -73,7 +73,7 @@ public class SimulatedFieldHandler implements PlcFieldHandler {
         SimulatedField testField = (SimulatedField) field;
         if (testField.getDataType() == Short.class) {
             if(values.length == 1) {
-                return new PlcInteger((Short) values[0]);
+                return new PlcINT((Short) values[0]);
             } else {
                 return new PlcList(Arrays.asList(values));
             }
@@ -86,7 +86,7 @@ public class SimulatedFieldHandler implements PlcFieldHandler {
         SimulatedField testField = (SimulatedField) field;
         if (testField.getDataType() == Integer.class) {
             if(values.length == 1) {
-                return new PlcInteger((Integer) values[0]);
+                return new PlcDINT((Integer) values[0]);
             } else {
                 return new PlcList(Arrays.asList(values));
             }
@@ -112,7 +112,7 @@ public class SimulatedFieldHandler implements PlcFieldHandler {
         SimulatedField testField = (SimulatedField) field;
         if (testField.getDataType() == Long.class) {
             if(values.length == 1) {
-                return new PlcLong((Long) values[0]);
+                return new PlcLINT((Long) values[0]);
             } else {
                 return new PlcList(Arrays.asList(values));
             }
@@ -125,7 +125,7 @@ public class SimulatedFieldHandler implements PlcFieldHandler {
         SimulatedField testField = (SimulatedField) field;
         if (testField.getDataType() == Float.class) {
             if(values.length == 1) {
-                return new PlcFloat((Float) values[0]);
+                return new PlcREAL((Float) values[0]);
             } else {
                 return new PlcList(Arrays.asList(values));
             }
@@ -151,7 +151,7 @@ public class SimulatedFieldHandler implements PlcFieldHandler {
         SimulatedField testField = (SimulatedField) field;
         if (testField.getDataType() == Double.class) {
             if(values.length == 1) {
-                return new PlcDouble((Double) values[0]);
+                return new PlcLREAL((Double) values[0]);
             } else {
                 return new PlcList(Arrays.asList(values));
             }
diff --git a/plc4j/drivers/simulated/src/test/java/org/apache/plc4x/java/simulated/connection/SimulatedDeviceTest.java b/plc4j/drivers/simulated/src/test/java/org/apache/plc4x/java/simulated/connection/SimulatedDeviceTest.java
index a3262d5..268660d 100644
--- a/plc4j/drivers/simulated/src/test/java/org/apache/plc4x/java/simulated/connection/SimulatedDeviceTest.java
+++ b/plc4j/drivers/simulated/src/test/java/org/apache/plc4x/java/simulated/connection/SimulatedDeviceTest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.plc4x.java.simulated.connection;
 
-import org.apache.plc4x.java.api.value.PlcLong;
+import org.apache.plc4x.java.api.value.PlcLINT;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.simulated.field.SimulatedField;
 import org.junit.jupiter.api.Test;
@@ -47,7 +47,7 @@ public class SimulatedDeviceTest {
         Optional<PlcValue> value = device.get(field);
         assertFalse(value.isPresent());
 
-        device.set(field, new PlcLong(42));
+        device.set(field, new PlcLINT(42));
         value = device.get(field);
         assertTrue(value.isPresent());
         PlcValue plcValue = value.get();
diff --git a/plc4j/examples/hello-webapp/webapp/src/main/java/org/apache/plc4x/examples/watertank/service/WaterTankService.java b/plc4j/examples/hello-webapp/webapp/src/main/java/org/apache/plc4x/examples/watertank/service/WaterTankService.java
index e56a4f6..e013216 100644
--- a/plc4j/examples/hello-webapp/webapp/src/main/java/org/apache/plc4x/examples/watertank/service/WaterTankService.java
+++ b/plc4j/examples/hello-webapp/webapp/src/main/java/org/apache/plc4x/examples/watertank/service/WaterTankService.java
@@ -32,7 +32,7 @@ import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
 import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.api.value.PlcShort;
+import org.apache.plc4x.java.api.value.PlcINT;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.spi.messages.DefaultPlcSubscriptionEvent;
 import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
@@ -136,7 +136,7 @@ public class WaterTankService {
 
                     short value = (short) new Random().nextInt(1024);
                     Map<String, ResponseItem<PlcValue>> values = new HashMap<>();
-                    values.put("waterLevel", new ResponseItem<>(PlcResponseCode.OK, new PlcShort(value)));
+                    values.put("waterLevel", new ResponseItem<>(PlcResponseCode.OK, new PlcINT(value)));
                     DefaultPlcSubscriptionEvent event = new DefaultPlcSubscriptionEvent(Instant.now(), values);
 
                     handler.accept(event);
diff --git a/plc4j/integrations/apache-edgent/src/test/java.sav/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java b/plc4j/integrations/apache-edgent/src/test/java.sav/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
index 951d2f3..b8da3b2 100644
--- a/plc4j/integrations/apache-edgent/src/test/java.sav/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
+++ b/plc4j/integrations/apache-edgent/src/test/java.sav/org/apache/plc4x/edgent/PlcConnectionAdapterTest.java
@@ -29,7 +29,6 @@ import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.model.PlcField;
-import org.apache.plc4x.java.api.value.PlcLong;
 import org.apache.plc4x.java.mock.connection.MockConnection;
 import org.apache.plc4x.java.mock.field.MockField;
 import org.apache.plc4x.test.FastTests;
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java
index 2d4dae0..e048cf4 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java
@@ -60,7 +60,7 @@ public class DefaultPlcReadResponse implements InternalPlcReadResponse, PlcReadR
     @JsonIgnore
     public PlcValue getAsPlcValue() {
         return PlcValues.of(request.getFieldNames().stream()
-            .collect(Collectors.toMap(Function.identity(), name -> PlcValues.of(getObject(name)))));
+            .collect(Collectors.toMap(Function.identity(), this::getPlcValue)));
     }
 
     @Override
diff --git a/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java b/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java
index a96ff8d..078dee8 100644
--- a/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java
+++ b/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java
@@ -84,8 +84,8 @@ public class PlcEntityManagerComplexTest implements WithAssertions {
     public void read() throws OPMException, PlcConnectionException {
         Map<String, PlcValue> results = new HashMap<>();
         String prefix = MyEntity.class.getName() + ".";
-        results.put(prefix + "counter", new PlcInteger(1));
-        results.put(prefix + "counter2", new PlcLong(1L));
+        results.put(prefix + "counter", new PlcDINT(1));
+        results.put(prefix + "counter2", new PlcLINT(1L));
         PlcEntityManager manager = getPlcEntityManager(results);
 
         MyEntity myEntity = manager.read(MyEntity.class, "s7://localhost:5555/0/0");
diff --git a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
index 92b8ab8..2d5fe4a 100644
--- a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
+++ b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/ScraperTest.java
@@ -25,7 +25,7 @@ import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.api.value.PlcInteger;
+import org.apache.plc4x.java.api.value.PlcDINT;
 import org.apache.plc4x.java.mock.connection.MockConnection;
 import org.apache.plc4x.java.mock.connection.MockDevice;
 import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
@@ -96,7 +96,7 @@ class ScraperTest implements WithAssertions {
         MockConnection connection = (MockConnection) driverManager.getConnection("mock:m1");
         connection.setDevice(mockDevice);
 
-        when(mockDevice.read(any())).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcInteger(1)));
+        when(mockDevice.read(any())).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcDINT(1)));
 
         ScraperImpl scraper = new ScraperImpl((j, a, m) -> {}, driverManager, Collections.singletonList(
             new ScrapeJobImpl("job1",
@@ -147,7 +147,7 @@ class ScraperTest implements WithAssertions {
         MockConnection connection = (MockConnection) driverManager.getConnection("mock:m1");
         connection.setDevice(mockDevice);
 
-        when(mockDevice.read(any())).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcInteger(1)));
+        when(mockDevice.read(any())).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcDINT(1)));
 
         Scraper scraper = new ScraperImpl((j, a, m) -> {}, driverManager, Collections.singletonList(
             new ScrapeJobImpl("job1",
diff --git a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
index 691fd7f..7f222bd 100644
--- a/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
+++ b/plc4j/tools/scraper/src/test/java/org/apache/plc4x/java/scraper/triggeredscraper/TriggeredScraperImplTest.java
@@ -21,8 +21,8 @@ package org.apache.plc4x.java.scraper.triggeredscraper;
 
 import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.api.value.PlcBoolean;
-import org.apache.plc4x.java.api.value.PlcLong;
+import org.apache.plc4x.java.api.value.PlcBOOL;
+import org.apache.plc4x.java.api.value.PlcLINT;
 import org.apache.plc4x.java.mock.connection.MockConnection;
 import org.apache.plc4x.java.mock.connection.MockDevice;
 import org.apache.plc4x.java.scraper.config.ScraperConfiguration;
@@ -78,8 +78,8 @@ public class TriggeredScraperImplTest {
     public void scrapeMultipleTargets() throws ScraperException, IOException, InterruptedException {
         // Prepare the Mocking
         // Scrate Jobs 1 and 2
-        when(mockDevice1.read(eq("%DB810:DBB0:USINT"))).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcLong(1L)));
-        when(mockDevice2.read(eq("%DB810:DBB0:USINT"))).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcLong(2L)));
+        when(mockDevice1.read(eq("%DB810:DBB0:USINT"))).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcLINT(1L)));
+        when(mockDevice2.read(eq("%DB810:DBB0:USINT"))).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcLINT(2L)));
         // Trigger Jobs
         // Trigger var
         Random rand = new Random();
@@ -88,7 +88,7 @@ public class TriggeredScraperImplTest {
             public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
                 boolean trigger = rand.nextBoolean();
                 System.out.println(trigger);
-                return new ResponseItem<>(PlcResponseCode.OK, new PlcBoolean(trigger));
+                return new ResponseItem<>(PlcResponseCode.OK, new PlcBOOL(trigger));
             }
         });
         when(mockDevice2.read(eq("%M0.3:BOOL"))).thenAnswer(new Answer<Object>() {
@@ -96,12 +96,12 @@ public class TriggeredScraperImplTest {
             public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
                 boolean trigger = rand.nextBoolean();
                 System.out.println("\t\t" + trigger);
-                return new ResponseItem<>(PlcResponseCode.OK, new PlcBoolean(trigger));
+                return new ResponseItem<>(PlcResponseCode.OK, new PlcBOOL(trigger));
             }
         });
         // Read var
-        when(mockDevice1.read(eq("%DB810:DBW0:INT"))).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcLong(3L)));
-        when(mockDevice2.read(eq("%DB810:DBW0:INT"))).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcLong(4L)));
+        when(mockDevice1.read(eq("%DB810:DBW0:INT"))).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcLINT(3L)));
+        when(mockDevice2.read(eq("%DB810:DBW0:INT"))).thenReturn(new ResponseItem<>(PlcResponseCode.OK, new PlcLINT(4L)));
 
         ScraperConfiguration configuration = ScraperConfiguration.fromFile("src/test/resources/mock-scraper-config.yml", ScraperConfigurationClassicImpl.class);
         TriggerCollector triggerCollector = new TriggerCollectorImpl(driverManager);
diff --git a/protocols/ads/src/main/resources/protocols/ads/ads.mspec b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
index f766190..3f28e00 100644
--- a/protocols/ads/src/main/resources/protocols/ads/ads.mspec
+++ b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
@@ -391,15 +391,15 @@
         // -----------------------------------------
         // Bit
         // -----------------------------------------
-        ['AdsDataType.BOOL' Boolean
+        ['AdsDataType.BOOL' BOOL
             [reserved uint 7 '0x00']
             [simple   bit    'value']
         ]
-        ['AdsDataType.BIT' Boolean
+        ['AdsDataType.BIT' BOOL
             [reserved uint 7 '0x00']
             [simple   bit    'value']
         ]
-        ['AdsDataType.BIT8' Boolean
+        ['AdsDataType.BIT8' BOOL
             [reserved uint 7 '0x00']
             [simple   bit    'value']
         ]
@@ -408,24 +408,24 @@
         // Bit-strings
         // -----------------------------------------
         // 1 byte
-        ['AdsDataType.BYTE' Boolean
+        ['AdsDataType.BYTE' BOOL
             [array bit 'value' count '8']
         ]
-        ['AdsDataType.BITARR8' Boolean
+        ['AdsDataType.BITARR8' BOOL
             [array bit 'value' count '8']
         ]
         // 2 byte (16 bit)
-        ['AdsDataType.WORD' Boolean
+        ['AdsDataType.WORD' BOOL
             [array bit 'value' count '16']
         ]
-        ['AdsDataType.BITARR16' Boolean
+        ['AdsDataType.BITARR16' BOOL
             [array bit 'value' count '16']
         ]
         // 4 byte (32 bit)
-        ['AdsDataType.DWORD' Boolean
+        ['AdsDataType.DWORD' BOOL
             [array bit 'value' count '32']
         ]
-        ['AdsDataType.BITARR32' Boolean
+        ['AdsDataType.BITARR32' BOOL
             [array bit 'value' count '32']
         ]
 
@@ -433,71 +433,71 @@
         // Integers
         // -----------------------------------------
         // 8 bit:
-        ['AdsDataType.SINT' Integer
+        ['AdsDataType.SINT' SINT
             [simple int 8 'value']
         ]
-        ['AdsDataType.INT8' Integer
+        ['AdsDataType.INT8' SINT
             [simple int 8 'value']
         ]
-        ['AdsDataType.USINT' Integer
+        ['AdsDataType.USINT' USINT
             [simple uint 8 'value']
         ]
-        ['AdsDataType.UINT8' Integer
+        ['AdsDataType.UINT8' USINT
             [simple uint 8 'value']
         ]
         // 16 bit:
-        ['AdsDataType.INT' Integer
+        ['AdsDataType.INT' INT
             [simple int 16 'value']
         ]
-        ['AdsDataType.INT16' Integer
+        ['AdsDataType.INT16' INT
             [simple int 16 'value']
         ]
-        ['AdsDataType.UINT' Integer
+        ['AdsDataType.UINT' UINT
             [simple uint 16 'value']
         ]
-        ['AdsDataType.UINT16' Integer
+        ['AdsDataType.UINT16' UINT
             [simple uint 16 'value']
         ]
         // 32 bit:
-        ['AdsDataType.DINT' Integer
+        ['AdsDataType.DINT' DINT
             [simple int 32 'value']
         ]
-        ['AdsDataType.INT32' Integer
+        ['AdsDataType.INT32' DINT
             [simple int 32 'value']
         ]
-        ['AdsDataType.UDINT' Long
+        ['AdsDataType.UDINT' UDINT
             [simple uint 32 'value']
         ]
-        ['AdsDataType.UINT32' Long
+        ['AdsDataType.UINT32' UDINT
             [simple uint 32 'value']
         ]
         // 64 bit:
-        ['AdsDataType.LINT' Long
+        ['AdsDataType.LINT' LINT
             [simple int 64 'value']
         ]
-        ['AdsDataType.INT64' Long
+        ['AdsDataType.INT64' LINT
             [simple int 64 'value']
         ]
-        ['AdsDataType.ULINT' BigInteger
+        ['AdsDataType.ULINT' ULINT
             [simple uint 64 'value']
         ]
-        ['AdsDataType.UINT64' BigInteger
+        ['AdsDataType.UINT64' ULINT
             [simple uint 64 'value']
         ]
 
         // -----------------------------------------
         // Floating point values
         // -----------------------------------------
-        ['AdsDataType.REAL' Float
+        ['AdsDataType.REAL' REAL
             [simple float 8.23  'value']
         ]
-        ['AdsDataType.FLOAT' Float
+        ['AdsDataType.FLOAT' REAL
             [simple float 8.23  'value']
         ]
-        ['AdsDataType.LREAL' Double
+        ['AdsDataType.LREAL' LREAL
             [simple float 11.52 'value']
         ]
-        ['AdsDataType.DOUBLE' Double
+        ['AdsDataType.DOUBLE' LREAL
             [simple float 11.52 'value']
         ]
 
diff --git a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
index 3b454ce..220a8db 100644
--- a/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
+++ b/protocols/knxnetip/src/main/resources/protocols/knxnetip/knxnetip.mspec
@@ -396,11 +396,11 @@
 
 [dataIo 'KnxDatapoint' [uint 10 'mainNumber', uint 10 'subNumber']
     [typeSwitch 'mainNumber','subNumber'
-        ['1' Boolean
+        ['1' BOOL
             [reserved uint 7 '0x0']
             [simple   bit    'value']
         ]
-        ['2' Boolean
+        ['2' BOOL
             [reserved uint 6 '0x0']
             [simple   bit    'control']
             [simple   bit    'value']
@@ -415,33 +415,33 @@
             [simple   bit    'b1']
             [simple   bit    'b0']
         ]
-        ['3' Integer
+        ['3' USINT
             [reserved uint 4 '0x0']
             [simple   bit    'control']
             [simple   uint 3 'value']
         ]
-        ['18' Integer
+        ['18' USINT
             [simple   bit    'control']
             [reserved uint 1 '0x0']
             [simple   uint 6 'value']
         ]
-        ['17' Integer
+        ['17' USINT
             [reserved uint 2 '0x0']
             [simple   uint 6 'value']
         ]
-        ['5' Integer
+        ['5' USINT
             [reserved uint 8 '0x0']
             [simple   uint 8 'value']
         ]
-        ['7' Integer
+        ['7' UINT
             [reserved uint 8 '0x0']
             [simple uint 16 'value']
         ]
-        ['12' Long
+        ['12' UDINT
             [reserved uint 8 '0x0']
             [simple uint 32 'value']
         ]
-        ['6','20' Integer
+        ['6','20' SINT
             [simple   bit   'a']
             [simple   bit   'b']
             [simple   bit   'c']
@@ -449,23 +449,23 @@
             [simple   bit   'e']
             [simple   int 8 'value']
         ]
-        ['6' Integer
+        ['6' SINT
             [reserved uint 8 '0x0']
             [simple   int  8 'value']
         ]
-        ['8' Integer
+        ['8' INT
             [reserved uint 8  '0x0']
             [simple   int  16 'value']
         ]
-        ['13' Integer
+        ['13' DINT
             [reserved uint 8  '0x0']
             [simple   int  32 'value']
         ]
-        ['9' Float
+        ['9' REAL
             [reserved uint  8    '0x0']
             [manual   float 4.11 'value' 'STATIC_CALL("org.apache.plc4x.java.knxnetip.utils.KnxHelper.bytesToF16", io)' 'STATIC_CALL("org.apache.plc4x.java.knxnetip.utils.KnxHelper.f16toBytes", io, object)' '16']
         ]
-        ['14' Float
+        ['14' REAL
             [reserved uint  8    '0x0']
             [simple   float 8.23 'value']
         ]
diff --git a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
index 0f1573c..ad6a75b 100644
--- a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
+++ b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
@@ -270,11 +270,11 @@
 
 [dataIo 'DataItem' [uint 8 'dataType', uint 8 'numberOfValues']
     [typeSwitch 'dataType','numberOfValues'
-        ['1','1' Boolean
+        ['1','1' BOOL
             [reserved uint 7 '0x00']
             [simple   bit    'value']
         ]
-        ['1' Boolean
+        ['1' BOOL
             [array bit 'value' count 'numberOfValues']
         ]
         ['10','1' BYTE
diff --git a/protocols/s7/src/main/resources/protocols/s7/s7.mspec b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
index 5a27863..5128e71 100644
--- a/protocols/s7/src/main/resources/protocols/s7/s7.mspec
+++ b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
@@ -263,7 +263,7 @@
         // -----------------------------------------
         // Bit
         // -----------------------------------------
-        ['01' Boolean
+        ['01' BOOL
             [reserved uint 7 '0x00']
             [simple   bit    'value']
         ]
@@ -272,19 +272,19 @@
         // Bit-strings
         // -----------------------------------------
         // 1 byte
-        ['11' Boolean
+        ['11' BOOL
             [array bit 'value' count '8']
         ]
         // 2 byte (16 bit)
-        ['12' Boolean
+        ['12' BOOL
             [array bit 'value' count '16']
         ]
         // 4 byte (32 bit)
-        ['13' Boolean
+        ['13' BOOL
             [array bit 'value' count '32']
         ]
         // 8 byte (64 bit)
-        ['14' Boolean
+        ['14' BOOL
             [array bit 'value' count '64']
         ]
 
@@ -292,41 +292,41 @@
         // Integers
         // -----------------------------------------
         // 8 bit:
-        ['21' Integer
+        ['21' SINT
             [simple int 8 'value']
         ]
-        ['22' Integer
+        ['22' USINT
             [simple uint 8 'value']
         ]
         // 16 bit:
-        ['23' Integer
+        ['23' INT
             [simple int 16 'value']
         ]
-        ['24' Integer
+        ['24' UINT
             [simple uint 16 'value']
         ]
         // 32 bit:
-        ['25' Integer
+        ['25' DINT
             [simple int 32 'value']
         ]
-        ['26' Long
+        ['26' UDINT
             [simple uint 32 'value']
         ]
         // 64 bit:
-        ['27' Long
+        ['27' LINT
             [simple int 64 'value']
         ]
-        ['28' BigInteger
+        ['28' ULINT
             [simple uint 64 'value']
         ]
 
         // -----------------------------------------
         // Floating point values
         // -----------------------------------------
-        ['31' Float
+        ['31' REAL
             [simple float 8.23  'value']
         ]
-        ['32' Double
+        ['32' LREAL
             [simple float 11.52 'value']
         ]
 
diff --git a/sandbox/hello-influx-data-collection/src/main/java/org/apache/plc4x/java/examples/helloinflux/HelloInflux.java b/sandbox/hello-influx-data-collection/src/main/java/org/apache/plc4x/java/examples/helloinflux/HelloInflux.java
index f80d22b..cecd2c4 100644
--- a/sandbox/hello-influx-data-collection/src/main/java/org/apache/plc4x/java/examples/helloinflux/HelloInflux.java
+++ b/sandbox/hello-influx-data-collection/src/main/java/org/apache/plc4x/java/examples/helloinflux/HelloInflux.java
@@ -99,13 +99,27 @@ public class HelloInflux {
         if (contextName.equals("address")) {
             point.addTag(contextName, plcValue.getString());
         } else {
-            if (plcValue instanceof PlcBoolean) {
+            if (plcValue instanceof PlcBOOL) {
                 point.addField(contextName, plcValue.getBoolean());
-            } else if (plcValue instanceof PlcInteger) {
+            } else if (plcValue instanceof PlcSINT) {
+                point.addField(contextName, plcValue.getByte());
+            } else if (plcValue instanceof PlcUSINT) {
+                point.addField(contextName, plcValue.getShort());
+            } else if (plcValue instanceof PlcINT) {
+                point.addField(contextName, plcValue.getShort());
+            } else if (plcValue instanceof PlcUINT) {
+                point.addField(contextName, plcValue.getInteger());
+            } else if (plcValue instanceof PlcDINT) {
+                point.addField(contextName, plcValue.getInteger());
+            } else if (plcValue instanceof PlcUDINT) {
                 point.addField(contextName, plcValue.getLong());
-            } else if (plcValue instanceof PlcFloat) {
+            } else if (plcValue instanceof PlcLINT) {
+                point.addField(contextName, plcValue.getLong());
+            } else if (plcValue instanceof PlcULINT) {
+                point.addField(contextName, plcValue.getBigInteger());
+            } else if (plcValue instanceof PlcREAL) {
                 point.addField(contextName, plcValue.getFloat());
-            } else if (plcValue instanceof PlcDouble) {
+            } else if (plcValue instanceof PlcLREAL) {
                 point.addField(contextName, plcValue.getDouble());
             } else if (plcValue instanceof PlcString) {
                 point.addField(contextName, plcValue.getString());
diff --git a/sandbox/plc4c/generated-sources/modbus/src/data_item.c b/sandbox/plc4c/generated-sources/modbus/src/data_item.c
index a825905..ff8d068 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/data_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/data_item.c
@@ -30,7 +30,7 @@ plc4c_return_code plc4c_modbus_read_write_data_item_parse(plc4c_spi_read_buffer*
     uint16_t curPos;
     plc4c_return_code _res = OK;
 
-        if((dataType == 1) && (numberOfValues == 1)) { /* Boolean */
+        if((dataType == 1) && (numberOfValues == 1)) { /* BOOL */
 
                 // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
                 {
@@ -54,11 +54,91 @@ plc4c_return_code plc4c_modbus_read_write_data_item_parse(plc4c_spi_read_buffer*
                 *data_item = plc4c_data_create_bool_data(value);
 
         } else 
-        if(dataType == 1) { /* List */
+        if(dataType == 1) { /* BOOL */
 
                     // Array field (value)
         } else 
-        if((dataType == 2) && (numberOfValues == 1)) { /* Integer */
+        if((dataType == 10) && (numberOfValues == 1)) { /* BYTE */
+
+                // Simple Field (value)
+                uint8_t value = 0;
+                _res = plc4c_spi_read_unsigned_byte(io, 8, (uint8_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint8_t_data(value);
+
+        } else 
+        if(dataType == 10) { /* BYTE */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 11) && (numberOfValues == 1)) { /* WORD */
+
+                // Simple Field (value)
+                uint16_t value = 0;
+                _res = plc4c_spi_read_unsigned_short(io, 16, (uint16_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint16_t_data(value);
+
+        } else 
+        if(dataType == 11) { /* WORD */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 12) && (numberOfValues == 1)) { /* DWORD */
+
+                // Simple Field (value)
+                uint32_t value = 0;
+                _res = plc4c_spi_read_unsigned_int(io, 32, (uint32_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint32_t_data(value);
+
+        } else 
+        if(dataType == 12) { /* DWORD */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 13) && (numberOfValues == 1)) { /* LWORD */
+
+                // Simple Field (value)
+                uint64_t value = 0;
+                _res = plc4c_spi_read_unsigned_long(io, 64, (uint64_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint64_t_data(value);
+
+        } else 
+        if(dataType == 13) { /* LWORD */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 20) && (numberOfValues == 1)) { /* SINT */
+
+                // Simple Field (value)
+                int8_t value = 0;
+                _res = plc4c_spi_read_signed_byte(io, 8, (int8_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_int8_t_data(value);
+
+        } else 
+        if(dataType == 20) { /* SINT */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 21) && (numberOfValues == 1)) { /* INT */
 
                 // Simple Field (value)
                 int16_t value = 0;
@@ -70,7 +150,167 @@ plc4c_return_code plc4c_modbus_read_write_data_item_parse(plc4c_spi_read_buffer*
                 *data_item = plc4c_data_create_int16_t_data(value);
 
         } else 
-        if(dataType == 2) { /* List */
+        if(dataType == 21) { /* INT */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 22) && (numberOfValues == 1)) { /* DINT */
+
+                // Simple Field (value)
+                int32_t value = 0;
+                _res = plc4c_spi_read_signed_int(io, 32, (int32_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_int32_t_data(value);
+
+        } else 
+        if(dataType == 22) { /* DINT */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 23) && (numberOfValues == 1)) { /* LINT */
+
+                // Simple Field (value)
+                int64_t value = 0;
+                _res = plc4c_spi_read_signed_long(io, 64, (int64_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_int64_t_data(value);
+
+        } else 
+        if(dataType == 23) { /* LINT */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 24) && (numberOfValues == 1)) { /* USINT */
+
+                // Simple Field (value)
+                uint8_t value = 0;
+                _res = plc4c_spi_read_unsigned_byte(io, 8, (uint8_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint8_t_data(value);
+
+        } else 
+        if(dataType == 24) { /* USINT */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 25) && (numberOfValues == 1)) { /* UINT */
+
+                // Simple Field (value)
+                uint16_t value = 0;
+                _res = plc4c_spi_read_unsigned_short(io, 16, (uint16_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint16_t_data(value);
+
+        } else 
+        if(dataType == 25) { /* UINT */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 26) && (numberOfValues == 1)) { /* UDINT */
+
+                // Simple Field (value)
+                uint32_t value = 0;
+                _res = plc4c_spi_read_unsigned_int(io, 32, (uint32_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint32_t_data(value);
+
+        } else 
+        if(dataType == 26) { /* UDINT */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 27) && (numberOfValues == 1)) { /* ULINT */
+
+                // Simple Field (value)
+                uint64_t value = 0;
+                _res = plc4c_spi_read_unsigned_long(io, 64, (uint64_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint64_t_data(value);
+
+        } else 
+        if(dataType == 27) { /* ULINT */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 30) && (numberOfValues == 1)) { /* REAL */
+
+                // Simple Field (value)
+                float value = 0.0;
+                _res = plc4c_spi_read_float(io, 32, (float*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_float_data(value);
+
+        } else 
+        if(dataType == 30) { /* REAL */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 31) && (numberOfValues == 1)) { /* LREAL */
+
+                // Simple Field (value)
+                double value = 0.0;
+                _res = plc4c_spi_read_double(io, 64, (double*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_double_data(value);
+
+        } else 
+        if(dataType == 31) { /* LREAL */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 80) && (numberOfValues == 1)) { /* CHAR */
+
+                // Simple Field (value)
+                uint8_t value = 0;
+                _res = plc4c_spi_read_unsigned_byte(io, 8, (uint8_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint8_t_data(value);
+
+        } else 
+        if(dataType == 80) { /* CHAR */
+
+                    // Array field (value)
+        } else 
+        if((dataType == 81) && (numberOfValues == 1)) { /* WCHAR */
+
+                // Simple Field (value)
+                uint16_t value = 0;
+                _res = plc4c_spi_read_unsigned_short(io, 16, (uint16_t*) &value);
+                if(_res != OK) {
+                    return _res;
+                }
+
+                *data_item = plc4c_data_create_uint16_t_data(value);
+
+        } else 
+        if(dataType == 81) { /* WCHAR */
 
                     // Array field (value)
         }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c
index 9855f70..a14596d 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_request_item.c
@@ -76,8 +76,8 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_i
     uint8_t _recordDataLength = (recordLength) * (2);
     uint8_t recordDataEndPos = plc4c_spi_read_get_pos(io) + _recordDataLength;
     while(plc4c_spi_read_get_pos(io) < recordDataEndPos) {
-      uint16_t _value = 0;
-      _res = plc4c_spi_read_unsigned_short(io, 16, (uint16_t*) &_value);
+      int8_t _value = 0;
+      _res = plc4c_spi_read_signed_byte(io, 8, (int8_t*) &_value);
       if(_res != OK) {
         return _res;
       }
@@ -111,7 +111,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_i
   }
 
   // Implicit Field (recordLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  _res = plc4c_spi_write_unsigned_short(io, 16, (((plc4c_spi_evaluation_helper_count(_message->record_data)) * (2))) / (2));
+  _res = plc4c_spi_write_unsigned_short(io, 16, (plc4c_spi_evaluation_helper_count(_message->record_data)) / (2));
   if(_res != OK) {
     return _res;
   }
@@ -121,8 +121,8 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_request_i
     uint8_t itemCount = plc4c_utils_list_size(_message->record_data);
     for(int curItem = 0; curItem < itemCount; curItem++) {
 
-      uint16_t* _value = (uint16_t*) plc4c_utils_list_get_value(_message->record_data, curItem);
-      plc4c_spi_write_unsigned_short(io, 16, *_value);
+      int8_t* _value = (int8_t*) plc4c_utils_list_get_value(_message->record_data, curItem);
+      plc4c_spi_write_signed_byte(io, 8, *_value);
     }
   }
 
@@ -149,7 +149,7 @@ uint16_t plc4c_modbus_read_write_modbus_pdu_write_file_record_request_item_lengt
   lengthInBits += 16;
 
   // Array field
-  lengthInBits += 16 * plc4c_utils_list_size(_message->record_data);
+  lengthInBits += 8 * plc4c_utils_list_size(_message->record_data);
 
   return lengthInBits;
 }
diff --git a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c
index 906650e..e8252a9 100644
--- a/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c
+++ b/sandbox/plc4c/generated-sources/modbus/src/modbus_pdu_write_file_record_response_item.c
@@ -73,11 +73,11 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_
   }
   {
     // Length array
-    uint8_t _recordDataLength = (recordLength) * (2);
+    uint8_t _recordDataLength = recordLength;
     uint8_t recordDataEndPos = plc4c_spi_read_get_pos(io) + _recordDataLength;
     while(plc4c_spi_read_get_pos(io) < recordDataEndPos) {
-      uint16_t _value = 0;
-      _res = plc4c_spi_read_unsigned_short(io, 16, (uint16_t*) &_value);
+      int8_t _value = 0;
+      _res = plc4c_spi_read_signed_byte(io, 8, (int8_t*) &_value);
       if(_res != OK) {
         return _res;
       }
@@ -111,7 +111,7 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_
   }
 
   // Implicit Field (recordLength) (Used for parsing, but it's value is not stored as it's implicitly given by the objects content)
-  _res = plc4c_spi_write_unsigned_short(io, 16, (((plc4c_spi_evaluation_helper_count(_message->record_data)) * (2))) / (2));
+  _res = plc4c_spi_write_unsigned_short(io, 16, (plc4c_spi_evaluation_helper_count(_message->record_data)) / (2));
   if(_res != OK) {
     return _res;
   }
@@ -121,8 +121,8 @@ plc4c_return_code plc4c_modbus_read_write_modbus_pdu_write_file_record_response_
     uint8_t itemCount = plc4c_utils_list_size(_message->record_data);
     for(int curItem = 0; curItem < itemCount; curItem++) {
 
-      uint16_t* _value = (uint16_t*) plc4c_utils_list_get_value(_message->record_data, curItem);
-      plc4c_spi_write_unsigned_short(io, 16, *_value);
+      int8_t* _value = (int8_t*) plc4c_utils_list_get_value(_message->record_data, curItem);
+      plc4c_spi_write_signed_byte(io, 8, *_value);
     }
   }
 
@@ -149,7 +149,7 @@ uint16_t plc4c_modbus_read_write_modbus_pdu_write_file_record_response_item_leng
   lengthInBits += 16;
 
   // Array field
-  lengthInBits += 16 * plc4c_utils_list_size(_message->record_data);
+  lengthInBits += 8 * plc4c_utils_list_size(_message->record_data);
 
   return lengthInBits;
 }
diff --git a/sandbox/plc4c/generated-sources/s7/src/data_item.c b/sandbox/plc4c/generated-sources/s7/src/data_item.c
index 1d0f20d..68bd07c 100644
--- a/sandbox/plc4c/generated-sources/s7/src/data_item.c
+++ b/sandbox/plc4c/generated-sources/s7/src/data_item.c
@@ -30,7 +30,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
     uint16_t curPos;
     plc4c_return_code _res = OK;
 
-        if(dataProtocolId == 01) { /* Boolean */
+        if(dataProtocolId == 01) { /* BOOL */
 
                 // Reserved Field (Compartmentalized so the "reserved" variable can't leak)
                 {
@@ -54,23 +54,23 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_bool_data(value);
 
         } else 
-        if(dataProtocolId == 11) { /* List */
+        if(dataProtocolId == 11) { /* BOOL */
 
                     // Array field (value)
         } else 
-        if(dataProtocolId == 12) { /* List */
+        if(dataProtocolId == 12) { /* BOOL */
 
                     // Array field (value)
         } else 
-        if(dataProtocolId == 13) { /* List */
+        if(dataProtocolId == 13) { /* BOOL */
 
                     // Array field (value)
         } else 
-        if(dataProtocolId == 14) { /* List */
+        if(dataProtocolId == 14) { /* BOOL */
 
                     // Array field (value)
         } else 
-        if(dataProtocolId == 21) { /* Integer */
+        if(dataProtocolId == 21) { /* SINT */
 
                 // Simple Field (value)
                 int8_t value = 0;
@@ -82,7 +82,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_int8_t_data(value);
 
         } else 
-        if(dataProtocolId == 22) { /* Integer */
+        if(dataProtocolId == 22) { /* USINT */
 
                 // Simple Field (value)
                 uint8_t value = 0;
@@ -94,7 +94,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_uint8_t_data(value);
 
         } else 
-        if(dataProtocolId == 23) { /* Integer */
+        if(dataProtocolId == 23) { /* INT */
 
                 // Simple Field (value)
                 int16_t value = 0;
@@ -106,7 +106,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_int16_t_data(value);
 
         } else 
-        if(dataProtocolId == 24) { /* Integer */
+        if(dataProtocolId == 24) { /* UINT */
 
                 // Simple Field (value)
                 uint16_t value = 0;
@@ -118,7 +118,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_uint16_t_data(value);
 
         } else 
-        if(dataProtocolId == 25) { /* Integer */
+        if(dataProtocolId == 25) { /* DINT */
 
                 // Simple Field (value)
                 int32_t value = 0;
@@ -130,7 +130,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_int32_t_data(value);
 
         } else 
-        if(dataProtocolId == 26) { /* Long */
+        if(dataProtocolId == 26) { /* UDINT */
 
                 // Simple Field (value)
                 uint32_t value = 0;
@@ -142,7 +142,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_uint32_t_data(value);
 
         } else 
-        if(dataProtocolId == 27) { /* Long */
+        if(dataProtocolId == 27) { /* LINT */
 
                 // Simple Field (value)
                 int64_t value = 0;
@@ -154,7 +154,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_int64_t_data(value);
 
         } else 
-        if(dataProtocolId == 28) { /* BigInteger */
+        if(dataProtocolId == 28) { /* ULINT */
 
                 // Simple Field (value)
                 uint64_t value = 0;
@@ -166,7 +166,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_uint64_t_data(value);
 
         } else 
-        if(dataProtocolId == 31) { /* Float */
+        if(dataProtocolId == 31) { /* REAL */
 
                 // Simple Field (value)
                 float value = 0.0;
@@ -178,7 +178,7 @@ plc4c_return_code plc4c_s7_read_write_data_item_parse(plc4c_spi_read_buffer* io,
                 *data_item = plc4c_data_create_float_data(value);
 
         } else 
-        if(dataProtocolId == 32) { /* Double */
+        if(dataProtocolId == 32) { /* LREAL */
 
                 // Simple Field (value)
                 double value = 0.0;
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/ede/model/Datapoint.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/ede/model/Datapoint.java
index e05231d..ab5f241 100644
--- a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/ede/model/Datapoint.java
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/ede/model/Datapoint.java
@@ -125,17 +125,17 @@ public class Datapoint {
         values.put("keyName", (keyName == null) ? null : new PlcString(keyName));
         values.put("objectName", (objectName == null) ? null : new PlcString(objectName));
         values.put("description", (description == null) ? null : new PlcString(description));
-        values.put("defaultValue", (defaultValue == null) ? null : new PlcDouble(defaultValue));
-        values.put("minValue", (minValue == null) ? null : new PlcDouble(minValue));
-        values.put("maxValue", (maxValue == null) ? null : new PlcDouble(maxValue));
-        values.put("commandable", (commandable == null) ? null : new PlcBoolean(commandable));
-        values.put("supportsCov", (supportsCov == null) ? null : new PlcBoolean(supportsCov));
-        values.put("hiLimit", (hiLimit == null) ? null : new PlcDouble(hiLimit));
-        values.put("lowLimit", (lowLimit == null) ? null : new PlcDouble(lowLimit));
+        values.put("defaultValue", (defaultValue == null) ? null : new PlcLREAL(defaultValue));
+        values.put("minValue", (minValue == null) ? null : new PlcLREAL(minValue));
+        values.put("maxValue", (maxValue == null) ? null : new PlcLREAL(maxValue));
+        values.put("commandable", (commandable == null) ? null : new PlcBOOL(commandable));
+        values.put("supportsCov", (supportsCov == null) ? null : new PlcBOOL(supportsCov));
+        values.put("hiLimit", (hiLimit == null) ? null : new PlcLREAL(hiLimit));
+        values.put("lowLimit", (lowLimit == null) ? null : new PlcLREAL(lowLimit));
         values.put("stateTextReference", (stateTextReference == null) ? null : new PlcString(stateTextReference));
-        values.put("unitCode", (unitCode == null) ? null : new PlcInteger(unitCode));
-        values.put("vendorSpecificAddress", (vendorSpecificAddress == null) ? null : new PlcInteger(vendorSpecificAddress));
-        values.put("notificationClass", (notificationClass == null) ? null : new PlcInteger(notificationClass));
+        values.put("unitCode", (unitCode == null) ? null : new PlcDINT(unitCode));
+        values.put("vendorSpecificAddress", (vendorSpecificAddress == null) ? null : new PlcDINT(vendorSpecificAddress));
+        values.put("notificationClass", (notificationClass == null) ? null : new PlcDINT(notificationClass));
         return values;
     }
 
diff --git a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
index 7f03cf9..4e3992e 100644
--- a/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
+++ b/sandbox/test-java-bacnetip-driver/src/main/java/org/apache/plc4x/java/bacnetip/protocol/BacNetIpProtocolLogic.java
@@ -140,9 +140,9 @@ public class BacNetIpProtocolLogic extends Plc4xProtocolBase<BVLC> implements Ha
 
                             // Initialize an enriched version of the PlcStruct.
                             final Map<String, PlcValue> enrichedPlcValue = new HashMap<>();
-                            enrichedPlcValue.put("deviceIdentifier", new PlcLong(deviceIdentifier));
-                            enrichedPlcValue.put("objectType", new PlcInteger(objectType));
-                            enrichedPlcValue.put("objectInstance", new PlcLong(objectInstance));
+                            enrichedPlcValue.put("deviceIdentifier", new PlcUDINT(deviceIdentifier));
+                            enrichedPlcValue.put("objectType", new PlcDINT(objectType));
+                            enrichedPlcValue.put("objectInstance", new PlcUDINT(objectInstance));
                             enrichedPlcValue.put("address", new PlcString(toString(curField)));
                             // Add all of the existing attributes.
                             enrichedPlcValue.putAll(plcValue.getStruct());
diff --git a/sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/protocol/Plc4XDf1Protocol.java b/sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/protocol/Plc4XDf1Protocol.java
index 2208df5..0f1f16f 100644
--- a/sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/protocol/Plc4XDf1Protocol.java
+++ b/sandbox/test-java-df1-driver/src/main/java/org/apache/plc4x/java/df1/protocol/Plc4XDf1Protocol.java
@@ -26,7 +26,7 @@ import org.apache.plc4x.java.api.messages.PlcResponse;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.api.value.PlcInteger;
+import org.apache.plc4x.java.api.value.PlcDINT;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.df1.field.Df1Field;
 import org.apache.plc4x.java.spi.PlcMessageToMessageCodec;
@@ -98,7 +98,7 @@ public class Plc4XDf1Protocol extends PlcMessageToMessageCodec<DF1Symbol, PlcReq
                     new DefaultPlcReadResponse(
                         ((InternalPlcReadRequest) entry.getValue().getRequest()),
                         Collections.singletonMap("erster",
-                            new ResponseItem<>(PlcResponseCode.INTERNAL_ERROR, new PlcInteger(-1)))
+                            new ResponseItem<>(PlcResponseCode.INTERNAL_ERROR, new PlcDINT(-1)))
                     ));
             }
             return;
@@ -144,7 +144,7 @@ public class Plc4XDf1Protocol extends PlcMessageToMessageCodec<DF1Symbol, PlcReq
                     break;
                 case INTEGER:
                     // TODO: type conversion is untested
-                    responseItem = new PlcInteger((int)data[0] + ((int) data[1] << 8));
+                    responseItem = new PlcDINT((int)data[0] + ((int) data[1] << 8));
                     break;
                 case FLOAT:
                     break;


[plc4x] 01/10: Change the data-io template to use DataType Instead of List

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

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

commit 4e4c15549971e88d952e48a85924ce5e9f08b4aa
Author: hutcheb <be...@gmail.com>
AuthorDate: Sun Sep 20 17:18:14 2020 -0400

    Change the data-io template to use DataType Instead of List
    
    This was done so that a PLCList can be created from data from the PLC of
    the IEC types. Otherwise Java PlcValue would be used.
---
 .../resources/templates/java/data-io-template.ftlh | 12 +++++---
 .../plc4x/java/spi/generation/ReadBuffer.java      |  2 +-
 .../ads/src/main/resources/protocols/ads/ads.mspec | 14 ++++-----
 .../main/resources/protocols/modbus/modbus.mspec   | 34 +++++++++++-----------
 .../s7/src/main/resources/protocols/s7/s7.mspec    |  8 ++---
 5 files changed, 37 insertions(+), 33 deletions(-)

diff --git a/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh b/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
index ba792cc..bcaf6ae 100644
--- a/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
+++ b/build-utils/language-java/src/main/resources/templates/java/data-io-template.ftlh
@@ -105,12 +105,12 @@ public class ${type.name}IO {
             if(${helper.toParseExpression(field, field.loopExpression, type.parserArguments)} > Integer.MAX_VALUE) {
                 throw new ParseException("Array count of " + (${helper.toParseExpression(field, field.loopExpression, type.parserArguments)}) + " exceeds the maximum allowed count of " + Integer.MAX_VALUE);
             }
-            ${helper.getNonPrimitiveLanguageTypeNameForField(field)}[] ${field.name};
+            List<Plc${case.name}> ${field.name};
             {
                 int itemCount = (int) ${helper.toParseExpression(field, field.loopExpression, type.parserArguments)};
-                ${field.name} = new ${helper.getNonPrimitiveLanguageTypeNameForField(field)}[itemCount];
+                ${field.name} = new LinkedList<>();
                 for(int curItem = 0; curItem < itemCount; curItem++) {
-                    ${field.name}[curItem] = <#if helper.isSimpleTypeReference(field.type)>${helper.getReadBufferReadMethodCall(field.type)}<#else>${field.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${helper.toParseExpression(field, parserArgument, type.parserArguments)})<#sep>, </#sep></#list></#if>)</#if>;
+                    ${field.name}.add(new Plc${case.name}((${helper.getNonPrimitiveLanguageTypeNameForField(field)}) <#if helper.isSimpleTypeReference(field.type)>${helper.getReadBufferReadMethodCall(field.type)})<#else>${field.type.name}IO.staticParse(io<#if field.params?has_content>, <#list field.params as parserArgument>(${helper.getLanguageTypeNameForTypeReference(helper.getArgumentType(field.type, parserArgument?index), true)}) (${helper.toParseExpression(field, parserArgument, type [...]
                 }
             }
             <#-- In all other cases do we have to work with a list, that is later converted to an array -->
@@ -234,14 +234,18 @@ public class ${type.name}IO {
             return new PlcStruct(_map);
                     <#break>
                     <#case "List">
-            return new PlcList(Arrays.asList(value));
+            return new PlcList(value);
                     <#break>
             <#-- Disable this for now as Strings will only be parsed as manual fields -->
                     <#case "String">
             //return new PlcString(_map);
                     <#break>
                     <#default>
+                    <#if helper.isCountArrayField(case.fields[0])>
+            return new PlcList(value);
+                    <#else>
             return new Plc${case.name}(value);
+                    </#if>
                 </#switch>
             </#if>
         }<#sep> else </#sep></#list>
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBuffer.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBuffer.java
index 50b89fa..f0b38ba 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBuffer.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBuffer.java
@@ -300,7 +300,7 @@ public class ReadBuffer {
                 throw new PlcRuntimeException(e);
             }
         }
-        return new String(strBytes, Charset.forName(encoding));
+        return new String(strBytes, Charset.forName(encoding.replaceAll("[^a-zA-Z0-9]","")));
     }
 
 }
diff --git a/protocols/ads/src/main/resources/protocols/ads/ads.mspec b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
index 9091dba..f766190 100644
--- a/protocols/ads/src/main/resources/protocols/ads/ads.mspec
+++ b/protocols/ads/src/main/resources/protocols/ads/ads.mspec
@@ -408,24 +408,24 @@
         // Bit-strings
         // -----------------------------------------
         // 1 byte
-        ['AdsDataType.BYTE' List
+        ['AdsDataType.BYTE' Boolean
             [array bit 'value' count '8']
         ]
-        ['AdsDataType.BITARR8' List
+        ['AdsDataType.BITARR8' Boolean
             [array bit 'value' count '8']
         ]
         // 2 byte (16 bit)
-        ['AdsDataType.WORD' List
+        ['AdsDataType.WORD' Boolean
             [array bit 'value' count '16']
         ]
-        ['AdsDataType.BITARR16' List
+        ['AdsDataType.BITARR16' Boolean
             [array bit 'value' count '16']
         ]
         // 4 byte (32 bit)
-        ['AdsDataType.DWORD' List
+        ['AdsDataType.DWORD' Boolean
             [array bit 'value' count '32']
         ]
-        ['AdsDataType.BITARR32' List
+        ['AdsDataType.BITARR32' Boolean
             [array bit 'value' count '32']
         ]
 
@@ -727,4 +727,4 @@
     ['0x274C' WSAETIMEDOUT]
     ['0x274D' WSAECONNREFUSED]
     ['0x2751' WSAEHOSTUNREACH]
-]
\ No newline at end of file
+]
diff --git a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
index 5907516..02f3d0e 100644
--- a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
+++ b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
@@ -274,103 +274,103 @@
             [reserved uint 7 '0x00']
             [simple   bit    'value']
         ]
-        ['1' List
+        ['1' Boolean
             [array bit 'value' count 'numberOfValues']
         ]
         ['10','1' BYTE
             [simple uint 8 'value']
         ]
-        ['10' List
+        ['10' BYTE
             [array uint 8 'value' count 'numberOfValues']
         ]
         ['11','1' WORD
             [simple uint 16 'value']
         ]
-        ['11' List
+        ['11' WORD
             [array uint 16 'value' count 'numberOfValues']
         ]
         ['12','1' DWORD
             [simple uint 32 'value']
         ]
-        ['12' List
+        ['12' DWORD
             [array uint 32 'value' count 'numberOfValues']
         ]
         ['13','1' LWORD
             [simple uint 64 'value']
         ]
-        ['13' List
+        ['13' LWORD
             [array uint 64 'value' count 'numberOfValues']
         ]
         ['20','1' SINT
             [simple int 8 'value']
         ]
-        ['20' List
+        ['20' SINT
             [array int 8 'value' count 'numberOfValues']
         ]
         ['21','1' INT
             [simple int 16 'value']
         ]
-        ['21' List
+        ['21' INT
             [array int 16 'value' count 'numberOfValues']
         ]
         ['22','1' DINT
             [simple int 32 'value']
         ]
-        ['22' List
+        ['22' DINT
             [array int 32 'value' count 'numberOfValues']
         ]
         ['23','1' LINT
             [simple int 64 'value']
         ]
-        ['23' List
+        ['23' LINT
             [array int 64 'value' count 'numberOfValues']
         ]
         ['24','1' USINT
             [simple uint 8 'value']
         ]
-        ['24' List
+        ['24' USINT
             [array uint 8 'value' count 'numberOfValues']
         ]
         ['25','1' UINT
             [simple uint 16 'value']
         ]
-        ['25' List
+        ['25' UINT
             [array uint 16 'value' count 'numberOfValues']
         ]
         ['26','1' UDINT
             [simple uint 32 'value']
         ]
-        ['26' List
+        ['26' UDINT
             [array uint 32 'value' count 'numberOfValues']
         ]
         ['27','1' ULINT
             [simple uint 64 'value']
         ]
-        ['27' List
+        ['27' ULINT
             [array uint 64 'value' count 'numberOfValues']
         ]
         ['30','1' REAL
             [simple float 8.23  'value']
         ]
-        ['30' List
+        ['30' REAL
             [array float 8.23 'value' count 'numberOfValues']
         ]
         ['31','1' LREAL
             [simple float 11.52  'value']
         ]
-        ['31' List
+        ['31' LREAL
             [array float 11.52 'value' count 'numberOfValues']
         ]
         ['80','1' CHAR
             [simple uint 8 'value']
         ]
-        ['80' List
+        ['80' CHAR
             [array uint 8 'value' count 'numberOfValues']
         ]
         ['81','1' WCHAR
             [simple uint 16 'value']
         ]
-        ['81' List
+        ['81' WCHAR
             [array uint 16 'value' count 'numberOfValues']
         ]
     ]
diff --git a/protocols/s7/src/main/resources/protocols/s7/s7.mspec b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
index 34808bb..5a27863 100644
--- a/protocols/s7/src/main/resources/protocols/s7/s7.mspec
+++ b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
@@ -272,19 +272,19 @@
         // Bit-strings
         // -----------------------------------------
         // 1 byte
-        ['11' List
+        ['11' Boolean
             [array bit 'value' count '8']
         ]
         // 2 byte (16 bit)
-        ['12' List
+        ['12' Boolean
             [array bit 'value' count '16']
         ]
         // 4 byte (32 bit)
-        ['13' List
+        ['13' Boolean
             [array bit 'value' count '32']
         ]
         // 8 byte (64 bit)
-        ['14' List
+        ['14' Boolean
             [array bit 'value' count '64']
         ]
 


[plc4x] 10/10: - A bit of housekeeping.

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

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

commit 898cd93ae502c61418d8b3280510cddbee6e8847
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Sat Sep 26 17:48:41 2020 +0200

    - A bit of housekeeping.
---
 .../org/apache/plc4x/java/api/value/PlcBYTE.java   |  26 ++-
 .../org/apache/plc4x/java/api/value/PlcByte.java   | 202 ---------------------
 2 files changed, 12 insertions(+), 216 deletions(-)

diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBYTE.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBYTE.java
index 4d9fc27..00475ef 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBYTE.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcBYTE.java
@@ -25,12 +25,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 
-import org.apache.plc4x.java.api.value.*;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.util.LinkedList;
-import java.util.List;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
 public class PlcBYTE extends PlcIECValue<Short> {
@@ -40,14 +36,14 @@ public class PlcBYTE extends PlcIECValue<Short> {
 
     public PlcBYTE(Boolean value) {
         super();
-        this.value = value ? new Short((short) 1) : new Short((short) 0);
+        this.value = value ? Short.valueOf((short) 1) : Short.valueOf((short) 0);
         this.isNullable = false;
     }
 
     public PlcBYTE(Byte value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -59,7 +55,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
     public PlcBYTE(Short value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Short) value.shortValue();
+            this.value = value;
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -71,7 +67,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
     public PlcBYTE(Integer value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -83,7 +79,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
     public PlcBYTE(Long value) {
         super();
         if ((value >= minValue) && (value <= maxValue)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -95,7 +91,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
     public PlcBYTE(Float value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -107,7 +103,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
     public PlcBYTE(Double value) {
         super();
         if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = false;
         } else {
             throw new PlcInvalidFieldException("Value of type " + value +
@@ -119,7 +115,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
     public PlcBYTE(BigInteger value) {
         super();
         if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -131,7 +127,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
     public PlcBYTE(BigDecimal value) {
         super();
         if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = (Short) value.shortValue();
+            this.value = value.shortValue();
             this.isNullable = true;
         } else {
           throw new PlcInvalidFieldException("Value of type " + value +
@@ -143,7 +139,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
     public PlcBYTE(String value) {
         super();
         try {
-            Short val = Short.valueOf(value).shortValue();
+            short val = Short.parseShort(value);
             if ((val >= minValue) && (val <= maxValue)) {
                 this.value = val;
                 this.isNullable = false;
@@ -185,6 +181,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
         return value;
     }
 
+    @JsonIgnore
     public short getBYTE() {
         return value;
     }
@@ -195,6 +192,7 @@ public class PlcBYTE extends PlcIECValue<Short> {
         return Short.toString(value);
     }
 
+    @JsonIgnore
     public byte[] getBytes() {
         byte[] bytes = new byte[1];
         bytes[0] = (byte)(value & 0xff);
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcByte.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcByte.java
deleted file mode 100644
index 00475ef..0000000
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcByte.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.plc4x.java.api.value;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class PlcBYTE extends PlcIECValue<Short> {
-
-    static Short minValue = 0;
-    static Short maxValue = (short) Byte.MAX_VALUE * 2 + 1;
-
-    public PlcBYTE(Boolean value) {
-        super();
-        this.value = value ? Short.valueOf((short) 1) : Short.valueOf((short) 0);
-        this.isNullable = false;
-    }
-
-    public PlcBYTE(Byte value) {
-        super();
-        if ((value >= minValue) && (value <= maxValue)) {
-            this.value = value.shortValue();
-            this.isNullable = false;
-        } else {
-            throw new PlcInvalidFieldException("Value of type " + value +
-              " is out of range " + minValue + " - " + maxValue + " for a " +
-              this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    public PlcBYTE(Short value) {
-        super();
-        if ((value >= minValue) && (value <= maxValue)) {
-            this.value = value;
-            this.isNullable = false;
-        } else {
-            throw new PlcInvalidFieldException("Value of type " + value +
-              " is out of range " + minValue + " - " + maxValue + " for a " +
-              this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    public PlcBYTE(Integer value) {
-        super();
-        if ((value >= minValue) && (value <= maxValue)) {
-            this.value = value.shortValue();
-            this.isNullable = false;
-        } else {
-            throw new PlcInvalidFieldException("Value of type " + value +
-              " is out of range " + minValue + " - " + maxValue + " for a " +
-              this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    public PlcBYTE(Long value) {
-        super();
-        if ((value >= minValue) && (value <= maxValue)) {
-            this.value = value.shortValue();
-            this.isNullable = false;
-        } else {
-            throw new PlcInvalidFieldException("Value of type " + value +
-              " is out of range " + minValue + " - " + maxValue + " for a " +
-              this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    public PlcBYTE(Float value) {
-        super();
-        if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = value.shortValue();
-            this.isNullable = false;
-        } else {
-            throw new PlcInvalidFieldException("Value of type " + value +
-              " is out of range " + minValue + " - " + maxValue + " or has decimal places for a " +
-              this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    public PlcBYTE(Double value) {
-        super();
-        if ((value >= minValue) && (value <= maxValue) && (value % 1 == 0)) {
-            this.value = value.shortValue();
-            this.isNullable = false;
-        } else {
-            throw new PlcInvalidFieldException("Value of type " + value +
-              " is out of range " + minValue + " - " + maxValue + " or has decimal places for a " +
-              this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    public PlcBYTE(BigInteger value) {
-        super();
-        if ((value.compareTo(BigInteger.valueOf(minValue)) >= 0) && (value.compareTo(BigInteger.valueOf(maxValue)) <= 0)) {
-            this.value = value.shortValue();
-            this.isNullable = true;
-        } else {
-          throw new PlcInvalidFieldException("Value of type " + value +
-            " is out of range " + minValue + " - " + maxValue + " for a " +
-            this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    public PlcBYTE(BigDecimal value) {
-        super();
-        if ((value.compareTo(BigDecimal.valueOf(minValue)) >= 0) && (value.compareTo(BigDecimal.valueOf(maxValue)) <= 0) && (value.scale() <= 0)) {
-            this.value = value.shortValue();
-            this.isNullable = true;
-        } else {
-          throw new PlcInvalidFieldException("Value of type " + value +
-            " is out of range " + minValue + " - " + maxValue + " for a " +
-            this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    public PlcBYTE(String value) {
-        super();
-        try {
-            short val = Short.parseShort(value);
-            if ((val >= minValue) && (val <= maxValue)) {
-                this.value = val;
-                this.isNullable = false;
-            } else {
-                throw new PlcInvalidFieldException("Value of type " + value +
-                  " is out of range " + minValue + " - " + maxValue + " for a " +
-                  this.getClass().getSimpleName() + " Value");
-            }
-        }
-        catch(Exception e) {
-            throw new PlcInvalidFieldException("Value of type " + value +
-              " is out of range " + minValue + " - " + maxValue + " for a " +
-              this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    @JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
-    public PlcBYTE(@JsonProperty("value") short value) {
-        super();
-        if ((value >= minValue) && (value <= maxValue)) {
-            this.value = value;
-            this.isNullable = false;
-        } else {
-            throw new PlcInvalidFieldException("Value of type " + value +
-              " is out of range " + minValue + " - " + maxValue + " for a " +
-              this.getClass().getSimpleName() + " Value");
-        }
-    }
-
-    @Override
-    @JsonIgnore
-    public boolean isShort() {
-        return true;
-    }
-
-    @Override
-    @JsonIgnore
-    public short getShort() {
-        return value;
-    }
-
-    @JsonIgnore
-    public short getBYTE() {
-        return value;
-    }
-
-    @Override
-    @JsonIgnore
-    public String toString() {
-        return Short.toString(value);
-    }
-
-    @JsonIgnore
-    public byte[] getBytes() {
-        byte[] bytes = new byte[1];
-        bytes[0] = (byte)(value & 0xff);
-        return bytes;
-    }
-
-}


[plc4x] 05/10: Feature/Modbus Write Extended Registers

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

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

commit 46941a9b3b7e9e0fef5f343725d2ffd0902b03c7
Author: hutcheb <be...@gmail.com>
AuthorDate: Tue Sep 22 07:42:51 2020 -0400

    Feature/Modbus Write Extended Registers
---
 .../test/resources/testsuite/ModbusTestsuite.xml   | 57 ++++++++++++++++++++++
 .../main/resources/protocols/modbus/modbus.mspec   |  2 +-
 src/site/asciidoc/users/protocols/modbus.adoc      |  7 ++-
 3 files changed, 61 insertions(+), 5 deletions(-)

diff --git a/plc4j/drivers/modbus/src/test/resources/testsuite/ModbusTestsuite.xml b/plc4j/drivers/modbus/src/test/resources/testsuite/ModbusTestsuite.xml
index 439a471..ccef65b 100644
--- a/plc4j/drivers/modbus/src/test/resources/testsuite/ModbusTestsuite.xml
+++ b/plc4j/drivers/modbus/src/test/resources/testsuite/ModbusTestsuite.xml
@@ -119,4 +119,61 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</value>
     </xml>
   </testcase>
 
+  <testcase>
+    <name>Write Extended Registers Request File Record</name>
+
+    <raw>000a0000000c011509060002000000010008</raw>
+    <root-type>ModbusTcpADU</root-type>
+    <parser-arguments>
+      <response>false</response>
+    </parser-arguments>
+    <xml>
+      <ModbusTcpADU className="org.apache.plc4x.java.modbus.readwrite.ModbusTcpADU">
+        <transactionIdentifier>10</transactionIdentifier>
+        <unitIdentifier>1</unitIdentifier>
+        <pdu className="org.apache.plc4x.java.modbus.readwrite.ModbusPDUWriteFileRecordRequest">
+            <items>
+              <items className="org.apache.plc4x.java.modbus.readwrite.ModbusPDUWriteFileRecordRequestItem">
+                <referenceType>6</referenceType>
+                <fileNumber>2</fileNumber>
+                <recordNumber>0</recordNumber>
+                <recordData>AAg=</recordData>
+              </items>
+            </items>
+        </pdu>
+      </ModbusTcpADU>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>Write Extended Registers Request Split File Record</name>
+    <raw>000a00000015011512060001270F00010000060002000000010000</raw>
+    <root-type>ModbusTcpADU</root-type>
+    <parser-arguments>
+      <response>false</response>
+    </parser-arguments>
+    <xml>
+      <ModbusTcpADU className="org.apache.plc4x.java.modbus.readwrite.ModbusTcpADU">
+        <transactionIdentifier>10</transactionIdentifier>
+        <unitIdentifier>1</unitIdentifier>
+        <pdu className="org.apache.plc4x.java.modbus.readwrite.ModbusPDUWriteFileRecordRequest">
+            <items>
+              <items className="org.apache.plc4x.java.modbus.readwrite.ModbusPDUWriteFileRecordRequestItem">
+                <referenceType>6</referenceType>
+                <fileNumber>1</fileNumber>
+                <recordNumber>9999</recordNumber>
+                <recordData>AAA=</recordData>
+              </items>
+              <items className="org.apache.plc4x.java.modbus.readwrite.ModbusPDUWriteFileRecordRequestItem">
+                <referenceType>6</referenceType>
+                <fileNumber>2</fileNumber>
+                <recordNumber>0</recordNumber>
+                <recordData>AAA=</recordData>
+              </items>
+            </items>
+        </pdu>
+      </ModbusTcpADU>
+    </xml>
+  </testcase>
+
 </test:testsuite>
diff --git a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
index 339069b..0f1573c 100644
--- a/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
+++ b/protocols/modbus/src/main/resources/protocols/modbus/modbus.mspec
@@ -257,7 +257,7 @@
     [simple     uint 16    'fileNumber']
     [simple     uint 16    'recordNumber']
     [implicit   uint 16    'recordLength'   'COUNT(recordData) / 2']
-    [array      int 8      'recordData'     length  'recordLength']
+    [array      int 8      'recordData'     length  'recordLength * 2']
 ]
 
 [type 'ModbusPDUWriteFileRecordResponseItem'
diff --git a/src/site/asciidoc/users/protocols/modbus.adoc b/src/site/asciidoc/users/protocols/modbus.adoc
index 887ed9b..ad2a62d 100644
--- a/src/site/asciidoc/users/protocols/modbus.adoc
+++ b/src/site/asciidoc/users/protocols/modbus.adoc
@@ -104,13 +104,13 @@ There are a number of memory areas defined in the Modbus specification.
 |Coil             |`coil:` or `0` or `0x`             |Boolean value, usually representing a binary output from the PLC   |1 |Read/Write|1
 |Input Register   |`input-register:` or `3` or `3x`   |Short input value, usually representing an analog input to the PLC  |16 |Read Only|1
 |Holding Register |`holding-register:` or `4` or `4x` |Short value, usually representing an analog output from the PLC    |16 |Read/Write|1
-|Extended Register |`extended-register:` or `6` or `6x` |Short value,    |16 |Read Only|0
+|Extended Register |`extended-register:` or `6` or `6x` |Short value,    |16 |Read/Write|0
 
 |===
 
 Initially the Modbus format allowed up to 10000 address to be specified or the discrete inputs, coils, input registers and holding registers.
 Later on, this was expanded to allow up 65536 address within each memory area (except the extended register area).
-When using the long address format i.e. input-registers:1 the addresses between 1 and 65535 are able to be specified. 
+When using the long address format i.e. input-registers:1 the addresses between 1 and 65535 are able to be specified.
 When using the shorter versions there are two formats available  i.e. 30001 and 300001.
 With the shorter format 3XXXX being limited to between 30001 and 39999, while the longer format 3XXXXX being limited to between 300001 and 365535.
 These memory areas all start at address 1.
@@ -119,7 +119,6 @@ For the extended register area the addresses 0-99999 are able to be specified. T
 Address 610000 is then the first address in the second file record and so on. It is noted that there is generally only 10 file records (600000 thru to 699999) however the spec allows for 65536 file records.
 Using the extended-register: format you are able to reference all of these, if the shorter format is used then it is limited to 699999.
 This memory area starts at address 0.
-At the moment this implementation only supports reading the extended memory area.
 
 ==== Data Types
 
@@ -147,7 +146,7 @@ The Modbus function codes:-
 - 0x0F (Write Multiple Coils)
 - 0x10 (Write Multiple Registers)
 - 0x14 (Read File Record)(Extended Register Read)
-- 0x15 (Write File Record)(Extended Register Write is not yet supported)
+- 0x15 (Write File Record)(Extended Register Write)
 
 ==== Examples
 


[plc4x] 07/10: - Undid a mess I created ;-)

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

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

commit e6312e2d5991d1969768d30c04800abc775a6161
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Fri Sep 25 17:21:39 2020 +0200

    - Undid a mess I created ;-)
---
 .../src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
index 117f014..13795f4 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
@@ -32,8 +32,8 @@ import java.lang.*;
 
 public abstract class ModbusField implements PlcField {
 
-    public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>\\d+)(\\[(?<quantity>\\d+)])?(:(?<datatype>[a-zA-Z_]+))?");
-    public static final Pattern FIXED_DIGIT_MODBUS_PATTERN = Pattern.compile("(?<address>\\d{4,5})?(\\[(?<quantity>\\d+)])?(:(?<datatype>[a-zA-Z_]+))?");
+    public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>\\d+)(:(?<datatype>[a-zA-Z_]+))?(\\[(?<quantity>\\d+)])?");
+    public static final Pattern FIXED_DIGIT_MODBUS_PATTERN = Pattern.compile("(?<address>\\d{4,5})?(:(?<datatype>[a-zA-Z_]+))?(\\[(?<quantity>\\d+)])?");
 
     protected static final int PROTOCOL_ADDRESS_OFFSET = 1;
 


[plc4x] 02/10: Tidying up.

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

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

commit 83957d36556b9fe03b31fe2d98755c8b628b7245
Author: hutcheb <be...@gmail.com>
AuthorDate: Sun Sep 20 17:18:37 2020 -0400

    Tidying up.
---
 .../org/apache/plc4x/java/api/value/PlcCHAR.java   |  5 ++++
 .../org/apache/plc4x/java/api/value/PlcWCHAR.java  |  5 ++++
 .../java/modbus/field/ModbusExtendedRegister.java  |  4 +--
 .../plc4x/java/modbus/field/ModbusField.java       | 31 +---------------------
 .../plc4x/java/modbus/field/ModbusFieldCoil.java   |  4 +--
 .../modbus/field/ModbusFieldDiscreteInput.java     |  4 +--
 .../modbus/field/ModbusFieldHoldingRegister.java   |  4 +--
 .../modbus/field/ModbusFieldInputRegister.java     |  4 +--
 8 files changed, 21 insertions(+), 40 deletions(-)

diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcCHAR.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcCHAR.java
index de42328..b39a63e 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcCHAR.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcCHAR.java
@@ -203,6 +203,11 @@ public class PlcCHAR extends PlcIECValue<Short> {
     }
 
     @Override
+    public Object getObject() {
+        return Character.toString(Character.valueOf((char) ((short) value)));
+    }
+
+    @Override
     @JsonIgnore
     public String toString() {
         return Character.toString(Character.valueOf((char) ((short) value)));
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWCHAR.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWCHAR.java
index 558d75f..3c44e9d 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWCHAR.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/value/PlcWCHAR.java
@@ -187,6 +187,11 @@ public class PlcWCHAR extends PlcIECValue<Integer> {
     }
 
     @Override
+    public Object getObject() {
+        return Character.toString(Character.valueOf((char) ((int) value)));
+    }
+
+    @Override
     @JsonIgnore
     public String toString() {
         return Character.toString(Character.valueOf((char) ((int) value)));
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusExtendedRegister.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusExtendedRegister.java
index 637b7b2..07557ac 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusExtendedRegister.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusExtendedRegister.java
@@ -32,7 +32,7 @@ public class ModbusExtendedRegister extends ModbusField {
     protected static final int REGISTER_MAXADDRESS = 655359999;
 
     protected ModbusExtendedRegister(int address, Integer quantity, String datatype) {
-        super(address, quantity, datatype);
+        super(address, quantity, datatype.toUpperCase());
     }
 
     public static boolean matches(String addressString) {
@@ -74,6 +74,6 @@ public class ModbusExtendedRegister extends ModbusField {
         String datatypeTemp = matcher.group("datatype");
         String datatype = datatypeTemp != null ? datatypeTemp : "INT";
 
-        return new ModbusExtendedRegister(address, quantity, datatype);
+        return new ModbusExtendedRegister(address, quantity, datatype.toUpperCase());
     }
 }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
index e767b30..bf6d933 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
@@ -34,33 +34,6 @@ public abstract class ModbusField implements PlcField {
 
     public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>\\d+):?(?<datatype>[a-zA-Z_]+)?(\\[(?<quantity>\\d+)])?");
     public static final Pattern FIXED_DIGIT_MODBUS_PATTERN = Pattern.compile("(?<address>\\d{4,5}):?(?<datatype>[a-zA-Z_]+)?(\\[(?<quantity>\\d+)])?");
-    public static final String[] DATATYPES = {"BOOL",
-                                              "BYTE",
-                                              "WORD",
-                                              "DWORD",
-                                              "LWORD",
-                                              "SINT",
-                                              "INT",
-                                              "DINT",
-                                              "LINT",
-                                              "USINT",
-                                              "UINT",
-                                              "UDINT",
-                                              "ULINT",
-                                              "REAL",
-                                              "LREAL",
-                                              "TIME",
-                                              "LTIME",
-                                              "DATE",
-                                              "LDATE",
-                                              "TIME_OF_DAY",
-                                              "LTIME_OF_DAY",
-                                              "DATE_TIME",
-                                              "LDATE_TIME",
-                                              "CHAR",
-                                              "WCHAR",
-                                              "STRING",
-                                              "WSTRING"};
 
     protected static final int PROTOCOL_ADDRESS_OFFSET = 1;
 
@@ -99,9 +72,7 @@ public abstract class ModbusField implements PlcField {
             throw new IllegalArgumentException("quantity must be greater then zero. Was " + this.quantity);
         }
         this.dataType = dataType != null ? dataType : "INT";
-        if (ArrayUtils.contains( DATATYPES, this.dataType.toUpperCase()) == false) {
-            throw new IllegalArgumentException("datatype must be an IEC-61131 listed datatype. Was " + this.dataType);
-        }
+        ModbusDataType.valueOf(this.dataType);
     }
 
     public int getAddress() {
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldCoil.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldCoil.java
index 41db02a..37188e6 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldCoil.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldCoil.java
@@ -32,7 +32,7 @@ public class ModbusFieldCoil extends ModbusField {
     protected static final int REGISTER_MAXADDRESS = 65535;
 
     public ModbusFieldCoil(int address, Integer quantity, String datatype) {
-        super(address, quantity, datatype);
+        super(address, quantity, datatype.toUpperCase());
     }
 
     public static boolean matches(String addressString) {
@@ -74,7 +74,7 @@ public class ModbusFieldCoil extends ModbusField {
         String datatypeTemp = matcher.group("datatype");
         String datatype = datatypeTemp != null ? datatypeTemp : "BOOL";
 
-        return new ModbusFieldCoil(address, quantity, datatype);
+        return new ModbusFieldCoil(address, quantity, datatype.toUpperCase());
     }
 
 }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java
index 9a2febc..0f390d1 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldDiscreteInput.java
@@ -32,7 +32,7 @@ public class ModbusFieldDiscreteInput extends ModbusField {
     protected static final int REGISTER_MAXADDRESS = 65535;
 
     public ModbusFieldDiscreteInput(int address, Integer quantity, String datatype) {
-        super(address, quantity, datatype);
+        super(address, quantity, datatype.toUpperCase());
     }
 
     public static boolean matches(String addressString) {
@@ -74,6 +74,6 @@ public class ModbusFieldDiscreteInput extends ModbusField {
         String datatypeTemp = matcher.group("datatype");
         String datatype = datatypeTemp != null ? datatypeTemp : "BOOL";
 
-        return new ModbusFieldDiscreteInput(address, quantity, datatype);
+        return new ModbusFieldDiscreteInput(address, quantity, datatype.toUpperCase());
     }
 }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHoldingRegister.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHoldingRegister.java
index 53c5d64..dae3ce7 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHoldingRegister.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldHoldingRegister.java
@@ -32,7 +32,7 @@ public class ModbusFieldHoldingRegister extends ModbusField {
     protected static final int REGISTER_MAXADDRESS = 65535;
 
     protected ModbusFieldHoldingRegister(int address, Integer quantity, String datatype) {
-        super(address, quantity, datatype);
+        super(address, quantity, datatype.toUpperCase());
     }
 
     public static boolean matches(String addressString) {
@@ -73,7 +73,7 @@ public class ModbusFieldHoldingRegister extends ModbusField {
         String datatypeTemp = matcher.group("datatype");
         String datatype = datatypeTemp != null ? datatypeTemp : "INT";
 
-        return new ModbusFieldHoldingRegister(address, quantity, datatype);
+        return new ModbusFieldHoldingRegister(address, quantity, datatype.toUpperCase());
     }
 
 }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldInputRegister.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldInputRegister.java
index e4f5340..199ccb2 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldInputRegister.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusFieldInputRegister.java
@@ -32,7 +32,7 @@ public class ModbusFieldInputRegister extends ModbusField {
     protected static final int REGISTER_MAXADDRESS = 65535;
 
     protected ModbusFieldInputRegister(int address, Integer quantity, String datatype) {
-        super(address, quantity, datatype);
+        super(address, quantity, datatype.toUpperCase());
     }
 
     public static boolean matches(String addressString) {
@@ -73,6 +73,6 @@ public class ModbusFieldInputRegister extends ModbusField {
         String datatypeTemp = matcher.group("datatype");
         String datatype = datatypeTemp != null ? datatypeTemp : "INT";
 
-        return new ModbusFieldInputRegister(address, quantity, datatype);
+        return new ModbusFieldInputRegister(address, quantity, datatype.toUpperCase());
     }
 }