From fab191eb70b8bbdba0bc2a215bbaf080741321a5 Mon Sep 17 00:00:00 2001
From: ytfl <ytfl@qq.com>
Date: 星期三, 25 六月 2025 15:30:45 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/SiemensCrnThread.java |   50 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 45 insertions(+), 5 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..1dd59a3 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,14 +278,51 @@
 //        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) {
+                if (command.getAckFinish() == 0) {
+                    short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2);
+                    if(taskNo == 0) {
+                        result = siemensNet.Write("DB100.0", array);
+                    }else {
+                        break;
+                    }
+                }else {
+                    short ackFinish = siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
+                    if(ackFinish != command.getAckFinish()) {
+                        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);
         }
 
+        this.crnProtocol.setLastCommandTime(System.currentTimeMillis());
         try {
             // 鏃ュ織璁板綍
             BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
@@ -317,7 +358,6 @@
             return false;
         }
     }
-
 
     @Override
     public void close() {

--
Gitblit v1.9.1