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

glcj 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 2f998814 fix: Moved DBWriterHandler to the API and removed the call to 
the DBRecord superclass. (#742)
2f998814 is described below

commit 2f998814350e56c4805983caa462168f4891a833
Author: Lerb123 <[email protected]>
AuthorDate: Wed Jul 8 22:45:27 2026 -0400

    fix: Moved DBWriterHandler to the API and removed the call to the DBRecord 
superclass. (#742)
    
    feat: New method to find the write handler in PlcGeneralFunction, used in 
the class that creates DBRecords
---
 .../core/command/MerlotLogRecorderCommand.java     |  22 ++
 .../apache/plc4x/merlot}/api/DBWriterHandler.java  |   6 +-
 .../plc4x/merlot/api/PlcGeneralFunction.java       |   2 +-
 .../merlot/api/impl/PlcGeneralFunctionImpl.java    |  22 ++
 .../merlot/db/core/DBRecordsManagedService.java    |   2 +-
 .../apache/plc4x/merlot/db/impl/DBPersistImpl.java |  63 ++--
 .../plc4x/merlot/db/impl/DBWriterHandlerImpl.java  |   7 +-
 .../resources/OSGI-INF/blueprint/db-service.xml    |   4 +-
 .../plc4x/merlot/drv/s7/core/S7DBAiFactory.java    |   2 +-
 .../plc4x/merlot/drv/s7/core/S7DBAoFactory.java    |   2 +-
 .../plc4x/merlot/drv/s7/core/S7DBDiFactory.java    |   2 +-
 .../plc4x/merlot/drv/s7/core/S7DBDoFactory.java    |   2 +-
 .../plc4x/merlot/drv/s7/core/S7DBMotorFactory.java | 358 ++++++++++-----------
 .../merlot/drv/s7/core/S7DBValveAnalogFactory.java |   2 +-
 .../drv/s7/core/S7DBValveSolenoidFactory.java      |   2 +-
 .../merlot/drv/s7/impl/S7DBWriterHandlerImpl.java  |  16 +-
 .../OSGI-INF/blueprint/s7-drv-service.xml          |   4 +-
 17 files changed, 285 insertions(+), 233 deletions(-)

diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.logrecorder/src/main/java/org/apache/plc4x/merlot/logrecorder/core/command/MerlotLogRecorderCommand.java
 
b/plc4j/tools/merlot/org.apache.plc4x.logrecorder/src/main/java/org/apache/plc4x/merlot/logrecorder/core/command/MerlotLogRecorderCommand.java
new file mode 100644
index 00000000..a208af27
--- /dev/null
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.logrecorder/src/main/java/org/apache/plc4x/merlot/logrecorder/core/command/MerlotLogRecorderCommand.java
@@ -0,0 +1,22 @@
+/*
+ * 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.merlot.logrecorder.core.command;
+
+
+public class MerlotLogRecorderCommand{
+    //TODO: Class for viewing log entries stored in the database using the 
Tamboui shell
+}
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/api/DBWriterHandler.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/DBWriterHandler.java
similarity index 86%
rename from 
plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/api/DBWriterHandler.java
rename to 
plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/DBWriterHandler.java
index 0cdb7d32..9f74c54b 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/api/DBWriterHandler.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/DBWriterHandler.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.plc4x.merlot.db.api;
+package org.apache.plc4x.merlot.api;
 
 import org.epics.pvdata.monitor.MonitorRequester;
 
@@ -24,8 +24,8 @@ public interface DBWriterHandler extends MonitorRequester{
     
     
     
-    public void putDBRecord(DBRecord dbRecord);
+    public void putDBRecord(Object dbRecord);
     
-    public void removeDBRecord(DBRecord dbRecord);    
+    public void removeDBRecord(Object dbRecord);    
     
 }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/PlcGeneralFunction.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/PlcGeneralFunction.java
index f8d60d41..b0b6b0cb 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/PlcGeneralFunction.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/PlcGeneralFunction.java
@@ -319,5 +319,5 @@ public interface PlcGeneralFunction extends PlcFunction {
     */
     public void write(UUID uuid, String tag, String value);    
     
-    
+    public Optional<DBWriterHandler> getWriterHandler(String uid);
 }
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 ee992e2c..a6ff51a2 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
@@ -30,6 +30,7 @@ import java.util.UUID;
 import org.apache.plc4x.java.api.PlcDriver;
 import org.apache.plc4x.java.api.types.PlcValueType;
 import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.merlot.api.DBWriterHandler;
 import org.apache.plc4x.merlot.api.PlcDevice;
 import org.apache.plc4x.merlot.api.PlcDeviceFactory;
 import org.apache.plc4x.merlot.api.PlcFunction;
