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 2023/12/05 12:00:02 UTC

(plc4x) 02/02: Correct reading and writing of TIME type in S7-400.

This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feature/s7strings
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 2faf2a3de55fe93728476e1a17a48b689f34f7d0
Author: Cesar Garcia <ce...@ceos.com.ve>
AuthorDate: Tue Dec 5 07:59:17 2023 -0400

    Correct reading and writing of TIME type in S7-400.
---
 .../generated/org/apache/plc4x/java/s7/readwrite/DataItem.java    | 8 +++++---
 .../apache/plc4x/examples/plc4j/s7event/PlcReadDataS7400H.java    | 4 ++--
 protocols/s7/src/main/resources/protocols/s7/s7.mspec             | 2 +-
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java
index 8cbcc67d76..40dfd1d4d6 100644
--- a/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java
+++ b/plc4j/drivers/s7/src/main/generated/org/apache/plc4x/java/s7/readwrite/DataItem.java
@@ -180,7 +180,8 @@ public class DataItem {
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_TIME")) { // TIME
 
       // Simple Field (milliseconds)
-      Integer milliseconds = /*TODO: migrate me*/ /*TODO: migrate me*/ readBuffer.readInt("", 32);
+      Long milliseconds = /*TODO: migrate me*/ /*TODO: migrate me*/
+          readBuffer.readUnsignedLong("", 32);
 
       return PlcTIME.ofMilliseconds(milliseconds);
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_LTIME")) { // LTIME
@@ -364,9 +365,10 @@ public class DataItem {
           writeBuffer, _value, stringLength, "UTF-16");
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_TIME")) { // TIME
       // Simple Field (milliseconds)
-      int milliseconds = (int) _value.getInt();
+      long milliseconds = (long) _value.getLong();
       /*TODO: migrate me*/
-      /*TODO: migrate me*/ writeBuffer.writeInt("", 32, ((Number) (milliseconds)).intValue());
+      /*TODO: migrate me*/ writeBuffer.writeUnsignedLong(
+          "", 32, ((Number) (milliseconds)).longValue());
     } else if (EvaluationHelper.equals(dataProtocolId, "IEC61131_LTIME")) { // LTIME
       // Simple Field (nanoseconds)
       BigInteger nanoseconds = (BigInteger) _value.getBigInteger();
diff --git a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadDataS7400H.java b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadDataS7400H.java
index 330212e7d9..cb08aea36d 100644
--- a/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadDataS7400H.java
+++ b/plc4j/examples/plc4j-s7event/src/main/java/org/apache/plc4x/examples/plc4j/s7event/PlcReadDataS7400H.java
@@ -250,9 +250,9 @@ public class PlcReadDataS7400H implements ConnectionStateListener {
         if (!isConnected.get()) return;
         try {
             final PlcWriteRequest.Builder writeRequest = connection.writeRequestBuilder();  //(01)
-            writeRequest.addTagAddress("TAG01", "%DB406:4:DWORD",(long) 0x0001_0001); //(02) 
+            //writeRequest.addTagAddress("TAG01", "%DB406:4:DWORD",(long) 0x0001_0001); //(02) 
             
-            writeRequest.addTagAddress("TAG02", "%DB406:4:TIME", Duration.ofDays(7)); //(02) 
+            writeRequest.addTagAddress("TAG02", "%DB406:4:TIME", Duration.ofDays(-11)); //(02) 
           
             
             final PlcWriteRequest wr = writeRequest.build(); //(03)
diff --git a/protocols/s7/src/main/resources/protocols/s7/s7.mspec b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
index f399ed4a50..0d8179cd00 100644
--- a/protocols/s7/src/main/resources/protocols/s7/s7.mspec
+++ b/protocols/s7/src/main/resources/protocols/s7/s7.mspec
@@ -772,7 +772,7 @@
         // -----------------------------------------
         // - Duration: Interpreted as "milliseconds"
         ['"IEC61131_TIME"' TIME
-            [simple int 32 milliseconds]
+            [simple uint 32 milliseconds]
         ]
         //['"S7_S5TIME"' TIME
         //    [reserved uint 2  '0x00']