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 1572f88 Fix s7 model. New Model command. working on.
1572f88 is described below
commit 1572f889e31905e59e5abb7e8483939c603cde25
Author: César García <[email protected]>
AuthorDate: Thu Jun 26 12:21:54 2025 -0400
Fix s7 model. New Model command. working on.
---
.../plc4x/merlot/api/command/PlcModelCommand.java | 122 +++++++++++
.../plc4x/merlot/api/impl/PlcDeviceImpl.java | 2 +-
.../merlot/api/impl/PlcGeneralFunctionImpl.java | 20 +-
.../apache/plc4x/merlot/api/impl/PlcGroupImpl.java | 1 +
.../apache/plc4x/merlot/db/impl/DBPersistImpl.java | 1 +
.../org.apache.plc4x.merlot.drv.s7/nbactions.xml | 2 +-
.../plc4x/merlot/drv/s7/impl/S7PlcModelImpl.java | 225 +++++++++++++--------
7 files changed, 277 insertions(+), 96 deletions(-)
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/PlcModelCommand.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/PlcModelCommand.java
new file mode 100644
index 0000000..a022ddd
--- /dev/null
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/command/PlcModelCommand.java
@@ -0,0 +1,122 @@
+/*
+ * 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.api.command;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
+import java.util.List;
+import java.util.Optional;
+import org.apache.karaf.shell.api.action.Action;
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.apache.karaf.shell.support.table.ShellTable;
+import org.apache.plc4x.merlot.api.PlcGeneralFunction;
+import org.osgi.framework.BundleContext;
+import org.apache.plc4x.merlot.api.PlcGroup;
+import org.apache.plc4x.merlot.api.PlcItem;
+import org.apache.plc4x.merlot.api.PlcModel;
+import org.apache.plc4x.merlot.api.core.PlcItemClientService;
+
+
+@Command(scope = "plc4x", name = "model", description = "Command to display
information about a device's model.")
+@Service
+public class PlcModelCommand implements Action {
+
+ @Reference
+ BundleContext bc;
+
+ @Reference
+ PlcGeneralFunction gf;
+
+ @Reference
+ PlcItemClientService clients;
+
+ @Reference
+ volatile List<PlcGroup> groups;
+
+ @Option(name = "-d", aliases = "--dump", description = "Group uid.",
required = true, multiValued = false)
+ Boolean d = false;
+
+ @Argument(index = 0, name = "name", description = "PlcModel dedvice name",
required = true, multiValued = false)
+ String device_name = null;
+
+ @Argument(index = 1, name = "name", description = "PlcModel area name",
required = false, multiValued = false)
+ String area_name = null;
+
+ @Argument(index = 2, name = "name", description = "PlcModel area index",
required = false, multiValued = false)
+ Integer index = -1;
+
+
+ @Override
+ public Object execute() throws Exception {
+ Optional<PlcModel> optPlcModel = gf.getPlcModel(null, device_name);
+ if (optPlcModel.isPresent()) {
+ final PlcModel plcModel = optPlcModel.get();
+ if ((null != device_name) && (null == area_name) && (index == -1))
{
+ PrintMemoryAreas(plcModel);
+ } else if ((null != device_name) && (null != area_name) && (index
== -1)) {
+ PrintMemoryIndex(plcModel, "DB");
+ } else if ((null != device_name) && (null != area_name) && (index
!= -1)) {
+ PrintMemoryByteBuf(plcModel, "DB", 100);
+ }
+ } else {
+ System.out.println("PlcModel not present.");
+ }
+ return null;
+ }
+
+
+ private void PrintMemoryAreas(PlcModel plcModel){
+ ShellTable table = new ShellTable();
+ table.column("Area");
+ table.column("Amount");
+ plcModel.listMemoryAreas().stream().
+ forEach(s -> {
+ table.addRow().addContent(s,
plcModel.getMemoryAreaSegmentCount(s).toString());
+ });
+
+ }
+
+ private void PrintMemoryIndex(PlcModel plcModel, String strMemoryArea){
+ ShellTable table = new ShellTable();
+ table.column("Area");
+ table.column("Amount");
+ plcModel.getMemoryAreaSegmentIds(strMemoryArea).stream().
+ forEach(i -> {
+ System.out.println(i);
+ });
+
+ }
+
+ private void PrintMemoryByteBuf(PlcModel plcModel, String strMemoryArea,
Integer index){
+ Optional<PlcItem> optPlcItem =
plcModel.getMemoryAreaPlcItem(strMemoryArea, index);
+ if (optPlcItem.isPresent()) {
+ final PlcItem plcItem = optPlcItem.get();
+ final ByteBuf byteBuf = plcItem.getItemByteBuf();
+ System.out.println("----");
+ System.out.println(ByteBufUtil.prettyHexDump(byteBuf));
+ } else {
+ System.out.println("Memory area not present.");
+ }
+
+ }
+
+
+}
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 cbc6b91..0b2117a 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
@@ -444,7 +444,7 @@ public class PlcDeviceImpl implements PlcDevice {
@Override
public void putGroup(PlcGroup group) {
- if ((!enable) && (!deviceGroups.containsKey(group.getGroupUid()))) {
+ if ((!deviceGroups.containsKey(group.getGroupUid()))) {
group.setGroupDeviceUid(UUID.fromString((String)
deviceProperties.get(PlcDevice.SERVICE_UID)));
group.setPlcConnection(refPlcConnection);
group.setReadRingBuffer(readRingBuffer);
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 ef24de7..59751dc 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
@@ -496,7 +496,7 @@ public class PlcGeneralFunctionImpl implements
PlcGeneralFunction {
public Optional<PlcGroup> createGroup(String GroupUuid, String DeviceUuid,
String GroupName, String GroupDescription,
String GroupScanTime, String GroupEnable) {
-
+ boolean enable = GroupEnable.equalsIgnoreCase("true");
try {
final PlcDevice plcDevice =
getPlcDevice(UUID.fromString(DeviceUuid));
@@ -518,12 +518,11 @@ public class PlcGeneralFunctionImpl implements
PlcGeneralFunction {
PlcGroup plcGroup = new PlcGroupImpl.PlcGroupBuilder(bc,
GroupName, UUID.fromString(GroupUuid)).
setGroupPeriod(Long.parseLong(GroupScanTime)).
setGroupDeviceUid(plcDevice.getUid()).
-
setGroupDescription(GroupDescription).
+
setGroupDescription(GroupDescription).
+ setGroupEnable(enable).
build();
- if (GroupEnable.equals("true")){
- plcGroup.enable();
- } else plcGroup.disable();
- plcDevice.putGroup(plcGroup);
+ //The Device register the group like OSGi service
+ plcDevice.putGroup(plcGroup);
return Optional.of(plcGroup);
} else {
LOGGER.info("Device don´t exists");
@@ -709,9 +708,16 @@ public class PlcGeneralFunctionImpl implements
PlcGeneralFunction {
@Override
public Optional<PlcModel> getPlcModel(String deviceCategory, String
deviceName) {
try {
- String filter = FILTER_DEVICE_MODEL.
+ String filter = null;
+
+ if (null != deviceCategory) {
+ filter = FILTER_DEVICE_MODEL.
replace("*", deviceCategory).
replace("?", deviceName);
+ } else {
+ filter = FILTER_DEVICE_MODEL.
+ replace("?", deviceName);
+ }
ServiceReference[] refs = bc.getServiceReferences((String) null,
filter);
if (null != refs) {
final PlcModel plcModel = (PlcModel) bc.getService(refs[0]);
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGroupImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGroupImpl.java
index 2378189..4037251 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGroupImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.das.api/src/main/java/org/apache/plc4x/merlot/api/impl/PlcGroupImpl.java
@@ -96,6 +96,7 @@ public class PlcGroupImpl implements PlcGroup, Job {
groupProperties.put(PlcGroup.GROUP_CONCURRENT, false);
groupProperties.put(PlcGroup.GROUP_IMMEDIATE, true);
groupProperties.put(PlcGroup.GROUP_PERIOD, builder.groupPeriod);
+ this.enable = builder.group_enable;
}
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 addd086..454ad9d 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
@@ -258,6 +258,7 @@ public class DBPersistImpl implements EventHandler {
if (optPlcModel.isPresent()) {
optPlcModel.get().createScanGroup(pvRecord);
optPlcModel.get().createMemoryArea(pvRecord);
+ master.addRecord(pvRecord);
} else {
LOGGER.info("PlcModel {} is not present.",
strFields[0]);
}
diff --git a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/nbactions.xml
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/nbactions.xml
index adfb485..a9b81c7 100644
--- a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/nbactions.xml
+++ b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/nbactions.xml
@@ -9,7 +9,7 @@
<goal>install</goal>
</goals>
<properties>
- <skipTests></skipTests>
+ <skipTests>true</skipTests>
</properties>
</action>
</actions>
diff --git
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcModelImpl.java
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcModelImpl.java
index 1ee5566..aebec6b 100644
---
a/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcModelImpl.java
+++
b/plc4j/tools/merlot/org.apache.plc4x.merlot.drv.s7/src/main/java/org/apache/plc4x/merlot/drv/s7/impl/S7PlcModelImpl.java
@@ -1,4 +1,4 @@
-/*
+ /*
* 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.
@@ -17,6 +17,7 @@
package org.apache.plc4x.merlot.drv.s7.impl;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -66,7 +67,7 @@ public class S7PlcModelImpl implements PlcModel {
private Map<UUID, PlcGroup> scanGroups = new HashMap<UUID, PlcGroup>();
//Individual Items for a memory area.
- private Map<PlcItem, List<Pair<PlcGroup,PlcItem>>> scanItems = new
HashMap<PlcItem, List<Pair<PlcGroup,PlcItem>>>();
+ private Map<PlcItem, List<PlcGroup>> scanItems = new HashMap<PlcItem,
List<PlcGroup>>();
public S7PlcModelImpl(BundleContext bc, PlcGeneralFunction gf) {
this.bc = bc;
@@ -108,16 +109,17 @@ public class S7PlcModelImpl implements PlcModel {
String[] strTemp = pvId.split(":", 2);
String strTag = strTemp[1];
-
+ System.out.println("Paso: 01");
//TODO: Split the Device name.
S7Tag s7tag = S7Tag.of(strTag);
if (null == memoryAreas.get(s7tag.getMemoryArea().getShortName())) {
Map<Integer, PlcItem> inputBytes = new HashMap<Integer, PlcItem>();
memoryAreas.put(s7tag.getMemoryArea().getShortName(), inputBytes);
- logger.info("Created memmory area with PlcItem: " + "s7" +
s7tag.getMemoryArea().getShortName() + "["+s7tag.getBlockNumber() +"]");
+ logger.info("Created memmory area with PlcItem: " + "s7 " +
s7tag.getMemoryArea().getShortName() + "["+s7tag.getBlockNumber() +"]");
}
-
+
+ System.out.println("Paso: 02");
final Map<Integer, PlcItem> memoryBytes =
memoryAreas.get(s7tag.getMemoryArea().getShortName());
if (null == memoryBytes.get(s7tag.getBlockNumber())) {
@@ -125,19 +127,28 @@ public class S7PlcModelImpl implements PlcModel {
setItemDescription("Flag markes from PLC in byte order.").
setItemId("").
setItemEnable(true).
- build();
+ build();
memoryBytes.put(s7tag.getBlockNumber(), plcItem);
}
+ System.out.println("Paso: 03");
final PlcItem internalPlcItem =
memoryBytes.get(s7tag.getBlockNumber());
final ByteBuf byteBuf = internalPlcItem.getItemByteBuf();
int bufferSize =
(dbrecord.getInnerBuffer().isPresent())?dbrecord.getInnerBuffer().get().capacity():1;
int minSize = s7tag.getByteOffset() + bufferSize;
+ System.out.println("Paso: 04");
+
if (byteBuf.capacity() < minSize) {
byteBuf.capacity(minSize);
logger.info("The buffer capacity was expanded to {}.", minSize);
- }
+ }
+ byteBuf.writerIndex(byteBuf.capacity());
+ System.out.println(ByteBufUtil.prettyHexDump(byteBuf));
+
+ System.out.println("Paso: 05");
+ doUpdateByteBuf(dbrecord);
+ System.out.println("Paso: 06");
}
@Override
@@ -158,6 +169,7 @@ public class S7PlcModelImpl implements PlcModel {
}
if (null != plcDevice) {
+
Optional<Entry<UUID, PlcGroup>> optEntry = scanGroups.
entrySet().
stream().
@@ -168,19 +180,20 @@ public class S7PlcModelImpl implements PlcModel {
Optional<PlcGroup> optPlcGroup =
gf.createGroup(uuid.toString(),
plcDevice.getUid().toString(),
Long.toString(System.currentTimeMillis()),
- "S7 Model group " + scanGroups.size(),
+ uuid.toString(),
pvScanTime,
"true");
if (optPlcGroup.isPresent()) {
scanGroups.put(uuid, optPlcGroup.get());
- System.out.println("Grupo creado!!!");
+ logger.info("Group {} was created with uuid: {}
.",optPlcGroup.get().getGroupName(), uuid.toString());
} else {
logger.info("Scan group was not created for device {} and
time {}", plcDevice.getDeviceName(), pvScanTime);
}
}
+
+
} else {
- logger.info("Scan group was not created for DBRecord {}.");
- System.out.println("No encontro dispositvo!!!");
+ logger.info("Scan group was not created for DBRecord {}.",
dbRecord.toString());
}
}
@@ -224,10 +237,23 @@ public class S7PlcModelImpl implements PlcModel {
}
- /*
- *
- */
+ /**
+ * Updates the ByteBuf of a PlcItem based on data from a DBRecord.
+ * <p>
+ * This method retrieves data from a DBRecord, extracts relevant
+ * information such as PV ID, scan time, and memory area,
+ * and updates the corresponding PlcItem's ByteBuf.
+ * It handles cases where a PlcItem already exists for the given data
range,
+ * or when a new PlcItem needs to be created and associated with a
+ * scan group.
+ * The method also considers scenarios where ByteBuf updates might
+ * overlap existing items and attempts to find the closest matching
+ * item to avoid redundancy.
+ * Error handling includes logging when a scan group is not found.
+ * @param dbRecord The DBRecord containing the data to update.
+ */
private void doUpdateByteBuf(DBRecord dbRecord){
+ // document this method
PlcItem tempPlcItem = null;
final DBRecord dbrecord = (DBRecord) dbRecord;
final PVStructure pvStructure = dbrecord.getPVStructure();
@@ -242,7 +268,7 @@ public class S7PlcModelImpl implements PlcModel {
String[] strTemp = pvId.split(":", 2);
String strTag = strTemp[1];
-
+ logger.info("Paso 01");
//TODO: Split the Device name.
S7Tag s7tag = S7Tag.of(strTag);
@@ -251,7 +277,7 @@ public class S7PlcModelImpl implements PlcModel {
final ByteBuf byteBuf = internalPlcItem.getItemByteBuf();
dbRecord.atach(internalPlcItem);
-
+ logger.info("Paso 02");
//1. Chequea si el direccionamiento esta dentro de uno de los items
// si: 1.1 Verifica si esta dentro de todo el segmento.
// 1.2 si sobre sale del segmento, llega a una distancia mínima
@@ -266,86 +292,111 @@ public class S7PlcModelImpl implements PlcModel {
//Take the list of items associated with a memory area
var plcItems = scanItems.get(internalPlcItem);
+ if (null == plcItems) { //(03)
+ scanItems.put(internalPlcItem, new ArrayList<PlcGroup>());
+ }
+ logger.info("Paso 03");
//Create the first PlcItem in this memory area
- if (null == plcItems) { //(03)
-
- scanItems.put(internalPlcItem, new
ArrayList<Pair<PlcGroup,PlcItem>>());
- //Create a new PlcItem associated with the memory area
- PlcItem scanPlcItem = new
PlcItemImpl.PlcItemBuilder(UUID.randomUUID().toString()).
- setItemDescription("Flag markes from PLC in byte order.").
- setItemId("").
- setItemEnable(false).
- build();
-
- //Assigns the request tag in Bytes.
-
- S7Tag s7PlcTag = null;
- s7PlcTag = new S7Tag(TransportSize.USINT,
- s7tag.getMemoryArea(),
- s7tag.getBlockNumber(),
- s7tag.getByteOffset(),
- (byte) 0,
-
dbRecord.getInnerBuffer().get().writableBytes());
-
- scanPlcItem.setItemPlcTag(s7PlcTag);
-
- scanPlcItem.setItemByteBuf(
- byteBuf.slice(s7tag.getByteOffset(),
s7tag.getNumberOfElements())
- );
-
- Optional<Entry<UUID, PlcGroup>> optGroup = scanGroups.
- entrySet().
- stream().
- filter(g -> g.getValue().getPeriod() == scan_time).
- findFirst();
+// if (null == plcItems) { //(03)
+ logger.info("Paso 04");
- if (optGroup.isPresent()) {
- scanPlcItem.addItemListener(dbrecord);
- scanPlcItem.setEnable(true);
- scanItems.get(internalPlcItem).add(new
MutablePair<>(optGroup.get().getValue(), scanPlcItem));
- optGroup.get().getValue().putItem(scanPlcItem);
- } else {
- logger.info("Scan group no present {}.", scan_time);
- }
- } else {
-
- Optional<PlcItem> optPlcItem = scanItems.keySet().
- stream().
- filter(i -> {
- final S7Tag itemTag = (S7Tag) i.getItemPlcTag();
- int x1 = itemTag.getByteOffset();
- int x2 = itemTag.getByteOffset() +
s7tag.getByteOffset();
+ //Create a new PlcItem associated with the memory area
+ PlcItem scanPlcItem = new
PlcItemImpl.PlcItemBuilder(UUID.randomUUID().toString()).
+ setItemDescription("Flag markes from PLC in byte order.").
+ setItemId("").
+ setItemEnable(false).
+ build();
+ logger.info("Paso 05");
+ //Assigns the request tag in Bytes.
- return ((s7tag.getByteOffset() >= x1) &&
(s7tag.getByteOffset() + s7tag.getNumberOfElements() <= x2));
- }).
- findFirst();
+ S7Tag s7PlcTag = S7Tag.of(strTag);
+
+// s7PlcTag = new S7Tag(TransportSize.USINT,
+// s7tag.getMemoryArea(),
+// s7tag.getBlockNumber(),
+// s7tag.getByteOffset(),
+// (byte) 0,
+//
dbRecord.getInnerBuffer().get().writableBytes());
- if (!optPlcItem.isPresent()){
- List<PlcItem> rangeItems = scanItems.keySet().
- stream().
- filter(i -> {
- final S7Tag itemTag = (S7Tag) i.getItemPlcTag();
- int x1 = itemTag.getByteOffset();
- return (s7tag.getByteOffset() >= x1);
- }).
- toList();
+ logger.info("Paso 06");
+ scanPlcItem.setItemPlcTag(s7PlcTag);
+ logger.info("Paso 06.01");
+ scanPlcItem.setItemId(strTag);
+ logger.info("Paso 07");
- int distance = Integer.MAX_VALUE;
+ scanPlcItem.setItemByteBuf(
+ byteBuf.slice(s7tag.getByteOffset(), s7tag.getNumberOfElements())
+ );
+ logger.info("Paso 08");
+ Optional<Entry<UUID, PlcGroup>> optPlcGroup = scanGroups.
+ entrySet().
+ stream().
+ filter(g -> g.getValue().getPeriod() == scan_time).
+ findFirst();
- while(rangeItems.listIterator().hasNext()) {
- final PlcItem i = rangeItems.listIterator().next();
- final S7Tag itemTag = (S7Tag) i.getItemPlcTag();
- if (Math.abs(s7tag.getByteOffset() -
itemTag.getByteOffset()) < distance) {
- distance = Math.abs(s7tag.getByteOffset() -
itemTag.getByteOffset());
- tempPlcItem = i;
- }
- }
+ logger.info("Paso 09");
- } else {
- tempPlcItem = optPlcItem.get();
- }
+ if (optPlcGroup.isPresent()) {
+ logger.info("Paso 09.01");
+ scanPlcItem.addItemListener(dbrecord);
+ scanPlcItem.setEnable(true);
+ scanItems.get(internalPlcItem).add(optPlcGroup.get().getValue());
+ optPlcGroup.get().getValue().putItem(scanPlcItem);
+ logger.info("Paso 09.02");
+ } else {
+ logger.info("Scan group no present {}.", scan_time);
}
+
+ logger.info("Paso 10");
+
+// }
+// else {
+// logger.info("Paso 09");
+//
+// Optional<PlcItem> optPlcItem = plcItems.
+// stream().
+// flatMap(plcGroup -> plcGroup.getItems().stream()).
+// filter(i -> {
+// final S7Tag itemTag = (S7Tag) i.getItemPlcTag();
+// logger.info("s7tag: " + itemTag.toString());
+// int x1 = itemTag.getByteOffset();
+// int x2 = itemTag.getByteOffset() +
s7tag.getByteOffset();
+//
+// return ((s7tag.getByteOffset() >= x1) &&
(s7tag.getByteOffset() + s7tag.getNumberOfElements() <= x2));
+// }).
+// findFirst();
+//
+// logger.info("Paso 10");
+//
+// if (!optPlcItem.isPresent()){
+// logger.info("Paso 11");
+// List<PlcItem> rangeItems = plcItems.
+// stream().
+// flatMap(plcGroup -> plcGroup.getItems().stream()).
+// filter(i -> {
+// final S7Tag itemTag = (S7Tag) i.getItemPlcTag();
+// int x1 = itemTag.getByteOffset();
+// return (s7tag.getByteOffset() >= x1);
+// }).
+// toList();
+//
+// logger.info("Paso 12");
+// int distance = Integer.MAX_VALUE;
+//
+// while(rangeItems.listIterator().hasNext()) {
+// final PlcItem i = rangeItems.listIterator().next();
+// final S7Tag itemTag = (S7Tag) i.getItemPlcTag();
+// if (Math.abs(s7tag.getByteOffset() -
itemTag.getByteOffset()) < distance) {
+// distance = Math.abs(s7tag.getByteOffset() -
itemTag.getByteOffset());
+// tempPlcItem = i;
+// }
+// }
+// logger.info("Paso 13");
+// } else {
+// tempPlcItem = optPlcItem.get();
+// }
+// }