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>