From 2c63098b29ab54bf3cfdaeda985963c8453cbdfb Mon Sep 17 00:00:00 2001
From: pang.jiabao <pang_jiabao@163.com>
Date: 星期六, 02 十一月 2024 11:00:35 +0800
Subject: [PATCH] 堆垛机回读异常时再次下发回报未重置写入信号

---
 src/main/java/com/zy/core/thread/SiemensCrnThread.java |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 51 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 005bba0..b5867a2 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -185,10 +185,12 @@
             } else {
                 initCrn();
                 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()));
-                News.error("SiemensCrn" + " - 4" + " - 璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+//                News.error("SiemensCrn" + " - 4" + " - 璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
             }
             // 澶嶄綅淇″彿
             if (crnProtocol.getStatusType().equals(CrnStatusType.WAITING) && resetFlag) {
+//                News.error("-------------------------------------------绗竴姝ャ�乕鍫嗗灈鏈哄彿锛歿}, 宸ヤ綔鍙凤細{}, 杞借揣鍙颁俊鍙�:{}]==>> 鐘舵�佷负10锛岀瓑寰呯‘璁わ紒锛�",
+//                        slave.getId(),crnProtocol.getTaskNo(), crnProtocol.getLoaded()==1 ? "鏈夌墿" : "鏃犵墿");
                 CrnCommand crnCommand = new CrnCommand();
                 crnCommand.setAckFinish((short) 1);
                 if (write(crnCommand)) {
@@ -214,7 +216,7 @@
         } catch (Exception e) {
             e.printStackTrace();
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戣鍙栧爢鍨涙満plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
-            News.error("SiemensCrn" + " - 5" + " - 璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+//            News.error("SiemensCrn" + " - 5" + " - 璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
             initCrn();
         }
     }
@@ -243,6 +245,8 @@
             if (command.getAckFinish() == 1) {
                 result = siemensNet.Write("DB100.0", (short) 1);
             } else {
+                // 鍏堟竻闄や笅鍙戠‘璁や綅
+                siemensNet.Write("DB100.18",(short) 0);
                 command.setCrnNo(slave.getId());
                 short[] array = new short[10];
                 array[0] = command.getAckFinish();
@@ -256,12 +260,57 @@
                 array[8] = command.getDestinationPosZ();
                 array[9] = command.getCommand();
                 result = siemensNet.Write("DB100.0", array);
+
+                //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
+                Thread.sleep(200);
+                try{
+                    OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 18);
+                    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));
+                        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())
+                        ){
+                            try{
+                                News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                            }catch (Exception e){
+                                try{
+                                    News.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
+                                }catch (Exception e1){
+                                    News.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                                }
+                            }
+                            if(!resetFlag){
+                                News.error("鍫嗗灈鏈哄懡浠ゅ洖璇诲け璐ュ悗锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪2 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                                MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command));
+                            }
+                            Thread.sleep(100);
+                            readStatus();
+                            return false;
+                        } else {
+//                            News.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                        }
+                    }
+                }catch (Exception e){
+                    News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�");
+                }
             }
         } else {
             // 鍐欎换鍔″畬鎴愮‘璁�
             if (command.getAckFinish() == 1) {
                 result = siemensNet.Write("DB100.0", (short) 1);
             } else {
+                // 鍏堟竻闄や笅鍙戠‘璁や綅
+                siemensNet.Write("DB100.18",(short) 0);
                 command.setCrnNo(slave.getId());
                 short[] array = new short[10];
                 array[0] = command.getAckFinish();

--
Gitblit v1.9.1