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

cgarcia pushed a commit to branch feature/merlot
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git


The following commit(s) were added to refs/heads/feature/merlot by this push:
     new 748a43e  Fix RW in Modbus and R in S7.
748a43e is described below

commit 748a43e9470c42264b806145c9ea3ed58373aba1
Author: César García <[email protected]>
AuthorDate: Tue Oct 22 09:23:27 2024 -0400

    Fix RW in Modbus and R in S7.
---
 .../plc4x/merlot/api/command/DemoCommand003.java   | 52 ++++++++++++----
 .../{DemoCommand003.java => DemoCommand004.java}   | 69 ++++++++++++++++------
 .../plc4x/merlot/api/impl/PlcDeviceImpl.java       | 31 ++++++----
 .../merlot/api/impl/PlcGeneralFunctionImpl.java    |  3 +-
 .../resources/OSGI-INF/blueprint/api-service.xml   |  8 +++
 .../apache/plc4x/merlot/db/core/DBBaseFactory.java |  2 +-
 .../plc4x/merlot/db/core/DBBooleanFactory.java     | 32 ++++++----
 .../apache/plc4x/merlot/db/core/DBByteFactory.java | 12 ++--
 .../plc4x/merlot/db/core/DBDoubleFactory.java      | 14 ++---
 .../plc4x/merlot/db/core/DBFloatFactory.java       | 18 +++---
 .../apache/plc4x/merlot/db/core/DBIntFactory.java  | 16 +++--
 .../apache/plc4x/merlot/db/core/DBLongFactory.java | 16 +++--
 .../merlot/db/core/DBRecordsManagedService.java    |  1 -
 .../plc4x/merlot/db/core/DBShortFactory.java       | 12 ++--
 .../plc4x/merlot/db/core/DBUByteFactory.java       | 23 ++++----
 .../apache/plc4x/merlot/db/core/DBUIntFactory.java | 22 ++++---
 .../plc4x/merlot/db/core/DBULongFactory.java       | 22 ++++---
 .../plc4x/merlot/db/core/DBUShortFactory.java      | 22 ++++---
 .../plc4x/merlot/db/impl/DBCollectorImpl.java      |  1 -
 .../apache/plc4x/merlot/db/impl/DBControlImpl.java |  1 -
 .../apache/plc4x/merlot/db/impl/DBPersistImpl.java | 13 ++--
 .../plc4x/merlot/db/impl/DBWriterHandlerImpl.java  |  5 +-
 .../resources/OSGI-INF/blueprint/db-service.xml    |  2 +-
 .../drv/mb/impl/ModbusPlcTagFunctionImpl.java      | 37 +++++-------
 .../merlot/drv/s7/impl/S7PlcTagFunctionImpl.java   | 10 +++-
 .../src/main/feature/feature.xml                   | 33 ++++++-----
 .../modbus/svr/core/ModbusServerADUHandler.java    |  2 -
 27 files changed, 265 insertions(+), 214 deletions(-)

diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
index 69d247a..b9c6e74 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
@@ -48,15 +48,15 @@ public class DemoCommand003  implements Action  {
     @Reference
     volatile List<PlcDevice> devices;
     
-    @Option(name = "-d", aliases = "--did", description = "Device uid.", 
required = true, multiValued = false)
+    @Option(name = "-d", aliases = "--did", description = "Device uid.", 
required = false, multiValued = false)
     String gid; 
     
-    @Option(name = "-n", aliases = "--name", description = "Technological name 
of the group.", required = true, multiValued = false)
+    @Option(name = "-n", aliases = "--name", description = "Technological name 
of the group.", required = false, multiValued = false)
     String group_name;     
     
     @Override
     public Object execute() throws Exception {
-       
+        System.out.println("Version 017");
         UUID devUuid = UUID.randomUUID();
         
         Optional<PlcDevice> optPlcDevice = 
plcGeneralFunction.createDevice(devUuid.toString(),
@@ -73,29 +73,57 @@ public class DemoCommand003  implements Action  {
                                 optPlcDevice.get().getUid().toString(),
                                 "GRUPO001",
                                 "Descripcion del grupo",
-                                "5000",
+                                "100",
                                 "true");
             
             if (optPlcGroup.isPresent()){
-                for (int i= 1; i < 10; i++) {
+                
+                for (int i= 1; i < 4; i++) {
                     Optional<PlcItem> optPlcItem = 
plcGeneralFunction.createItem(UUID.randomUUID().toString(), 
                             optPlcGroup.get().getGroupUid().toString(),
                             optPlcDevice.get().getUid().toString(),
                             "ITEM_" + i,
                             "Item description _" + i,
-                            "4x00001:UINT[16]",
+                            "4x00001:UINT[48]",
                             "true");
                     if (optPlcItem.isPresent()){
                         optPlcItem.get().enable();
                         
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " + 
optPlcItem.get().getItemName());
-                    }               
-                }
+                    }                                                          
  
+                }           
+             
+//            
+                for (int i= 1; i < 4; i++) {
+                    Optional<PlcItem> optPlcItem = 
plcGeneralFunction.createItem(UUID.randomUUID().toString(), 
+                            optPlcGroup.get().getGroupUid().toString(),
+                            optPlcDevice.get().getUid().toString(),
+                            "INPUT_" + i,
+                            "Item description _" + i,
+                            "3x00001:UINT[48]",
+                            "true");
+                    if (optPlcItem.isPresent()){
+                        optPlcItem.get().enable();
+                        
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " + 
optPlcItem.get().getItemName());
+                    }                                                          
  
+                }           
+                        
+                for (int i= 1; i < 10; i++) {
+                    Optional<PlcItem> optPlcItem = 
plcGeneralFunction.createItem(UUID.randomUUID().toString(), 
+                            optPlcGroup.get().getGroupUid().toString(),
+                            optPlcDevice.get().getUid().toString(),
+                            "BOOLS_" + i,
+                            "Item description _" + i,
+                            "0x00001:BOOL[48]",
+                            "true");
+                    if (optPlcItem.isPresent()){
+                        optPlcItem.get().enable();
+                        
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " + 
optPlcItem.get().getItemName());
+                    }                                                          
  
+                }           
 
-           
-            } 
-            
-            optPlcDevice.get().enable();
+            }
         }
+            optPlcDevice.get().enable();
         return null;        
     }
 }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
similarity index 54%
copy from 
plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
copy to 
plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
index 69d247a..08f7fb7 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
@@ -33,8 +33,8 @@ import org.apache.plc4x.merlot.api.core.PlcItemClientService;
 
 
 @Service
