From d3f3d4b309cfb285fcbbc48b91c4046111c7e9cd Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期三, 02 七月 2025 13:45:54 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/SiemensCrnThread.java |   91 +++++++++++++++++++++++++++++++++------------
 1 files changed, 66 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index f04abea..31de838 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -5,31 +5,30 @@
 import HslCommunication.Profinet.Siemens.SiemensPLCS;
 import HslCommunication.Profinet.Siemens.SiemensS7Net;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.*;
-import com.zy.asrs.entity.param.TaskOverToWms;
 import com.zy.asrs.service.*;
-import com.zy.common.utils.HttpHandler;
 import com.zy.core.CrnThread;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
-import com.zy.core.enums.*;
+import com.zy.core.enums.CommandStatusType;
+import com.zy.core.enums.CrnTaskModeType;
+import com.zy.core.enums.SlaveType;
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.Task;
-import com.zy.core.model.command.CommandPackage;
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.protocol.CrnProtocol;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 
 import java.text.MessageFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 鍫嗗灈鏈虹嚎绋�
@@ -161,7 +160,7 @@
     /**
      * 璇诲彇鐘舵��
      */
-    private void readStatus(){
+    private void readStatus() throws InterruptedException {
 
         OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 56);
         if (result.IsSuccess) {
@@ -197,9 +196,11 @@
             // 澶嶄綅淇″彿
             if (crnProtocol.getTaskFinish() == 0) {
                 if (resetFlag) {
+                    log.info("{}鍙峰爢鍨涙満涓嬪彂澶嶄綅淇″彿",slave.getId());
                     CrnCommand crnCommand = new CrnCommand();
                     crnCommand.setAckFinish((short)1);
                     if (write(crnCommand)) {
+                        log.info("{}鍫嗗灈鏈哄浣嶄俊鍙蜂笅鍙戞垚鍔�",slave.getId());
                         resetFlag = false;
 
                     }
@@ -223,6 +224,7 @@
             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
             deviceErrorService.deleteDeviceError("crn", slave.getId());
         } else {
+            initCrnProtocol();
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戣鍙栧爢鍨涙満plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()));
             log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
             DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class);
@@ -233,7 +235,7 @@
     /**
      * 鍐欏叆鏁版嵁
      */
-    private boolean write(CrnCommand command){
+    private boolean write(CrnCommand command) throws InterruptedException {
         if (null == command) {
             log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
             return false;
@@ -254,6 +256,7 @@
 //        crnCommand.setDestinationStaNo(command.getDestinationStaNo());
         crnCommand.setCommand(command.getCommand());
         if (command.getTaskNo() == 0 && command.getAckFinish() == 0 && command.getAuto() != 1) {
+            log.error("write鍐欏叆浜�9999浠诲姟鍙凤細{}",command);
             command.setTaskNo((short) 9999);
         }
 
@@ -272,7 +275,7 @@
         array[6] = command.getDestinationPosZ();
         array[7] = command.getDestinationPosX();
         array[8] = command.getDestinationPosY();
-        array[9] = command.getCommand();
+//        array[9] = command.getCommand();
 
         // 浣滀笟淇℃伅
         OperateResult result = siemensNet.Write("DB100.0", array);
@@ -313,12 +316,12 @@
         try{
             //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
             Thread.sleep(500);
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 24);
+            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20);
             if (resultRead.IsSuccess) {
                 CrnCommand one = new CrnCommand();
                 one.setAckFinish(siemensNet.getByteTransform().TransInt16(resultRead.Content, 0));
                 one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
-                //one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
+                one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
                 one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
                 one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
                 one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10));
@@ -327,9 +330,11 @@
                 one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16));
 //                one.setSourceStaNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 18));
 //                one.setDestinationStaNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 20));
