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 748a43e Fix RW in Modbus and R in S7.
748a43e is described below
commit 748a43e9470c42264b806145c9ea3ed58373aba1
Author: César García <[email protected]>
AuthorDate: Tue Oct 22 09:23:27 2024 -0400
Fix RW in Modbus and R in S7.
---
.../plc4x/merlot/api/command/DemoCommand003.java | 52 ++++++++++++----
.../{DemoCommand003.java => DemoCommand004.java} | 69 ++++++++++++++++------
.../plc4x/merlot/api/impl/PlcDeviceImpl.java | 31 ++++++----
.../merlot/api/impl/PlcGeneralFunctionImpl.java | 3 +-
.../resources/OSGI-INF/blueprint/api-service.xml | 8 +++
.../apache/plc4x/merlot/db/core/DBBaseFactory.java | 2 +-
.../plc4x/merlot/db/core/DBBooleanFactory.java | 32 ++++++----
.../apache/plc4x/merlot/db/core/DBByteFactory.java | 12 ++--
.../plc4x/merlot/db/core/DBDoubleFactory.java | 14 ++---
.../plc4x/merlot/db/core/DBFloatFactory.java | 18 +++---
.../apache/plc4x/merlot/db/core/DBIntFactory.java | 16 +++--
.../apache/plc4x/merlot/db/core/DBLongFactory.java | 16 +++--
.../merlot/db/core/DBRecordsManagedService.java | 1 -
.../plc4x/merlot/db/core/DBShortFactory.java | 12 ++--
.../plc4x/merlot/db/core/DBUByteFactory.java | 23 ++++----
.../apache/plc4x/merlot/db/core/DBUIntFactory.java | 22 ++++---
.../plc4x/merlot/db/core/DBULongFactory.java | 22 ++++---
.../plc4x/merlot/db/core/DBUShortFactory.java | 22 ++++---
.../plc4x/merlot/db/impl/DBCollectorImpl.java | 1 -
.../apache/plc4x/merlot/db/impl/DBControlImpl.java | 1 -
.../apache/plc4x/merlot/db/impl/DBPersistImpl.java | 13 ++--
.../plc4x/merlot/db/impl/DBWriterHandlerImpl.java | 5 +-
.../resources/OSGI-INF/blueprint/db-service.xml | 2 +-
.../drv/mb/impl/ModbusPlcTagFunctionImpl.java | 37 +++++-------
.../merlot/drv/s7/impl/S7PlcTagFunctionImpl.java | 10 +++-
.../src/main/feature/feature.xml | 33 ++++++-----
.../modbus/svr/core/ModbusServerADUHandler.java | 2 -
27 files changed, 265 insertions(+), 214 deletions(-)
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
index 69d247a..b9c6e74 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
@@ -48,15 +48,15 @@ public class DemoCommand003 implements Action {
@Reference
volatile List<PlcDevice> devices;
- @Option(name = "-d", aliases = "--did", description = "Device uid.",
required = true, multiValued = false)
+ @Option(name = "-d", aliases = "--did", description = "Device uid.",
required = false, multiValued = false)
String gid;
- @Option(name = "-n", aliases = "--name", description = "Technological name
of the group.", required = true, multiValued = false)
+ @Option(name = "-n", aliases = "--name", description = "Technological name
of the group.", required = false, multiValued = false)
String group_name;
@Override
public Object execute() throws Exception {
-
+ System.out.println("Version 017");
UUID devUuid = UUID.randomUUID();
Optional<PlcDevice> optPlcDevice =
plcGeneralFunction.createDevice(devUuid.toString(),
@@ -73,29 +73,57 @@ public class DemoCommand003 implements Action {
optPlcDevice.get().getUid().toString(),
"GRUPO001",
"Descripcion del grupo",
- "5000",
+ "100",
"true");
if (optPlcGroup.isPresent()){
- for (int i= 1; i < 10; i++) {
+
+ for (int i= 1; i < 4; i++) {
Optional<PlcItem> optPlcItem =
plcGeneralFunction.createItem(UUID.randomUUID().toString(),
optPlcGroup.get().getGroupUid().toString(),
optPlcDevice.get().getUid().toString(),
"ITEM_" + i,
"Item description _" + i,
- "4x00001:UINT[16]",
+ "4x00001:UINT[48]",
"true");
if (optPlcItem.isPresent()){
optPlcItem.get().enable();
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " +
optPlcItem.get().getItemName());
- }
- }
+ }
+ }
+
+//
+ for (int i= 1; i < 4; i++) {
+ Optional<PlcItem> optPlcItem =
plcGeneralFunction.createItem(UUID.randomUUID().toString(),
+ optPlcGroup.get().getGroupUid().toString(),
+ optPlcDevice.get().getUid().toString(),
+ "INPUT_" + i,
+ "Item description _" + i,
+ "3x00001:UINT[48]",
+ "true");
+ if (optPlcItem.isPresent()){
+ optPlcItem.get().enable();
+
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " +
optPlcItem.get().getItemName());
+ }
+ }
+
+ for (int i= 1; i < 10; i++) {
+ Optional<PlcItem> optPlcItem =
plcGeneralFunction.createItem(UUID.randomUUID().toString(),
+ optPlcGroup.get().getGroupUid().toString(),
+ optPlcDevice.get().getUid().toString(),
+ "BOOLS_" + i,
+ "Item description _" + i,
+ "0x00001:BOOL[48]",
+ "true");
+ if (optPlcItem.isPresent()){
+ optPlcItem.get().enable();
+
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " +
optPlcItem.get().getItemName());
+ }
+ }
-
- }
-
- optPlcDevice.get().enable();
+ }
}
+ optPlcDevice.get().enable();
return null;
}
}
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
similarity index 54%
copy from
plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
copy to
plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
index 69d247a..08f7fb7 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand003.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/DemoCommand004.java
@@ -33,8 +33,8 @@ import org.apache.plc4x.merlot.api.core.PlcItemClientService;
@Service
-@Command(scope = "plc4x", name = "demo_003", description = "Command for test.")
-public class DemoCommand003 implements Action {
+@Command(scope = "plc4x", name = "demo_004", description = "Command for test.")
+public class DemoCommand004 implements Action {
@Reference
BundleContext bc;
@@ -48,22 +48,25 @@ public class DemoCommand003 implements Action {
@Reference
volatile List<PlcDevice> devices;
- @Option(name = "-d", aliases = "--did", description = "Device uid.",
required = true, multiValued = false)
+ @Option(name = "-d", aliases = "--did", description = "Device uid.",
required = false, multiValued = false)
String gid;
- @Option(name = "-n", aliases = "--name", description = "Technological name
of the group.", required = true, multiValued = false)
+ @Option(name = "-n", aliases = "--name", description = "Technological name
of the group.", required = false, multiValued = false)
String group_name;
@Override
public Object execute() throws Exception {
-
+ System.out.println("Version 009");
UUID devUuid = UUID.randomUUID();
Optional<PlcDevice> optPlcDevice =
plcGeneralFunction.createDevice(devUuid.toString(),
- "modbus-tcp",
- "AS01",
- "modbus-tcp://localhost:10502",
- "+C1=AS01.",
+ "s7",
+ "AS02",
+ "s7://192.168.0.47?remote-rack=0&"
+ + "remote-slot=3&"
+ +
"controller-type=S7_400&read-timeout=8&"
+ +
"ping=true&ping-time=2&retry-time=3",
+ "+C1=AS02.",
"La descripcion",
"true");
if (optPlcDevice.isPresent()){
@@ -71,31 +74,59 @@ public class DemoCommand003 implements Action {
Optional<PlcGroup> optPlcGroup =
plcGeneralFunction.createGroup(UUID.randomUUID().toString(),
optPlcDevice.get().getUid().toString(),
- "GRUPO001",
+ "GRUPO002",
"Descripcion del grupo",
- "5000",
+ "500",
"true");
if (optPlcGroup.isPresent()){
+
+ for (int i= 1; i < 4; i++) {
+ Optional<PlcItem> optPlcItem =
plcGeneralFunction.createItem(UUID.randomUUID().toString(),
+ optPlcGroup.get().getGroupUid().toString(),
+ optPlcDevice.get().getUid().toString(),
+ "S7ITEM_" + i,
+ "S7Item description _" + i,
+ "%DB100:0:USINT[48]",
+ "true");
+ if (optPlcItem.isPresent()){
+ optPlcItem.get().enable();
+
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " +
optPlcItem.get().getItemName());
+ }
+ }
+
+////
+// for (int i= 1; i < 4; i++) {
+// Optional<PlcItem> optPlcItem =
plcGeneralFunction.createItem(UUID.randomUUID().toString(),
+// optPlcGroup.get().getGroupUid().toString(),
+// optPlcDevice.get().getUid().toString(),
+// "INPUT_" + i,
+// "Item description _" + i,
+// "3x00001:UINT[48]",
+// "true");
+// if (optPlcItem.isPresent()){
+// optPlcItem.get().enable();
+//
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " +
optPlcItem.get().getItemName());
+// }
+// }
+//
for (int i= 1; i < 10; i++) {
Optional<PlcItem> optPlcItem =
plcGeneralFunction.createItem(UUID.randomUUID().toString(),
optPlcGroup.get().getGroupUid().toString(),
optPlcDevice.get().getUid().toString(),
- "ITEM_" + i,
+ "S7BOOLS_" + i,
"Item description _" + i,
- "4x00001:UINT[16]",
+ "%DB100:50.0:BOOL[8]",
"true");
if (optPlcItem.isPresent()){
optPlcItem.get().enable();
System.out.println(optPlcItem.get().getItemUid().toString()+ " : " +
optPlcItem.get().getItemName());
- }
- }
+ }
+ }
-
- }
-
- optPlcDevice.get().enable();
+ }
}
+ optPlcDevice.get().enable();
return null;
}
}
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcDeviceImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcDeviceImpl.java
index 3e67ad6..bc23883 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcDeviceImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcDeviceImpl.java
@@ -30,6 +30,7 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.logging.Level;
import static java.util.stream.Collectors.toList;
import org.apache.commons.lang3.time.StopWatch;
import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -192,7 +193,7 @@ public class PlcDeviceImpl implements PlcDevice {
});
} catch (Exception ex) {
- LOGGER.info(ex.getMessage());
+ LOGGER.error("Read ringbuffer: " +
ex.getMessage());
}
watch.stop();
LOGGER.debug("Elapse time Group[{}] time:
{}",event.getPlcGroup().getGroupName(), watch.getTime());
@@ -228,11 +229,6 @@ public class PlcDeviceImpl implements PlcDevice {
messageCounter[0]++;
if (null != plcTagFunction) {
-
- System.out.println("TAG: " +
event.getPlcItem().getItemPlcTag());
- System.out.println("OFFSET: " +
event.getOffset());
- System.out.println("BYTEBUF: \r\n" +
ByteBufUtil.prettyHexDump(event.getByteBuf()));
-
writeBuffer.add(plcTagFunction.getPlcTag(
event.getPlcItem().getItemPlcTag(),
event.getByteBuf(),
event.getOffset()));
@@ -245,6 +241,7 @@ public class PlcDeviceImpl implements PlcDevice {
*/
if ((messageCounter[0] >
DEFAULT_WRITE_BATCH_SIZE) || (endofbatch)) {
if (!writeBuffer.isEmpty()) {
+ System.out.println("PLCCONNECTION:
" + refPlcConnection.get().toString());
final Builder builder =
refPlcConnection.get().writeRequestBuilder();
writeBuffer.forEach(i -> {
@@ -266,7 +263,7 @@ public class PlcDeviceImpl implements PlcDevice {
}
} catch (Exception ex) {
- LOGGER.error(ex.getMessage());
+ LOGGER.error("Write ringbuffer: " +
ex.getMessage());
} finally {
readProcessor.restart();
messageCounter[0] = 0;
@@ -312,6 +309,11 @@ public class PlcDeviceImpl implements PlcDevice {
LOGGER.info("Device {} with url {}",
deviceProperties.get(Device.SERVICE_NAME), url);
plcConnection = plcDriver.getConnection(url);
plcConnection.connect();
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException ex) {
+ LOGGER.error(ex.getMessage());
+ }
refPlcConnection.set(plcConnection);
if (plcConnection.isConnected()) {
enable = true;
@@ -324,7 +326,7 @@ public class PlcDeviceImpl implements PlcDevice {
deviceProperties.put(Device.SERVICE_STATUS,
Device.STATUS_OFFLINE);
}
} catch (PlcConnectionException ex) {
- LOGGER.info(ex.getLocalizedMessage());
+ LOGGER.error(ex.getLocalizedMessage());
enable = false;
deviceProperties.put(Device.SERVICE_STATUS,
Device.STATUS_NOT_INITIALIZED);
}
@@ -353,7 +355,7 @@ public class PlcDeviceImpl implements PlcDevice {
}
}
} catch (Exception ex) {
- LOGGER.info(ex.getLocalizedMessage());
+ LOGGER.error(ex.getLocalizedMessage());
}
}
@@ -488,7 +490,7 @@ public class PlcDeviceImpl implements PlcDevice {
try {
serviceRefences = bc.getServiceReferences(PlcTagFunction.class,
filter);
} catch (InvalidSyntaxException ex) {
- LOGGER.info(ex.getMessage());
+ LOGGER.error(ex.getMessage());
}
if (null == serviceRefences) {
@@ -506,7 +508,7 @@ public class PlcDeviceImpl implements PlcDevice {
try {
serviceRefences2 =
bc.getServiceReferences(PlcEventConnectionFunction.class, filter2);
} catch (InvalidSyntaxException ex) {
- LOGGER.info(ex.getMessage());
+ LOGGER.error(ex.getMessage());
}
if (null == serviceRefences2) {
@@ -561,6 +563,13 @@ public class PlcDeviceImpl implements PlcDevice {
if ((deviceProperties.get(Device.SERVICE_STATUS) ==
Device.STATUS_NOT_INITIALIZED) ||
(deviceProperties.get(Device.SERVICE_STATUS) ==
Device.STATUS_OFFLINE)){
enable();
+ } else if ((enable) && (null != plcConnection)){
+ if (!plcConnection.isConnected()){
+ LOGGER.info("Reconnecting Device {} with url {}",
+ deviceProperties.get(Device.SERVICE_NAME),
+ deviceProperties.get(Device.SERVICE_DRIVER));
+ enable();
+ }
}
}
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGeneralFunctionImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGeneralFunctionImpl.java
index 7a22cde..96b11b9 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGeneralFunctionImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGeneralFunctionImpl.java
@@ -546,7 +546,8 @@ public class PlcGeneralFunctionImpl implements
PlcGeneralFunction {
setItemDescription(ItemDescription).
setItemId(ItemTag).
setItemUid(UUID.fromString(ItemUuid)).
- build();
+ build();
+
if (ItemEnable.equals("true")) {
plcItem.enable();
} else plcItem.disable();
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/resources/OSGI-INF/blueprint/api-service.xml
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/resources/OSGI-INF/blueprint/api-service.xml
index 5ca2c66..1a0a995 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/resources/OSGI-INF/blueprint/api-service.xml
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/resources/OSGI-INF/blueprint/api-service.xml
@@ -17,6 +17,14 @@
-->
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
default-activation="eager">
+ <!--
+ -->
+<!-- <reference-list id="TcpTransportRef"
+ interface="org.apache.plc4x.java.spi.transport.Transport"
+ filter="org.apache.plc4x.transport.code=tcp"
+ availability="mandatory">
+ </reference-list>-->
+
<!--
-->
<reference id="servEventAdmin"
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBaseFactory.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBaseFactory.java
index dfaffd7..e271a02 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBaseFactory.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBBaseFactory.java
@@ -30,7 +30,7 @@ import org.epics.pvdatabase.PVRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
+//TODO: Replace string processing with with regex.
public class DBBaseFactory implements DBRecordFactory {
private static final Logger LOGGER =
LoggerFactory.getLogger(DBBaseFactory.class);
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 b6f7da1..1855849 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
@@ -48,6 +48,7 @@ public class DBBooleanFactory extends DBBaseFactory {
value(ScalarType.pvBoolean).
addDescriptor().
add("id", fieldCreate.createScalar(ScalarType.pvString)).
+ add("offset", fieldCreate.createScalar(ScalarType.pvInt)).
add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
add("scan_enable", fieldCreate.createScalar(ScalarType.pvBoolean)).
add("write_enable",
fieldCreate.createScalar(ScalarType.pvBoolean)).
@@ -69,6 +70,7 @@ public class DBBooleanFactory extends DBBaseFactory {
value(ScalarType.pvBoolean).
addDescriptor().
add("id", fieldCreate.createScalar(ScalarType.pvString)).
+ add("offset", fieldCreate.createScalar(ScalarType.pvInt)).
add("scan_time", fieldCreate.createScalar(ScalarType.pvString)).
add("scan_enable", fieldCreate.createScalar(ScalarType.pvBoolean)).
add("write_enable",
fieldCreate.createScalar(ScalarType.pvBoolean)).
@@ -104,25 +106,29 @@ public class DBBooleanFactory extends DBBaseFactory {
*/
public void process()
{
- super.process();
if (null != plcItem) {
- System.out.println("Paso por Boolean");
- if (value.get() != write_value.get()) {
- final PVBoolean isWriteEnbale =
this.getPVStructure().getBooleanField("write_enable");
- if (isWriteEnbale.get()) {
- write_value.put(value.get());
-
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeBoolean(write_value.get());
+ super.process();
}
- }
+
+ }
}
@Override
public void atach(PlcItem plcItem) {
+ try {
this.plcItem = plcItem;
- offset = this.getPVStructure().getIntField("offset").get() *
Byte.BYTES;
- innerBuffer = plcItem.getItemByteBuf().slice(offset, Byte.BYTES);
- innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
+ offset = this.getPVStructure().getIntField("offset").get() *
Byte.BYTES;
+ innerBuffer = plcItem.getItemByteBuf().slice(offset,
Byte.BYTES);
+ innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
+ } catch (Exception ex) {
+ System.out.println("Falla al atach()");
+ System.out.println(plcItem.toString());
+ ex.printStackTrace();
+ }
}
@Override
@@ -139,7 +145,7 @@ public class DBBooleanFactory extends DBBaseFactory {
@Override
public String getFieldsToMonitor() {
- return MONITOR_WRITE_FIELD;
+ return MONITOR_FIELDS;
}
}
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 eba8d96..ea66b02 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
@@ -113,13 +113,11 @@ public class DBByteFactory extends DBBaseFactory {
public void process()
{
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeByte(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeByte(write_value.get());
+ super.process();
}
}
}
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 642ea54..07de6c6 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
@@ -107,15 +107,13 @@ public class DBDoubleFactory extends DBBaseFactory {
public void process()
{
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeDouble(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeDouble(write_value.get());
+ super.process();
}
- }
+ }
}
@Override
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBFloatFactory.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBFloatFactory.java
index 3dcb146..c23ef44 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
@@ -99,7 +99,6 @@ public class DBFloatFactory extends DBBaseFactory {
write_value = pvStructure.getFloatField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
offset = pvStructure.getIntField("offset").get();
- System.out.println("EL OFFSET EN EL RECORD: " + offset);
}
/**
@@ -109,22 +108,19 @@ public class DBFloatFactory extends DBBaseFactory {
public void process()
{
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeFloat(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeFloat(write_value.get());
+ super.process();
}
- }
+ }
}
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- offset = this.getPVStructure().getIntField("offset").get();
- System.out.println("Y EN ATACH EL OFFSET EN EL RECORD: " +
offset);
+ offset = this.getPVStructure().getIntField("offset").get();
innerBuffer = plcItem.getItemByteBuf().slice(offset, Float.BYTES);
innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
}
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 3baee7f..e4df2f5 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
@@ -106,21 +106,19 @@ public class DBIntFactory extends DBBaseFactory {
public void process()
{
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeInt(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeInt(write_value.get());
+ super.process();
}
- }
+ }
}
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- offset = this.getPVStructure().getIntField("offset").get() *
Integer.BYTES;
+ offset = this.getPVStructure().getIntField("offset").get();
innerBuffer = plcItem.getItemByteBuf().slice(offset,
Integer.BYTES);
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 cf9f975..187f19b 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
@@ -106,21 +106,19 @@ public class DBLongFactory extends DBBaseFactory {
public void process()
{
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeLong(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeLong(write_value.get());
+ super.process();
}
- }
+ }
}
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- offset = this.getPVStructure().getIntField("offset").get() *
Long.BYTES;
+ offset = this.getPVStructure().getIntField("offset").get();
innerBuffer = plcItem.getItemByteBuf().slice(offset, Long.BYTES);
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 1e924fc..ba95bad 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
@@ -197,7 +197,6 @@ public class DBRecordsManagedService implements
ManagedServiceFactory, Job {
if (null == master.findRecord(pvr.getRecordName())) {
plcItem.get().addItemListener((PlcItemListener) pvr);
master.addRecord(pvr);
- System.out.println("XXXXX> " + pvr.getOffset() );
writerHandler.putDBRecord(pvr);
LOGGER.info("Add DBRecord... [{}] linked to
[{}].",pvr.getRecordName(), id);
} else {
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 64c95bf..37cada1 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
@@ -111,13 +111,11 @@ public class DBShortFactory extends DBBaseFactory {
public void process()
{
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeShort(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeShort(write_value.get());
+ super.process();
}
}
}
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 b2e7ab3..3c1bb20 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
@@ -44,7 +44,7 @@ public class DBUByteFactory extends DBBaseFactory {
public DBRecord create(String recordName) {
NTScalarBuilder ntScalarBuilder = NTScalar.createBuilder();
PVStructure pvStructure = ntScalarBuilder.
- value(ScalarType.pvByte).
+ value(ScalarType.pvUByte).
addDescriptor().
add("id", fieldCreate.createScalar(ScalarType.pvString)).
add("offset", fieldCreate.createScalar(ScalarType.pvInt)).
@@ -94,8 +94,8 @@ public class DBUByteFactory extends DBBaseFactory {
public DBUByteRecord(String recordName,PVStructure pvStructure) {
super(recordName, pvStructure);
- value = (PVUByte) pvStructure.getByteField("value");
- write_value = (PVUByte) pvStructure.getByteField("write_value");
+ value = (PVUByte) pvStructure.getSubField("value");
+ write_value = (PVUByte) pvStructure.getSubField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
}
@@ -105,15 +105,12 @@ public class DBUByteFactory extends DBBaseFactory {
*/
public void process()
{
- System.out.println("PROCESANDO BYTE: ");
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeByte(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeByte(write_value.get());
+ super.process();
}
}
}
@@ -121,7 +118,7 @@ public class DBUByteFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- offset = this.getPVStructure().getIntField("offset").get() *
Byte.BYTES;
+ offset = this.getPVStructure().getIntField("offset").get();
innerBuffer = plcItem.getItemByteBuf().slice(offset, Byte.BYTES);
innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
}
@@ -135,7 +132,7 @@ public class DBUByteFactory extends DBBaseFactory {
public void update() {
if (null != plcItem)
if (value.get() != innerBuffer.getUnsignedByte(0)) {
- value.put((byte) innerBuffer.getUnsignedByte(offset));
+ value.put((byte) innerBuffer.getUnsignedByte(0));
}
}
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 29ccebe..0385326 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
@@ -94,8 +94,8 @@ public class DBUIntFactory extends DBBaseFactory {
public DBUIntRecord(String recordName,PVStructure pvStructure) {
super(recordName, pvStructure);
- value = (PVUInt) pvStructure.getIntField("value");
- write_value = (PVUInt) pvStructure.getIntField("write_value");
+ value = (PVUInt) pvStructure.getSubField("value");
+ write_value = (PVUInt) pvStructure.getSubField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
}
@@ -106,13 +106,11 @@ public class DBUIntFactory extends DBBaseFactory {
public void process()
{
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeInt(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeInt(write_value.get());
+ super.process();
}
}
}
@@ -120,7 +118,7 @@ public class DBUIntFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- offset = this.getPVStructure().getIntField("offset").get() *
Integer.BYTES;
+ offset = this.getPVStructure().getIntField("offset").get();
innerBuffer = plcItem.getItemByteBuf().slice(offset,
Integer.BYTES);
innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
}
@@ -133,8 +131,8 @@ public class DBUIntFactory extends DBBaseFactory {
@Override
public void update() {
if (null != plcItem)
- if (value.get() != innerBuffer.getUnsignedInt(offset))
- value.put((byte) innerBuffer.getUnsignedInt(offset));
+ if (value.get() != innerBuffer.getUnsignedInt(0))
+ value.put((byte) innerBuffer.getUnsignedInt(0));
}
@Override
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBULongFactory.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBULongFactory.java
index 79d841c..2b37578 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
@@ -96,8 +96,8 @@ public class DBULongFactory extends DBBaseFactory {
DBULongRecord(String recordName,PVStructure pvStructure) {
super(recordName, pvStructure);
- value = (PVULong) pvStructure.getLongField("value");
- write_value = (PVULong) pvStructure.getLongField("write_value");
+ value = (PVULong) pvStructure.getSubField("value");
+ write_value = (PVULong) pvStructure.getSubField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
}
@@ -108,13 +108,11 @@ public class DBULongFactory extends DBBaseFactory {
public void process()
{
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeLong(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeLong(write_value.get());
+ super.process();
}
}
}
@@ -122,7 +120,7 @@ public class DBULongFactory extends DBBaseFactory {
@Override
public void atach(PlcItem plcItem) {
this.plcItem = plcItem;
- offset = this.getPVStructure().getIntField("offset").get() *
Long.BYTES;
+ offset = this.getPVStructure().getIntField("offset").get();
innerBuffer = plcItem.getItemByteBuf().slice(offset, Long.BYTES);
innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
}
@@ -135,8 +133,8 @@ public class DBULongFactory extends DBBaseFactory {
@Override
public void update() {
if (null != plcItem)
- if (value.get() != innerBuffer.getUnsignedMedium(offset))
- value.put(innerBuffer.getUnsignedMedium(offset));
+ if (value.get() != innerBuffer.getUnsignedMedium(0))
+ value.put(innerBuffer.getUnsignedMedium(0));
}
@Override
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUShortFactory.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/core/DBUShortFactory.java
index 6257497..6bef3c1 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
@@ -96,8 +96,8 @@ public class DBUShortFactory extends DBBaseFactory {
private DBUShortRecord(String recordName,PVStructure pvStructure) {
super(recordName, pvStructure);
- value = (PVUShort) pvStructure.getShortField("value");
- write_value = (PVUShort) pvStructure.getShortField("write_value");
+ value = (PVUShort) pvStructure.getSubField("value");
+ write_value = (PVUShort) pvStructure.getSubField("write_value");
write_enable = pvStructure.getBooleanField("write_enable");
}
@@ -108,13 +108,11 @@ public class DBUShortFactory extends DBBaseFactory {
public void process()
{
if (null != plcItem) {
- if (value.get() != write_value.get()) {
- if (write_enable.get()) {
- write_value.put(value.get());
- innerWriteBuffer.clear();
- innerWriteBuffer.writeShort(write_value.get());
- super.process();
- }
+ if (write_enable.get()) {
+ write_value.put(value.get());
+ innerWriteBuffer.clear();
+ innerWriteBuffer.writeShort(write_value.get());
+ super.process();
}
}
}
@@ -122,7 +120,7 @@ public class DBUShortFactory extends DBBaseFactory {
@Override
public void atach(final PlcItem plcItem) {
this.plcItem = plcItem;
- offset = this.getPVStructure().getIntField("offset").get() *
Short.BYTES;
+ offset = this.getPVStructure().getIntField("offset").get();
innerBuffer = plcItem.getItemByteBuf().slice(offset, Short.BYTES);
innerWriteBuffer = Unpooled.copiedBuffer(innerBuffer);
}
@@ -135,8 +133,8 @@ public class DBUShortFactory extends DBBaseFactory {
@Override
public void update() {
if (null != plcItem)
- if (value.get() != innerBuffer.getUnsignedShort(offset))
- value.put( (short)
innerBuffer.getUnsignedShort(offset));
+ if (value.get() != innerBuffer.getUnsignedShort(0))
+ value.put((short) innerBuffer.getUnsignedShort(0));
}
@Override
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBCollectorImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBCollectorImpl.java
index 0e91048..d24fa33 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBCollectorImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBCollectorImpl.java
@@ -424,7 +424,6 @@ public class DBCollectorImpl implements DBCollector,
PVListener {
arrFloats[i] = objValue;
i++;
}
- //System.out.println("Tamaño i: " + i);
int capacity = ((PVFloatArray) value).getCapacity();
((PVFloatArray) value).put(0,capacity,arrFloats,0);
}
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBControlImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBControlImpl.java
index 2cf7ef3..24921d7 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBControlImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBControlImpl.java
@@ -48,7 +48,6 @@ public class DBControlImpl implements DBControl {
Map<String, List<PVRecord>> byScanRate = pvRecords.stream()
.collect(Collectors.groupingBy(record ->
record.getPVStructure().getStringField("scan_rate").get()));
- //System.out.println("Keys: " + byScanRate.keySet());
for (String key:byScanRate.keySet()){
DBCollector collector = registerCollector(device,key);
collector.attach(byScanRate.get(key));
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBPersistImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBPersistImpl.java
index c80de10..00e60cd 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBPersistImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/java/org/apache/plc4x/merlot/db/impl/DBPersistImpl.java
@@ -209,18 +209,19 @@ public class DBPersistImpl implements EventHandler{
PVRecord pvRecord =
recordFactory.create(rs.getString("PvName"));
pvRecord.getPVStructure().getStringField("id").put(rs.getString("PvId"));
+
pvRecord.getPVStructure().getIntField("offset").put(Integer.parseInt(rs.getString("PvOffset")));
pvRecord.getPVStructure().getStringField("descriptor").put(rs.getString("PvDescriptor"));
pvRecord.getPVStructure().getStringField("scan_time").put(rs.getString("pvScanTime"));
pvRecord.getPVStructure().getBooleanField("scan_enable").put(Boolean.parseBoolean(rs.getString("PvScanEnable")));
-
pvRecord.getPVStructure().getBooleanField("write_enable").put(rs.getBoolean("PvWriteEnable"));
-
pvRecord.getPVStructure().getDoubleField("display.limitLow").put(rs.getDouble("PvDisplayLimitLow"));
-
pvRecord.getPVStructure().getDoubleField("display.limitHigh").put(rs.getDouble("PvDisplayLimitHigh"));
+
pvRecord.getPVStructure().getBooleanField("write_enable").put(Boolean.parseBoolean(rs.getString("PvWriteEnable")));
+
pvRecord.getPVStructure().getDoubleField("display.limitLow").put(Double.parseDouble(rs.getString("PvDisplayLimitLow")));
+
pvRecord.getPVStructure().getDoubleField("display.limitHigh").put(Double.parseDouble(rs.getString("PvDisplayLimitHigh")));
pvRecord.getPVStructure().getStringField("display.description").put(rs.getString("PvDisplayDescription"));
pvRecord.getPVStructure().getStringField("display.format").put(rs.getString("PvDisplayFormat"));
pvRecord.getPVStructure().getStringField("display.units").put(rs.getString("PvDisplayUnits"));
-
pvRecord.getPVStructure().getDoubleField("control.limitLow").put(rs.getDouble("PvControlLimitLow"));
-
pvRecord.getPVStructure().getDoubleField("control.limitHigh").put(rs.getDouble("PvControlLimitHigh"));
-
pvRecord.getPVStructure().getDoubleField("control.minStep").put(rs.getDouble("PvControlMinStep"));
+
pvRecord.getPVStructure().getDoubleField("control.limitLow").put(Double.parseDouble(rs.getString("PvControlLimitLow")));
+
pvRecord.getPVStructure().getDoubleField("control.limitHigh").put(Double.parseDouble(rs.getString("PvControlLimitHigh")));
+
pvRecord.getPVStructure().getDoubleField("control.minStep").put(Double.parseDouble(rs.getString("PvControlMinStep")));
//Talk to PLC4X
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 4bc4ce1..4e43927 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
@@ -65,8 +65,7 @@ public class DBWriterHandlerImpl implements DBWriterHandler {
structure = element.getPVStructure();
changedBitSet = element.getChangedBitSet();
overrunBitSet = element.getOverrunBitSet();
- System.out.println("La estructura \r\n:" + structure.toString());
-
+
if ((recordMonitors.containsKey(monitor)) &&
structure.getBooleanField("write_enable").get()) {
if (changedBitSet.get(1) &&
@@ -78,7 +77,6 @@ public class DBWriterHandlerImpl implements DBWriterHandler {
LOGGER.info(ByteBufUtil.prettyHexDump(dbRecord.getWriteBuffer().get()));
if (optPlcItem.isPresent()) {
- System.out.println("Aqui el Offset: " +
dbRecord.getOffset());
optPlcItem.get().itemWrite(dbRecord.getWriteBuffer().get(),
dbRecord.getOffset());
}
@@ -111,7 +109,6 @@ public class DBWriterHandlerImpl implements DBWriterHandler
{
@Override
public void putDBRecord(DBRecord dbRecord) {
LOGGER.info("Monitor with fields = {}",
dbRecord.getFieldsToMonitor());
- System.out.println(">>>> el OFFSET aqui: " + dbRecord.getOffset());
PVStructure request =
createRequest.createRequest(dbRecord.getFieldsToMonitor());
Monitor monitor = MonitorFactory.create(dbRecord, this, request);
if (null != monitor) {
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/resources/OSGI-INF/blueprint/db-service.xml
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/resources/OSGI-INF/blueprint/db-service.xml
index d8c91c8..ef12847 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/resources/OSGI-INF/blueprint/db-service.xml
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.db/src/main/resources/OSGI-INF/blueprint/db-service.xml
@@ -214,7 +214,7 @@
ref="beanDBUIntFactory"
interface="org.apache.plc4x.merlot.db.api.DBRecordFactory">
<service-properties>
- <entry key="db.record.type" value="UINT"/>
+ <entry key="db.record.type" value="uint"/>
</service-properties>
</service>
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.mb/src/main/java/org/apache/plc4x/merlot/drv/mb/impl/ModbusPlcTagFunctionImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.mb/src/main/java/org/apache/plc4x/merlot/drv/mb/impl/ModbusPlcTagFunctionImpl.java
index 29fa6b1..427825a 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.mb/src/main/java/org/apache/plc4x/merlot/drv/mb/impl/ModbusPlcTagFunctionImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.mb/src/main/java/org/apache/plc4x/merlot/drv/mb/impl/ModbusPlcTagFunctionImpl.java
@@ -63,15 +63,15 @@ public class ModbusPlcTagFunctionImpl implements
PlcTagFunction {
public ImmutablePair<PlcTag, Object[]> getPlcTag(PlcTag plcTag, ByteBuf
byteBuf, int offset) {
LOGGER.info("PlcTag class {} and type {} ", plcTag.getClass(),
plcTag.getPlcValueType());
ModbusTag mbPlcTag = null;
+ Object[] objValues = null;
short tempValue = 0;
if (plcTag instanceof ModbusTag){
- final ModbusTag mbTag = (ModbusTag) plcTag;
- LOGGER.info("Processing ModbusTag: {}", mbTag.toString());
- Object[] objValues = new Object[byteBuf.capacity() / 2];
- LOGGER.info("Borrar: pasa a verificar el tipo...");
+ final ModbusTag mbTag = (ModbusTag) plcTag;
switch (mbTag.getPlcValueType()) {
- case BOOL:
+ case BOOL:
+ objValues = new Object[byteBuf.capacity()];
byteOffset = mbTag.getAddress() + offset;
+
if (mbTag instanceof ModbusTagCoil) {
mbPlcTag = new ModbusTagCoil(
byteOffset,
@@ -79,34 +79,28 @@ public class ModbusPlcTagFunctionImpl implements
PlcTagFunction {
mbTag.getDataType(),
config);
} else if (mbTag instanceof ModbusTagDiscreteInput) {
- mbPlcTag = new ModbusTagCoil(
- byteOffset,
- byteBuf.capacity(),
- mbTag.getDataType(),
- config);
+ LOGGER.info("DiscreteInput does not allow
writing.");
+ return null;
}
byteBuf.resetReaderIndex();
for (int i=0; i < byteBuf.capacity(); i++) {
objValues[i] = byteBuf.readBoolean();
- }
+ }
+
break;
case UINT:
- System.out.println("Paso por aqui 1");
+ objValues = new Object[byteBuf.capacity() / 2];
if (byteBuf.capacity() == 1) {
LOGGER.info("In MODBUS writing 'byte' types is
rejected.");
return null;
- }
- System.out.println("Direccion del Tag: " +
mbTag.getAddress() );
- System.out.println("Valor Offset: " + offset );
+ }
byteOffset = mbTag.getAddress() + offset / 2;
- if (mbTag instanceof ModbusTagHoldingRegister) {
- System.out.println("Paso por aqui 2");
+ if (mbTag instanceof ModbusTagHoldingRegister) {
mbPlcTag = new ModbusTagHoldingRegister(
byteOffset,
byteBuf.capacity() / 2,
ModbusDataType.INT,
- config);
- System.out.println("Paso por aqui 2.9: " +
mbPlcTag.toString());
+ config);
} else if (mbTag instanceof ModbusTagInputRegister){
mbPlcTag = new ModbusTagInputRegister(
byteOffset,
@@ -119,14 +113,13 @@ public class ModbusPlcTagFunctionImpl implements
PlcTagFunction {
byteBuf.capacity() / 2,
ModbusDataType.INT,
config);
- }
- System.out.println("Paso por aqui 3");
+ }
byteBuf.resetReaderIndex();
for (int i=0; i < byteBuf.capacity() / 2; i++){
tempValue = (short) (byteBuf.readShort());
objValues[i] = tempValue;
}
- System.out.println("Paso por aqui 4");
+
break;
default:;
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
index 6c300db..fbde802 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcTagFunctionImpl.java
@@ -97,7 +97,7 @@ public class S7PlcTagFunctionImpl implements PlcTagFunction {
objValues[i] = byteBuf.readBoolean();
}
break;
- case BYTE:
+ case UINT:
byteOffset = s7Tag.getByteOffset() + offset *
byteBuf.capacity();
switch (s7Tag.getMemoryArea()){
case DATA_BLOCKS:;
@@ -166,14 +166,16 @@ public class S7PlcTagFunctionImpl implements
PlcTagFunction {
objValues[i] = byteBuf.readBoolean();
}
break;
- case BYTE:
- byteOffset = s7Tag.getByteOffset() + offset *
byteBuf.capacity();
+ case USINT:
+ byteOffset = s7Tag.getByteOffset() + offset;
+ System.out.println("byteOffset = " + byteOffset);
s7PlcTag = new S7Tag(s7Tag.getDataType(),
s7Tag.getMemoryArea(),
s7Tag.getBlockNumber(),
byteOffset,
(byte) 0,
byteBuf.capacity());
+ System.out.println("s7Tag: " + s7PlcTag.toString());
byteBuf.resetReaderIndex();
for (int i=0; i < byteBuf.capacity(); i++){
tempValue = (short) (byteBuf.readByte() & 0xFF);
@@ -193,8 +195,10 @@ public class S7PlcTagFunctionImpl implements
PlcTagFunction {
@Override
public ImmutablePair<PlcTag, Object[]> getPlcTag(PlcTag plcTag, ByteBuf
byteBuf, int offset) {
if (!PLC4X_TAG) {
+ System.out.println("Como String...");
return getStringPlcTag(plcTag, byteBuf, offset);
} else {
+ System.out.println("Como PlcTag...");
return getPlc4xPlcTag(plcTag, byteBuf, offset);
}
}
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.features/src/main/feature/feature.xml
b/plc4j/tools/merlot/org.apache.plc4x.merlot.features/src/main/feature/feature.xml
index ecd42fb..614823e 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.features/src/main/feature/feature.xml
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.features/src/main/feature/feature.xml
@@ -91,7 +91,8 @@
<feature>grpc</feature>
<feature>plc4x-epics-core</feature>
- <feature>plc4x-scheduler</feature>
+ <feature>plc4x-scheduler</feature>
+ <feature>plc4x-drivers</feature>
<bundle
start-level="32">mvn:org.apache.plc4x.merlot.api/org.apache.plc4x.merlot.api/${project.version}</bundle>
<bundle
start-level="50">mvn:org.apache.plc4x.merlot.das/org.apache.plc4x.merlot.das/${project.version}</bundle>
@@ -103,7 +104,7 @@
<bundle
start-level="60">mvn:org.apache.plc4x.merlot.db/org.apache.plc4x.merlot.db/${project.version}</bundle>
<!-- <bundle
start-level="40">mvn:org.apache.plc4x.dummy/org.apache.plc4x.dummy/${project.version}</bundle>
-->
- <feature>plc4x-drivers</feature>
+
</feature>
@@ -116,24 +117,24 @@
</feature>
<feature name="plc4x-drivers" version="${asm.version}">
- <bundle
start-level="70">mvn:org.apache.plc4x/plc4j-transport-serial/${project.version}</bundle>
- <bundle
start-level="70">mvn:org.apache.plc4x/plc4j-transport-tcp/${project.version}</bundle>
- <bundle
start-level="70">mvn:org.apache.plc4x/plc4j-transport-pcap-replay/${project.version}</bundle>
- <bundle
start-level="70">mvn:org.apache.plc4x/plc4j-transport-pcap-shared/${project.version}</bundle>
- <bundle
start-level="70">mvn:org.apache.plc4x/plc4j-utils-pcap-replay/${project.version}</bundle>
- <bundle
start-level="70">mvn:org.apache.plc4x/plc4j-utils-pcap-shared/${project.version}</bundle>
- <bundle
start-level="70">mvn:org.apache.plc4x/plc4j-transport-raw-socket/${project.version}</bundle>
- <bundle
start-level="70">mvn:org.apache.plc4x/plc4j-utils-raw-sockets/${project.version}</bundle>
+ <bundle
start-level="40">mvn:org.apache.plc4x/plc4j-transport-serial/${project.version}</bundle>
+ <bundle
start-level="40">mvn:org.apache.plc4x/plc4j-transport-tcp/${project.version}</bundle>
+ <bundle
start-level="40">mvn:org.apache.plc4x/plc4j-transport-pcap-replay/${project.version}</bundle>
+ <bundle
start-level="40">mvn:org.apache.plc4x/plc4j-transport-pcap-shared/${project.version}</bundle>
+ <bundle
start-level="40">mvn:org.apache.plc4x/plc4j-utils-pcap-replay/${project.version}</bundle>
+ <bundle
start-level="40">mvn:org.apache.plc4x/plc4j-utils-pcap-shared/${project.version}</bundle>
+ <bundle
start-level="40">mvn:org.apache.plc4x/plc4j-transport-raw-socket/${project.version}</bundle>
+ <bundle
start-level="40">mvn:org.apache.plc4x/plc4j-utils-raw-sockets/${project.version}</bundle>
<!-- Plc4x - Default driver implementation -->
- <bundle
start-level="72">mvn:org.apache.plc4x/plc4j-driver-simulated/${project.version}</bundle>
- <bundle
start-level="32">mvn:org.apache.plc4x/plc4j-driver-modbus/${project.version}</bundle>
- <bundle
start-level="32">mvn:org.apache.plc4x/plc4j-driver-s7/${project.version}</bundle>
+ <bundle
start-level="80">mvn:org.apache.plc4x/plc4j-driver-simulated/${project.version}</bundle>
+ <bundle
start-level="80">mvn:org.apache.plc4x/plc4j-driver-modbus/${project.version}</bundle>
+ <bundle
start-level="80">mvn:org.apache.plc4x/plc4j-driver-s7/${project.version}</bundle>
<!-- Plc4x - Support services for Plc4x driver implementation -->
- <bundle
start-level="72">mvn:org.apache.plc4x.merlot.drv.simulated/org.apache.plc4x.merlot.drv.simulated/${project.version}</bundle>
- <bundle
start-level="32">mvn:org.apache.plc4x.merlot.drv.mb/org.apache.plc4x.merlot.drv.mb/${project.version}</bundle>
- <bundle
start-level="32">mvn:org.apache.plc4x.merlot.drv.s7/org.apache.plc4x.merlot.drv.s7/${project.version}</bundle>
+ <bundle
start-level="90">mvn:org.apache.plc4x.merlot.drv.simulated/org.apache.plc4x.merlot.drv.simulated/${project.version}</bundle>
+ <bundle
start-level="90">mvn:org.apache.plc4x.merlot.drv.mb/org.apache.plc4x.merlot.drv.mb/${project.version}</bundle>
+ <bundle
start-level="90">mvn:org.apache.plc4x.merlot.drv.s7/org.apache.plc4x.merlot.drv.s7/${project.version}</bundle>
</feature>
<!-- asm -->
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.modbus.svr/src/main/java/org/apache/plc4x/merlot/modbus/svr/core/ModbusServerADUHandler.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.modbus.svr/src/main/java/org/apache/plc4x/merlot/modbus/svr/core/ModbusServerADUHandler.java
index a4aa787..6369a8a 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.modbus.svr/src/main/java/org/apache/plc4x/merlot/modbus/svr/core/ModbusServerADUHandler.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.modbus.svr/src/main/java/org/apache/plc4x/merlot/modbus/svr/core/ModbusServerADUHandler.java
@@ -341,10 +341,8 @@ public class ModbusServerADUHandler extends
SimpleChannelInboundHandler<ModbusAD
Coils = myMda.getModbusDevicesArray()[rxADU.getUnitID()].getCoils();
if ((Value == (short) 0x0000) || (Value == (short) 0xFF00)) {
- System.out.println("Es cero o uno...");
if (Starting_address <= Coils.capacity() * 8) {
try {
- System.out.println("N�mero de bobinas aceptada!.");
myMda.getModbusDevicesArray()[rxADU.getUnitID()].
setCoil(Starting_address, ((Value == (short)
0xFF00) ? false : true));
txADU.getData().writeShort(Starting_address);