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 29dea3c  Fix scalar handling.
29dea3c is described below

commit 29dea3cdf2a9fc1dad74b546001fd84567a9cf89
Author: César García <[email protected]>
AuthorDate: Tue Dec 10 10:13:44 2024 -0400

    Fix scalar handling.
---
 .../plc4x/merlot/api/command/DemoCommand004.java   |  2 +-
 .../org/apache/plc4x/merlot/db/api/DBRecord.java   |  2 +-
 .../apache/plc4x/merlot/db/core/DBByteFactory.java |  5 +--
 .../plc4x/merlot/db/core/DBDoubleFactory.java      |  5 +--
 .../plc4x/merlot/db/core/DBFloatFactory.java       |  5 +--
 .../apache/plc4x/merlot/db/core/DBIntFactory.java  |  5 +--
 .../apache/plc4x/merlot/db/core/DBLongFactory.java |  5 +--
 .../plc4x/merlot/db/core/DBShortFactory.java       |  5 +--
 .../plc4x/merlot/db/core/DBUByteFactory.java       |  5 +--
 .../apache/plc4x/merlot/db/core/DBUIntFactory.java |  5 +--
 .../plc4x/merlot/db/core/DBULongFactory.java       |  9 ++---
 .../plc4x/merlot/db/core/DBUShortFactory.java      |  5 +--
 .../plc4x/merlot/drv/s7/core/S7DBAoFactory.java    | 45 +++++++++++++---------
 .../merlot/drv/s7/impl/S7DBWriterHandlerImpl.java  | 24 ++++++++----
 .../merlot/drv/s7/impl/S7PlcTagFunctionImpl.java   |  4 +-
 15 files changed, 59 insertions(+), 72 deletions(-)

diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
index e90a0eb..e99e7e4 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
@@ -87,7 +87,7 @@ public class DemoCommand004  implements Action  {
                             optPlcDevice.get().getUid().toString(),
                             "S7ITEM_" + i,
                             "S7Item description _" + i,
-                            "%DB100:0:USINT[48]",
+                            "%DB100:0:USINT[100]",
                             "true");
                     if (optPlcItem.isPresent()){
                         optPlcItem.get().enable();
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 998ae4b..b126166 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
@@ -119,7 +119,7 @@ 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));
+            fieldOffsets.set(2, new ImmutablePair(byteOffset,(byte) -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 )); 
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 eb80299..c1522b8 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
@@ -112,9 +112,7 @@ public class DBByteFactory extends DBBaseFactory {
         {           
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeByte(write_value.get());             
            
+                    write_value.put(value.get());                              
                    
                     super.process();                      
                 }
             }                     
@@ -125,7 +123,6 @@ public class DBByteFactory extends DBBaseFactory {
             this.plcItem = plcItem;
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
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 80fb780..0a355ef 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
@@ -111,9 +111,7 @@ public class DBDoubleFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeDouble(write_value.get());           
              
+                    write_value.put(value.get());                              
                   
                     super.process();                      
                 }
             }          
@@ -124,7 +122,6 @@ public class DBDoubleFactory extends DBBaseFactory {
             this.plcItem = plcItem;
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBFloatFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBFloatFactory.java
index ec6d2ac..26f25a1 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
@@ -111,9 +111,7 @@ public class DBFloatFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeFloat(write_value.get());            
             
+                    write_value.put(value.get());                              
                    
                     super.process();                      
                 }
             }          
@@ -124,7 +122,6 @@ public class DBFloatFactory extends DBBaseFactory {
             this.plcItem = plcItem; 
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
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 2d09749..dd42340 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
@@ -108,9 +108,7 @@ public class DBIntFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeInt(write_value.get());              
           
+                    write_value.put(value.get());                              
                     
                     super.process();                      
                 }
             }          
@@ -121,7 +119,6 @@ public class DBIntFactory extends DBBaseFactory {
             this.plcItem = plcItem; 
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
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 ad3916b..369cde7 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
@@ -108,9 +108,7 @@ public class DBLongFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeLong(write_value.get());             
            
+                    write_value.put(value.get());                              
                  
                     super.process();                      
                 }
             }
@@ -121,7 +119,6 @@ public class DBLongFactory extends DBBaseFactory {
             this.plcItem = plcItem;  
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
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 b1e8cab..398b065 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
@@ -113,9 +113,7 @@ public class DBShortFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeShort(write_value.get());            
             
+                    write_value.put(value.get());                              
                     
                     super.process();                      
                 }
             }               
@@ -126,7 +124,6 @@ public class DBShortFactory extends DBBaseFactory {
             this.plcItem = plcItem;
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
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 a931207..af55c85 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
@@ -108,9 +108,7 @@ public class DBUByteFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeByte(write_value.get());             
            
+                    write_value.put(value.get());                              
                     
                     super.process();                      
                 }
             }              
