From c7221d56da7bf4efa1672a15d2f1b66adbca20fc Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期三, 18 六月 2025 13:09:18 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/SiemensCrnThread.java |   39 +++++++++++++++++++++++++++++++++++----
 1 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index cdc49e4..654042f 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -154,7 +154,11 @@
      */
     private void readStatus(){
         try {
-            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 56);
+            short len = 56;
+            if (slave.getId() == 1) {
+                len = 58;
+            }
+            OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", len);
             if (result.IsSuccess) {
                 if (null == crnProtocol) {
                     crnProtocol = new CrnProtocol();
@@ -274,12 +278,39 @@
 //        array[9] = command.getSourceStaNo();
 //        array[10] = command.getDestinationStaNo();
         array[9] = command.getCommand();
-        OperateResult result = siemensNet.Write("DB100.0", array);
+
+        OperateResult result = null;
+        int idx = 0;
+        do {
+            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 4);
+            if (resultRead.IsSuccess) {
+                short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2);
+                if(taskNo == 0) {
+                    result = siemensNet.Write("DB100.0", array);
+                }else {
+                    break;
+                }
+            }
+            idx++;
+            Thread.sleep(500L);
+        } while (idx < 5);
 
         if (command.getAckFinish() == 0) {
             short commandFinish = 1;
-            Thread.sleep(100L);
-            result = siemensNet.Write("DB100.18", commandFinish);
+            int i = 0;
+            do {
+                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 4);
+                OperateResultExOne<byte[]> resultReadConfirm = siemensNet.Read("DB100.18", (short) 2);
+                if (resultRead.IsSuccess && resultReadConfirm.IsSuccess) {
+                    short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2);
+                    short confirm = siemensNet.getByteTransform().TransInt16(resultReadConfirm.Content, 0);
+                    if(taskNo != 0 && confirm == 0) {
+                        result = siemensNet.Write("DB100.18", commandFinish);
+                    }
+                }
+                i++;
+                Thread.sleep(500L);
+            } while (i < 5);
         }
 
         try {

--
Gitblit v1.9.1