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 7c0faaf  Working on Writehandler.
7c0faaf is described below

commit 7c0faaf0088b24ffc2bf89f1c15d584b71aff263
Author: César García <[email protected]>
AuthorDate: Mon Dec 2 10:23:21 2024 -0400

    Working on Writehandler.
---
 .../org/apache/plc4x/merlot/db/api/DBRecord.java   |  13 ++-
 .../plc4x/merlot/db/core/DBBooleanFactory.java     |   8 +-
 .../apache/plc4x/merlot/db/core/DBByteFactory.java |   1 -
 .../plc4x/merlot/db/core/DBDoubleFactory.java      |   1 -
 .../plc4x/merlot/db/core/DBFloatFactory.java       |  12 +-
 .../apache/plc4x/merlot/db/core/DBIntFactory.java  |   3 +-
 .../apache/plc4x/merlot/db/core/DBLongFactory.java |   3 +-
 .../merlot/db/core/DBRecordsManagedService.java    |   4 +-
 .../plc4x/merlot/db/core/DBShortFactory.java       |   1 -
 .../plc4x/merlot/db/core/DBUByteFactory.java       |   3 +-
 .../apache/plc4x/merlot/db/core/DBUIntFactory.java |   3 +-
 .../plc4x/merlot/db/core/DBULongFactory.java       |   1 -
 .../plc4x/merlot/db/core/DBUShortFactory.java      |   1 -
 .../plc4x/merlot/db/impl/DBWriterHandlerImpl.java  | 126 +++++++++++++++++++--
 .../plc4x/merlot/drv/s7/core/S7DBAiFactory.java    |  69 ++++++-----
 .../plc4x/merlot/drv/s7/core/S7DBAoFactory.java    |  16 +--
 .../merlot/drv/s7/core/S7DBCounterFactory.java     |   4 -
 .../merlot/drv/s7/core/S7DBDateAndTimeFactory.java |   4 -
 .../plc4x/merlot/drv/s7/core/S7DBDateFactory.java  |   4 -
 .../plc4x/merlot/drv/s7/core/S7DBDiFactory.java    |  68 +++++++----
 .../plc4x/merlot/drv/s7/core/S7DBDoFactory.java    |  65 +++++++----
 .../plc4x/merlot/drv/s7/core/S7DBMotorFactory.java |   7 --
 .../merlot/drv/s7/core/S7DBS5TimeFactory.java      |   4 +-
 .../merlot/drv/s7/core/S7DBStringFactory.java      |   4 -
 .../plc4x/merlot/drv/s7/core/S7DBTimeFactory.java  |   3 -
 .../merlot/drv/s7/core/S7DBTimeOfDayFactory.java   |   4 -
 .../plc4x/merlot/drv/s7/core/S7DBValveFactory.java |  11 --
 .../merlot/drv/s7/impl/S7DBWriterHandlerImpl.java  |   5 +-
 .../OSGI-INF/blueprint/s7-drv-service.xml          |   2 +-
 29 files changed, 273 insertions(+), 177 deletions(-)

diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/api/DBRecord.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/api/DBRecord.java
index 4e537ec..998ae4b 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/api/DBRecord.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/api/DBRecord.java
@@ -65,7 +65,7 @@ public class DBRecord extends PVRecord   implements 
PlcItemListener {
     
     protected int byteOffset = -1;
     protected byte bitOffset = -1;  
-    protected  ArrayList<ImmutablePair<Integer, Integer>> fieldOffsets;    
+    protected  ArrayList<ImmutablePair<Integer, Byte>> fieldOffsets;    
     
     
     protected PlcItem plcItem = null; 
@@ -79,8 +79,9 @@ public class DBRecord extends PVRecord   implements 
PlcItemListener {
         super(recordName, pvStructure);           
             bFirtsRun = true;            
             fieldOffsets = new ArrayList<>();
-            fieldOffsets.add(0, null);
-            fieldOffsets.add(1, new ImmutablePair(0,-1));        
+            fieldOffsets.add(0, null);                      //All structure
+            fieldOffsets.add(1, null);                      //write_enable
+            fieldOffsets.add(2, new ImmutablePair(0,-1));   //scalar offset
     }
     
     public Optional<PlcItem> getPlcItem(){
@@ -106,7 +107,7 @@ public class DBRecord extends PVRecord   implements 
PlcItemListener {
         return bitOffset;
     }
     
-    public ArrayList<ImmutablePair<Integer, Integer>> getFieldOffsets(){
+    public ArrayList<ImmutablePair<Integer, Byte>> getFieldOffsets(){
         return fieldOffsets;
     }
             
@@ -118,9 +119,11 @@ public class DBRecord extends PVRecord   implements 
PlcItemListener {
         Matcher matcher;
         if ((matcher = BYTE_OFFSET_PATTERN.matcher(strOffset)).matches()){
             byteOffset = Integer.parseInt(matcher.group(BYTE_OFFSET ));
+            fieldOffsets.set(2, new ImmutablePair(byteOffset,-1));
         } else if ((matcher = 
BIT_OFFSET_PATTERN.matcher(strOffset)).matches()){
             byteOffset = Integer.parseInt(matcher.group(BYTE_OFFSET ));
-            bitOffset  = (byte) Integer.parseInt(matcher.group(BIT_OFFSET ));  
          
+            bitOffset  = (byte) Integer.parseInt(matcher.group(BIT_OFFSET )); 
+            fieldOffsets.set(2, new ImmutablePair(byteOffset, bitOffset));     
       
         }
     }
     
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 75d1aa7..da8d981 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
@@ -116,9 +116,7 @@ public class DBBooleanFactory extends DBBaseFactory {
         {
             if (null != plcItem) {    
                 if (write_enable.get()) {    
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeBoolean(write_value.get());          
               
+                    write_value.put(value.get());                              
                    
                     super.process();                      
                 }
                 
@@ -129,10 +127,8 @@ public class DBBooleanFactory extends DBBaseFactory {
         public void atach(PlcItem plcItem) {
             try {
                 this.plcItem = plcItem;
-                //offset = this.getPVStructure().getIntField("offset").get() * 
Byte.BYTES; 
                 getOffset( 
this.getPVStructure().getStringField("offset").get());
-                innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-                innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);         
       
+                innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);                
             } catch (Exception ex) {
                 LOGGER.error(this.getClass().getName() + " : " + 
ex.getMessage());
             }
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 3edb583..eb80299 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
@@ -123,7 +123,6 @@ public class DBByteFactory extends DBBaseFactory {
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get() * 
Byte.BYTES;  
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
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 ac7eb44..80fb780 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
@@ -122,7 +122,6 @@ public class DBDoubleFactory extends DBBaseFactory {
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get(); 
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
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 7fd929e..ec6d2ac 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
@@ -97,18 +97,10 @@ public class DBFloatFactory extends DBBaseFactory {
         private PVBoolean write_enable;          
         
         public DBFloatRecord(String recordName,PVStructure pvStructure) {
-            super(recordName, pvStructure);
-           
-            bFirtsRun = true;
-            
-            fieldOffsets = new ArrayList<>();
-            fieldOffsets.add(0, null);
-            fieldOffsets.add(1, new ImmutablePair(0,-1));  
-            
+            super(recordName, pvStructure);           
             value = pvStructure.getFloatField("value");
             write_value = pvStructure.getFloatField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");
-            //offset = pvStructure.getIntField("offset").get();  
         }    
 
         /**
@@ -130,7 +122,6 @@ public class DBFloatFactory extends DBBaseFactory {
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem; 
-            //offset = this.getPVStructure().getIntField("offset").get();  
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
@@ -143,7 +134,6 @@ public class DBFloatFactory extends DBBaseFactory {
 
         @Override
         public void update() {
-            System.out.println("Update!");
             if (null != plcItem)   
                 if (value.get() != innerBuffer.getFloat(0))
                 value.put(innerBuffer.getFloat(0));
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 9bef475..2d09749 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
@@ -118,8 +118,7 @@ public class DBIntFactory extends DBBaseFactory {
 
         @Override
         public void atach(PlcItem plcItem) {
-            this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get();  
+            this.plcItem = plcItem; 
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             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 0ef7f24..ad3916b 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
@@ -118,8 +118,7 @@ public class DBLongFactory extends DBBaseFactory {
 
         @Override
         public void atach(PlcItem plcItem) {
-            this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get();    
+            this.plcItem = plcItem;  
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             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 ea22044..9f3ab63 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
@@ -65,7 +65,7 @@ public class DBRecordsManagedService implements 
ManagedServiceFactory, Job {
     private String filter =  "(&(" + Constants.OBJECTCLASS + "=" + 
DBRecordFactory.class.getName() + ")"+
                            "(db.record.type=*))"; 
     private String filterWriterHandler =  "(&(" + Constants.OBJECTCLASS + "=" 
+ DBWriterHandler.class.getName() + ")"+
-                           "(DEVICE_CATEGORY=*))"; 
+                           "(db.record.writehandler.category=*))"; 
     
     private final PlcGeneralFunction generalFunction;
     private final PVDatabase master;
@@ -117,8 +117,6 @@ public class DBRecordsManagedService implements 
ManagedServiceFactory, Job {
         List<DBRecord> dbRecords = new ArrayList();
         String filename = (String) props.get("felix.fileinstall.filename");
         
-  
-
         if (props.size() < 3){
             waitingConfigs.put(pid, props);  
             return;
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 bb68b34..b1e8cab 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
@@ -124,7 +124,6 @@ public class DBShortFactory extends DBBaseFactory {
         @Override
         public void atach(final PlcItem plcItem) {
             this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get() * 
Short.BYTES;  
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
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 cf5abf9..a931207 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
@@ -118,8 +118,7 @@ public class DBUByteFactory extends DBBaseFactory {
 
         @Override
         public void atach(PlcItem plcItem) {
-            this.plcItem = plcItem;            
-            //offset = this.getPVStructure().getIntField("offset").get();     
+            this.plcItem = plcItem;             
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
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 00b7a22..37ca32d 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
@@ -118,8 +118,7 @@ public class DBUIntFactory extends DBBaseFactory {
 
         @Override
         public void atach(PlcItem plcItem) {
-            this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get();    
+            this.plcItem = plcItem;  
             getOffset( this.getPVStructure().getStringField("offset").get());
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
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 a1034bd..cd210cf 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
@@ -121,7 +121,6 @@ public class DBULongFactory extends DBBaseFactory {
         @Override
         public void atach(PlcItem plcItem) {
             this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get(); 
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
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 c2c9216..f472877 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
@@ -121,7 +121,6 @@ public class DBUShortFactory extends DBBaseFactory {
         @Override
         public void atach(final PlcItem plcItem) {
             this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get(); 
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
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 c9c6dcd..7043b3f 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
@@ -18,10 +18,14 @@
  */
 package org.apache.plc4x.merlot.db.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.PlcItem;
 import org.apache.plc4x.merlot.db.api.DBRecord;
 import org.apache.plc4x.merlot.db.api.DBWriterHandler;
@@ -30,7 +34,32 @@ import org.epics.pvdata.misc.BitSet;
 import org.epics.pvdata.monitor.Monitor;
 import org.epics.pvdata.monitor.MonitorElement;
 import org.epics.pvdata.pv.MessageType;
+import org.epics.pvdata.pv.PVBoolean;
+import org.epics.pvdata.pv.PVByte;
+import org.epics.pvdata.pv.PVDouble;
+import org.epics.pvdata.pv.PVField;
+import org.epics.pvdata.pv.PVFloat;
+import org.epics.pvdata.pv.PVInt;
+import org.epics.pvdata.pv.PVLong;
+import org.epics.pvdata.pv.PVScalar;
+import org.epics.pvdata.pv.PVShort;
+import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
+import org.epics.pvdata.pv.PVUByte;
+import org.epics.pvdata.pv.PVUInt;
+import org.epics.pvdata.pv.PVUShort;
+import static org.epics.pvdata.pv.ScalarType.pvBoolean;
+import static org.epics.pvdata.pv.ScalarType.pvByte;
+import static org.epics.pvdata.pv.ScalarType.pvDouble;
+import static org.epics.pvdata.pv.ScalarType.pvFloat;
+import static org.epics.pvdata.pv.ScalarType.pvInt;
+import static org.epics.pvdata.pv.ScalarType.pvLong;
+import static org.epics.pvdata.pv.ScalarType.pvShort;
+import static org.epics.pvdata.pv.ScalarType.pvString;
+import static org.epics.pvdata.pv.ScalarType.pvUByte;
+import static org.epics.pvdata.pv.ScalarType.pvUInt;
+import static org.epics.pvdata.pv.ScalarType.pvULong;
+import static org.epics.pvdata.pv.ScalarType.pvUShort;
 import org.epics.pvdata.pv.Status;
 import org.epics.pvdata.pv.Structure;
 import org.epics.pvdatabase.pva.MonitorFactory;
@@ -59,6 +88,8 @@ public class DBWriterHandlerImpl implements DBWriterHandler {
 
     @Override
     public void monitorEvent(Monitor monitor) {
+        int byteOffset = 0;
+        byte bitOffset = -1;
         try 
         {
             element = monitor.poll();
@@ -68,19 +99,96 @@ public class DBWriterHandlerImpl implements DBWriterHandler 
{
                       
             if ((recordMonitors.containsKey(monitor)) && 
                  structure.getBooleanField("write_enable").get()) {
-                if (changedBitSet.get(1) && 
-                    (changedBitSet.length() == 2) &&
-                    overrunBitSet.isEmpty()) {
+                
+                final DBRecord dbRecord = recordMonitors.get(monitor);
+                final Optional<PlcItem> optPlcItem = dbRecord.getPlcItem();
 
-                    final DBRecord dbRecord = recordMonitors.get(monitor);
-                    final Optional<PlcItem> optPlcItem = dbRecord.getPlcItem();
-                    
LOGGER.info(ByteBufUtil.prettyHexDump(dbRecord.getWriteBuffer().get()));
+                PVField[] fields = new PVField[structure.getNumberFields()];
+                
+                
+                if (optPlcItem.isPresent()) {                                  
 
                     
-                    if (optPlcItem.isPresent()) {
-                        
optPlcItem.get().itemWrite(dbRecord.getWriteBuffer().get(), 
dbRecord.getByteOffset(), dbRecord.getBiteOffset());  
+                    //Tansform the tree to lineal array of fields
+                    //I avoid recursion
+                    int i = 1;
+                    for (PVField pvField:structure.getPVFields()) {
+                        fields[i] = pvField;
+                        if (pvField instanceof PVStructure) {                  
     
+                            final PVStructure pvStructure = (PVStructure) 
pvField;
+                            for (PVField f:pvStructure.getPVFields()){
+                                i++;
+                                fields[i] = f;
+                            }
+                        }
+                        i++;
                     }
+                
+                    int index = changedBitSet.nextSetBit(0);
+                    for (i = 0; i < changedBitSet.cardinality(); i++) {
 
-                }
+                        ByteBuf byteBuf = null;
+                        if (fields[index] instanceof PVScalar){
+                            //Capturo la informacion en un ByteBuf
+                            final PVField f = fields[index]; 
+                            final PVScalar pvScalar = (PVScalar) fields[index];
+                            byteBuf = Unpooled.buffer(Double.BYTES);
+                            switch(pvScalar.getScalar().getScalarType()) {
+                                case pvBoolean:
+                                    byteBuf.writeBoolean(((PVBoolean) 
f).get());
+                                    break;
+                                case pvByte:
+                                    byteBuf.writeByte(((PVByte) f).get());     
                              
+                                    break;  
+                                case pvDouble:
+                                    byteBuf.writeDouble(((PVDouble) f).get()); 
                                    
+                                    break; 
+                                case pvFloat:
+                                    byteBuf.writeFloat(((PVFloat) f).get());   
                                  
+                                    break; 
+                                case pvInt:
+                                    byteBuf.writeInt(((PVInt) f).get());
+                                    break; 
+                                case pvLong:
+                                    byteBuf.writeLong(((PVLong) f).get());     
                               
+                                    break; 
+                                case pvShort:
+                                    byteBuf.writeShort(((PVShort) f).get());   
                                  
+                                    break; 
+                                case pvString: 
+                                    int l = ((PVString) f).get().length();
+                                    byteBuf = Unpooled.buffer(l); 
+                                    byteBuf.resetWriterIndex();
+                                    byteBuf.writeBytes(((PVString) 
f).get().getBytes());                                    
+                                    break;  
+                                case pvUByte: 
+                                    byteBuf.writeByte(((PVUByte) f).get());    
                                 
+                                    break;                                     
 
+                                case pvUInt: 
+                                    byteBuf.writeInt(((PVUInt) f).get());      
                               
+                                    break;  
+                                case pvULong:
+                                    byteBuf.writeLong(((PVLong) f).get());     
                                
+                                    break;  
+                                case pvUShort:                                 
  
+                                    byteBuf.writeShort(((PVUShort) f).get());  
                                   
+                                    break; 
+                            }
+                            
+                            ArrayList<ImmutablePair<Integer, Byte>> 
fieldOffsets = dbRecord.getFieldOffsets();
+                            byteOffset = dbRecord.getByteOffset() + 
((fieldOffsets.get(index) != null)?fieldOffsets.get(index).left:0);
+                            bitOffset = (byte) ((fieldOffsets.get(index) != 
null)?fieldOffsets.get(index).right:-1);
+                            System.out.println("ByteOffset: " + byteOffset + " 
 bitOffset: " + bitOffset);
+                            if (optPlcItem.isPresent()) {
+                                optPlcItem.get().itemWrite(byteBuf, 
byteOffset, bitOffset);  
+                            }                                                  
                                  
+                        };
+                        
+                        index = changedBitSet.nextSetBit(index);
+                        
+                    }
+                    
+                    
+                }                
             }
         } catch (Exception ex) {
              LOGGER.error(ex.getMessage());
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 1fc5139..3980876 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
@@ -24,8 +24,6 @@ import org.apache.plc4x.merlot.api.PlcItemListener;
 import org.apache.plc4x.merlot.db.api.DBRecord;
 import org.apache.plc4x.merlot.db.core.DBBaseFactory;
 import org.epics.nt.NTScalar;
-import org.epics.nt.NTScalarArray;
-import org.epics.nt.NTScalarArrayBuilder;
 import org.epics.nt.NTScalarBuilder;
 import org.epics.pvdata.factory.FieldFactory;
 import org.epics.pvdata.pv.Field;
@@ -33,13 +31,9 @@ import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
 import org.epics.pvdata.pv.PVFloat;
-import org.epics.pvdata.pv.PVInt;
 import org.epics.pvdata.pv.PVShort;
-import org.epics.pvdata.pv.PVShortArray;
-import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBAiFactory extends DBBaseFactory {
@@ -55,8 +49,9 @@ public class S7DBAiFactory extends DBBaseFactory {
                 add("iMode", fieldCreate.createScalar(ScalarType.pvShort)).
                 add("iErrorCode", 
fieldCreate.createScalar(ScalarType.pvShort)).                
                 add("iStatus", fieldCreate.createScalar(ScalarType.pvShort)). 
-                add("rActiveValue", 
fieldCreate.createScalar(ScalarType.pvFloat)). 
-                add("rInputValue", 
fieldCreate.createScalar(ScalarType.pvFloat)).                 
+                add("rActiveValue", 
fieldCreate.createScalar(ScalarType.pvFloat)).                 
+                add("rInputValue", 
fieldCreate.createScalar(ScalarType.pvFloat)).  
+                add("rManualValue", 
fieldCreate.createScalar(ScalarType.pvFloat)).                 
                 add("bPB_ResetError", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                                
 
                 add("bPBEN_ResetError", 
fieldCreate.createScalar(ScalarType.pvBoolean)).    
                 add("bError", fieldCreate.createScalar(ScalarType.pvBoolean)). 
                
@@ -66,13 +61,20 @@ public class S7DBAiFactory extends DBBaseFactory {
                 add("bLowLowAlarm", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                                
 
                 add("bHighHighAlarm", 
fieldCreate.createScalar(ScalarType.pvBoolean)).    
                 add("bInvalid", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                 
-                createStructure();        
+                createStructure();
+
+        Field out =  fb.setId("output_t").   
+                add("iMode", fieldCreate.createScalar(ScalarType.pvShort)).
+                add("rManualValue", 
fieldCreate.createScalar(ScalarType.pvFloat)).                 
+                add("bPB_ResetError", 
fieldCreate.createScalar(ScalarType.pvBoolean)). 
+                createStructure();
         
         PVStructure pvStructure = ntScalarBuilder.
             value(ScalarType.pvShort).
             addDescriptor().
             add("cmd", cmd).
-            add("sts", sts).                  
+            add("sts", sts).   
+            add("out", out).       
             add("id", fieldCreate.createScalar(ScalarType.pvString)).  
             add("offset", fieldCreate.createScalar(ScalarType.pvString)).      
           
             add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
@@ -92,7 +94,7 @@ public class S7DBAiFactory extends DBBaseFactory {
     class DBS7DiRecord extends DBRecord implements PlcItemListener {   
     
         private int BUFFER_SIZE = 20;
-        private static final String MONITOR_TF_FIELDS = 
"field(bPBEN_ResetError)";         
+        private static final String MONITOR_TF_FIELDS = "field(write_enable, 
out{iMode, rManualValue, bPB_ResetError})";         
    
     
         private PVShort value; 
@@ -105,6 +107,7 @@ public class S7DBAiFactory extends DBBaseFactory {
         
         private PVFloat rActiveValue;
         private PVFloat rInputValue; 
+        private PVFloat rManualValue;         
         
         private PVBoolean bPB_ResetError;
         private PVBoolean bPBEN_ResetError;                
@@ -114,6 +117,9 @@ public class S7DBAiFactory extends DBBaseFactory {
         private PVBoolean bHighHighAlarm;
         private PVBoolean bInvalid; 
         
+        private PVShort out_iMode;         
+        private PVFloat out_rManualValue;         
+        private PVBoolean out_bPB_ResetError;        
         
         byte byTemp;
     
@@ -123,20 +129,26 @@ public class S7DBAiFactory extends DBBaseFactory {
             write_value = pvStructure.getShortField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");
             
-            iMode = pvStructure.getShortField("cmd/iMode");
-            iErrorCode = pvStructure.getShortField("cmd/iErrorCode");
-            iStatus = pvStructure.getShortField("cmd/iStatus");  
-            
-            rActiveValue = pvStructure.getFloatField("cmd/rActiveValue"); 
-            rInputValue = pvStructure.getFloatField("cmd/rInputValue");        
     
-            
-            bPB_ResetError = pvStructure.getBooleanField("cmd/bPB_ResetError");
-            bPBEN_ResetError = 
pvStructure.getBooleanField("cmd/bPBEN_ResetError");
-            bError = pvStructure.getBooleanField("cmd/bError");   
+            PVStructure pvStructureCmd = pvStructure.getStructureField("cmd"); 
             
+            iMode = pvStructureCmd.getShortField("iMode");
+            iErrorCode = pvStructureCmd.getShortField("iErrorCode");
+            iStatus = pvStructureCmd.getShortField("iStatus");              
+            rActiveValue = pvStructureCmd.getFloatField("rActiveValue"); 
+            rInputValue = pvStructureCmd.getFloatField("rInputValue");         
                
+            rManualValue = pvStructureCmd.getFloatField("rManualValue");
+            bPB_ResetError = pvStructureCmd.getBooleanField("bPB_ResetError");
+            bPBEN_ResetError = 
pvStructureCmd.getBooleanField("bPBEN_ResetError");
+            bError = pvStructureCmd.getBooleanField("bError");               
+
+            PVStructure pvStructureSts = pvStructure.getStructureField("sts");
+            bLowLowAlarm =  pvStructureSts.getBooleanField("bLowLowAlar");
+            bHighHighAlarm =  pvStructureSts.getBooleanField("bHighHighAlarm");
+            bInvalid =  pvStructureSts.getBooleanField("bInvalid");
             
-            bLowLowAlarm = pvStructure.getBooleanField("cmd/bLowLowAlarm"); 
-            bHighHighAlarm = 
pvStructure.getBooleanField("cmd/bHighHighAlarm"); 
-            bInvalid = pvStructure.getBooleanField("cmd/bInvalid");            
 
+            PVStructure pvStructureOut = pvStructure.getStructureField("out");
+            out_iMode = pvStructureOut.getShortField("iMode");     
+            out_rManualValue = pvStructureOut.getFloatField("rManualValue");  
+            out_bPB_ResetError = 
pvStructureOut.getBooleanField("bPB_ResetError");  
 
         }    
 
@@ -148,19 +160,16 @@ public class S7DBAiFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-//                    innerWriteBuffer.writeShort(intToBcd(write_value.get()));
+                    if (iMode.get() != out_iMode.get()) 
out_iMode.put(iMode.get());                     
                     super.process();                      
                 }
-            }               
+            }              
         }
 
         //udtHMI_DigitalInput
         @Override
         public void atach(final PlcItem plcItem) {
-            this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get() * 
Short.BYTES;  
+            this.plcItem = plcItem; 
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
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 5ee182c..d26124f 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
@@ -24,8 +24,6 @@ import org.apache.plc4x.merlot.api.PlcItemListener;
 import org.apache.plc4x.merlot.db.api.DBRecord;
 import org.apache.plc4x.merlot.db.core.DBBaseFactory;
 import org.epics.nt.NTScalar;
-import org.epics.nt.NTScalarArray;
-import org.epics.nt.NTScalarArrayBuilder;
 import org.epics.nt.NTScalarBuilder;
 import org.epics.pvdata.factory.FieldFactory;
 import org.epics.pvdata.pv.Field;
@@ -35,11 +33,8 @@ import org.epics.pvdata.pv.PVBoolean;
 import org.epics.pvdata.pv.PVFloat;
 import org.epics.pvdata.pv.PVInt;
 import org.epics.pvdata.pv.PVShort;
-import org.epics.pvdata.pv.PVShortArray;
-import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBAoFactory extends DBBaseFactory {
@@ -55,7 +50,7 @@ public class S7DBAoFactory extends DBBaseFactory {
                 add("iMode", fieldCreate.createScalar(ScalarType.pvShort)).
                 add("iErrorCode", 
fieldCreate.createScalar(ScalarType.pvShort)).                
                 add("rValue", fieldCreate.createScalar(ScalarType.pvFloat)).  
-                add("rActiveValue", 
fieldCreate.createScalar(ScalarType.pvFloat)). 
+                add("rAutoValue", 
fieldCreate.createScalar(ScalarType.pvFloat)). 
                 add("rManualValue", 
fieldCreate.createScalar(ScalarType.pvFloat)).                
                 add("rEstopValue", 
fieldCreate.createScalar(ScalarType.pvFloat)).                 
                 add("bPB_ResetError", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                                
 
@@ -68,13 +63,20 @@ public class S7DBAoFactory extends DBBaseFactory {
         Field sts = fb.addNestedStructure("sts").                
                 add("bOutOfRange", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                                
 
                 add("bConfiguratonError", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                  
+                createStructure(); 
+        
+        Field out =  fb.setId("output_t").   
+                add("iMode", fieldCreate.createScalar(ScalarType.pvShort)). 
+                add("rManualValue", 
fieldCreate.createScalar(ScalarType.pvFloat)).                  
+                add("bPB_ResetError", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                  
                 createStructure();        
         
         PVStructure pvStructure = ntScalarBuilder.
             value(ScalarType.pvShort).
             addDescriptor().
             add("cmd", cmd).
-            add("sts", sts).                  
+            add("sts", sts).
+            add("out", out).                 
             add("id", fieldCreate.createScalar(ScalarType.pvString)).  
             add("offset", fieldCreate.createScalar(ScalarType.pvString)).      
           
             add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBCounterFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBCounterFactory.java
index 45cbf44..f55e5ee 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBCounterFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBCounterFactory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.plc4x.merlot.drv.s7.core;
 
-import io.netty.buffer.Unpooled;
 import java.util.ArrayList;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.plc4x.merlot.api.PlcItem;
@@ -35,11 +34,8 @@ import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
 import org.epics.pvdata.pv.PVShort;
 import org.epics.pvdata.pv.PVShortArray;
-import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
-import org.apache.plc4x.merlot.drv.s7.core.S7DBStaticHelper;
 
 public class S7DBCounterFactory extends DBBaseFactory {
     
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDateAndTimeFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDateAndTimeFactory.java
index 5d052ce..2d076ba 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDateAndTimeFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDateAndTimeFactory.java
@@ -18,8 +18,6 @@
  */
 package org.apache.plc4x.merlot.drv.s7.core;
 
-import io.netty.buffer.Unpooled;
-import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -36,12 +34,10 @@ import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
 import org.epics.pvdata.pv.PVInt;
-import org.epics.pvdata.pv.PVShort;
 import org.epics.pvdata.pv.PVShortArray;
 import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBDateAndTimeFactory extends DBBaseFactory {
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDateFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDateFactory.java
index 5ac2fa9..a38bf82 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDateFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBDateFactory.java
@@ -18,8 +18,6 @@
  */
 package org.apache.plc4x.merlot.drv.s7.core;
 
-import io.netty.buffer.Unpooled;
-import java.time.Duration;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -35,13 +33,11 @@ import org.epics.pvdata.factory.FieldFactory;
 import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
-import org.epics.pvdata.pv.PVInt;
 import org.epics.pvdata.pv.PVShort;
 import org.epics.pvdata.pv.PVShortArray;
 import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBDateFactory extends DBBaseFactory {
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 fa103db..b948781 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
@@ -24,21 +24,15 @@ import org.apache.plc4x.merlot.api.PlcItemListener;
 import org.apache.plc4x.merlot.db.api.DBRecord;
 import org.apache.plc4x.merlot.db.core.DBBaseFactory;
 import org.epics.nt.NTScalar;
-import org.epics.nt.NTScalarArray;
-import org.epics.nt.NTScalarArrayBuilder;
 import org.epics.nt.NTScalarBuilder;
 import org.epics.pvdata.factory.FieldFactory;
 import org.epics.pvdata.pv.Field;
 import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
-import org.epics.pvdata.pv.PVInt;
 import org.epics.pvdata.pv.PVShort;
-import org.epics.pvdata.pv.PVShortArray;
-import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBDiFactory extends DBBaseFactory {
@@ -58,12 +52,23 @@ public class S7DBDiFactory extends DBBaseFactory {
                 add("bPB_Off", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                                
 
                 add("bPBEN_On", 
fieldCreate.createScalar(ScalarType.pvBoolean)).    
                 add("bPBEN_Off", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                 
+                createStructure(); 
+        
+        Field sts = fb.addNestedStructure("sts").                              
  
+                createStructure();        
+        
+        Field out =  fb.setId("output_t").   
+                add("iMode", fieldCreate.createScalar(ScalarType.pvShort)).    
            
+                add("bPB_On", fieldCreate.createScalar(ScalarType.pvBoolean)). 
                
+                add("bPB_Off", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                 
                 createStructure();           
         
         PVStructure pvStructure = ntScalarBuilder.
             value(ScalarType.pvShort).
             addDescriptor().
-            add("cmd", cmd).                 
+            add("cmd", cmd).
+            add("sts", sts).                    
+            add("out", out).    
             add("id", fieldCreate.createScalar(ScalarType.pvString)).  
             add("offset", fieldCreate.createScalar(ScalarType.pvString)).      
           
             add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
@@ -83,8 +88,7 @@ public class S7DBDiFactory extends DBBaseFactory {
     class DBS7DiRecord extends DBRecord implements PlcItemListener {   
         
         private int BUFFER_SIZE = 3;
-        private static final String MONITOR_TF_FIELDS = "field(bPBEN_On," +
-                 "bPBEN_Off)";          
+        private static final String MONITOR_TF_FIELDS = "field(write_enable, 
out{bPBEN_On,bPBEN_Off})";          
     
         private PVShort value; 
         private PVShort write_value;
@@ -96,7 +100,11 @@ public class S7DBDiFactory extends DBBaseFactory {
         private PVBoolean bPB_On;
         private PVBoolean bPB_Off; 
         private PVBoolean bPBEN_On;  
-        private PVBoolean bPBEN_Off;         
+        private PVBoolean bPBEN_Off;  
+        
+        private PVShort out_iMode; 
+        private PVBoolean out_bPB_On;
+        private PVBoolean out_bPB_Off;         
         
         byte byTemp;
     
@@ -106,14 +114,20 @@ public class S7DBDiFactory extends DBBaseFactory {
             write_value = pvStructure.getShortField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");
             
-            iMode = pvStructure.getShortField("cmd/iMode");
+            PVStructure pvStructureCmd = pvStructure.getStructureField("cmd"); 
                       
+            iMode = pvStructureCmd.getShortField("iMode");            
+            bOn = pvStructureCmd.getBooleanField("bOn");            
+            bOnActual = pvStructureCmd.getBooleanField("bOnActual");           
 
+            bPB_On = pvStructureCmd.getBooleanField("bPB_On");
+            bPB_Off = pvStructureCmd.getBooleanField("bPB_Off");            
+            bPBEN_On = pvStructureCmd.getBooleanField("bPBEN_On");
+            bPBEN_Off = pvStructureCmd.getBooleanField("bPBEN_Off");
+            
+            PVStructure pvStructureOut = pvStructure.getStructureField("out"); 
            
+            out_iMode = pvStructureOut.getShortField("iMode");
+            out_bPB_On = pvStructureOut.getBooleanField("bPB_On");
+            out_bPB_Off = pvStructureOut.getBooleanField("bPB_Off");           
   
             
-            bOn = pvStructure.getBooleanField("cmd/bOn");            
-            bOnActual = pvStructure.getBooleanField("cmd/bOnActual");          
  
-            bPB_On = pvStructure.getBooleanField("cmd/bPB_On");
-            bPB_Off = pvStructure.getBooleanField("cmd/bPB_Off");            
-            bPBEN_On = pvStructure.getBooleanField("cmd/bPBEN_On");
-            bPBEN_Off = pvStructure.getBooleanField("cmd/bPBEN_Off");
         }    
 
         /**
@@ -124,9 +138,9 @@ public class S7DBDiFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-//                    innerWriteBuffer.writeShort(intToBcd(write_value.get()));
+                    if (iMode.get() != out_iMode.get()) 
out_iMode.put(iMode.get()); 
+                    if (bPB_On.get() != out_bPB_On.get()) 
out_bPB_On.put(bPB_On.get());
+                    if (bPB_Off.get() != out_bPB_Off.get()) 
out_bPB_Off.put(bPB_Off.get());                      
                     super.process();                      
                 }
             }               
@@ -136,7 +150,6 @@ public class S7DBDiFactory extends DBBaseFactory {
         @Override
         public void atach(final PlcItem plcItem) {
             this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get() * 
Short.BYTES;  
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
@@ -157,10 +170,21 @@ public class S7DBDiFactory extends DBBaseFactory {
                 bOn.put(isBitSet(byTemp, 0));
                 bOnActual.put(isBitSet(byTemp, 1));                
                 bPB_On.put(isBitSet(byTemp, 2));  
-                bPB_Off.put(isBitSet(byTemp, 3));                  
+                bPB_Off.put(isBitSet(byTemp, 3)); 
+                
+                if (bFirtsRun) {
+                    out_iMode.put(iMode.get());
+                    out_bPB_On.put(bPB_On.get());
+                    out_bPB_Off.put(bPB_Off.get());                    
+                    bFirtsRun = false;
+                }                  
+                
                 bPBEN_On.put(isBitSet(byTemp, 4));
                 bPBEN_Off.put(isBitSet(byTemp, 5)); 
                 
+              
+                
+                
             }
         }
         
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 ea51192..54c63c8 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
@@ -24,21 +24,15 @@ import org.apache.plc4x.merlot.api.PlcItemListener;
 import org.apache.plc4x.merlot.db.api.DBRecord;
 import org.apache.plc4x.merlot.db.core.DBBaseFactory;
 import org.epics.nt.NTScalar;
-import org.epics.nt.NTScalarArray;
-import org.epics.nt.NTScalarArrayBuilder;
 import org.epics.nt.NTScalarBuilder;
 import org.epics.pvdata.factory.FieldFactory;
 import org.epics.pvdata.pv.Field;
 import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
-import org.epics.pvdata.pv.PVInt;
 import org.epics.pvdata.pv.PVShort;
-import org.epics.pvdata.pv.PVShortArray;
-import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBDoFactory extends DBBaseFactory {
@@ -60,11 +54,21 @@ public class S7DBDoFactory extends DBBaseFactory {
                 add("bPBEN_On", 
fieldCreate.createScalar(ScalarType.pvBoolean)).    
                 add("bPBEN_Off", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                 
                 createStructure();
+        
+        Field sts = fb.addNestedStructure("sts").                              
  
+                createStructure();        
+        
+        Field out =  fb.setId("output_t").   
+                add("bPB_On", fieldCreate.createScalar(ScalarType.pvBoolean)). 
                
+                add("bPB_Off", 
fieldCreate.createScalar(ScalarType.pvBoolean)).                 
+                createStructure();          
                        
         PVStructure pvStructure = ntScalarBuilder.
             value(ScalarType.pvShort).
             addDescriptor().
-            add("cmd", cmd).                
+            add("cmd", cmd). 
+            add("sts", sts). 
+            add("out", out).                 
             add("id", fieldCreate.createScalar(ScalarType.pvString)).  
             add("offset", fieldCreate.createScalar(ScalarType.pvString)).      
           
             add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
@@ -84,8 +88,7 @@ public class S7DBDoFactory extends DBBaseFactory {
     class DBS7DiRecord extends DBRecord implements PlcItemListener {   
         
         private int BUFFER_SIZE = 3;
-        private static final String MONITOR_TF_FIELDS = "field(bPBEN_On," +
-                 "bPBEN_Off)";         
+        private static final String MONITOR_TF_FIELDS = "field(write_enable, 
out{bPBEN_On,bPBEN_Off})";         
     
         private PVShort value; 
         private PVShort write_value;
@@ -97,7 +100,11 @@ public class S7DBDoFactory extends DBBaseFactory {
         private PVBoolean bPB_On;
         private PVBoolean bPB_Off; 
         private PVBoolean bPBEN_On;  
-        private PVBoolean bPBEN_Off;         
+        private PVBoolean bPBEN_Off;
+        
+        private PVShort out_iMode; 
+        private PVBoolean out_bPB_On;
+        private PVBoolean out_bPB_Off;         
         
         byte byTemp;
     
@@ -107,14 +114,19 @@ public class S7DBDoFactory extends DBBaseFactory {
             write_value = pvStructure.getShortField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");
             
-            iMode = pvStructure.getShortField("cmd/iMode");
+            PVStructure pvStructureCmd = pvStructure.getStructureField("cmd"); 
             
+            iMode = pvStructureCmd.getShortField("iMode");            
+            bOn = pvStructureCmd.getBooleanField("bOn");            
+            bOnActual = pvStructureCmd.getBooleanField("bOnActual");           
 
+            bPB_On = pvStructureCmd.getBooleanField("bPB_On");
+            bPB_Off = pvStructureCmd.getBooleanField("bPB_Off");            
+            bPBEN_On = pvStructureCmd.getBooleanField("bPBEN_On");
+            bPBEN_Off = pvStructureCmd.getBooleanField("bPBEN_Off");
             
-            bOn = pvStructure.getBooleanField("cmd/bOn");            
-            bOnActual = pvStructure.getBooleanField("cmd/bOnActual");          
  
-            bPB_On = pvStructure.getBooleanField("cmd/bPB_On");
-            bPB_Off = pvStructure.getBooleanField("cmd/bPB_Off");            
-            bPBEN_On = pvStructure.getBooleanField("cmd/bPBEN_On");
-            bPBEN_Off = pvStructure.getBooleanField("cmd/bPBEN_Off");
+            PVStructure pvStructureOut = pvStructure.getStructureField("out"); 
            
+            out_iMode = pvStructureOut.getShortField("iMode");
+            out_bPB_On = pvStructureOut.getBooleanField("bPB_On");
+            out_bPB_Off = pvStructureOut.getBooleanField("bPB_Off");           
  
         }    
 
         /**
@@ -125,19 +137,18 @@ public class S7DBDoFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-//                    innerWriteBuffer.writeShort(intToBcd(write_value.get()));
+                    if (iMode.get() != out_iMode.get()) 
out_iMode.put(iMode.get()); 
+                    if (bPB_On.get() != out_bPB_On.get()) 
out_bPB_On.put(bPB_On.get());
+                    if (bPB_Off.get() != out_bPB_Off.get()) 
out_bPB_Off.put(bPB_Off.get());                      
                     super.process();                      
                 }
-            }               
+            }                      
         }
 
         //udtHMI_DigitalInput
         @Override
         public void atach(final PlcItem plcItem) {
             this.plcItem = plcItem;
-            //offset = this.getPVStructure().getIntField("offset").get() * 
Short.BYTES;  
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
             innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
@@ -158,7 +169,15 @@ public class S7DBDoFactory extends DBBaseFactory {
                 bOn.put(isBitSet(byTemp, 0));
                 bOnActual.put(isBitSet(byTemp, 1));                
                 bPB_On.put(isBitSet(byTemp, 2));  
-                bPB_Off.put(isBitSet(byTemp, 3));                  
+                bPB_Off.put(isBitSet(byTemp, 3)); 
+                
+                if (bFirtsRun) {
+                    out_iMode.put(iMode.get());
+                    out_bPB_On.put(bPB_On.get());
+                    out_bPB_Off.put(bPB_Off.get());                     
+                    bFirtsRun = false;
+                }   
+                
                 bPBEN_On.put(isBitSet(byTemp, 4));
                 bPBEN_Off.put(isBitSet(byTemp, 5)); 
                 
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 5f1d421..ef8ef1e 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
@@ -21,27 +21,20 @@ package org.apache.plc4x.merlot.drv.s7.core;
 import io.netty.buffer.Unpooled;
 import java.util.ArrayList;
 import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.commons.lang3.tuple.MutablePair;
 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.core.DBBaseFactory;
 import org.epics.nt.NTScalar;
-import org.epics.nt.NTScalarArray;
-import org.epics.nt.NTScalarArrayBuilder;
 import org.epics.nt.NTScalarBuilder;
 import org.epics.pvdata.factory.FieldFactory;
 import org.epics.pvdata.pv.Field;
 import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
-import org.epics.pvdata.pv.PVInt;
 import org.epics.pvdata.pv.PVShort;
-import org.epics.pvdata.pv.PVShortArray;
-import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBMotorFactory extends DBBaseFactory {
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBS5TimeFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBS5TimeFactory.java
index b7403d6..a14edaa 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBS5TimeFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBS5TimeFactory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.plc4x.merlot.drv.s7.core;
 
-import io.netty.buffer.Unpooled;
 import java.time.Duration;
 import java.util.ArrayList;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -39,7 +38,6 @@ import org.epics.pvdata.pv.PVShortArray;
 import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBS5TimeFactory extends DBBaseFactory {
@@ -139,7 +137,7 @@ public class S7DBS5TimeFactory extends DBBaseFactory {
                             write_value.put(writeValue);        
                         }
                     } catch (Exception ex) {
-                        LOGGER.info("S5TIME mal formed.");
+                        LOGGER.info("S5TIME bad formed.");
                     }
                                               
                 }
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBStringFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBStringFactory.java
index ac18a23..e627c84 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBStringFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBStringFactory.java
@@ -20,7 +20,6 @@ package org.apache.plc4x.merlot.drv.s7.core;
 
 import io.netty.buffer.Unpooled;
 import java.nio.charset.Charset;
-import java.time.Duration;
 import java.util.ArrayList;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.plc4x.merlot.api.PlcItem;
@@ -35,13 +34,10 @@ import org.epics.pvdata.factory.FieldFactory;
 import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
-import org.epics.pvdata.pv.PVInt;
-import org.epics.pvdata.pv.PVShort;
 import org.epics.pvdata.pv.PVShortArray;
 import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBStringFactory extends DBBaseFactory {
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBTimeFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBTimeFactory.java
index 4e728b3..8d63bda 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBTimeFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBTimeFactory.java
@@ -18,7 +18,6 @@
  */
 package org.apache.plc4x.merlot.drv.s7.core;
 
-import io.netty.buffer.Unpooled;
 import java.time.Duration;
 import java.util.ArrayList;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -35,12 +34,10 @@ import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
 import org.epics.pvdata.pv.PVInt;
-import org.epics.pvdata.pv.PVShort;
 import org.epics.pvdata.pv.PVShortArray;
 import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBTimeFactory extends DBBaseFactory {
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBTimeOfDayFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBTimeOfDayFactory.java
index 1beb5ec..ec57114 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBTimeOfDayFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBTimeOfDayFactory.java
@@ -18,8 +18,6 @@
  */
 package org.apache.plc4x.merlot.drv.s7.core;
 
-import io.netty.buffer.Unpooled;
-import java.time.Duration;
 import java.time.LocalTime;
 import java.util.ArrayList;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -36,12 +34,10 @@ import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
 import org.epics.pvdata.pv.PVInt;
-import org.epics.pvdata.pv.PVShort;
 import org.epics.pvdata.pv.PVShortArray;
 import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBTimeOfDayFactory extends DBBaseFactory {
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveFactory.java
index 763049b..c085df5 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveFactory.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/core/S7DBValveFactory.java
@@ -20,32 +20,21 @@ package org.apache.plc4x.merlot.drv.s7.core;
 
 import io.netty.buffer.Unpooled;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Optional;
 import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.commons.lang3.tuple.MutablePair;
-import org.apache.commons.lang3.tuple.Pair;
 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.core.DBBaseFactory;
 import org.epics.nt.NTScalar;
-import org.epics.nt.NTScalarArray;
-import org.epics.nt.NTScalarArrayBuilder;
 import org.epics.nt.NTScalarBuilder;
 import org.epics.pvdata.factory.FieldFactory;
 import org.epics.pvdata.pv.Field;
 import org.epics.pvdata.pv.FieldBuilder;
 import org.epics.pvdata.pv.FieldCreate;
 import org.epics.pvdata.pv.PVBoolean;
-import org.epics.pvdata.pv.PVInt;
 import org.epics.pvdata.pv.PVShort;
-import org.epics.pvdata.pv.PVShortArray;
-import org.epics.pvdata.pv.PVString;
 import org.epics.pvdata.pv.PVStructure;
 import org.epics.pvdata.pv.ScalarType;
-import org.epics.pvdatabase.PVRecord;
 
 
 public class S7DBValveFactory extends DBBaseFactory {
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 8bb73c5..12c3f21 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
@@ -172,10 +172,9 @@ public class S7DBWriterHandlerImpl implements 
DBWriterHandler {
                                     break; 
                             }
                             
-                            ArrayList<ImmutablePair<Integer,Integer>> 
fieldOffsets = dbRecord.getFieldOffsets();
+                            ArrayList<ImmutablePair<Integer, Byte>> 
fieldOffsets = dbRecord.getFieldOffsets();
                             byteOffset = dbRecord.getByteOffset() + 
((fieldOffsets.get(index) != null)?fieldOffsets.get(index).left:0);
-                            bitOffset = (byte) ((fieldOffsets.get(index) != 
null)?fieldOffsets.get(index).right:-1);
-                            
+                            bitOffset = ((fieldOffsets.get(index) != 
null)?fieldOffsets.get(index).right: -1);                               
                             if (optPlcItem.isPresent()) {
                                 optPlcItem.get().itemWrite(byteBuf, 
byteOffset, bitOffset);  
                             }                                                  
                                  
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 dcf2497..e896a15 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
@@ -169,7 +169,7 @@
     <!-- TODO: se requiere cambiar el identificador, causa problema con DAS. 
-->
     <service ref="S7DBWriterHandlerImpl" 
interface="org.apache.plc4x.merlot.db.api.DBWriterHandler">
         <service-properties>
-            <entry key="DEVICE_CATEGORY"  value="s7"/>           
+            <entry key="db.record.writehandler.category"  value="s7"/>         
  
         </service-properties>        
     </service>
 

Reply via email to