@@ -91,6 +92,9 @@ public class PlcGeneralFunctionImpl implements 
PlcGeneralFunction  {
        
     private static String FILTER_ITEM_UID =  "(&(" + Constants.OBJECTCLASS + 
"=" + PlcItem.class.getName() + ")" +
                         "(" + PlcItem.ITEM_UID + "=*))";  
+    
+    private static String FILTER_WRITE_HANDLER = "(&(" + Constants.OBJECTCLASS 
+ "=" + DBWriterHandler.class.getName() + ")"
+            + "(db.record.writehandler.category=*))";
    
         
     private static final String[] operations = {"getPlcDrivers",
@@ -1017,5 +1021,23 @@ public class PlcGeneralFunctionImpl implements 
PlcGeneralFunction  {
     public void write(UUID uuid, String tag, String value) {
         //
     }    
+    
+      @Override
+    public Optional<DBWriterHandler> getWriterHandler(String uid) {
+        try {
+            String strFilter = FILTER_WRITE_HANDLER.replace("*", uid);
+            ServiceReference[] references = bc.getServiceReferences((String) 
null, strFilter);
+            if (references != null) {
+                return Optional.of((DBWriterHandler) 
bc.getService(references[0]));
+            } else {
+                LOGGER.info("DBWriterHandler type: '" + uid + "' don't 
exist.");
+                return null;
+            }
+        } catch (Exception ex) {
+            LOGGER.error("getWriterHandler: " + ex.toString());
+        }
+        return Optional.empty();
+        
+    }
   
 }
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 9f3ab63d..b1877e3b 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
@@ -42,7 +42,7 @@ import org.apache.plc4x.merlot.api.PlcGroup;
 import org.apache.plc4x.merlot.api.PlcItem;
 import org.apache.plc4x.merlot.api.PlcItemListener;
 import org.apache.plc4x.merlot.db.api.DBRecord;
-import org.apache.plc4x.merlot.db.api.DBWriterHandler;
+import org.apache.plc4x.merlot.api.DBWriterHandler;
 import org.epics.pvdata.pv.PVBoolean;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdatabase.PVDatabase;
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 46f70989..34579e14 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
@@ -16,7 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 package org.apache.plc4x.merlot.db.impl;
 
 import java.sql.Connection;
@@ -27,13 +26,14 @@ import java.util.Optional;
 import java.util.Properties;
 import java.util.UUID;
 import javax.sql.DataSource;
+import org.apache.plc4x.merlot.api.DBWriterHandler;
 import org.apache.plc4x.merlot.api.PlcGeneralFunction;
 import org.apache.plc4x.merlot.api.PlcItem;
 import org.apache.plc4x.merlot.api.PlcItemListener;
 import org.apache.plc4x.merlot.api.PlcSecureBoot;
 import org.apache.plc4x.merlot.db.api.DBRecord;
 import org.apache.plc4x.merlot.db.api.DBRecordFactory;
-import org.apache.plc4x.merlot.db.api.DBWriterHandler;
+import org.apache.plc4x.merlot.api.PlcDevice;
 import org.epics.pvdata.pv.PVBoolean;
 import org.epics.pvdata.pv.PVDouble;
 import org.epics.pvdata.pv.PVInt;
@@ -49,12 +49,13 @@ import org.osgi.service.event.EventHandler;
 import org.osgi.service.jdbc.DataSourceFactory;
 import org.slf4j.LoggerFactory;
 
-public class DBPersistImpl implements EventHandler{
+public class DBPersistImpl implements EventHandler {
+
     private static final org.slf4j.Logger LOGGER = 
LoggerFactory.getLogger(DBPersistImpl.class);
     private static final String DB_URL = "jdbc:sqlite:data/boot.db";
 
-    private static final String SQL_CREATE_TABLE_PVRECORDS =
-        "CREATE TABLE IF NOT EXISTS PvRecords("
+    private static final String SQL_CREATE_TABLE_PVRECORDS
+            = "CREATE TABLE IF NOT EXISTS PvRecords("
             + "PvUuId TEXT NOT NULL PRIMARY KEY,"
             + "PvName TEXT,"
             + "PvType TEXT,"
@@ -74,11 +75,11 @@ public class DBPersistImpl implements EventHandler{
             + "PvControlMinStep TEXT,"
             + "Md5 TEXT)";
 
-    private static final String SQL_SELECT_PVRECORDS =
-        "SELECT * FROM PvRecords";
+    private static final String SQL_SELECT_PVRECORDS
+            = "SELECT * FROM PvRecords";
 
-    private static final String SQL_INSERT_PVRECORDS  =
-        "INSERT INTO PvRecords(PvUuId, PvName, PvType, PvId, PvOffset, 
PvDescriptor, PvScanTime, pvScanEnable,"
+    private static final String SQL_INSERT_PVRECORDS
+            = "INSERT INTO PvRecords(PvUuId, PvName, PvType, PvId, PvOffset, 
PvDescriptor, PvScanTime, pvScanEnable,"
             + "PvWriteEnable, PvDisplayLimitLow, PvDisplayLimitHigh, 
PvDisplayDescription, PvDisplayFormat,"
             + "PvDisplayUnits, PvControlLimitLow, PvControlLimitHigh, 
PvControlMinStep, Md5)"
             + "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) "
@@ -106,18 +107,18 @@ public class DBPersistImpl implements EventHandler{
     private final BundleContext bc;
     private final PVDatabase master;
     private final PlcGeneralFunction plcGeneralFunction;
-    private final DBWriterHandler writerHandler;
+//    private final DBWriterHandler writerHandler;
     DataSourceFactory dsFactory = null;
     Connection dbConnection = null;
 
     public DBPersistImpl(BundleContext bc,
-                         PVDatabase master,
-                         PlcGeneralFunction plcGeneralFunction,
-                         DBWriterHandler writerHandler) {
+            PVDatabase master,
+            PlcGeneralFunction plcGeneralFunction
+    ) {//DBWriterHandler writerHandler
         this.bc = bc;
         this.master = master;
         this.plcGeneralFunction = plcGeneralFunction;
-        this.writerHandler = writerHandler;
+//        this.writerHandler = writerHandler;
     }
 
     public void init() {
@@ -134,8 +135,8 @@ public class DBPersistImpl implements EventHandler{
                     LOGGER.info("Boot driver name is {}.", 
databaseMetaData.getDriverName());
                     createTables();
                     //Catalog,Schema, Table pattern,types of tables
-                    try(ResultSet resultSet = databaseMetaData.getTables(null, 
null, null, new String[]{"TABLE"})){
-                        while(resultSet.next()) {
+                    try (ResultSet resultSet = 
databaseMetaData.getTables(null, null, null, new String[]{"TABLE"})) {
+                        while (resultSet.next()) {
                             String tableName = 
resultSet.getString("TABLE_NAME");
                             String remarks = resultSet.getString("REMARKS");
                         }
@@ -149,12 +150,10 @@ public class DBPersistImpl implements EventHandler{
         }
     }
 
-
     public void destroy() {
         LOGGER.info("DESTROY");
     }
 
-
     public void bindDataSourceFactory(DataSourceFactory dsFactory) {
         this.dsFactory = dsFactory;
         init();
@@ -165,13 +164,13 @@ public class DBPersistImpl implements EventHandler{
         if (event.getTopic().equals(PlcSecureBoot.EVENT_STORE)) {
             try {
                 store();
-            } catch (Exception ex){
+            } catch (Exception ex) {
                 LOGGER.error(ex.getMessage());
             }
         } else if (event.getTopic().equals(PlcSecureBoot.EVENT_RESTORE)) {
             try {
                 restore();
-            } catch (Exception ex){
+            } catch (Exception ex) {
                 LOGGER.error(ex.getMessage());
             }
         }
@@ -185,7 +184,7 @@ public class DBPersistImpl implements EventHandler{
 
     public void store() throws SQLException {
         String[] pvNames = master.getRecordNames();
-        for (String pvName:pvNames){
+        for (String pvName : pvNames) {
             final PVRecord pvRecord = master.findRecord(pvName);
             insertPvRecord(pvRecord);
         }
@@ -200,7 +199,7 @@ public class DBPersistImpl implements EventHandler{
 
             while (rs.next()) {
 
-                filter = "(db.record.type="+rs.getString("pvType")+")";
+                filter = "(db.record.type=" + rs.getString("pvType") + ")";
 
                 ServiceReference[] refs = 
bc.getServiceReferences(DBRecordFactory.class.getName(), filter);
 
@@ -225,14 +224,21 @@ public class DBPersistImpl implements EventHandler{
                     
pvRecord.getPVStructure().getDoubleField("control.minStep").put(Double.parseDouble(rs.getString("PvControlMinStep")));
 
                     //Talk to PLC4X
-
                     Optional<PlcItem> plcItem = 
plcGeneralFunction.getPlcItem(rs.getString("PvId"));
 
                     if (plcItem.isPresent()) {
                         if (null == 
master.findRecord(pvRecord.getRecordName())) {
                             plcItem.get().addItemListener((PlcItemListener) 
pvRecord);
                             master.addRecord(pvRecord);
-                            writerHandler.putDBRecord((DBRecord) pvRecord);
+
+                            //Each record is registered as a service under the 
name of the writer, which must be used for that record.
+                            String dbRecordDriver = (String) 
refs[0].getProperty("db.record.driver");
+
+                            Optional<DBWriterHandler> writer = 
plcGeneralFunction.getWriterHandler(dbRecordDriver);
+                            if (writer.isPresent()) {
+                                writer.get().putDBRecord((DBRecord) pvRecord);
+                            }
+
                         } else {
                             LOGGER.info("DBRecord [?] already exist.", 
rs.getString("PvId"));
                         }
@@ -245,11 +251,13 @@ public class DBPersistImpl implements EventHandler{
         }
     }
 
-    private void insertPvRecord(PVRecord pvRecord) throws SQLException{
+    private void insertPvRecord(PVRecord pvRecord) throws SQLException {
         if (null != dbConnection) {
             var query = dbConnection.prepareStatement(SQL_INSERT_PVRECORDS);
 
-            if (pvRecord.getRecordName().contains("_")) return;
+            if (pvRecord.getRecordName().contains("_")) {
+                return;
+            }
 
             PVScalar value = (PVScalar) 
pvRecord.getPVStructure().getSubField("value");
 
@@ -276,7 +284,4 @@ public class DBPersistImpl implements EventHandler{
         }
     }
 
-
-
-
 }
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 7466d7fb..b74c684e 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
@@ -28,7 +28,7 @@ import java.util.Optional;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.plc4x.merlot.api.PlcItem;
 import org.apache.plc4x.merlot.db.api.DBRecord;
-import org.apache.plc4x.merlot.db.api.DBWriterHandler;
+import org.apache.plc4x.merlot.api.DBWriterHandler;
 import org.epics.pvdata.copy.CreateRequest;
 import org.epics.pvdata.misc.BitSet;
 import org.epics.pvdata.monitor.Monitor;
@@ -227,7 +227,8 @@ public class DBWriterHandlerImpl implements DBWriterHandler 
{
     }
 
     @Override
-    public void putDBRecord(DBRecord dbRecord) {
+    public void putDBRecord(Object db) {
+        DBRecord dbRecord = (DBRecord) db;
         LOGGER.info("Monitor with fields =  {}", 
dbRecord.getFieldsToMonitor());
         PVStructure request = 
createRequest.createRequest(dbRecord.getFieldsToMonitor());
         Monitor monitor = MonitorFactory.create(dbRecord, this, request);
@@ -240,7 +241,7 @@ public class DBWriterHandlerImpl implements DBWriterHandler 
{
     }
 
     @Override
-    public void removeDBRecord(DBRecord dbRecord) {
+    public void removeDBRecord(Object db) {
         throw new UnsupportedOperationException("Not supported yet.");
     }
     
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 2df4e067..ba3b7062 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
@@ -92,7 +92,7 @@
         <argument ref="blueprintBundleContext"/>        
         <argument ref="DBBean"/>  
         <argument ref="refPlcGeneralFunction"/> 
-        <argument ref="DBWriterHandlerImpl"/>                       
+        <!--<argument ref="DBWriterHandlerImpl"/>-->                       
     </bean>   
     
     <reference id="servDataSourceFactory"
@@ -254,7 +254,7 @@
              ref="DBChannelProvider" 
              interface="org.epics.pvaccess.client.ChannelProvider"/>
     
-    <service ref="DBWriterHandlerImpl" 
interface="org.apache.plc4x.merlot.db.api.DBWriterHandler">    
+    <service ref="DBWriterHandlerImpl" 
interface="org.apache.plc4x.merlot.api.DBWriterHandler">    
         <service-properties>
             <entry key="db.record.writehandler.category"  value="gen"/>        
   
         </service-properties>         
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiFactory.java
index 2d4e4d4f..962813c2 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiFactory.java
@@ -219,7 +219,7 @@ public class S7DBAiFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                                      
       
-                    super.process();                      
+//                    super.process();                      
                 }
             }              
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAoFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAoFactory.java
index af0db1a6..ec7b3f3f 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAoFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAoFactory.java
@@ -191,7 +191,7 @@ public class S7DBAoFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    super.process();                      
+//                    super.process();                      
                 }
             }               
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDiFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDiFactory.java
index cde102a7..aca74ecb 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDiFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDiFactory.java
@@ -138,7 +138,7 @@ public class S7DBDiFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                                      
      
-                    super.process();                      
+//                    super.process();                      
                 }
             }               
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDoFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDoFactory.java
index c5ae54fe..2813d47a 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDoFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDoFactory.java
@@ -138,7 +138,7 @@ public class S7DBDoFactory extends DBBaseFactory {
                     if (bPB_Off.get() != out_bPB_Off.get()) {
                         out_bPB_Off.put(bPB_Off.get());
                     }
-                    super.process();
+//                    super.process();
                 }
             }
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBMotorFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBMotorFactory.java
index d9cf26ab..c4a549bc 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBMotorFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBMotorFactory.java
@@ -39,98 +39,93 @@ import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
 
-
 public class S7DBMotorFactory extends DBBaseFactory {
-    
+
     private static FieldCreate fieldCreate = FieldFactory.getFieldCreate();
-       
+
     @Override
     public DBRecord create(String recordName) {
         NTScalarBuilder ntScalarBuilder = NTScalar.createBuilder();
         FieldBuilder fb = fieldCreate.createFieldBuilder();
-        
+
         Field fCmd = fb.setId("cmd").
                 add("iMode", fieldCreate.createScalar(ScalarType.pvShort)).
-                add("iErrorCode", 
fieldCreate.createScalar(ScalarType.pvShort)).                
-                add("iStatus", fieldCreate.createScalar(ScalarType.pvShort)).  
                
-                add("bPB_ResetError", 
fieldCreate.createScalar(ScalarType.pvBoolean)).  
-                add("bPB_Forward", 
fieldCreate.createScalar(ScalarType.pvBoolean)). 
-                add("bPB_Reverse", 
fieldCreate.createScalar(ScalarType.pvBoolean)).   
-                add("bPB_Stop", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                 
-                add("bPBEN_ResetError", 
fieldCreate.createScalar(ScalarType.pvBoolean)). 
-                add("bPBEN_Forward", 
fieldCreate.createScalar(ScalarType.pvBoolean)). 
-                add("bPBEN_Reverse", 
fieldCreate.createScalar(ScalarType.pvBoolean)). 
-                add("bPBEN_Stop", 
fieldCreate.createScalar(ScalarType.pvBoolean)).  
-                add("bForwardOn", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                
-                add("bReverseOn", 
fieldCreate.createScalar(ScalarType.pvBoolean)). 
-                add("bSignalForward", 
fieldCreate.createScalar(ScalarType.pvBoolean)). 
-                add("bSignalReverse", 
fieldCreate.createScalar(ScalarType.pvBoolean)). 
-                add("bError", fieldCreate.createScalar(ScalarType.pvBoolean)). 
+                add("iErrorCode", 
fieldCreate.createScalar(ScalarType.pvShort)).
+                add("iStatus", fieldCreate.createScalar(ScalarType.pvShort)).
+                add("bPB_ResetError", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bPB_Forward", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bPB_Reverse", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bPB_Stop", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bPBEN_ResetError", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bPBEN_Forward", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bPBEN_Reverse", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bPBEN_Stop", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bForwardOn", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bReverseOn", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bSignalForward", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bSignalReverse", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("bError", fieldCreate.createScalar(ScalarType.pvBoolean)).
                 add("bInterlock", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
                 createStructure();
-                
-        
-        Field fSts = fb.setId("sts").               
+
+        Field fSts = fb.setId("sts").
                 add("bMotorProtectorTripped", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
                 add("bLocalDisconnectOff", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
                 add("bClutchTripped", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
                 add("bNoSignalForward", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
                 add("bNoSignalReverse", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
-                add("bMotorNotStopped", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                
-                createStructure();   
-        
+                add("bMotorNotStopped", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                createStructure();
+
         Field fPar = fb.setId("par").
                 add("tInTimeout", fieldCreate.createScalar(ScalarType.pvInt)).
-                add("strTimeout", 
fieldCreate.createScalar(ScalarType.pvString)).                 
-                createStructure();        
-              
-        
+                add("strTimeout", 
fieldCreate.createScalar(ScalarType.pvString)).
+                createStructure();
+
         PVStructure pvStructure = ntScalarBuilder.
-            value(ScalarType.pvShort).
-            addDescriptor().           
-            add("id", fieldCreate.createScalar(ScalarType.pvString)).  
-            add("offset", fieldCreate.createScalar(ScalarType.pvString)).      
           
-            add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
-            add("scan_enable", fieldCreate.createScalar(ScalarType.pvBoolean)).
-            add("write_enable", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                  
-            add("cmd", fCmd).
-            add("sts", fSts). 
-            add("par", fPar).                 
-            addAlarm().
-            addTimeStamp().
-            addDisplay().
-            addControl(). 
-            createPVStructure();
-        
-        DBRecord dbRecord = new DBS7MotorRecord(recordName,pvStructure);      
-        
+                value(ScalarType.pvShort).
+                addDescriptor().
+                add("id", fieldCreate.createScalar(ScalarType.pvString)).
+                add("offset", fieldCreate.createScalar(ScalarType.pvString)).
+                add("scan_time", 
fieldCreate.createScalar(ScalarType.pvString)).
+                add("scan_enable", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("write_enable", 
fieldCreate.createScalar(ScalarType.pvBoolean)).
+                add("cmd", fCmd).
+                add("sts", fSts).
+                add("par", fPar).
+                addAlarm().
+                addTimeStamp().
+                addDisplay().
+                addControl().
+                createPVStructure();
+
+        DBRecord dbRecord = new DBS7MotorRecord(recordName, pvStructure);
+
         return dbRecord;
     }
 
-                                
-    class DBS7MotorRecord extends DBRecord implements PlcItemListener {   
-        
+    class DBS7MotorRecord extends DBRecord implements PlcItemListener {
+
         private int BUFFER_SIZE = 14;
         private static final String MONITOR_TF_FIELDS = "field(write_enable, "
                 + "cmd{iMode, bPB_ResetError, bPB_Forward, bPB_Reverse,"
                 + "bPB_Stop, bPBEN_ResetError, bPBEN_Forward, bPBEN_Reverse,"
                 + "bPBEN_Stop},"
                 + "par{tInTimeout})";
-        
-        
-        private PVShort value; 
+
+        private PVShort value;
         private PVShort write_value;
-        private PVBoolean write_enable; 
-        
+        private PVBoolean write_enable;
+
         //pvCmd
-        private PVShort iMode; 
-        private PVShort iErrorCode; 
-        private PVShort iStatus;   
-        private PVBoolean bPB_ResetError; 
-        private PVBoolean bPB_Forward; 
-        private PVBoolean bPB_Reverse; 
-        private PVBoolean bPB_Stop;     
-        private PVBoolean bPBEN_ResetError;         
+        private PVShort iMode;
+        private PVShort iErrorCode;
+        private PVShort iStatus;
+        private PVBoolean bPB_ResetError;
+        private PVBoolean bPB_Forward;
+        private PVBoolean bPB_Reverse;
+        private PVBoolean bPB_Stop;
+        private PVBoolean bPBEN_ResetError;
         private PVBoolean bPBEN_Forward;
         private PVBoolean bPBEN_Reverse;
         private PVBoolean bPBEN_Stop;
@@ -138,111 +133,115 @@ public class S7DBMotorFactory extends DBBaseFactory {
         private PVBoolean bReverseOn;
         private PVBoolean bSignalForward;
         private PVBoolean bSignalReverse;
-        private PVBoolean bError; 
-        private PVBoolean bInterlock; 
+        private PVBoolean bError;
+        private PVBoolean bInterlock;
 
         //pvSts        
-        private PVBoolean bMotorProtectorTripped;         
-        private PVBoolean bLocalDisconnectOff;  
-        private PVBoolean bClutchTripped;  
-        private PVBoolean bNoSignalForward;  
+        private PVBoolean bMotorProtectorTripped;
+        private PVBoolean bLocalDisconnectOff;
+        private PVBoolean bClutchTripped;
+        private PVBoolean bNoSignalForward;
         private PVBoolean bNoSignalReverse;
-        private PVBoolean bMotorNotStopped;  
-        
+        private PVBoolean bMotorNotStopped;
+
         //pvPar
-        private PVInt tInTimeout;         
-        private PVString strTimeout;             
-        
-        private Duration lastDuration;         
+        private PVInt tInTimeout;
+        private PVString strTimeout;
+
+        private Duration lastDuration;
         byte byTemp;
-    
-        public DBS7MotorRecord(String recordName,PVStructure pvStructure) {
+
+        public DBS7MotorRecord(String recordName, PVStructure pvStructure) {
             super(recordName, pvStructure);
-            
+
             bFirtsRun = true;
-                                 
+
             value = pvStructure.getShortField("value");
             write_enable = pvStructure.getBooleanField("write_enable");
             write_enable.put(false);
-            
+
             //Read command values
-            PVStructure pvCmd   = pvStructure.getStructureField("cmd");        
    
-            iMode               = pvCmd.getShortField("iMode");
-            iErrorCode          = pvCmd.getShortField("iErrorCode");           
 
-            iStatus             = pvCmd.getShortField("iStatus");          
-            bPB_ResetError      = pvCmd.getBooleanField("bPB_ResetError");     
       
-            bPB_Forward         = pvCmd.getBooleanField("bPB_Forward");
-            bPB_Reverse         = pvCmd.getBooleanField("bPB_Reverse");        
    
-            bPB_Stop            = pvCmd.getBooleanField("bPB_Stop");
-            bPBEN_ResetError    = pvCmd.getBooleanField("bPBEN_ResetError"); 
-            bPBEN_Forward       = pvCmd.getBooleanField("bPBEN_Forward"); 
-            bPBEN_Reverse       = pvCmd.getBooleanField("bPBEN_Reverse"); 
-            bPBEN_Stop          = pvCmd.getBooleanField("bPBEN_Stop");  
-            bForwardOn          = pvCmd.getBooleanField("bForwardOn");
-            bReverseOn          = pvCmd.getBooleanField("bReverseOn");  
-            bSignalForward      = pvCmd.getBooleanField("bSignalForward");
-            bSignalReverse      = pvCmd.getBooleanField("bSignalReverse"); 
-            bError              = pvCmd.getBooleanField("bError");
-            bInterlock          = pvCmd.getBooleanField("bInterlock"); 
-            
+            PVStructure pvCmd = pvStructure.getStructureField("cmd");
+            iMode = pvCmd.getShortField("iMode");
+            iErrorCode = pvCmd.getShortField("iErrorCode");
+            iStatus = pvCmd.getShortField("iStatus");
+            bPB_ResetError = pvCmd.getBooleanField("bPB_ResetError");
+            bPB_Forward = pvCmd.getBooleanField("bPB_Forward");
+            bPB_Reverse = pvCmd.getBooleanField("bPB_Reverse");
+            bPB_Stop = pvCmd.getBooleanField("bPB_Stop");
+            bPBEN_ResetError = pvCmd.getBooleanField("bPBEN_ResetError");
+            bPBEN_Forward = pvCmd.getBooleanField("bPBEN_Forward");
+            bPBEN_Reverse = pvCmd.getBooleanField("bPBEN_Reverse");
+            bPBEN_Stop = pvCmd.getBooleanField("bPBEN_Stop");
+            bForwardOn = pvCmd.getBooleanField("bForwardOn");
+            bReverseOn = pvCmd.getBooleanField("bReverseOn");
+            bSignalForward = pvCmd.getBooleanField("bSignalForward");
+            bSignalReverse = pvCmd.getBooleanField("bSignalReverse");
+            bError = pvCmd.getBooleanField("bError");
+            bInterlock = pvCmd.getBooleanField("bInterlock");
+
             //Read status values            
-            PVStructure pvSts   = pvStructure.getStructureField("sts");
+            PVStructure pvSts = pvStructure.getStructureField("sts");
             bMotorProtectorTripped = 
pvSts.getBooleanField("bMotorProtectorTripped");
-            bLocalDisconnectOff  = 
pvSts.getBooleanField("bLocalDisconnectOff"); 
-            bClutchTripped      = pvSts.getBooleanField("bClutchTripped");
-            bNoSignalForward    = pvSts.getBooleanField("bNoSignalForward");
-            bNoSignalReverse    = pvSts.getBooleanField("bNoSignalReverse");
-            bMotorNotStopped    = pvSts.getBooleanField("bMotorNotStopped"); 
-            
+            bLocalDisconnectOff = pvSts.getBooleanField("bLocalDisconnectOff");
+            bClutchTripped = pvSts.getBooleanField("bClutchTripped");
+            bNoSignalForward = pvSts.getBooleanField("bNoSignalForward");
+            bNoSignalReverse = pvSts.getBooleanField("bNoSignalReverse");
+            bMotorNotStopped = pvSts.getBooleanField("bMotorNotStopped");
+
             //Parameters values
-            PVStructure pvPar   = pvStructure.getStructureField("par");    
-            tInTimeout          = pvPar.getIntField("tInTimeout"); 
-            strTimeout          = pvPar.getStringField("strTimeout");          
   
-            
+            PVStructure pvPar = pvStructure.getStructureField("par");
+            tInTimeout = pvPar.getIntField("tInTimeout");
+            strTimeout = pvPar.getStringField("strTimeout");
+
             fieldOffsets.clear();
-            fieldOffsets.add(0,  null);
-            fieldOffsets.add(1,  null);
-            fieldOffsets.add(2,  null); 
-            fieldOffsets.add(3,  new ImmutablePair(0,-1));   
-            fieldOffsets.add(4,  new ImmutablePair(6,0)); 
-            fieldOffsets.add(5,  new ImmutablePair(6,1));             
-            fieldOffsets.add(6,  new ImmutablePair(6,2));
-            fieldOffsets.add(7,  new ImmutablePair(6,3)); 
-            fieldOffsets.add(8,  new ImmutablePair(6,4)); 
-            fieldOffsets.add(9,  new ImmutablePair(6,5));
-            fieldOffsets.add(10, new ImmutablePair(6,6)); 
-            fieldOffsets.add(11, new ImmutablePair(6,7)); 
-            fieldOffsets.add(12, new ImmutablePair(7,0)); 
-            fieldOffsets.add(13, new ImmutablePair(7,1));             
-            fieldOffsets.add(14, new ImmutablePair(7,2));
-            fieldOffsets.add(15, new ImmutablePair(7,3)); 
-            fieldOffsets.add(16, new ImmutablePair(7,4)); 
-            fieldOffsets.add(17, new ImmutablePair(7,5));
-            fieldOffsets.add(18, null);  
-            fieldOffsets.add(19, new ImmutablePair(10,-1));            
-        }    
+            fieldOffsets.add(0, null);
+            fieldOffsets.add(1, null);
+            fieldOffsets.add(2, null);
+            fieldOffsets.add(3, new ImmutablePair(0, -1));
+            fieldOffsets.add(4, new ImmutablePair(6, 0));
+            fieldOffsets.add(5, new ImmutablePair(6, 1));
+            fieldOffsets.add(6, new ImmutablePair(6, 2));
+            fieldOffsets.add(7, new ImmutablePair(6, 3));
+            fieldOffsets.add(8, new ImmutablePair(6, 4));
+            fieldOffsets.add(9, new ImmutablePair(6, 5));
+            fieldOffsets.add(10, new ImmutablePair(6, 6));
+            fieldOffsets.add(11, new ImmutablePair(6, 7));
+            fieldOffsets.add(12, new ImmutablePair(7, 0));
+            fieldOffsets.add(13, new ImmutablePair(7, 1));
+            fieldOffsets.add(14, new ImmutablePair(7, 2));
+            fieldOffsets.add(15, new ImmutablePair(7, 3));
+            fieldOffsets.add(16, new ImmutablePair(7, 4));
+            fieldOffsets.add(17, new ImmutablePair(7, 5));
+            fieldOffsets.add(18, null);
+            fieldOffsets.add(19, new ImmutablePair(10, -1));
+        }
 
         /**
-         * For other special types of data, adaptation must be made here 
-         * to write to the PLC.
-         * 
-         * 1. In the first write all fields are written
-         * 2. In the second one only the changes are written.
-         * 
+         * For other special types of data, adaptation must be made here to
+         * write to the PLC.
+         *
+         * 1. In the first write all fields are written 2. In the second one
+         * only the changes are written.
+         *
          */
         public void process() {
-            if (null != plcItem) {               
-                if (write_enable.get()) {                          
+            if (null != plcItem) {
+                if (write_enable.get()) {
                     try {
+                        System.out.println("Strtimeout: "+strTimeout.get());
                         Duration userTime = Duration.parse(strTimeout.get());
+                        System.out.println("UserTime: " + userTime);
                         if (!lastDuration.equals(userTime)) {
+                            System.out.println("Antes");
                             int writeValue = 
S7DBStaticHelper.durationToS7Time(userTime);
-                            tInTimeout.put(writeValue);        
+                            System.out.println("Despues");
+                            tInTimeout.put(writeValue);
                         }
                     } catch (Exception ex) {
                         LOGGER.info("S7 TIME mal formed.");
-                    }                    
-                    super.process();                       
+                    }
+
                 }
             }
         }
@@ -251,57 +250,58 @@ public class S7DBMotorFactory extends DBBaseFactory {
         @Override
         public void atach(final PlcItem plcItem) {
             this.plcItem = plcItem;
-            ParseOffset( 
this.getPVStructure().getStringField("offset").get());            
+            ParseOffset(this.getPVStructure().getStringField("offset").get());
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
         }
 
         @Override
-        public void update() {    
+        public void update() {
             if (null != plcItem) {
                 innerBuffer.resetReaderIndex();
-                
+
                 //Update pvCmd  
+                
                 if (innerBuffer.getShort(0) != iMode.get()) {
                     iMode.put(innerBuffer.getShort(0));
                 }
-                
-                iErrorCode.put(innerBuffer.getShort(2));                
+
+                iErrorCode.put(innerBuffer.getShort(2));
                 iStatus.put(innerBuffer.getShort(4));
-                
-                byTemp = innerBuffer.getByte(6); 
-                if (isBitSet(byTemp, 0) != bPB_ResetError.get()) {             
   
+
+                byTemp = innerBuffer.getByte(6);
+                if (isBitSet(byTemp, 0) != bPB_ResetError.get()) {
                     bPB_ResetError.put(isBitSet(byTemp, 0));
                 }
-                if (isBitSet(byTemp, 1) != bPB_Forward.get()) {                
-                    bPB_Forward.put(isBitSet(byTemp, 1)); 
-                }                
-                if (isBitSet(byTemp, 2) != bPB_Reverse.get()) {  
-                    bPB_Reverse.put(isBitSet(byTemp, 2));                      
-                }               
-                if (isBitSet(byTemp, 3) != bPB_Stop.get()) { 
-                    bPB_Stop.put(isBitSet(byTemp, 3));                      
+                if (isBitSet(byTemp, 1) != bPB_Forward.get()) {
+                    bPB_Forward.put(isBitSet(byTemp, 1));
+                }
+                if (isBitSet(byTemp, 2) != bPB_Reverse.get()) {
+                    bPB_Reverse.put(isBitSet(byTemp, 2));
+                }
+                if (isBitSet(byTemp, 3) != bPB_Stop.get()) {
+                    bPB_Stop.put(isBitSet(byTemp, 3));
                 }
                 if (isBitSet(byTemp, 4) != bPBEN_ResetError.get()) {
-                    bPBEN_ResetError.put(isBitSet(byTemp, 4));                 
    
-                }                 
+                    bPBEN_ResetError.put(isBitSet(byTemp, 4));
+                }
                 if (isBitSet(byTemp, 5) != bPBEN_Forward.get()) {
-                    bPBEN_Forward.put(isBitSet(byTemp, 5));                    
  
-                }                
+                    bPBEN_Forward.put(isBitSet(byTemp, 5));
+                }
                 if (isBitSet(byTemp, 6) != bPBEN_Reverse.get()) {
-                    bPBEN_Reverse.put(isBitSet(byTemp, 6));                    
  
-                }              
+                    bPBEN_Reverse.put(isBitSet(byTemp, 6));
+                }
                 if (isBitSet(byTemp, 7) != bPBEN_Stop.get()) {
-                    bPBEN_Stop.put(isBitSet(byTemp, 7));                     
-                }               
+                    bPBEN_Stop.put(isBitSet(byTemp, 7));
+                }
 
-                byTemp = innerBuffer.getByte(7); 
-                bForwardOn.put(isBitSet(byTemp, 0));                 
+                byTemp = innerBuffer.getByte(7);
+                bForwardOn.put(isBitSet(byTemp, 0));
                 bReverseOn.put(isBitSet(byTemp, 1));
                 bSignalForward.put(isBitSet(byTemp, 2));
                 bSignalReverse.put(isBitSet(byTemp, 3));
-                bError.put(isBitSet(byTemp, 4));  
-                bInterlock.put(isBitSet(byTemp, 5));                
-                                
+                bError.put(isBitSet(byTemp, 4));
+                bInterlock.put(isBitSet(byTemp, 5));
+
                 //Update pvSts                 
                 byTemp = innerBuffer.getByte(8);
                 bMotorProtectorTripped.put(isBitSet(byTemp, 0));
@@ -309,29 +309,27 @@ public class S7DBMotorFactory extends DBBaseFactory {
                 bClutchTripped.put(isBitSet(byTemp, 2));
                 bNoSignalForward.put(isBitSet(byTemp, 3));
                 bNoSignalReverse.put(isBitSet(byTemp, 4));
-                bMotorNotStopped .put(isBitSet(byTemp, 5));                
-                
+                bMotorNotStopped.put(isBitSet(byTemp, 5));
+
                 //Update pvPar
                 if (innerBuffer.getInt(10) != tInTimeout.get()) {
                     tInTimeout.put(innerBuffer.getInt(10));
                     lastDuration = 
S7DBStaticHelper.s7TimeToDuration(tInTimeout.get());
-                    strTimeout.put(lastDuration.toString());                   
 
+                    strTimeout.put(lastDuration.toString());
                 }
-
                 if (bFirtsRun) {
                     bFirtsRun = false;
                     write_enable.put(true);
-                }  
+                }
 
             }
         }
-        
+
         @Override
         public String getFieldsToMonitor() {
             return MONITOR_TF_FIELDS;
         }
-    
-        
+
     }
-           
+
 }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveAnalogFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveAnalogFactory.java
index aeae98b8..b077e74f 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveAnalogFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveAnalogFactory.java
@@ -201,7 +201,7 @@ public class S7DBValveAnalogFactory extends DBBaseFactory {
                     } catch (Exception ex) {
                         LOGGER.info("S7 TIME mal formed.");
                     }                    
-                    super.process();                      
+//                    super.process();                      
                 }
             }  
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveSolenoidFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveSolenoidFactory.java
index 8d0762c7..d99547ae 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveSolenoidFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveSolenoidFactory.java
@@ -201,7 +201,7 @@ public class S7DBValveSolenoidFactory extends DBBaseFactory 
{
                     } catch (Exception ex) {
                         LOGGER.info("S7 TIME mal formed.");
                     }                    
-                    super.process();
+                    
                 }
             }            
         }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7DBWriterHandlerImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7DBWriterHandlerImpl.java
index e2e6309d..b4fa6f00 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7DBWriterHandlerImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7DBWriterHandlerImpl.java
@@ -19,16 +19,15 @@
 package org.apache.plc4x.merlot.drv.s7.impl;
 
 import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufUtil;
 import io.netty.buffer.Unpooled;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.plc4x.merlot.api.DBWriterHandler;
 import org.apache.plc4x.merlot.api.PlcItem;
 import org.apache.plc4x.merlot.db.api.DBRecord;
-import org.apache.plc4x.merlot.db.api.DBWriterHandler;
 import org.epics.pvdata.copy.CreateRequest;
 import org.epics.pvdata.misc.BitSet;
 import org.epics.pvdata.monitor.Monitor;
@@ -120,7 +119,7 @@ public class S7DBWriterHandlerImpl implements 
DBWriterHandler {
                         }
                         i++;
                     }
-//                    LOGGER.info("PASO3...");
+                    LOGGER.info("Usando el s7 writer");
 //                    LOGGER.info(structure.toString());
 //                    LOGGER.info(changedBitSet.toString());
 //                    LOGGER.info("Car: {}",changedBitSet.cardinality());
@@ -186,8 +185,12 @@ public class S7DBWriterHandlerImpl implements 
DBWriterHandler {
                             if (fieldOffsets.get(index) != null) {
                                 byteOffset = byteOffset + 
fieldOffsets.get(2).left;
                             }                            
-                            bitOffset  = ((fieldOffsets.get(index) != 
null)?fieldOffsets.get(index).right.byteValue():(byte) -1);
+                            bitOffset  = ((fieldOffsets.get(index) != 
null)?((Number)(Object)fieldOffsets.get(index).right).byteValue():(byte) -1);
 
+                            //bitOffset = (fieldOffsets.get(index) != null) ? 
((Number)(Object)fieldOffsets.get(index).right).byteValue() : (byte) -1;
+                            System.out.println("Buffer: "+byteBuf);
+                            System.out.println("Byte: "+byteOffset);
+                            System.out.println("Bit: "+bitOffset);
                             if (optPlcItem.isPresent()) {
                                 optPlcItem.get().itemWrite(byteBuf, 
byteOffset, bitOffset);  
                             }   
@@ -222,7 +225,8 @@ public class S7DBWriterHandlerImpl implements 
DBWriterHandler {
     }
 
     @Override
-    public void putDBRecord(DBRecord dbRecord) {
+    public void putDBRecord(Object db) {
+        DBRecord dbRecord =  (DBRecord) db;
         LOGGER.info("Monitor with fields =  {}", 
dbRecord.getFieldsToMonitor());
         try {
             PVStructure request = 
createRequest.createRequest(dbRecord.getFieldsToMonitor());
@@ -239,7 +243,7 @@ public class S7DBWriterHandlerImpl implements 
DBWriterHandler {
     }
 
     @Override
-    public void removeDBRecord(DBRecord dbRecord) {
+    public void removeDBRecord(Object dbRecord) {
         throw new UnsupportedOperationException("Not supported yet.");
     }
     
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/resources/OSGI-INF/blueprint/s7-drv-service.xml
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/resources/OSGI-INF/blueprint/s7-drv-service.xml
index 43e40a5a..272ff3cd 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/resources/OSGI-INF/blueprint/s7-drv-service.xml
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/resources/OSGI-INF/blueprint/s7-drv-service.xml
@@ -227,13 +227,13 @@
     </service>   
     
     <!-- TODO: se requiere cambiar el identificador, causa problema con DAS. 
-->
-    <service ref="S7DBWriterHandlerImpl" 
interface="org.apache.plc4x.merlot.db.api.DBWriterHandler">
+    <service ref="S7DBWriterHandlerImpl" 
interface="org.apache.plc4x.merlot.api.DBWriterHandler">
         <service-properties>
             <entry key="db.record.writehandler.category"  value="s7"/>         
  
         </service-properties>        
     </service>
     
-    <service ref="S7DBWriterHandlerImpl" 
interface="org.apache.plc4x.merlot.db.api.DBWriterHandler">
+    <service ref="S7DBWriterHandlerImpl" 
interface="org.apache.plc4x.merlot.api.DBWriterHandler">
         <service-properties>
             <entry key="db.record.writehandler.category"  value="s7-light"/>   
        
         </service-properties>        

Reply via email to