You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cg...@apache.org on 2024/12/20 15:45:49 UTC
(plc4x-extras) branch feature/merlot updated: Add S7 PV types and test support.
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 c99baab Add S7 PV types and test support.
c99baab is described below
commit c99baab640e0b411702e39372d9bd8e40c949b6b
Author: César García <ce...@ceos.com.ve>
AuthorDate: Fri Dec 20 11:45:31 2024 -0400
Add S7 PV types and test support.
---
.../org/apache/plc4x/merlot/db/api/DBRecord.java | 2 +-
.../plc4x/merlot/db/core/DBBooleanFactory.java | 2 +-
.../apache/plc4x/merlot/db/core/DBByteFactory.java | 2 +-
.../plc4x/merlot/db/core/DBDoubleFactory.java | 2 +-
.../plc4x/merlot/db/core/DBFloatFactory.java | 2 +-
.../apache/plc4x/merlot/db/core/DBIntFactory.java | 2 +-
.../apache/plc4x/merlot/db/core/DBLongFactory.java | 2 +-
.../plc4x/merlot/db/core/DBShortFactory.java | 2 +-
.../plc4x/merlot/db/core/DBStringFactory.java | 2 +-
.../plc4x/merlot/db/core/DBUByteFactory.java | 2 +-
.../apache/plc4x/merlot/db/core/DBUIntFactory.java | 2 +-
.../plc4x/merlot/db/core/DBULongFactory.java | 2 +-
.../plc4x/merlot/db/core/DBUShortFactory.java | 2 +-
.../plc4x/merlot/db/impl/DBWriterHandlerImpl.java | 5 +-
.../merlot/org.apache.plc4x.merlot.drv.s7/pom.xml | 18 ++
.../plc4x/merlot/drv/s7/core/S7DBAiFactory.java | 140 +++++++---
.../plc4x/merlot/drv/s7/core/S7DBAoFactory.java | 5 +-
.../merlot/drv/s7/core/S7DBCounterFactory.java | 2 +-
.../merlot/drv/s7/core/S7DBDateAndTimeFactory.java | 2 +-
.../plc4x/merlot/drv/s7/core/S7DBDateFactory.java | 2 +-
.../plc4x/merlot/drv/s7/core/S7DBDiFactory.java | 6 +-
.../plc4x/merlot/drv/s7/core/S7DBDoFactory.java | 6 +-
.../plc4x/merlot/drv/s7/core/S7DBMotorFactory.java | 8 +-
.../merlot/drv/s7/core/S7DBS5TimeFactory.java | 2 +-
.../merlot/drv/s7/core/S7DBStringFactory.java | 2 +-
.../plc4x/merlot/drv/s7/core/S7DBTimeFactory.java | 2 +-
.../merlot/drv/s7/core/S7DBTimeOfDayFactory.java | 2 +-
.../plc4x/merlot/drv/s7/core/S7DBValveFactory.java | 11 +-
.../plc4x/merlot/drv/s7/core/S7DBAiTest.java | 285 +++++++++++++++++++++
.../plc4x/merlot/drv/s7/core/S7TestSupport.java | 25 ++
30 files changed, 488 insertions(+), 61 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 b126166..b524538 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
@@ -115,7 +115,7 @@ public class DBRecord extends PVRecord implements PlcItemListener {
return MONITOR_VALUE_FIELD;
};
- public void getOffset(String strOffset){
+ public void ParseOffset(String strOffset){
Matcher matcher;
if ((matcher = BYTE_OFFSET_PATTERN.matcher(strOffset)).matches()){
byteOffset = Integer.parseInt(matcher.group(BYTE_OFFSET ));
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 da8d981..03a23f6 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
@@ -127,7 +127,7 @@ public class DBBooleanFactory extends DBBaseFactory {
public void atach(PlcItem plcItem) {
try {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
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 c1522b8..e495edd 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
@@ -121,7 +121,7 @@ public class DBByteFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 0a355ef..e297c61 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
@@ -120,7 +120,7 @@ public class DBDoubleFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 26f25a1..6bb3d27 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
@@ -120,7 +120,7 @@ public class DBFloatFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 dd42340..0dc155e 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
@@ -117,7 +117,7 @@ public class DBIntFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 369cde7..f11e400 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
@@ -117,7 +117,7 @@ public class DBLongFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 398b065..63fc2d5 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
@@ -122,7 +122,7 @@ public class DBShortFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
diff --git a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBStringFactory.java b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBStringFactory.java
index 081db47..5295acc 100644
--- a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBStringFactory.java
+++ b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBStringFactory.java
@@ -114,7 +114,7 @@ public class DBStringFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = Unpooled.wrappedBuffer(plcItem.getInnerBuffer(), 0, offset);
}
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 af55c85..ca8ba28 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
@@ -117,7 +117,7 @@ public class DBUByteFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 1a7e609..9a14587 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
@@ -117,7 +117,7 @@ public class DBUIntFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 c49dc47..f35ba5d 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
@@ -119,7 +119,7 @@ public class DBULongFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 aaed46e..8a04662 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
@@ -119,7 +119,7 @@ public class DBUShortFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 7043b3f..5ee1386 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
@@ -71,7 +71,10 @@ import org.slf4j.LoggerFactory;
* the associated PlcItem.
*/
public class DBWriterHandlerImpl implements DBWriterHandler {
-
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
private static final Logger LOGGER = LoggerFactory.getLogger(DBWriterHandlerImpl.class);
private CreateRequest createRequest = CreateRequest.create();
private Map<Monitor, DBRecord> recordMonitors = new HashMap<>();
diff --git a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/pom.xml b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/pom.xml
index 8c282ad..48cdafa 100644
--- a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/pom.xml
+++ b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/pom.xml
@@ -84,5 +84,23 @@
<artifactId>org.apache.plc4x.merlot.db</artifactId>
<version>0.13.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-api</artifactId>
+ <version>5.10.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-params</artifactId>
+ <version>5.10.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <version>5.10.3</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
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 3980876..0bee31c 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
@@ -19,6 +19,7 @@
package org.apache.plc4x.merlot.drv.s7.core;
import io.netty.buffer.Unpooled;
+import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.plc4x.merlot.api.PlcItem;
import org.apache.plc4x.merlot.api.PlcItemListener;
import org.apache.plc4x.merlot.db.api.DBRecord;
@@ -34,6 +35,7 @@ import org.epics.pvdata.pv.PVFloat;
import org.epics.pvdata.pv.PVShort;
import org.epics.pvdata.pv.PVStructure;
import org.epics.pvdata.pv.ScalarType;
+import org.epics.pvdata.pv.Structure;
public class S7DBAiFactory extends DBBaseFactory {
@@ -45,7 +47,7 @@ public class S7DBAiFactory extends DBBaseFactory {
NTScalarBuilder ntScalarBuilder = NTScalar.createBuilder();
FieldBuilder fb = fieldCreate.createFieldBuilder();
- Field cmd = fb.addNestedStructure("cmd").
+ Field cmd = fb.setId("cmd_t").
add("iMode", fieldCreate.createScalar(ScalarType.pvShort)).
add("iErrorCode", fieldCreate.createScalar(ScalarType.pvShort)).
add("iStatus", fieldCreate.createScalar(ScalarType.pvShort)).
@@ -54,33 +56,45 @@ public class S7DBAiFactory extends DBBaseFactory {
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)).
+ add("bError", fieldCreate.createScalar(ScalarType.pvBoolean)).
createStructure();
- Field sts = fb.addNestedStructure("sts").
+ Field sts = fb.setId("sts_t").
add("bLowLowAlarm", fieldCreate.createScalar(ScalarType.pvBoolean)).
add("bHighHighAlarm", fieldCreate.createScalar(ScalarType.pvBoolean)).
- add("bInvalid", fieldCreate.createScalar(ScalarType.pvBoolean)).
+ add("bInvalid", fieldCreate.createScalar(ScalarType.pvBoolean)).
createStructure();
- Field out = fb.setId("output_t").
+ Field par = fb.setId("par_t").
add("iMode", fieldCreate.createScalar(ScalarType.pvShort)).
add("rManualValue", fieldCreate.createScalar(ScalarType.pvFloat)).
- add("bPB_ResetError", fieldCreate.createScalar(ScalarType.pvBoolean)).
+ add("bPB_ResetError", fieldCreate.createScalar(ScalarType.pvBoolean)).
+
+ add("iSensorType", fieldCreate.createScalar(ScalarType.pvShort)).
+ add("rInEngUnitsMin", fieldCreate.createScalar(ScalarType.pvFloat)).
+ add("rInEngUnitsMax", fieldCreate.createScalar(ScalarType.pvFloat)).
+ add("rInLowLow", fieldCreate.createScalar(ScalarType.pvFloat)).
+ add("rInLow", fieldCreate.createScalar(ScalarType.pvFloat)).
+ add("rInHigh", fieldCreate.createScalar(ScalarType.pvFloat)).
+ add("rInHighHigh", fieldCreate.createScalar(ScalarType.pvFloat)).
+ add("rInLowLowDeadband", fieldCreate.createScalar(ScalarType.pvFloat)).
+ add("rInLowDeadband", fieldCreate.createScalar(ScalarType.pvFloat)).
+ add("rInHighDeadband", fieldCreate.createScalar(ScalarType.pvFloat)).
+ add("rInHighHighDeadband", fieldCreate.createScalar(ScalarType.pvFloat)).
createStructure();
PVStructure pvStructure = ntScalarBuilder.
value(ScalarType.pvShort).
- addDescriptor().
- add("cmd", cmd).
- add("sts", sts).
- add("out", out).
+ addDescriptor().
add("id", fieldCreate.createScalar(ScalarType.pvString)).
add("offset", fieldCreate.createScalar(ScalarType.pvString)).
add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
add("scan_enable", fieldCreate.createScalar(ScalarType.pvBoolean)).
add("write_enable", fieldCreate.createScalar(ScalarType.pvBoolean)).
- add("write_value", fieldCreate.createScalar(ScalarType.pvShort)).
+ add("write_value", fieldCreate.createScalar(ScalarType.pvShort)).
+ add("cmd", cmd).
+ add("sts", sts).
+ add("par", par).
addAlarm().
addTimeStamp().
addDisplay().
@@ -93,8 +107,13 @@ public class S7DBAiFactory extends DBBaseFactory {
class DBS7DiRecord extends DBRecord implements PlcItemListener {
- private int BUFFER_SIZE = 20;
- private static final String MONITOR_TF_FIELDS = "field(write_enable, out{iMode, rManualValue, bPB_ResetError})";
+ private int BUFFER_SIZE = 64;
+ private static final String MONITOR_TF_FIELDS = "field(write_enable, "
+ + "out{iMode, rManualValue, bPB_ResetError,"
+ + "iSensorType, rInEngUnitsMin, rInEngUnitsMax,"
+ + "rInLowLow, rInLow, rInHigh,"
+ + "rInHighHigh, rInLowLowDeadband, rInLowDeadband,"
+ + "rInHighDeadband, rInHighHighDeadband})";
private PVShort value;
@@ -119,16 +138,30 @@ public class S7DBAiFactory extends DBBaseFactory {
private PVShort out_iMode;
private PVFloat out_rManualValue;
- private PVBoolean out_bPB_ResetError;
+ private PVBoolean out_bPB_ResetError;
+
+ private PVShort iSensorType;
+ private PVFloat rInEngUnitsMin;
+ private PVFloat rInEngUnitsMax;
+ private PVFloat rInLowLow;
+ private PVFloat rInLow;
+ private PVFloat rInHigh;
+ private PVFloat rInHighHigh;
+ private PVFloat rInLowLowDeadband;
+ private PVFloat rInLowDeadband;
+ private PVFloat rInHighDeadband;
+ private PVFloat rInHighHighDeadband;
byte byTemp;
public DBS7DiRecord(String recordName,PVStructure pvStructure) {
super(recordName, pvStructure);
- value = pvStructure.getShortField("value");
+ fieldOffsets.clear();
+ value = pvStructure.getShortField("value");
write_value = pvStructure.getShortField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
+ //Read command values
PVStructure pvStructureCmd = pvStructure.getStructureField("cmd");
iMode = pvStructureCmd.getShortField("iMode");
iErrorCode = pvStructureCmd.getShortField("iErrorCode");
@@ -140,16 +173,47 @@ public class S7DBAiFactory extends DBBaseFactory {
bPBEN_ResetError = pvStructureCmd.getBooleanField("bPBEN_ResetError");
bError = pvStructureCmd.getBooleanField("bError");
+ //Read status values
PVStructure pvStructureSts = pvStructure.getStructureField("sts");
- bLowLowAlarm = pvStructureSts.getBooleanField("bLowLowAlar");
+ bLowLowAlarm = pvStructureSts.getBooleanField("bLowLowAlarm");
bHighHighAlarm = pvStructureSts.getBooleanField("bHighHighAlarm");
bInvalid = pvStructureSts.getBooleanField("bInvalid");
- PVStructure pvStructureOut = pvStructure.getStructureField("out");
- out_iMode = pvStructureOut.getShortField("iMode");
- out_rManualValue = pvStructureOut.getFloatField("rManualValue");
- out_bPB_ResetError = pvStructureOut.getBooleanField("bPB_ResetError");
-
+ //Write command and parameters values
+ PVStructure pvStructurePar = pvStructure.getStructureField("par");
+ out_iMode = pvStructurePar.getShortField("iMode");
+ out_rManualValue = pvStructurePar.getFloatField("rManualValue");
+ out_bPB_ResetError = pvStructurePar.getBooleanField("bPB_ResetError");
+
+ iSensorType = pvStructurePar.getShortField("iSensorType");
+ rInEngUnitsMin = pvStructurePar.getFloatField("rInEngUnitsMin");
+ rInEngUnitsMax = pvStructurePar.getFloatField("rInEngUnitsMax");
+ rInLowLow = pvStructurePar.getFloatField("rInLowLow");
+ rInLow = pvStructurePar.getFloatField("rInLow");
+ rInHigh = pvStructurePar.getFloatField("rInHigh");
+ rInHighHigh = pvStructurePar.getFloatField("rInHighHigh");
+ rInLowLowDeadband = pvStructurePar.getFloatField("rInLowLowDeadband");
+ rInLowDeadband = pvStructurePar.getFloatField("rInLowDeadband");
+ rInHighDeadband = pvStructurePar.getFloatField("rInHighDeadband");
+ rInHighHighDeadband = pvStructurePar.getFloatField("rInHighHighDeadband");
+
+ fieldOffsets.add(0, null);
+ fieldOffsets.add(1, null);
+ fieldOffsets.add(2, null);
+ fieldOffsets.add(3, new ImmutablePair(0, (byte) -1)); //iMode
+ fieldOffsets.add(4, new ImmutablePair(14, (byte) -1)); //rManualValue
+ fieldOffsets.add(5, new ImmutablePair(18, (byte) 0)); //bPB_ResetError
+ fieldOffsets.add(6, new ImmutablePair(22, (byte) -1)); //iSensorType
+ fieldOffsets.add(7, new ImmutablePair(24, (byte) -1)); //rInEngUnitsMin
+ fieldOffsets.add(8, new ImmutablePair(28, (byte) -1)); //rInEngUnitsMax
+ fieldOffsets.add(9, new ImmutablePair(32, (byte) -1)); //rInLowLow
+ fieldOffsets.add(10, new ImmutablePair(36,(byte) -1)); //rInLow
+ fieldOffsets.add(11, new ImmutablePair(40,(byte) -1)); //rInHigh
+ fieldOffsets.add(12, new ImmutablePair(44,(byte) -1)); //rInHighHigh
+ fieldOffsets.add(13, new ImmutablePair(48,(byte) -1)); //rInLowLowDeadband
+ fieldOffsets.add(14, new ImmutablePair(52,(byte) -1)); //rInLowDeadband
+ fieldOffsets.add(15, new ImmutablePair(56,(byte) -1)); //rInHighDeadband
+ fieldOffsets.add(16, new ImmutablePair(60,(byte) -1)); //rInHighHighDeadband
}
/**
@@ -170,7 +234,7 @@ public class S7DBAiFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
}
@@ -184,23 +248,41 @@ public class S7DBAiFactory extends DBBaseFactory {
public void update() {
if (null != plcItem) {
innerBuffer.resetReaderIndex();
- iMode.put(innerBuffer.readShort());
- iErrorCode.put(innerBuffer.readShort());
- iStatus.put(innerBuffer.readShort());
+ iMode.put(innerBuffer.getShort(0));
+ iErrorCode.put(innerBuffer.getShort(2));
+ iStatus.put(innerBuffer.getShort(4));
+
+ rActiveValue.put(innerBuffer.getFloat(6));
+ rInputValue.put(innerBuffer.getFloat(10));
- rActiveValue.put(innerBuffer.readFloat());
- rInputValue.put(innerBuffer.readFloat());
+ if (bFirtsRun) {
+ rManualValue.put(innerBuffer.getFloat(14));
+ }
- byTemp = innerBuffer.readByte();
+ byTemp = innerBuffer.getByte(18);
bPB_ResetError.put(isBitSet(byTemp, 0));
bPBEN_ResetError.put(isBitSet(byTemp, 1));
bError.put(isBitSet(byTemp, 2));
- byTemp = innerBuffer.readByte();
+ byTemp = innerBuffer.getByte(20);
bLowLowAlarm.put(isBitSet(byTemp, 0));
bHighHighAlarm.put(isBitSet(byTemp, 1));
bInvalid.put(isBitSet(byTemp, 2));
+ if (bFirtsRun) {
+ iSensorType.put(innerBuffer.getShort(22));
+ rInEngUnitsMin.put(innerBuffer.getFloat(24));
+ rInEngUnitsMax.put(innerBuffer.getFloat(28));
+ rInLowLow.put(innerBuffer.getFloat(32));
+ rInLow.put(innerBuffer.getFloat(36));
+ rInHigh.put(innerBuffer.getFloat(40));
+ rInHighHigh.put(innerBuffer.getFloat(44));
+ rInLowLowDeadband.put(innerBuffer.getFloat(48));
+ rInLowDeadband.put(innerBuffer.getFloat(52));
+ rInHighDeadband.put(innerBuffer.getFloat(56));
+ rInHighHighDeadband.put(innerBuffer.getFloat(60));
+ }
+
}
}
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 fe95834..7b0e8d6 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
@@ -133,6 +133,7 @@ public class S7DBAoFactory extends DBBaseFactory {
write_value = pvStructure.getShortField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
+ //Read command values
PVStructure pvStructureCmd = pvStructure.getStructureField("cmd");
iMode = pvStructureCmd.getShortField("iMode");
iErrorCode = pvStructureCmd.getShortField("iErrorCode");
@@ -146,10 +147,12 @@ public class S7DBAoFactory extends DBBaseFactory {
bInterlock = pvStructureCmd.getBooleanField("bInterlock");
iEstopFunction = pvStructureCmd.getIntField("iEstopFunction");
+ //Read status values
PVStructure pvStructureSts = pvStructure.getStructureField("sts");
bOutOfRange = pvStructureSts.getBooleanField("sts/iEstopFunction");
bConfiguratonError = pvStructureSts.getBooleanField("sts/ConfiguratonError");
+ //Write command values
PVStructure pvStructureOut = pvStructure.getStructureField("out");
out_iMode = pvStructureOut.getShortField("iMode");
out_rManualValue = pvStructureOut.getFloatField("rManualValue");
@@ -177,7 +180,7 @@ public class S7DBAoFactory extends DBBaseFactory {
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
//offset = this.getPVStructure().getIntField("offset").get() * Short.BYTES;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( 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/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 f55e5ee..c547a53 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
@@ -130,7 +130,7 @@ public class S7DBCounterFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 2d076ba..ff4c0be 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
@@ -148,7 +148,7 @@ public class S7DBDateAndTimeFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 a38bf82..1bc7511 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
@@ -148,7 +148,7 @@ public class S7DBDateFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 b948781..9a4d291 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
@@ -114,6 +114,7 @@ public class S7DBDiFactory extends DBBaseFactory {
write_value = pvStructure.getShortField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
+ //Read command values
PVStructure pvStructureCmd = pvStructure.getStructureField("cmd");
iMode = pvStructureCmd.getShortField("iMode");
bOn = pvStructureCmd.getBooleanField("bOn");
@@ -123,6 +124,9 @@ public class S7DBDiFactory extends DBBaseFactory {
bPBEN_On = pvStructureCmd.getBooleanField("bPBEN_On");
bPBEN_Off = pvStructureCmd.getBooleanField("bPBEN_Off");
+ //Read status values
+
+ //Write command values
PVStructure pvStructureOut = pvStructure.getStructureField("out");
out_iMode = pvStructureOut.getShortField("iMode");
out_bPB_On = pvStructureOut.getBooleanField("bPB_On");
@@ -150,7 +154,7 @@ public class S7DBDiFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( 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/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 54c63c8..62d4cdd 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
@@ -114,6 +114,7 @@ public class S7DBDoFactory extends DBBaseFactory {
write_value = pvStructure.getShortField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
+ //Read command values
PVStructure pvStructureCmd = pvStructure.getStructureField("cmd");
iMode = pvStructureCmd.getShortField("iMode");
bOn = pvStructureCmd.getBooleanField("bOn");
@@ -123,6 +124,9 @@ public class S7DBDoFactory extends DBBaseFactory {
bPBEN_On = pvStructureCmd.getBooleanField("bPBEN_On");
bPBEN_Off = pvStructureCmd.getBooleanField("bPBEN_Off");
+ //Read status values
+
+ //Write command values
PVStructure pvStructureOut = pvStructure.getStructureField("out");
out_iMode = pvStructureOut.getShortField("iMode");
out_bPB_On = pvStructureOut.getBooleanField("bPB_On");
@@ -149,7 +153,7 @@ public class S7DBDoFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( 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/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 ef8ef1e..5e674c2 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
@@ -171,11 +171,11 @@ public class S7DBMotorFactory extends DBBaseFactory {
write_value = pvStructure.getShortField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
+ //Read command values
PVStructure pvStructureCmd = pvStructure.getStructureField("cmd");
iMode = pvStructureCmd.getShortField("iMode");
iErrorCode = pvStructureCmd.getShortField("iErrorCode");
- iStatus = pvStructureCmd.getShortField("iStatus");
-
+ iStatus = pvStructureCmd.getShortField("iStatus");
bPB_ResetError = pvStructureCmd.getBooleanField("bPB_ResetError");
bPB_Forward = pvStructureCmd.getBooleanField("bPB_Forward");
bPB_Reverse = pvStructureCmd.getBooleanField("bPB_Reverse");
@@ -191,6 +191,7 @@ public class S7DBMotorFactory extends DBBaseFactory {
bError = pvStructureCmd.getBooleanField("bError");
bInterlock = pvStructureCmd.getBooleanField("bInterlock");
+ //Read status values
PVStructure pvStructureSts = pvStructure.getStructureField("sts");
bMotorProtectorTripped = pvStructureSts.getBooleanField("bMotorProtectorTripped");
bLocalDisconnectOff = pvStructureSts.getBooleanField("bLocalDisconnectOff");
@@ -199,6 +200,7 @@ public class S7DBMotorFactory extends DBBaseFactory {
bNoSignalReverse = pvStructureSts.getBooleanField("bNoSignalReverse");
bMotorNotStopped = pvStructureSts.getBooleanField("bMotorNotStopped");
+ //Write command values
PVStructure pvStructureOut = pvStructure.getStructureField("out");
out_iMode = pvStructureOut.getShortField("iMode");
out_bPB_ResetError = pvStructureOut.getBooleanField("bPB_ResetError");
@@ -230,7 +232,7 @@ public class S7DBMotorFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( 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/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 a14edaa..8c4a4dc 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
@@ -147,7 +147,7 @@ public class S7DBS5TimeFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 e627c84..2b47c6d 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
@@ -164,7 +164,7 @@ public class S7DBStringFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
k = plcItem.getItemByteBuf().getByte(byteOffset);
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset + 1, k + 1);
innerWriteBuffer = Unpooled.buffer(k + 1);
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 8d63bda..43dc56a 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
@@ -147,7 +147,7 @@ public class S7DBTimeFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 ec57114..e0a42d1 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
@@ -147,7 +147,7 @@ public class S7DBTimeOfDayFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( this.getPVStructure().getStringField("offset").get());
innerBuffer = plcItem.getItemByteBuf().slice(byteOffset, BUFFER_SIZE);
}
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 c085df5..0619ad6 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
@@ -162,19 +162,18 @@ public class S7DBValveFactory extends DBBaseFactory {
write_value = pvStructure.getShortField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
+ //Read command values
PVStructure pvStructureCmd = pvStructure.getStructureField("cmd");
iMode = pvStructureCmd.getShortField("iMode");
iErrorCode = pvStructureCmd.getShortField("iErrorCode");
- iStatus = pvStructureCmd.getShortField("iStatus");
-
+ iStatus = pvStructureCmd.getShortField("iStatus");
bPB_ResetError = pvStructureCmd.getBooleanField("bPB_ResetError");
bPB_Home = pvStructureCmd.getBooleanField("bPB_Home");
bPB_Work = pvStructureCmd.getBooleanField("bPB_Work");
bPBEN_ResetError = pvStructureCmd.getBooleanField("bPBEN_ResetError");
bPBEN_Home = pvStructureCmd.getBooleanField("bPBEN_Home");
bPBEN_Work = pvStructureCmd.getBooleanField("bPBEN_Work");
- bPBEN_Stop = pvStructureCmd.getBooleanField("bPBEN_Stop");
-
+ bPBEN_Stop = pvStructureCmd.getBooleanField("bPBEN_Stop");
bHomeOn = pvStructureCmd.getBooleanField("bHomeOn");
bWorkOn = pvStructureCmd.getBooleanField("bWorkOn");
bSignalHome = pvStructureCmd.getBooleanField("bSignalHome");
@@ -182,12 +181,14 @@ public class S7DBValveFactory extends DBBaseFactory {
bError = pvStructureCmd.getBooleanField("bError");
bInterlock = pvStructureCmd.getBooleanField("bInterlock");
+ //Read status values
PVStructure pvStructureSts = pvStructure.getStructureField("sts");
bNoHomeFeedback = pvStructureSts.getBooleanField("bNoHomeFeedback");
bNoWorkFeedback = pvStructureSts.getBooleanField("bNoWorkFeedback");
bHomeFeedbackStillActive = pvStructureSts.getBooleanField("bHomeFeedbackStillActive");
bWorkFeedbackStillActive = pvStructureSts.getBooleanField("bWorkFeedbackStillActive");
+ //Write command values
PVStructure pvStructureOut = pvStructure.getStructureField("out");
out_iMode = pvStructureOut.getShortField("iMode");
out_bPB_ResetError = pvStructureOut.getBooleanField("bPB_ResetError");
@@ -217,7 +218,7 @@ public class S7DBValveFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- getOffset( this.getPVStructure().getStringField("offset").get());
+ ParseOffset( 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/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiTest.java b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiTest.java
new file mode 100644
index 0000000..5e06265
--- /dev/null
+++ b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7DBAiTest.java
@@ -0,0 +1,285 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.plc4x.merlot.drv.s7.core;
+
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
+import static io.netty.buffer.Unpooled.buffer;
+import java.util.ArrayList;
+import java.util.Optional;
+import java.util.UUID;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.plc4x.java.api.value.PlcValue;
+import org.apache.plc4x.java.spi.values.PlcBYTE;
+import org.apache.plc4x.java.spi.values.PlcList;
+import org.apache.plc4x.java.spi.values.PlcRawByteArray;
+import org.apache.plc4x.merlot.api.PlcItem;
+import org.apache.plc4x.merlot.api.impl.PlcItemImpl;
+import org.apache.plc4x.merlot.api.impl.PlcItemImpl.PlcItemBuilder;
+import org.apache.plc4x.merlot.db.api.DBRecord;
+import org.apache.plc4x.merlot.db.core.DBBaseFactory;
+import org.epics.pvdata.pv.PVBoolean;
+import org.epics.pvdata.pv.PVFloat;
+import org.epics.pvdata.pv.PVShort;
+import org.epics.pvdata.pv.PVString;
+import org.epics.pvdata.pv.PVStructure;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.*;
+
+
+public class S7DBAiTest {
+
+
+
+ private PVShort value;
+ private PVShort write_value;
+ private PVBoolean write_enable;
+
+ private PVShort iMode;
+ private PVShort iErrorCode;
+ private PVShort iStatus;
+
+ private PVFloat rActiveValue;
+ private PVFloat rInputValue;
+ private PVFloat rManualValue;
+
+ private PVBoolean bPB_ResetError;
+ private PVBoolean bPBEN_ResetError;
+ private PVBoolean bError;
+
+ private PVBoolean bLowLowAlarm;
+ private PVBoolean bHighHighAlarm;
+ private PVBoolean bInvalid;
+
+ private PVShort out_iMode;
+ private PVFloat out_rManualValue;
+ private PVBoolean out_bPB_ResetError;
+
+ private PVShort iSensorType;
+ private PVFloat rInEngUnitsMin;
+ private PVFloat rInEngUnitsMax;
+ private PVFloat rInLowLow;
+ private PVFloat rInLow;
+ private PVFloat rInHigh;
+ private PVFloat rInHighHigh;
+ private PVFloat rInLowLowDeadband;
+ private PVFloat rInLowDeadband;
+ private PVFloat rInHighDeadband;
+ private PVFloat rInHighHighDeadband;
+
+
+
+ public S7DBAiTest() {
+ }
+
+ @BeforeAll
+ public static void setUpClass() {
+ }
+
+ @AfterAll
+ public static void tearDownClass() {
+ }
+
+ @BeforeEach
+ public void setUp() {
+ }
+
+ @AfterEach
+ public void tearDown() {
+ }
+
+ @Test
+ public void FieldOffsetTest() {
+ DBBaseFactory AIFactory = new S7DBAiFactory();
+ DBRecord AI = AIFactory.create("AI_00");
+ ArrayList<ImmutablePair<Integer, Byte>> fieldOffsets = AI.getFieldOffsets();
+
+ assertNull(fieldOffsets.get(0));
+ assertNull(fieldOffsets.get(1));
+ assertNull(fieldOffsets.get(2));
+
+ assertEquals(fieldOffsets.get(3).left, 0); assertEquals(fieldOffsets.get(3).right, (byte) -1);
+ assertEquals(fieldOffsets.get(4).left, 14); assertEquals(fieldOffsets.get(4).right, (byte) -1);
+ assertEquals(fieldOffsets.get(5).left, 18); assertEquals(fieldOffsets.get(5).right, (byte) 0);
+ assertEquals(fieldOffsets.get(6).left, 22); assertEquals(fieldOffsets.get(6).right, (byte) -1);
+ assertEquals(fieldOffsets.get(7).left, 24); assertEquals(fieldOffsets.get(7).right, (byte) -1);
+ assertEquals(fieldOffsets.get(8).left, 28); assertEquals(fieldOffsets.get(8).right, (byte) -1);
+ assertEquals(fieldOffsets.get(9).left, 32); assertEquals(fieldOffsets.get(9).right, (byte) -1);
+ assertEquals(fieldOffsets.get(10).left, 36); assertEquals(fieldOffsets.get(10).right, (byte) -1);
+ assertEquals(fieldOffsets.get(11).left, 40); assertEquals(fieldOffsets.get(11).right, (byte) -1);
+ assertEquals(fieldOffsets.get(12).left, 44); assertEquals(fieldOffsets.get(12).right, (byte) -1);
+ assertEquals(fieldOffsets.get(13).left, 48); assertEquals(fieldOffsets.get(13).right, (byte) -1);
+ assertEquals(fieldOffsets.get(14).left, 52); assertEquals(fieldOffsets.get(14).right, (byte) -1);
+ assertEquals(fieldOffsets.get(15).left, 56); assertEquals(fieldOffsets.get(15).right, (byte) -1);
+ assertEquals(fieldOffsets.get(16).left, 60); assertEquals(fieldOffsets.get(16).right, (byte) -1);
+
+ PVString pvStrOffset = AI.getPVRecordStructure().getPVStructure().getStringField("offset");
+ pvStrOffset.put("1255");
+
+ AI.ParseOffset("1255");
+
+ assertEquals(AI.getBiteOffset(), -1);
+ assertEquals(AI.getByteOffset(), 1255);
+
+ AI.ParseOffset("255.7");
+ assertEquals(AI.getBiteOffset(), 7);
+ assertEquals(AI.getByteOffset(), 255);
+
+ }
+
+ // TODO add test methods here.
+ // The methods must be annotated with annotation @Test. For example:
+ //
+ @Test
+ public void DBRecordTest() {
+ ByteBuf byteBuf = buffer(512);
+ //Create PLCList for the items
+ PlcValue plcValue = new PlcRawByteArray(byteBuf.array());
+
+
+ //Create the Item
+ String uuid = UUID.randomUUID().toString();
+ PlcItem plcItem =new PlcItemImpl.PlcItemBuilder("ITEM_DB42").
+ setItemDescription("SIM DB42 S7").
+ setItemId(uuid).
+ setItemUid(UUID.fromString(uuid)).
+ build();
+
+
+ ByteBuf bufItem = plcItem.getItemByteBuf();
+
+ byteBuf.setShort(0,1234); //iMOde
+ byteBuf.setShort(2,4321); //iErrorCode
+ byteBuf.setShort(4,1010); //iStatus
+ byteBuf.setFloat(6, 3.1416F); //iActiveValue
+ byteBuf.setFloat(10, 3.1416F * 2); //rInputValue
+ byteBuf.setFloat(14, 3.1416F * 4); //rManualValue
+ byteBuf.setShort(22, 123); //iSensorType
+ byteBuf.setFloat(24, 3.1416F * 8); //rInEngUnitsMin
+ byteBuf.setFloat(28, 3.1416F * 10); //rInEngUnitsMax
+ byteBuf.setFloat(32, 3.1416F * 12); //rInLowLow
+ byteBuf.setFloat(36, 3.1416F * 14); //rInLow
+ byteBuf.setFloat(40, 3.1416F * 16); //rInHigh
+ byteBuf.setFloat(44, 3.1416F * 18); //rInHighHigh
+ byteBuf.setFloat(48, 3.1416F * 20); //rInLowLowDeadband
+ byteBuf.setFloat(52, 3.1416F * 22); //rInLowDeadband
+ byteBuf.setFloat(56, 3.1416F * 24); //rInHighDeadband
+ byteBuf.setFloat(60, 3.1416F * 28); //rInHighHighDeadband
+
+ byteBuf.setByte(511, 123);
+
+
+ S7DBAiFactory AIFactory = new S7DBAiFactory();
+ DBRecord AI_00 = AIFactory.create("AI_00");
+ PVString pvStrOffset = AI_00.getPVRecordStructure().getPVStructure().getStringField("offset");
+ pvStrOffset.put("0");
+
+ AI_00.atach(plcItem);
+
+ plcItem.addItemListener(AI_00);
+ plcItem.setPlcValue(plcValue);
+
+ PVStructure pvStructureCmd = AI_00.getPVRecordStructure().getPVStructure().getStructureField("cmd");
+ PVStructure pvStructureSts = AI_00.getPVRecordStructure().getPVStructure().getStructureField("sts");
+ PVStructure pvStructurePar = AI_00.getPVRecordStructure().getPVStructure().getStructureField("par");
+
+ value = AI_00.getPVRecordStructure().getPVStructure().getShortField("value");
+ write_value = AI_00.getPVRecordStructure().getPVStructure().getShortField("write_value");
+ write_enable = AI_00.getPVRecordStructure().getPVStructure().getBooleanField("write_enable");
+
+ //Read command values
+ 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");
+
+ //Read status values
+ bLowLowAlarm = pvStructureSts.getBooleanField("bLowLowAlarm");
+ bHighHighAlarm = pvStructureSts.getBooleanField("bHighHighAlarm");
+ bInvalid = pvStructureSts.getBooleanField("bInvalid");
+
+ //Write command and parameters values
+ out_iMode = pvStructurePar.getShortField("iMode");
+ out_rManualValue = pvStructurePar.getFloatField("rManualValue");
+ out_bPB_ResetError = pvStructurePar.getBooleanField("bPB_ResetError");
+
+ iSensorType = pvStructurePar.getShortField("iSensorType");
+ rInEngUnitsMin = pvStructurePar.getFloatField("rInEngUnitsMin");
+ rInEngUnitsMax = pvStructurePar.getFloatField("rInEngUnitsMax");
+ rInLowLow = pvStructurePar.getFloatField("rInLowLow");
+ rInLow = pvStructurePar.getFloatField("rInLow");
+ rInHigh = pvStructurePar.getFloatField("rInHigh");
+ rInHighHigh = pvStructurePar.getFloatField("rInHighHigh");
+ rInLowLowDeadband = pvStructurePar.getFloatField("rInLowLowDeadband");
+ rInLowDeadband = pvStructurePar.getFloatField("rInLowDeadband");
+ rInHighDeadband = pvStructurePar.getFloatField("rInHighDeadband");
+ rInHighHighDeadband = pvStructurePar.getFloatField("rInHighHighDeadband");
+
+
+ assertEquals(iMode.get(), 1234);
+ assertEquals(iErrorCode.get(), 4321);
+ assertEquals(iStatus.get(), 1010);
+ assertEquals(rActiveValue.get(), 3.1416F);
+ assertEquals(rInputValue.get(), 3.1416F * 2);
+ assertEquals(rManualValue.get(), 3.1416F * 4);
+ assertEquals(iSensorType.get(), 123);
+ assertEquals(rInEngUnitsMin.get(), 3.1416F * 8);
+ assertEquals(rInEngUnitsMax.get(), 3.1416F * 10);
+ assertEquals(rInLowLow.get(), 3.1416F * 12);
+ assertEquals(rInLow.get(), 3.1416F * 14);
+ assertEquals(rInHigh.get(), 3.1416F * 16);
+ assertEquals(rInHighHigh.get(), 3.1416F * 18);
+ assertEquals(rInLowLowDeadband.get(), 3.1416F * 20);
+ assertEquals(rInLowDeadband.get(), 3.1416F * 22);
+ assertEquals(rInHighDeadband.get(), 3.1416F * 24);
+ assertEquals(rInHighHighDeadband.get(), 3.1416F * 28);
+
+ //Test bits
+ byteBuf.setByte(18,0x07); //bPB_resetError = bPBEN_ResetError = bError = true;
+ byteBuf.setByte(20,0x07); //LowLowAlarm = HighHighAlarm=Invalid
+ plcItem.setPlcValue(plcValue);
+
+ assertEquals(bPB_ResetError.get(), true);
+ assertEquals(bPBEN_ResetError.get(), true);
+ assertEquals(bError.get(), true);
+ assertEquals(bLowLowAlarm.get(), true);
+ assertEquals(bHighHighAlarm.get(), true);
+ assertEquals(bInvalid.get(), true);
+
+ byteBuf.setByte(18,0x05); //bPB_resetError = bError = true; bPBEN_ResetError = false;
+ byteBuf.setByte(20,0x05); //LowLowAlarm = Invalid; HighHighAlarm= = false;
+ plcItem.setPlcValue(plcValue);
+
+ assertEquals(bPB_ResetError.get(), true);
+ assertEquals(bPBEN_ResetError.get(), false);
+ assertEquals(bError.get(), true);
+ assertEquals(bLowLowAlarm.get(), true);
+ assertEquals(bHighHighAlarm.get(), false);
+ assertEquals(bInvalid.get(), true);
+
+ }
+}
diff --git a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7TestSupport.java b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7TestSupport.java
new file mode 100644
index 0000000..7f3c67d
--- /dev/null
+++ b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/test/java/org/apache/plc4x/merlot/drv/s7/core/S7TestSupport.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.plc4x.merlot.drv.s7.core;
+
+/**
+ *
+ * @author cgarcia
+ */
+public class S7TestSupport {
+
+}