-                if (!crnCommand.getTaskNo().equals(one.getTaskNo()) && !crnCommand.getAckFinish().equals(one.getAckFinish())
-                        && !crnCommand.getSourcePosZ().equals(one.getSourcePosZ()) &&  !crnCommand.getSourcePosX().equals(one.getSourcePosX()) && !crnCommand.getSourcePosY().equals(one.getSourcePosY())
-                        && !crnCommand.getDestinationPosZ().equals(one.getDestinationPosZ()) &&  !crnCommand.getDestinationPosX().equals(one.getDestinationPosX()) && !crnCommand.getDestinationPosY().equals(one.getDestinationPosY())
+                if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode())
+                        || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY())
+                        || !command.getSourcePosZ().equals(one.getSourcePosZ()) || !command.getDestinationPosX().equals(one.getDestinationPosX())
+                        || !command.getDestinationPosY().equals(one.getDestinationPosY()) || !command.getDestinationPosZ().equals(one.getDestinationPosZ())
+
                 ){
                     log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
                     log.error("鍫嗗灈鏈哄懡浠ゅ洖璇诲け璐ュ悗锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(crnCommand));
@@ -338,13 +343,48 @@
                     readStatus();
                     return false;
                 } else {
-                    log.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                    log.info("5鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
                     OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
                 }
             }
         }catch (Exception e){
             log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�");
         }
+
+        if (command.getAckFinish() == 0) {
+            if (result.IsSuccess) {
+                Thread.sleep(300);
+                //浠诲姟涓嬪彂娆℃暟
+                int writeCount2 = 0;
+
+                do {
+                    writeCount2++;
+                    short commandFinish = (short) 1;
+                    result = siemensNet.Write("DB100.18", commandFinish);
+                    if(result.IsSuccess){
+                        //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
+                        Thread.sleep(200);
+                        OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.18", (short) 2);
+                        if (resultRead.IsSuccess) {
+                            commandFinish=siemensNet.getByteTransform().TransInt16(resultRead.Content, 0);
+                            if (commandFinish != 1){
+                                log.error("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍐欏叆鏁版嵁涓庡洖璇绘暟鎹笉涓�鑷达紒"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                            }else{
+                                //浠诲姟鍛戒护鍐欏叆鎴愬姛
+                                log.info("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍥炶鎴愬姛锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                                break;
+                            }
+                        }else {
+                            log.error("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍥炶澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                        }
+                    } else {
+                        log.error("鍫嗗灈鏈轰换鍔$‘璁や綅"+commandFinish+"鍐欏叆澶辫触锛�"+"寰幆鎵ц娆℃暟:"+writeCount2+"娆�");
+                    }
+                }while (writeCount2<5);
+            }
+        }
+
+
         return true;
     }
 
@@ -372,6 +412,7 @@
 //        crnCommand.setDestinationStaNo(command.getDestinationStaNo());
         crnCommand.setCommand(command.getCommand());
         if (command.getTaskNo() == 0 && command.getAckFinish() == 0 && command.getAuto() != 1) {
+            log.error("write2鍐欏叆浜�9999浠诲姟鍙凤細{}",command);
             command.setTaskNo((short) 9999);
         }
 
@@ -468,17 +509,17 @@
         //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
         Thread.sleep(200);
         try{
-            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 24);
+            OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20);
             if (resultRead.IsSuccess) {
                 CrnCommand one = new CrnCommand();
                 one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2));
                 one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4));
-                one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
-                one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
-                one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10));
-                one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12));
-                one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
-                one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16));
+                one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6));
+                one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8));
+                one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10));
+                one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12));
+                one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14));
+                one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16));
 //                one.setTraySize(siemensNet.getByteTransform().TransBool(resultRead.Content, 22));
                 if (!command.getTaskNo().equals(one.getTaskNo()) || !command.getTaskMode().equals(one.getTaskMode())
                         || !command.getSourcePosX().equals(one.getSourcePosX()) || !command.getSourcePosY().equals(one.getSourcePosY())
@@ -496,12 +537,12 @@
                         }
                     }
                     log.error("鍫嗗灈鏈哄懡浠ゅ洖璇诲け璐ュ悗锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
-                    MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command));
+                    MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(5, command));
                     Thread.sleep(100);
                     readStatus();
                     return false;
                 } else {
-                    log.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                    log.info("4鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
                 }
             }
         }catch (Exception e){

--
Gitblit v1.9.1