From b40eab1e582d72ca2e71afb2f5604671f5193f22 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 13 八月 2025 20:09:00 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/SiemensCrnThread.java |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 52 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index fc544d8..f9ecce5 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -10,8 +10,10 @@
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.BasCrnOpt;
 import com.zy.asrs.entity.BasCrnp;
+import com.zy.asrs.entity.DeviceDataLog;
 import com.zy.asrs.service.BasCrnOptService;
 import com.zy.asrs.service.BasCrnpService;
+import com.zy.asrs.service.DeviceDataLogService;
 import com.zy.common.utils.News;
 import com.zy.core.CrnThread;
 import com.zy.core.cache.MessageQueue;
@@ -25,6 +27,7 @@
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.MessageFormat;
+import java.util.Base64;
 import java.util.Date;
 
 /**
@@ -205,6 +208,22 @@
                     }
                 }
 
+                if (System.currentTimeMillis() - crnProtocol.getDeviceDataLog() > 1000 * 5) {
+                    //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰�
+                    //淇濆瓨鏁版嵁璁板綍
+                    DeviceDataLogService deviceDataLogService = SpringUtils.getBean(DeviceDataLogService.class);
+                    DeviceDataLog deviceDataLog = new DeviceDataLog();
+                    deviceDataLog.setOriginData(Base64.getEncoder().encodeToString(result.Content));
+                    deviceDataLog.setWcsData(JSON.toJSONString(crnProtocol));
+                    deviceDataLog.setType("crn");
+                    deviceDataLog.setDeviceNo(crnProtocol.getCrnNo());
+                    deviceDataLog.setCreateTime(new Date());
+                    deviceDataLogService.insert(deviceDataLog);
+
+                    //鏇存柊閲囬泦鏃堕棿
+                    crnProtocol.setDeviceDataLog(System.currentTimeMillis());
+                }
+
                 try {
                     // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
                     BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
@@ -278,7 +297,38 @@
 //        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) 20);
+            if (resultRead.IsSuccess) {
+                if (command.getAckFinish() == 0) {
+                    short taskNo = siemensNet.getByteTransform().TransInt16(resultRead.Content, 2);
+                    short taskMode = siemensNet.getByteTransform().TransInt16(resultRead.Content, 4);
+                    short sourcePosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 6);
+                    short sourcePosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 8);
+                    short sourcePosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 10);
+                    short destinationPosX = siemensNet.getByteTransform().TransInt16(resultRead.Content, 12);
+                    short destinationPosY = siemensNet.getByteTransform().TransInt16(resultRead.Content, 14);
+                    short destinationPosZ = siemensNet.getByteTransform().TransInt16(resultRead.Content, 16);
+                    if(taskNo == 0 || taskMode == 0 || sourcePosX == 0 || sourcePosY == 0 || sourcePosZ == 0 || destinationPosX == 0 || destinationPosY == 0 || destinationPosZ == 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;
@@ -298,6 +348,7 @@
             } while (i < 5);
         }
 
+        this.crnProtocol.setLastCommandTime(System.currentTimeMillis());
         try {
             // 鏃ュ織璁板綍
             BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
@@ -333,7 +384,6 @@
             return false;
         }
     }
-
 
     @Override
     public void close() {

--
Gitblit v1.9.1