You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2021/09/07 07:52:13 UTC
[plc4x] branch develop updated: PLC4X-314: Fixed a bug,
not adding the size of the item causing a split
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push:
new 45ebf29 PLC4X-314: Fixed a bug, not adding the size of the item causing a split
45ebf29 is described below
commit 45ebf298ce5ee4516a7db944f567b9d5a0209ec8
Author: cdutz <ch...@c-ware.de>
AuthorDate: Tue Sep 7 09:50:49 2021 +0200
PLC4X-314: Fixed a bug, not adding the size of the item causing a split
NO JIRA: Updated the code to utilize the requests better in case of writing boolean arrays
---
.../plc4x/java/s7/readwrite/optimizer/S7Optimizer.java | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/S7Optimizer.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/S7Optimizer.java
index ed56759..3dc98b9 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/S7Optimizer.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/optimizer/S7Optimizer.java
@@ -126,7 +126,12 @@ public class S7Optimizer extends BaseOptimizer {
S7Field field = (S7Field) writeRequest.getField(fieldName);
PlcValue value = writeRequest.getPlcValue(fieldName);
- int writeRequestItemSize = S7_ADDRESS_ANY_SIZE + 4/* Size of Payload item header*/ +(field.getNumberOfElements() * field.getDataType().getSizeInBytes());
+ int writeRequestItemSize = S7_ADDRESS_ANY_SIZE + 4/* Size of Payload item header*/;
+ if (field.getDataType() == TransportSize.BOOL) {
+ writeRequestItemSize += Math.ceil((double) field.getNumberOfElements() / 8);
+ } else {
+ writeRequestItemSize += (field.getNumberOfElements() * field.getDataType().getSizeInBytes());
+ }
// If it's an odd number of bytes, add one to make it even
if (writeRequestItemSize % 2 == 1) {
writeRequestItemSize++;
@@ -142,15 +147,15 @@ public class S7Optimizer extends BaseOptimizer {
// Add the item.
}
- // If they would exceed, start a new request.
+ // If adding them would exceed, start a new request.
else {
// Create a new PlcWriteRequest containing the current field item.
processedRequests.add(new DefaultPlcWriteRequest(
((DefaultPlcWriteRequest) writeRequest).getWriter(), curFields));
// Reset the size and item lists.
- curRequestSize = EMPTY_WRITE_REQUEST_SIZE;
- curResponseSize = EMPTY_WRITE_RESPONSE_SIZE;
+ curRequestSize = EMPTY_WRITE_REQUEST_SIZE + writeRequestItemSize;
+ curResponseSize = EMPTY_WRITE_RESPONSE_SIZE + writeResponseItemSize;
curFields = new LinkedHashMap<>();
// Splitting of huge fields not yet implemented, throw an exception instead.