-@Command(scope = "plc4x", name = "demo_003", description = "Command for test.")
-public class DemoCommand003  implements Action  {
+@Command(scope = "plc4x", name = "demo_004", description = "Command for test.")
+public class DemoCommand004  implements Action  {
   
     @Reference
     BundleContext bc; 
@@ -48,22 +48,25 @@ public class DemoCommand003  implements Action  {
     @Reference
     volatile List<PlcDevice> devices;
     
-    @Option(name = "-d", aliases = "--did", description = "Device uid.", 
required = true, multiValued = false)
+    @Option(name = "-d", aliases = "--did", description = "Device uid.", 
required = false, multiValued = false)
     String gid; 
     
-    @Option(name = "-n", aliases = "--name", description = "Technological name 
of the group.", required = true, multiValued = false)
+    @Option(name = "-n", aliases = "--name", description = "Technological name 
of the group.", required = false, multiValued = false)
     String group_name;     
     
     @Override
     public Object execute() throws Exception {
-       
+        System.out.println("Version 009");
         UUID devUuid = UUID.randomUUID();
         
         Optional<PlcDevice> optPlcDevice = 
plcGeneralFunction.createDevice(devUuid.toString(),
-                                            "modbus-tcp", 
-                                            "AS01",
-                                            "modbus-tcp://localhost:10502",
-                                            "+C1=AS01.", 
+                                            "s7", 
+                                            "AS02",
+                                            "s7://192.168.0.47?remote-rack=0&"
+                                            + "remote-slot=3&"
+                                            + 
"controller-type=S7_400&read-timeout=8&"                
+                                            + 
"ping=true&ping-time=2&retry-time=3",
+                                            "+C1=AS02.", 
                                             "La descripcion",
                                             "true");
         if (optPlcDevice.isPresent()){
@@ -71,31 +74,59 @@ public class DemoCommand003  implements Action  {
             
             Optional<PlcGroup> optPlcGroup =  
plcGeneralFunction.createGroup(UUID.randomUUID().toString(),
                                 optPlcDevice.get().getUid().toString(),
-                                "GRUPO001",
+                                "GRUPO002",
                                 "Descripcion del grupo",
-                                "5000",
+                                "500",
                                 "true");
             
             if (optPlcGroup.isPresent()){
+                
+                for (int i= 1; i < 4; i++) {
+                    Optional<PlcItem> optPlcItem = 
plcGeneralFunction.createItem(UUID.randomUUID().toString(), 
+                            optPlcGroup.get().getGroupUid().toString(),
+                            optPlcDevice.get().getUid().toString(),
+                            "S7ITEM_" + i,
+                            "S7Item description _" + i,
+                            "%DB100:0:USINT[48]",
+                            "true");
+                    if (optPlcItem.isPresent()){
+                        optPlcItem.get().enable();
+                        
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " + 
optPlcItem.get().getItemName());
+                    }                                                          
  
+                }           
+             
+////            
+//                for (int i= 1; i < 4; i++) {
+//                    Optional<PlcItem> optPlcItem = 
plcGeneralFunction.createItem(UUID.randomUUID().toString(), 
+//                            optPlcGroup.get().getGroupUid().toString(),
+//                            optPlcDevice.get().getUid().toString(),
+//                            "INPUT_" + i,
+//                            "Item description _" + i,
+//                            "3x00001:UINT[48]",
+//                            "true");
+//                    if (optPlcItem.isPresent()){
+//                        optPlcItem.get().enable();
+//                        
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " + 
optPlcItem.get().getItemName());
+//                    }                                                        
    
+//                }           
+//                        
                 for (int i= 1; i < 10; i++) {
                     Optional<PlcItem> optPlcItem = 
plcGeneralFunction.createItem(UUID.randomUUID().toString(), 
                             optPlcGroup.get().getGroupUid().toString(),
                             optPlcDevice.get().getUid().toString(),
-                            "ITEM_" + i,
+                            "S7BOOLS_" + i,
                             "Item description _" + i,
-                            "4x00001:UINT[16]",
+                            "%DB100:50.0:BOOL[8]",
                             "true");
                     if (optPlcItem.isPresent()){
                         optPlcItem.get().enable();
                         
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " + 
optPlcItem.get().getItemName());
-                    }               
-                }
+                    }                                                          
  
+                }           
 
-           
-            } 
-            
-            optPlcDevice.get().enable();
+            }
         }
+            optPlcDevice.get().enable();
         return null;        
     }
 }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcDeviceImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcDeviceImpl.java