@@ -121,7 +119,6 @@ public class DBUByteFactory extends DBBaseFactory {
             this.plcItem = plcItem;             
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
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 37ca32d..1a7e609 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
@@ -108,9 +108,7 @@ public class DBUIntFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeInt(write_value.get());              
           
+                    write_value.put(value.get());                              
                    
                     super.process();                      
                 }
             }              
@@ -121,7 +119,6 @@ public class DBUIntFactory extends DBBaseFactory {
             this.plcItem = plcItem;  
             getOffset( this.getPVStructure().getStringField("offset").get());
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBULongFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBULongFactory.java
index cd210cf..c49dc47 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
@@ -110,9 +110,7 @@ public class DBULongFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeLong(write_value.get());             
            
+                    write_value.put(value.get());                              
                   
                     super.process();                      
                 }
             }             
@@ -123,7 +121,6 @@ public class DBULongFactory extends DBBaseFactory {
             this.plcItem = plcItem;
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
@@ -134,8 +131,8 @@ public class DBULongFactory extends DBBaseFactory {
         @Override
         public void update() {
             if (null != plcItem)   
-                if (value.get() != innerBuffer.getUnsignedMedium(0))
-                value.put(innerBuffer.getUnsignedMedium(0));
+                if (value.get() != innerBuffer.getLong(0))
+                value.put(innerBuffer.getLong(0));
         }
         
         @Override
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUShortFactory.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUShortFactory.java
index f472877..aaed46e 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
@@ -110,9 +110,7 @@ public class DBUShortFactory extends DBBaseFactory {
         {
             if (null != plcItem) {               
                 if (write_enable.get()) {                          
-                    write_value.put(value.get());                           
-                    innerWriteBuffer.clear();                     
-                    innerWriteBuffer.writeShort(write_value.get());            
             
+                    write_value.put(value.get());                              
                     
                     super.process();                      
                 }
             }              
@@ -123,7 +121,6 @@ public class DBUShortFactory extends DBBaseFactory {
             this.plcItem = plcItem;
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
             innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 
BUFFER_SIZE);
-            innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
         }
 
         @Override
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 d26124f..fe95834 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
@@ -119,7 +119,11 @@ public class S7DBAoFactory extends DBBaseFactory {
         private PVInt iEstopFunction;
         
         private PVBoolean bOutOfRange; 
-        private PVBoolean bConfiguratonError;         
+        private PVBoolean bConfiguratonError;
+        
+        private PVShort out_iMode;         
+        private PVFloat out_rManualValue;         
+        private PVBoolean out_bPBEN_ResetError;         
         
         byte byTemp;
     
@@ -129,24 +133,27 @@ public class S7DBAoFactory extends DBBaseFactory {
             write_value = pvStructure.getShortField("write_value");
             write_enable = pvStructure.getBooleanField("write_enable");
             
-            iMode = pvStructure.getShortField("cmd/iMode");
-            iErrorCode = pvStructure.getShortField("cmd/iErrorCode"); 
-            
-            rValue = pvStructure.getFloatField("cmd/rValue");             
-            rActiveValue = pvStructure.getFloatField("cmd/rActiveValue"); 
-            rManualValue = pvStructure.getFloatField("cmd/rManualValue");
-            rEstopValue = pvStructure.getFloatField("cmd/rEstopValue");        
     
-                    
-            bPB_ResetError = pvStructure.getBooleanField("cmd/bPB_ResetError");
-            bPBEN_ResetError = 
pvStructure.getBooleanField("cmd/bPBEN_ResetError");
-            bError = pvStructure.getBooleanField("cmd/bError");
-            bInterlock = pvStructure.getBooleanField("cmd/bInterlock"); 
-            
-            iEstopFunction =  pvStructure.getIntField("cmd/iEstopFunction");
-            
-            bOutOfRange =  pvStructure.getBooleanField("sts/iEstopFunction");
-            bConfiguratonError =  
pvStructure.getBooleanField("sts/ConfiguratonError");            
+            PVStructure pvStructureCmd = pvStructure.getStructureField("cmd"); 
             
+            iMode = pvStructureCmd.getShortField("iMode");
+            iErrorCode = pvStructureCmd.getShortField("iErrorCode");           
  
+            rValue = pvStructureCmd.getFloatField("rValue");             
+            rActiveValue = pvStructureCmd.getFloatField("rActiveValue"); 
+            rManualValue = pvStructureCmd.getFloatField("rManualValue");
+            rEstopValue = pvStructureCmd.getFloatField("rEstopValue");         
                        
+            bPB_ResetError = pvStructureCmd.getBooleanField("bPB_ResetError");
+            bPBEN_ResetError = 
pvStructureCmd.getBooleanField("bPBEN_ResetError");
+            bError = pvStructureCmd.getBooleanField("bError");
+            bInterlock = pvStructureCmd.getBooleanField("bInterlock");         
    
+            iEstopFunction =  pvStructureCmd.getIntField("iEstopFunction");
             
+            PVStructure pvStructureSts = pvStructure.getStructureField("sts"); 
           
+            bOutOfRange =  
pvStructureSts.getBooleanField("sts/iEstopFunction");
+            bConfiguratonError =  
pvStructureSts.getBooleanField("sts/ConfiguratonError");
+
+            PVStructure pvStructureOut = pvStructure.getStructureField("out");
+            out_iMode = pvStructureOut.getShortField("iMode");
+            out_rManualValue = pvStructureOut.getFloatField("rManualValue");
+            out_bPBEN_ResetError = 
pvStructureOut.getBooleanField("bPBEN_ResetError");
         }    
 
         /**
@@ -171,7 +178,7 @@ public class S7DBAoFactory extends DBBaseFactory {
             this.plcItem = plcItem;
             //offset = this.getPVStructure().getIntField("offset").get() * 
Short.BYTES;  
             getOffset( this.getPVStructure().getStringField("offset").get());  
          
-            innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, 3);
+            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/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 12c3f21..e522aba 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
@@ -47,6 +47,7 @@ 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.PVULong;
 import org.epics.pvdata.pv.PVUShort;
 import static org.epics.pvdata.pv.ScalarType.pvBoolean;
 import static org.epics.pvdata.pv.ScalarType.pvByte;
@@ -86,6 +87,7 @@ public class S7DBWriterHandlerImpl implements DBWriterHandler 
{
     public void monitorEvent(Monitor monitor) {
         int byteOffset = 0;
         byte bitOffset = -1;
+        Integer intTemp;
         try 
         {
             element = monitor.poll();
@@ -155,8 +157,7 @@ public class S7DBWriterHandlerImpl implements 
DBWriterHandler {
                                     byteBuf = Unpooled.buffer(l + 1); 
                                     byteBuf.resetWriterIndex();
                                     byteBuf.writeByte(l);
-                                    byteBuf.writeBytes(((PVString) 
f).get().getBytes());
-                                    
+                                    byteBuf.writeBytes(((PVString) 
f).get().getBytes());                                    
                                     break;  
                                 case pvUByte: 
                                     byteBuf.writeByte(((PVUByte) f).get());    
                                 
@@ -165,19 +166,28 @@ public class S7DBWriterHandlerImpl implements 
DBWriterHandler {
                                     byteBuf.writeInt(((PVUInt) f).get());      
                               
                                     break;  
                                 case pvULong:
-                                    byteBuf.writeLong(((PVLong) f).get());     
                                
+                                    byteBuf.writeLong(((PVULong) 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 = ((fieldOffsets.get(index) != 
null)?fieldOffsets.get(index).right: -1);                               
+                            final ArrayList<ImmutablePair<Integer, Byte>> 
fieldOffsets = dbRecord.getFieldOffsets();
+                            byteOffset = ((fieldOffsets.get(index) != 
null)?fieldOffsets.get(index).left:0);
+                            bitOffset  = ((fieldOffsets.get(index) != 
null)?fieldOffsets.get(index).right.byteValue():(byte) -1);
+                            System.out.println("Paso por aqui 9: " + 
byteOffset);
+//                            if (fieldOffsets.get(index) != null) {
+//                                bitOffset = 
fieldOffsets.get(index).right.byteValue();  
+//                            } else {
+//                                bitOffset = (byte) -1;
+//                            }
+//                            System.out.println("Entero: " + bitOffset);
+
                             if (optPlcItem.isPresent()) {
                                 optPlcItem.get().itemWrite(byteBuf, 
byteOffset, bitOffset);  
-                            }                                                  
                                  
+                            }   
+                            System.out.println(">> ByteOffset: " + byteOffset 
+ "  bitOffset: " + bitOffset + "BufLen: " + byteBuf.readableBytes());
                         };
                         
                         index = changedBitSet.nextSetBit(index);
diff --git 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
index 73dd190..cec9df0 100644
--- 
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
+++ 
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
@@ -164,10 +164,10 @@ public class S7PlcTagFunctionImpl implements 
PlcTagFunction {
                                             intBlockNumber,
                                             intByteOffset,
                                             bitOffset,
-                                            byteBuf.capacity());
+                                            byteBuf.readableBytes());
                         LOGGER.info("Write BOOL S7Tag: {}", 
s7PlcTag.toString());                         
                         byteBuf.resetReaderIndex();
-                        for (int i=0; i < byteBuf.capacity(); i++){
+                        for (int i=0; i < byteBuf.readableBytes(); i++){
                             objValues[i] = byteBuf.readBoolean();
                         }                        
                     break;

Reply via email to