From a0adee2f689c85399ca311ef7691cd911a00fd3b Mon Sep 17 00:00:00 2001
From: 18516761980 <4761516tqsxp>
Date: 星期四, 17 三月 2022 16:02:30 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/MelsecCrnThread.java |  102 ++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 80 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/MelsecCrnThread.java b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
index efd3d32..73e1d1b 100644
--- a/src/main/java/com/zy/core/thread/MelsecCrnThread.java
+++ b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -24,6 +24,7 @@
 import com.zy.core.model.protocol.CrnProtocol;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import java.text.MessageFormat;
 import java.util.Date;
@@ -50,6 +51,11 @@
     @SuppressWarnings("InfiniteLoopStatement")
     public void run() {
         this.connect();
+//        try {
+//            Thread.sleep(2000);
+//        } catch (InterruptedException e) {
+//            e.printStackTrace();
+//        }
         while (true) {
             try {
                 int step = 1;
@@ -88,7 +94,7 @@
                         break;
                 }
                 // 蹇冭烦
-//                heartbeat();
+                heartbeat();
                 Thread.sleep(500);
             } catch (Exception e) {
                 e.printStackTrace();
@@ -137,7 +143,7 @@
             log.error("鍫嗗灈鏈簆lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
             initCrn();
         }
-        melsecMcNet.ConnectClose();
+//        melsecMcNet.ConnectClose();
         return result;
     }
 
@@ -146,9 +152,11 @@
      */
     private void readStatus(){
         try {
-            if (this.slave.getId() == 1) {
-                System.out.println("===");
-            }
+//            if (this.slave.getId() == 1 && flag1.equals(0)) {
+//                Thread.sleep(3000);
+//                flag1=1;
+//                System.out.println("===");
+//            }
             OperateResultExOne<byte[]> result = melsecMcNet.Read("D20", (short) 70);
             if (result.IsSuccess) {
                 if (null == crnProtocol) {
@@ -195,6 +203,7 @@
                 BasCrnp basCrnp = new BasCrnp();
                 basCrnp.setCrnErr(crnProtocol.getAlarm()==null?0:crnProtocol.getAlarm().longValue());
                 basCrnp.setCrnNo(slave.getId());
+                basCrnp.setCrnSts((int)crnProtocol.getMode());
                 if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){
                     log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
                 }
@@ -220,24 +229,73 @@
             log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
             return false;
         }
-        command.setCrnNo(slave.getId());
-        short[] array = new short[10];
-        array[0] = command.getAckFinish();
-        array[1] = command.getTaskNo();
-        array[2] = command.getTaskMode();
-        array[3] = command.getSourcePosX();
-        array[4] = command.getSourcePosY();
-        array[5] = command.getSourcePosZ();
-        array[6] = command.getDestinationPosX();
-        array[7] = command.getDestinationPosY();
-        array[8] = command.getDestinationPosZ();
-        array[9] = command.getCommand();
-        OperateResult result = melsecMcNet.Write("D0", array);
 
-        if (command.getAckFinish() == 0) {
-            short commandFinish = 1;
-            result = melsecMcNet.Write("D9", commandFinish);
+        OperateResult result = null;
+        try{
+            Integer exeCount=0;
+            do{
+                command.setCrnNo(slave.getId());
+                short[] array = new short[10];
+                array[0] = command.getAckFinish();
+                array[1] = command.getTaskNo();
+                array[2] = command.getTaskMode();
+                array[3] = command.getSourcePosX();
+                array[4] = command.getSourcePosY();
+                array[5] = command.getSourcePosZ();
+                array[6] = command.getDestinationPosX();
+                array[7] = command.getDestinationPosY();
+                array[8] = command.getDestinationPosZ();
+                array[9] = command.getCommand();
+                result = melsecMcNet.Write("D0", array);
+                if(result.IsSuccess) {
+                    if (command.getAckFinish() == 0) {
+                        short commandFinish = 1;
+                        result = melsecMcNet.Write("D9", commandFinish);
+                        if(result.IsSuccess){
+                            //鍐欎换鍔$‘璁よ繑鍥炴垚鍔熷悗锛屾煡璇㈢‘璁や竴娆�
+                            Thread.sleep(200);
+                            OperateResultExOne<byte[]> result1 = melsecMcNet.Read("D9", (short)2);
+                            if(result1.IsSuccess){
+                                short commandVal = melsecMcNet.getByteTransform().TransInt16(result1.Content,2);
+                                if(commandVal==1){
+                                    break;
+                                } else {
+                                    exeCount++;
+                                }
+                            } else{
+                                exeCount++;
+                            }
+                        }else{
+                            exeCount++;
+                        }
+                    }
+                }else{
+                    exeCount++;
+                }
+                Thread.sleep(200);
+            }while(exeCount>3);
+        }catch (Exception e){
+
         }
+
+//        command.setCrnNo(slave.getId());
+//        short[] array = new short[10];
+//        array[0] = command.getAckFinish();
+//        array[1] = command.getTaskNo();
+//        array[2] = command.getTaskMode();
+//        array[3] = command.getSourcePosX();
+//        array[4] = command.getSourcePosY();
+//        array[5] = command.getSourcePosZ();
+//        array[6] = command.getDestinationPosX();
+//        array[7] = command.getDestinationPosY();
+//        array[8] = command.getDestinationPosZ();
+//        array[9] = command.getCommand();
+//        OperateResult result = melsecMcNet.Write("D0", array);
+//
+//        if (command.getAckFinish() == 0) {
+//            short commandFinish = 1;
+//            result = melsecMcNet.Write("D9", commandFinish);
+//        }
 
         try {
             // 鏃ュ織璁板綍
@@ -262,7 +320,7 @@
             bean.insert(basCrnOpt);
         } catch (Exception ignore) {}
 
-        if (result.IsSuccess) {
+        if (result != null && result.IsSuccess) {
             log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
             return true;

--
Gitblit v1.9.1