index 3e67ad6..bc23883 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcDeviceImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcDeviceImpl.java
@@ -30,6 +30,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.logging.Level;
 import static java.util.stream.Collectors.toList;
 import org.apache.commons.lang3.time.StopWatch;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -192,7 +193,7 @@ public class PlcDeviceImpl implements PlcDevice {
                                     });
 
                                 } catch (Exception ex) {
-                                    LOGGER.info(ex.getMessage());
+                                    LOGGER.error("Read ringbuffer: " + 
ex.getMessage());
                                 }                                
                                 watch.stop();
                                 LOGGER.debug("Elapse time Group[{}] time: 
{}",event.getPlcGroup().getGroupName(), watch.getTime());
@@ -228,11 +229,6 @@ public class PlcDeviceImpl implements PlcDevice {
                                     messageCounter[0]++;   
 
                                     if (null != plcTagFunction) { 
-                                        
-                                        System.out.println("TAG: " + 
event.getPlcItem().getItemPlcTag());
-                                        System.out.println("OFFSET: " + 
event.getOffset());
-                                        System.out.println("BYTEBUF: \r\n" + 
ByteBufUtil.prettyHexDump(event.getByteBuf())); 
-                                        
                                         
writeBuffer.add(plcTagFunction.getPlcTag(
                                             
event.getPlcItem().getItemPlcTag(), 
                                             event.getByteBuf(), 
event.getOffset()));
@@ -245,6 +241,7 @@ public class PlcDeviceImpl implements PlcDevice {
                                     */
                                     if ((messageCounter[0] > 
DEFAULT_WRITE_BATCH_SIZE) || (endofbatch)) {
                                         if (!writeBuffer.isEmpty()) {
+                                            System.out.println("PLCCONNECTION: 
" +  refPlcConnection.get().toString());
                                             final Builder builder = 
refPlcConnection.get().writeRequestBuilder();
 
                                             writeBuffer.forEach(i -> {
@@ -266,7 +263,7 @@ public class PlcDeviceImpl implements PlcDevice {
                                     }
                                     
                                 } catch (Exception ex) {
-                                    LOGGER.error(ex.getMessage());
+                                    LOGGER.error("Write ringbuffer: " + 
ex.getMessage());
                                 } finally {
                                     readProcessor.restart();
                                     messageCounter[0] = 0;                     
           
@@ -312,6 +309,11 @@ public class PlcDeviceImpl implements PlcDevice {
                 LOGGER.info("Device {} with url {}",  
deviceProperties.get(Device.SERVICE_NAME), url);
                 plcConnection = plcDriver.getConnection(url);
                 plcConnection.connect();
+                try {
+                    Thread.sleep(100);
+                } catch (InterruptedException ex) {
+                    LOGGER.error(ex.getMessage());
+                }
                 refPlcConnection.set(plcConnection);
                 if (plcConnection.isConnected()) {
                     enable = true;
@@ -324,7 +326,7 @@ public class PlcDeviceImpl implements PlcDevice {
                     deviceProperties.put(Device.SERVICE_STATUS, 
Device.STATUS_OFFLINE);                    
                 }               
             } catch (PlcConnectionException ex) {
-                LOGGER.info(ex.getLocalizedMessage());
+                LOGGER.error(ex.getLocalizedMessage());
                 enable = false;
                 deviceProperties.put(Device.SERVICE_STATUS, 
Device.STATUS_NOT_INITIALIZED);                  
             }
@@ -353,7 +355,7 @@ public class PlcDeviceImpl implements PlcDevice {
                 }
             }
         } catch (Exception ex) {
-            LOGGER.info(ex.getLocalizedMessage());
+            LOGGER.error(ex.getLocalizedMessage());
         }
     }    
             
@@ -488,7 +490,7 @@ public class PlcDeviceImpl implements PlcDevice {
         try {
             serviceRefences = bc.getServiceReferences(PlcTagFunction.class, 
filter);
         } catch (InvalidSyntaxException ex) {
-            LOGGER.info(ex.getMessage());
+            LOGGER.error(ex.getMessage());
         }
         
         if (null == serviceRefences) {
@@ -506,7 +508,7 @@ public class PlcDeviceImpl implements PlcDevice {
         try {
             serviceRefences2 = 
bc.getServiceReferences(PlcEventConnectionFunction.class, filter2);
         } catch (InvalidSyntaxException ex) {
-            LOGGER.info(ex.getMessage());
+            LOGGER.error(ex.getMessage());
         } 
         
         if (null == serviceRefences2) {
@@ -561,6 +563,13 @@ public class PlcDeviceImpl implements PlcDevice {
         if ((deviceProperties.get(Device.SERVICE_STATUS) == 
Device.STATUS_NOT_INITIALIZED) ||
             (deviceProperties.get(Device.SERVICE_STATUS) == 
Device.STATUS_OFFLINE)){
             enable();    
+        } else if ((enable) && (null != plcConnection)){
+            if (!plcConnection.isConnected()){
+                LOGGER.info("Reconnecting Device {} with url {}",  
+                        deviceProperties.get(Device.SERVICE_NAME), 
+                        deviceProperties.get(Device.SERVICE_DRIVER));
+                enable();
+            }            
         }
     }
     
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGeneralFunctionImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGeneralFunctionImpl.java
index 7a22cde..96b11b9 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGeneralFunctionImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGeneralFunctionImpl.java
@@ -546,7 +546,8 @@ public class PlcGeneralFunctionImpl implements 
PlcGeneralFunction  {
                                     setItemDescription(ItemDescription).
                                     setItemId(ItemTag).
                                     setItemUid(UUID.fromString(ItemUuid)).     
                              
-                                    build();             
+                                    build();      
+            
             if (ItemEnable.equals("true")) {
                 plcItem.enable();
             } else plcItem.disable();
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/resources/OSGI-INF/blueprint/api-service.xml
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/resources/OSGI-INF/blueprint/api-service.xml
index 5ca2c66..1a0a995 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/resources/OSGI-INF/blueprint/api-service.xml
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/resources/OSGI-INF/blueprint/api-service.xml
@@ -17,6 +17,14 @@
 -->
 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"; 
default-activation="eager">
 
+    <!--
+    -->
+<!--    <reference-list id="TcpTransportRef"
+        interface="org.apache.plc4x.java.spi.transport.Transport"
+        filter="org.apache.plc4x.transport.code=tcp"
+        availability="mandatory">        
+    </reference-list>-->
+
     <!--
     -->
     <reference id="servEventAdmin"
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBaseFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBaseFactory.java
index dfaffd7..e271a02 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBaseFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBaseFactory.java
@@ -30,7 +30,7 @@ import org.epics.pvdatabase.PVRecord;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
+//TODO: Replace string processing with with regex.
 public class DBBaseFactory implements DBRecordFactory  {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(DBBaseFactory.class); 
     
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBooleanFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBooleanFactory.java
index b6f7da1..1855849 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBooleanFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBooleanFactory.java
@@ -48,6 +48,7 @@ public class DBBooleanFactory extends DBBaseFactory {
             value(ScalarType.pvBoolean).
             addDescriptor(). 
             add("id", fieldCreate.createScalar(ScalarType.pvString)). 
+            add("offset", fieldCreate.createScalar(ScalarType.pvInt)).         
        
             add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
             add("scan_enable", fieldCreate.createScalar(ScalarType.pvBoolean)).
             add("write_enable", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
@@ -69,6 +70,7 @@ public class DBBooleanFactory extends DBBaseFactory {
             value(ScalarType.pvBoolean).
             addDescriptor(). 
             add("id", fieldCreate.createScalar(ScalarType.pvString)). 
+            add("offset", fieldCreate.createScalar(ScalarType.pvInt)).         
        
             add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
             add("scan_enable", fieldCreate.createScalar(ScalarType.pvBoolean)).
             add("write_enable", 
fieldCreate.createScalar(ScalarType.pvBoolean)). 
@@ -104,25 +106,29 @@ public class DBBooleanFactory extends DBBaseFactory {
          */
         public void process()
         {
-            super.process();
             if (null != plcItem) {    
-                System.out.println("Paso por Boolean");
-                if (value.get() != write_value.get()) {
-                    final PVBoolean isWriteEnbale = 
this.getPVStructure().getBooleanField("write_enable");
-                    if (isWriteEnbale.get()) {
-                        write_value.put(value.get());
-                        
-                    }
+                if (write_enable.get()) {    
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeBoolean(write_value.get());          
               
+                    super.process();                      
                 }
-            }               
+                
+            }             
         } 
 
         @Override
         public void atach(PlcItem plcItem) {
+            try {
             this.plcItem = plcItem;
-            offset = this.getPVStructure().getIntField("offset").get() * 
Byte.BYTES;              
-            innerBuffer = plcItem.getItemByteBuf().slice(offset, Byte.BYTES);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
+                offset = this.getPVStructure().getIntField("offset").get() * 
Byte.BYTES;              
+                innerBuffer = plcItem.getItemByteBuf().slice(offset, 
Byte.BYTES);
+                innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
+            } catch (Exception ex) {
+                System.out.println("Falla al atach()");
+                System.out.println(plcItem.toString());
+                ex.printStackTrace();
+            }
         }
 
         @Override
@@ -139,7 +145,7 @@ public class DBBooleanFactory extends DBBaseFactory {
 
         @Override
         public String getFieldsToMonitor() {
-            return MONITOR_WRITE_FIELD;
+            return MONITOR_FIELDS;
         }
                                 
     }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBByteFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBByteFactory.java
index eba8d96..ea66b02 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBByteFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBByteFactory.java
@@ -113,13 +113,11 @@ public class DBByteFactory extends DBBaseFactory {
         public void process()
         {           
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeByte(write_value.get());         
                
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeByte(write_value.get());             
            
+                    super.process();                      
                 }
             }                     
         } 
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBDoubleFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBDoubleFactory.java
index 642ea54..07de6c6 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBDoubleFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBDoubleFactory.java
@@ -107,15 +107,13 @@ public class DBDoubleFactory extends DBBaseFactory {
         public void process()
         {
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeDouble(write_value.get());       
                  
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeDouble(write_value.get());           
              
+                    super.process();                      
                 }
-            }                 
+            }          
         }        
 
         @Override
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBFloatFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBFloatFactory.java
index 3dcb146..c23ef44 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBFloatFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBFloatFactory.java
@@ -99,7 +99,6 @@ public class DBFloatFactory extends DBBaseFactory {
             write_value = pvStructure.getFloatField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");
             offset = pvStructure.getIntField("offset").get();  
-            System.out.println("EL OFFSET EN EL RECORD: " + offset);
         }    
 
         /**
@@ -109,22 +108,19 @@ public class DBFloatFactory extends DBBaseFactory {
         public void process()
         {
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeFloat(write_value.get());        
                 
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeFloat(write_value.get());            
             
+                    super.process();                      
                 }
-            }             
+            }          
         }        
 
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem; 
-            offset = this.getPVStructure().getIntField("offset").get(); 
-            System.out.println("Y EN ATACH EL OFFSET EN EL RECORD: " + 
offset);            
+            offset = this.getPVStructure().getIntField("offset").get();        
   
             innerBuffer = plcItem.getItemByteBuf().slice(offset, Float.BYTES);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBIntFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBIntFactory.java
index 3baee7f..e4df2f5 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBIntFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBIntFactory.java
@@ -106,21 +106,19 @@ public class DBIntFactory extends DBBaseFactory {
         public void process()
         {
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeInt(write_value.get());          
               
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeInt(write_value.get());              
           
+                    super.process();                      
                 }
-            }            
+            }          
         }  
 
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem;
-            offset = this.getPVStructure().getIntField("offset").get() * 
Integer.BYTES;             
+            offset = this.getPVStructure().getIntField("offset").get();        
     
             innerBuffer = plcItem.getItemByteBuf().slice(offset, 
Integer.BYTES);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBLongFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBLongFactory.java
index cf9f975..187f19b 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBLongFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBLongFactory.java
@@ -106,21 +106,19 @@ public class DBLongFactory extends DBBaseFactory {
         public void process()
         {
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeLong(write_value.get());         
                
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeLong(write_value.get());             
            
+                    super.process();                      
                 }
-            }  
+            }
         }        
 
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem;
-            offset = this.getPVStructure().getIntField("offset").get() * 
Long.BYTES;               
+            offset = this.getPVStructure().getIntField("offset").get();        
       
             innerBuffer = plcItem.getItemByteBuf().slice(offset, Long.BYTES);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBRecordsManagedService.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBRecordsManagedService.java
index 1e924fc..ba95bad 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBRecordsManagedService.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBRecordsManagedService.java
@@ -197,7 +197,6 @@ public class DBRecordsManagedService implements 
ManagedServiceFactory, Job {
                     if (null == master.findRecord(pvr.getRecordName())) {
                         plcItem.get().addItemListener((PlcItemListener) pvr);
                         master.addRecord(pvr); 
-                        System.out.println("XXXXX> " + pvr.getOffset() );
                         writerHandler.putDBRecord(pvr);
                         LOGGER.info("Add DBRecord... [{}] linked to 
[{}].",pvr.getRecordName(), id);    
                     } else {
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBShortFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBShortFactory.java
index 64c95bf..37cada1 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBShortFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBShortFactory.java
@@ -111,13 +111,11 @@ public class DBShortFactory extends DBBaseFactory {
         public void process()
         {
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeShort(write_value.get());        
                 
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeShort(write_value.get());            
             
+                    super.process();                      
                 }
             }               
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUByteFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUByteFactory.java
index b2e7ab3..3c1bb20 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUByteFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUByteFactory.java
@@ -44,7 +44,7 @@ public class DBUByteFactory extends DBBaseFactory {
     public DBRecord create(String recordName) {
         NTScalarBuilder ntScalarBuilder = NTScalar.createBuilder();
         PVStructure pvStructure = ntScalarBuilder.
-            value(ScalarType.pvByte).
+            value(ScalarType.pvUByte).
             addDescriptor(). 
             add("id", fieldCreate.createScalar(ScalarType.pvString)).
             add("offset", fieldCreate.createScalar(ScalarType.pvInt)).         
         
@@ -94,8 +94,8 @@ public class DBUByteFactory extends DBBaseFactory {
         
         public DBUByteRecord(String recordName,PVStructure pvStructure) {
             super(recordName, pvStructure);
-            value = (PVUByte) pvStructure.getByteField("value");
-            write_value = (PVUByte) pvStructure.getByteField("write_value");
+            value = (PVUByte) pvStructure.getSubField("value");
+            write_value = (PVUByte) pvStructure.getSubField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");        
    
         }    
 
@@ -105,15 +105,12 @@ public class DBUByteFactory extends DBBaseFactory {
          */
         public void process()
         {
-            System.out.println("PROCESANDO BYTE: ");
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeByte(write_value.get());         
                
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeByte(write_value.get());             
            
+                    super.process();                      
                 }
             }              
         }
@@ -121,7 +118,7 @@ public class DBUByteFactory extends DBBaseFactory {
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem;            
-            offset = this.getPVStructure().getIntField("offset").get() * 
Byte.BYTES;        
+            offset = this.getPVStructure().getIntField("offset").get();        
             innerBuffer = plcItem.getItemByteBuf().slice(offset, Byte.BYTES);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
@@ -135,7 +132,7 @@ public class DBUByteFactory extends DBBaseFactory {
         public void update() {
             if (null != plcItem)  
                 if (value.get() != innerBuffer.getUnsignedByte(0)) {
-                    value.put((byte) innerBuffer.getUnsignedByte(offset));
+                    value.put((byte) innerBuffer.getUnsignedByte(0));
                 }
         }
         
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUIntFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUIntFactory.java
index 29ccebe..0385326 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUIntFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUIntFactory.java
@@ -94,8 +94,8 @@ public class DBUIntFactory extends DBBaseFactory {
         
         public DBUIntRecord(String recordName,PVStructure pvStructure) {
             super(recordName, pvStructure);
-            value = (PVUInt) pvStructure.getIntField("value");   
-            write_value = (PVUInt) pvStructure.getIntField("write_value");
+            value = (PVUInt) pvStructure.getSubField("value");   
+            write_value = (PVUInt) pvStructure.getSubField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");        
    
         }    
 
@@ -106,13 +106,11 @@ public class DBUIntFactory extends DBBaseFactory {
         public void process()
         {
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeInt(write_value.get());          
               
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeInt(write_value.get());              
           
+                    super.process();                      
                 }
             }              
         } 
@@ -120,7 +118,7 @@ public class DBUIntFactory extends DBBaseFactory {
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem;
-            offset = this.getPVStructure().getIntField("offset").get() * 
Integer.BYTES;              
+            offset = this.getPVStructure().getIntField("offset").get();        
      
             innerBuffer = plcItem.getItemByteBuf().slice(offset, 
Integer.BYTES);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
@@ -133,8 +131,8 @@ public class DBUIntFactory extends DBBaseFactory {
         @Override
         public void update() {
             if (null != plcItem)   
-                if (value.get() != innerBuffer.getUnsignedInt(offset))
-                value.put((byte) innerBuffer.getUnsignedInt(offset));
+                if (value.get() != innerBuffer.getUnsignedInt(0))
+                value.put((byte) innerBuffer.getUnsignedInt(0));
         }
         
         @Override
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBULongFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBULongFactory.java
index 79d841c..2b37578 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBULongFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBULongFactory.java
@@ -96,8 +96,8 @@ public class DBULongFactory extends DBBaseFactory {
         
         DBULongRecord(String recordName,PVStructure pvStructure) {
             super(recordName, pvStructure);
-            value = (PVULong) pvStructure.getLongField("value"); 
-            write_value = (PVULong) pvStructure.getLongField("write_value");
+            value = (PVULong) pvStructure.getSubField("value"); 
+            write_value = (PVULong) pvStructure.getSubField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");        
    
         }    
 
@@ -108,13 +108,11 @@ public class DBULongFactory extends DBBaseFactory {
         public void process()
         {
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeLong(write_value.get());         
                
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeLong(write_value.get());             
            
+                    super.process();                      
                 }
             }             
         }    
@@ -122,7 +120,7 @@ public class DBULongFactory extends DBBaseFactory {
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem;
-            offset = this.getPVStructure().getIntField("offset").get() * 
Long.BYTES;              
+            offset = this.getPVStructure().getIntField("offset").get();        
      
             innerBuffer = plcItem.getItemByteBuf().slice(offset, Long.BYTES);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
@@ -135,8 +133,8 @@ public class DBULongFactory extends DBBaseFactory {
         @Override
         public void update() {
             if (null != plcItem)   
-                if (value.get() != innerBuffer.getUnsignedMedium(offset))
-                value.put(innerBuffer.getUnsignedMedium(offset));
+                if (value.get() != innerBuffer.getUnsignedMedium(0))
+                value.put(innerBuffer.getUnsignedMedium(0));
         }
         
         @Override
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUShortFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUShortFactory.java
index 6257497..6bef3c1 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUShortFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUShortFactory.java
@@ -96,8 +96,8 @@ public class DBUShortFactory extends DBBaseFactory {
         
         private DBUShortRecord(String recordName,PVStructure pvStructure) {
             super(recordName, pvStructure);
-            value = (PVUShort) pvStructure.getShortField("value");
-            write_value = (PVUShort) pvStructure.getShortField("write_value");
+            value = (PVUShort) pvStructure.getSubField("value");
+            write_value = (PVUShort) pvStructure.getSubField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");
         }    
 
@@ -108,13 +108,11 @@ public class DBUShortFactory extends DBBaseFactory {
         public void process()
         {
             if (null != plcItem) {               
-                if (value.get() != write_value.get()) {
-                    if (write_enable.get()) {                          
-                        write_value.put(value.get());                          
 
-                        innerWriteBuffer.clear();                     
-                        innerWriteBuffer.writeShort(write_value.get());        
                 
-                        super.process();                      
-                    }
+                if (write_enable.get()) {                          
+                    write_value.put(value.get());                           
+                    innerWriteBuffer.clear();                     
+                    innerWriteBuffer.writeShort(write_value.get());            
             
+                    super.process();                      
                 }
             }              
         }  
@@ -122,7 +120,7 @@ public class DBUShortFactory extends DBBaseFactory {
         @Override
         public void atach(final PlcItem plcItem) {
             this.plcItem = plcItem;
-            offset = this.getPVStructure().getIntField("offset").get() * 
Short.BYTES;              
+            offset = this.getPVStructure().getIntField("offset").get();        
      
             innerBuffer = plcItem.getItemByteBuf().slice(offset, Short.BYTES);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
@@ -135,8 +133,8 @@ public class DBUShortFactory extends DBBaseFactory {
         @Override
         public void update() {
             if (null != plcItem)            
-                if (value.get() != innerBuffer.getUnsignedShort(offset))
-                        value.put( (short) 
innerBuffer.getUnsignedShort(offset));
+                if (value.get() != innerBuffer.getUnsignedShort(0))
+                        value.put((short) innerBuffer.getUnsignedShort(0));
         }
 
         @Override
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBCollectorImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBCollectorImpl.java
index 0e91048..d24fa33 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBCollectorImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBCollectorImpl.java
@@ -424,7 +424,6 @@ public class DBCollectorImpl implements DBCollector, 
PVListener {
                         arrFloats[i] = objValue;
                         i++;
                     }     
-                    //System.out.println("Tamaño i: " + i);
                     int capacity = ((PVFloatArray) value).getCapacity();
                     ((PVFloatArray) value).put(0,capacity,arrFloats,0);
                 }                                 
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBControlImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBControlImpl.java
index 2cf7ef3..24921d7 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBControlImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBControlImpl.java
@@ -48,7 +48,6 @@ public class DBControlImpl implements DBControl {
         Map<String, List<PVRecord>> byScanRate = pvRecords.stream()
         .collect(Collectors.groupingBy(record -> 
record.getPVStructure().getStringField("scan_rate").get()));        
         
-        //System.out.println("Keys: " + byScanRate.keySet());
         for (String key:byScanRate.keySet()){
             DBCollector collector = registerCollector(device,key);
             collector.attach(byScanRate.get(key));
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBPersistImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBPersistImpl.java
index c80de10..00e60cd 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBPersistImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBPersistImpl.java
@@ -209,18 +209,19 @@ public class DBPersistImpl implements EventHandler{
 
                     PVRecord pvRecord = 
recordFactory.create(rs.getString("PvName"));
                     
pvRecord.getPVStructure().getStringField("id").put(rs.getString("PvId"));
+                    
pvRecord.getPVStructure().getIntField("offset").put(Integer.parseInt(rs.getString("PvOffset")));
                     
pvRecord.getPVStructure().getStringField("descriptor").put(rs.getString("PvDescriptor"));
                    
                     
pvRecord.getPVStructure().getStringField("scan_time").put(rs.getString("pvScanTime"));
 
                     
pvRecord.getPVStructure().getBooleanField("scan_enable").put(Boolean.parseBoolean(rs.getString("PvScanEnable")));
-                    
pvRecord.getPVStructure().getBooleanField("write_enable").put(rs.getBoolean("PvWriteEnable"));
-                    
pvRecord.getPVStructure().getDoubleField("display.limitLow").put(rs.getDouble("PvDisplayLimitLow"));
-                    
pvRecord.getPVStructure().getDoubleField("display.limitHigh").put(rs.getDouble("PvDisplayLimitHigh"));
 
+                    
pvRecord.getPVStructure().getBooleanField("write_enable").put(Boolean.parseBoolean(rs.getString("PvWriteEnable")));
+                    
pvRecord.getPVStructure().getDoubleField("display.limitLow").put(Double.parseDouble(rs.getString("PvDisplayLimitLow")));
+                    
pvRecord.getPVStructure().getDoubleField("display.limitHigh").put(Double.parseDouble(rs.getString("PvDisplayLimitHigh")));
 
                     
pvRecord.getPVStructure().getStringField("display.description").put(rs.getString("PvDisplayDescription"));
  
                     
pvRecord.getPVStructure().getStringField("display.format").put(rs.getString("PvDisplayFormat"));
 
                     
pvRecord.getPVStructure().getStringField("display.units").put(rs.getString("PvDisplayUnits"));
 
-                    
pvRecord.getPVStructure().getDoubleField("control.limitLow").put(rs.getDouble("PvControlLimitLow"));
 
-                    
pvRecord.getPVStructure().getDoubleField("control.limitHigh").put(rs.getDouble("PvControlLimitHigh"));
 
-                    
pvRecord.getPVStructure().getDoubleField("control.minStep").put(rs.getDouble("PvControlMinStep"));
   
+                    
pvRecord.getPVStructure().getDoubleField("control.limitLow").put(Double.parseDouble(rs.getString("PvControlLimitLow")));
 
+                    
pvRecord.getPVStructure().getDoubleField("control.limitHigh").put(Double.parseDouble(rs.getString("PvControlLimitHigh")));
 
+                    
pvRecord.getPVStructure().getDoubleField("control.minStep").put(Double.parseDouble(rs.getString("PvControlMinStep")));
   
 
                     //Talk to PLC4X
 
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBWriterHandlerImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBWriterHandlerImpl.java
index 4bc4ce1..4e43927 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBWriterHandlerImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBWriterHandlerImpl.java
@@ -65,8 +65,7 @@ public class DBWriterHandlerImpl implements DBWriterHandler {
             structure = element.getPVStructure();
             changedBitSet = element.getChangedBitSet();
             overrunBitSet = element.getOverrunBitSet();
-            System.out.println("La estructura \r\n:" + structure.toString());
-            
+                      
             if ((recordMonitors.containsKey(monitor)) && 
                  structure.getBooleanField("write_enable").get()) {
                 if (changedBitSet.get(1) && 
@@ -78,7 +77,6 @@ public class DBWriterHandlerImpl implements DBWriterHandler {
                     
LOGGER.info(ByteBufUtil.prettyHexDump(dbRecord.getWriteBuffer().get()));
                     
                     if (optPlcItem.isPresent()) {
-                        System.out.println("Aqui el Offset: " +  
dbRecord.getOffset());
                         
optPlcItem.get().itemWrite(dbRecord.getWriteBuffer().get(), 
dbRecord.getOffset());  
                     }
 
@@ -111,7 +109,6 @@ public class DBWriterHandlerImpl implements DBWriterHandler 
{
     @Override
     public void putDBRecord(DBRecord dbRecord) {
         LOGGER.info("Monitor with fields =  {}", 
dbRecord.getFieldsToMonitor());
-        System.out.println(">>>> el OFFSET aqui: " + dbRecord.getOffset());
         PVStructure request = 
createRequest.createRequest(dbRecord.getFieldsToMonitor());
         Monitor monitor = MonitorFactory.create(dbRecord, this, request);
         if (null != monitor) {
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/resources/OSGI-INF/blueprint/db-service.xml
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/resources/OSGI-INF/blueprint/db-service.xml
index d8c91c8..ef12847 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/resources/OSGI-INF/blueprint/db-service.xml
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/resources/OSGI-INF/blueprint/db-service.xml
@@ -214,7 +214,7 @@
              ref="beanDBUIntFactory" 
              interface="org.apache.plc4x.merlot.db.api.DBRecordFactory">
         <service-properties>
-            <entry key="db.record.type" value="UINT"/>            
+            <entry key="db.record.type" value="uint"/>            
         </service-properties>
     </service>
     
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.mb/src/main/java/org/apache/plc4x/merlot/drv/mb/impl/ModbusPlcTagFunctionImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.mb/src/main/java/org/apache/plc4x/merlot/drv/mb/impl/ModbusPlcTagFunctionImpl.java
index 29fa6b1..427825a 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.mb/src/main/java/org/apache/plc4x/merlot/drv/mb/impl/ModbusPlcTagFunctionImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.mb/src/main/java/org/apache/plc4x/merlot/drv/mb/impl/ModbusPlcTagFunctionImpl.java
@@ -63,15 +63,15 @@ public class ModbusPlcTagFunctionImpl implements 
PlcTagFunction {
     public ImmutablePair<PlcTag, Object[]> getPlcTag(PlcTag plcTag, ByteBuf 
byteBuf, int offset) {
         LOGGER.info("PlcTag class {} and type {} ", plcTag.getClass(),  
plcTag.getPlcValueType());
         ModbusTag mbPlcTag = null;
+        Object[] objValues = null;
         short tempValue = 0;
         if (plcTag instanceof ModbusTag){
-            final ModbusTag mbTag = (ModbusTag) plcTag;
-            LOGGER.info("Processing ModbusTag: {}", mbTag.toString());
-            Object[] objValues = new Object[byteBuf.capacity() / 2];
-            LOGGER.info("Borrar: pasa a verificar el tipo...");            
+            final ModbusTag mbTag = (ModbusTag) plcTag;         
             switch (mbTag.getPlcValueType()) { 
-                case BOOL:           
+                case BOOL:   
+                        objValues = new Object[byteBuf.capacity()];            
        
                         byteOffset = mbTag.getAddress() + offset;
+                     
                         if (mbTag instanceof ModbusTagCoil) {
                             mbPlcTag = new ModbusTagCoil(
                                             byteOffset,
@@ -79,34 +79,28 @@ public class ModbusPlcTagFunctionImpl implements 
PlcTagFunction {
                                             mbTag.getDataType(),
                                             config);                           
     
                         } else if (mbTag instanceof ModbusTagDiscreteInput) {
-                            mbPlcTag = new ModbusTagCoil(
-                                            byteOffset,
-                                            byteBuf.capacity(),
-                                            mbTag.getDataType(),
-                                            config);                           
  
+                            LOGGER.info("DiscreteInput does not allow 
writing.");
+                            return null;
                         }
                         byteBuf.resetReaderIndex();
                         for (int i=0; i < byteBuf.capacity(); i++) {
                             objValues[i] = byteBuf.readBoolean();
-                        }                        
+                        }   
+
                     break;
                 case UINT:  
-                    System.out.println("Paso por aqui 1");
+                        objValues = new Object[byteBuf.capacity() / 2];        
               
                         if (byteBuf.capacity() == 1) {
                             LOGGER.info("In MODBUS writing 'byte' types is 
rejected.");
                             return null;
-                        }
-                        System.out.println("Direccion del Tag: " + 
mbTag.getAddress() );
-                        System.out.println("Valor Offset: " + offset );        
                
+                        }                     
                         byteOffset = mbTag.getAddress() + offset / 2;          
          
-                        if (mbTag instanceof ModbusTagHoldingRegister) {
-                            System.out.println("Paso por aqui 2");             
               
+                        if (mbTag instanceof ModbusTagHoldingRegister) {       
                   
                             mbPlcTag = new ModbusTagHoldingRegister(
                                             byteOffset,
                                             byteBuf.capacity() / 2,
                                             ModbusDataType.INT,
-                                            config);         
-                            System.out.println("Paso por aqui 2.9: " + 
mbPlcTag.toString());                          
+                                            config);                           
     
                         } else if (mbTag instanceof ModbusTagInputRegister){
                             mbPlcTag = new ModbusTagInputRegister(
                                             byteOffset,
@@ -119,14 +113,13 @@ public class ModbusPlcTagFunctionImpl implements 
PlcTagFunction {
                                             byteBuf.capacity() / 2,
                                             ModbusDataType.INT,
                                             config);                           
 
-                        }
-                        System.out.println("Paso por aqui 3");                 
       
+                        }                       
                         byteBuf.resetReaderIndex();
                         for (int i=0; i < byteBuf.capacity() / 2; i++){
                             tempValue = (short) (byteBuf.readShort());         
                   
                             objValues[i] = tempValue;
                         }
-                        System.out.println("Paso por aqui 4");                 
       
+                        
                     break;
                 default:;
                 
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
index 6c300db..fbde802 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
@@ -97,7 +97,7 @@ public class S7PlcTagFunctionImpl implements PlcTagFunction {
                             objValues[i] = byteBuf.readBoolean();
                         }                        
                     break;
-                case BYTE:  
+                case UINT:  
                         byteOffset = s7Tag.getByteOffset() + offset * 
byteBuf.capacity();                    
                         switch (s7Tag.getMemoryArea()){
                             case DATA_BLOCKS:;
@@ -166,14 +166,16 @@ public class S7PlcTagFunctionImpl implements 
PlcTagFunction {
                             objValues[i] = byteBuf.readBoolean();
                         }                        
                     break;
-                case BYTE:  
-                        byteOffset = s7Tag.getByteOffset() + offset * 
byteBuf.capacity();                    
+                case USINT:  
+                        byteOffset = s7Tag.getByteOffset() + offset;           
         
+                        System.out.println("byteOffset =  " + byteOffset);
                         s7PlcTag = new S7Tag(s7Tag.getDataType(),
                                             s7Tag.getMemoryArea(),
                                             s7Tag.getBlockNumber(),
                                             byteOffset,
                                             (byte) 0,
                                             byteBuf.capacity());
+                        System.out.println("s7Tag: " + s7PlcTag.toString());
                         byteBuf.resetReaderIndex();
                         for (int i=0; i < byteBuf.capacity(); i++){
                             tempValue = (short) (byteBuf.readByte() & 0xFF);   
                         
@@ -193,8 +195,10 @@ public class S7PlcTagFunctionImpl implements 
PlcTagFunction {
     @Override
     public ImmutablePair<PlcTag, Object[]> getPlcTag(PlcTag plcTag, ByteBuf 
byteBuf, int offset) {
         if (!PLC4X_TAG) {
+            System.out.println("Como String...");
             return getStringPlcTag(plcTag, byteBuf, offset);
         } else {
+            System.out.println("Como PlcTag...");
             return getPlc4xPlcTag(plcTag, byteBuf, offset);            
         }
     }    
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.features/src/main/feature/feature.xml
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.features/src/main/feature/feature.xml
index ecd42fb..614823e 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.features/src/main/feature/feature.xml
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.features/src/main/feature/feature.xml
@@ -91,7 +91,8 @@
         <feature>grpc</feature>
 
         <feature>plc4x-epics-core</feature>        
-        <feature>plc4x-scheduler</feature>   
+        <feature>plc4x-scheduler</feature> 
+        <feature>plc4x-drivers</feature>             
               
         <bundle 
start-level="32">mvn:org.apache.plc4x.merlot.api/org.apache.plc4x.merlot.api/${project.version}</bundle>
               
         <bundle 
start-level="50">mvn:org.apache.plc4x.merlot.das/org.apache.plc4x.merlot.das/${project.version}</bundle>
@@ -103,7 +104,7 @@
         <bundle 
start-level="60">mvn:org.apache.plc4x.merlot.db/org.apache.plc4x.merlot.db/${project.version}</bundle>
         
         <!-- <bundle 
start-level="40">mvn:org.apache.plc4x.dummy/org.apache.plc4x.dummy/${project.version}</bundle>
   -->                     
      
-        <feature>plc4x-drivers</feature>   
+
         
     </feature> 
    
@@ -116,24 +117,24 @@
     </feature>
    
     <feature name="plc4x-drivers" version="${asm.version}">
-        <bundle 
start-level="70">mvn:org.apache.plc4x/plc4j-transport-serial/${project.version}</bundle>
 
-        <bundle 
start-level="70">mvn:org.apache.plc4x/plc4j-transport-tcp/${project.version}</bundle>
         
-        <bundle 
start-level="70">mvn:org.apache.plc4x/plc4j-transport-pcap-replay/${project.version}</bundle>
 
-        <bundle 
start-level="70">mvn:org.apache.plc4x/plc4j-transport-pcap-shared/${project.version}</bundle>
  
-        <bundle 
start-level="70">mvn:org.apache.plc4x/plc4j-utils-pcap-replay/${project.version}</bundle>
          
-        <bundle 
start-level="70">mvn:org.apache.plc4x/plc4j-utils-pcap-shared/${project.version}</bundle>
                 
-        <bundle 
start-level="70">mvn:org.apache.plc4x/plc4j-transport-raw-socket/${project.version}</bundle>
         
-        <bundle 
start-level="70">mvn:org.apache.plc4x/plc4j-utils-raw-sockets/${project.version}</bundle>
  
+        <bundle 
start-level="40">mvn:org.apache.plc4x/plc4j-transport-serial/${project.version}</bundle>
 
+        <bundle 
start-level="40">mvn:org.apache.plc4x/plc4j-transport-tcp/${project.version}</bundle>
         
+        <bundle 
start-level="40">mvn:org.apache.plc4x/plc4j-transport-pcap-replay/${project.version}</bundle>
 
+        <bundle 
start-level="40">mvn:org.apache.plc4x/plc4j-transport-pcap-shared/${project.version}</bundle>
  
+        <bundle 
start-level="40">mvn:org.apache.plc4x/plc4j-utils-pcap-replay/${project.version}</bundle>
          
+        <bundle 
start-level="40">mvn:org.apache.plc4x/plc4j-utils-pcap-shared/${project.version}</bundle>
                 
+        <bundle 
start-level="40">mvn:org.apache.plc4x/plc4j-transport-raw-socket/${project.version}</bundle>
         
+        <bundle 
start-level="40">mvn:org.apache.plc4x/plc4j-utils-raw-sockets/${project.version}</bundle>
  
         
         <!-- Plc4x - Default driver implementation -->        
-        <bundle 
start-level="72">mvn:org.apache.plc4x/plc4j-driver-simulated/${project.version}</bundle>
-        <bundle 
start-level="32">mvn:org.apache.plc4x/plc4j-driver-modbus/${project.version}</bundle>
 
-        <bundle 
start-level="32">mvn:org.apache.plc4x/plc4j-driver-s7/${project.version}</bundle>
         
+        <bundle 
start-level="80">mvn:org.apache.plc4x/plc4j-driver-simulated/${project.version}</bundle>
+        <bundle 
start-level="80">mvn:org.apache.plc4x/plc4j-driver-modbus/${project.version}</bundle>
 
+        <bundle 
start-level="80">mvn:org.apache.plc4x/plc4j-driver-s7/${project.version}</bundle>
         
         
         <!-- Plc4x - Support services for Plc4x driver implementation -->      
    
-        <bundle 
start-level="72">mvn:org.apache.plc4x.merlot.drv.simulated/org.apache.plc4x.merlot.drv.simulated/${project.version}</bundle>
-        <bundle 
start-level="32">mvn:org.apache.plc4x.merlot.drv.mb/org.apache.plc4x.merlot.drv.mb/${project.version}</bundle>
-        <bundle 
start-level="32">mvn:org.apache.plc4x.merlot.drv.s7/org.apache.plc4x.merlot.drv.s7/${project.version}</bundle>
        
+        <bundle 
start-level="90">mvn:org.apache.plc4x.merlot.drv.simulated/org.apache.plc4x.merlot.drv.simulated/${project.version}</bundle>
+        <bundle 
start-level="90">mvn:org.apache.plc4x.merlot.drv.mb/org.apache.plc4x.merlot.drv.mb/${project.version}</bundle>
+        <bundle 
start-level="90">mvn:org.apache.plc4x.merlot.drv.s7/org.apache.plc4x.merlot.drv.s7/${project.version}</bundle>
        
     </feature>   
    
     <!-- asm -->
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.modbus.svr/src/main/java/org/apache/plc4x/merlot/modbus/svr/core/ModbusServerADUHandler.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.modbus.svr/src/main/java/org/apache/plc4x/merlot/modbus/svr/core/ModbusServerADUHandler.java
index a4aa787..6369a8a 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.modbus.svr/src/main/java/org/apache/plc4x/merlot/modbus/svr/core/ModbusServerADUHandler.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.modbus.svr/src/main/java/org/apache/plc4x/merlot/modbus/svr/core/ModbusServerADUHandler.java
@@ -341,10 +341,8 @@ public class ModbusServerADUHandler extends 
SimpleChannelInboundHandler<ModbusAD
         Coils = myMda.getModbusDevicesArray()[rxADU.getUnitID()].getCoils();
        
         if ((Value == (short) 0x0000) || (Value == (short) 0xFF00)) {
-            System.out.println("Es cero o uno...");
             if (Starting_address <= Coils.capacity() * 8) {
                 try {
-                    System.out.println("N�mero de bobinas aceptada!.");
                     myMda.getModbusDevicesArray()[rxADU.getUnitID()].
                             setCoil(Starting_address, ((Value == (short) 
0xFF00) ? false : true));
                     txADU.getData().writeShort(Starting_address);

Reply via email to