From 740b16bc580b06fc86fd497887364cff44115cf6 Mon Sep 17 00:00:00 2001
From: 18516761980 <56479841@qq.com>
Date: 星期三, 10 八月 2022 08:50:34 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/MelsecCrnThread.java |  133 +++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 124 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/MelsecCrnThread.java b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
index 57d10ea..84ed59e 100644
--- a/src/main/java/com/zy/core/thread/MelsecCrnThread.java
+++ b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -39,7 +39,13 @@
     private MelsecMcNet melsecMcNet;
     private CrnSlave slave;
     private CrnProtocol crnProtocol;
+    private short heartBeatVal = 1;
     private boolean resetFlag = false;
+
+    /**
+     * 鍫嗗灈鏈烘槸鍚﹀湪鍥炲師鐐硅繍鍔ㄤ腑鏍囪
+     */
+    private boolean backHpFlag = false;
 
     public MelsecCrnThread(CrnSlave slave) {
         this.slave = slave;
@@ -49,6 +55,11 @@
     @SuppressWarnings("InfiniteLoopStatement")
     public void run() {
         this.connect();
+//        try {
+//            Thread.sleep(2000);
+//        } catch (InterruptedException e) {
+//            e.printStackTrace();
+//        }
         while (true) {
             try {
                 int step = 1;
@@ -86,12 +97,40 @@
                     default:
                         break;
                 }
+                // 蹇冭烦
+                heartbeat();
                 Thread.sleep(500);
             } catch (Exception e) {
                 e.printStackTrace();
             }
 
         }
+    }
+
+    /**
+     * 鍒濆鍖栧爢鍨涙満鐘舵��
+     */
+    private void initCrn() {
+        if (null == crnProtocol) {
+            crnProtocol = new CrnProtocol();
+        }
+        crnProtocol.setMode((short) -1);
+//        crnProtocol.setTaskNo((short)0);
+        crnProtocol.setStatus((short)-1);
+        crnProtocol.setBay((short)0);
+        crnProtocol.setLevel((short)0);
+        crnProtocol.setForkPos((short) -1);
+        crnProtocol.setLiftPos((short) -1);
+        crnProtocol.setWalkPos((short)0);
+        crnProtocol.setLoaded((short)0);
+        crnProtocol.setAlarm((short)0);
+        crnProtocol.setxSpeed((short)0);
+        crnProtocol.setySpeed((short)0);
+        crnProtocol.setzSpeed((short)0);
+        crnProtocol.setxDistance((short)0);
+        crnProtocol.setyDistance((short)0);
+        crnProtocol.setxDuration((short)0);
+        crnProtocol.setyDuration((short)0);
     }
 
     @Override
@@ -106,8 +145,9 @@
         } else {
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝爢鍨涙満plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] ", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
             log.error("鍫嗗灈鏈簆lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            initCrn();
         }
-        melsecMcNet.ConnectClose();
+//        melsecMcNet.ConnectClose();
         return result;
     }
 
@@ -116,10 +156,16 @@
      */
     private void readStatus(){
         try {
+//            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) {
                     crnProtocol = new CrnProtocol();
+                    crnProtocol.setCrnNo(slave.getId());
                 }
                 crnProtocol.setMode(melsecMcNet.getByteTransform().TransInt16(result.Content, 0));
                 crnProtocol.setTaskNo(melsecMcNet.getByteTransform().TransInt16(result.Content, 2));
@@ -135,13 +181,13 @@
                 crnProtocol.setTemp2(melsecMcNet.getByteTransform().TransInt16(result.Content, 22));
                 crnProtocol.setTemp3(melsecMcNet.getByteTransform().TransInt16(result.Content, 24));
                 crnProtocol.setTemp4(melsecMcNet.getByteTransform().TransInt16(result.Content, 26));
-                crnProtocol.setXSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 28));
-                crnProtocol.setYSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 32));
-                crnProtocol.setZSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 36));
-                crnProtocol.setXDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 40));
-                crnProtocol.setYDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 44));
-                crnProtocol.setXDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 48));
-                crnProtocol.setYDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 52));
+                crnProtocol.setxSpeed(melsecMcNet.getByteTransform().TransInt16(result.Content, 28));
+                crnProtocol.setySpeed(melsecMcNet.getByteTransform().TransInt16(result.Content, 32));
+                crnProtocol.setzSpeed(melsecMcNet.getByteTransform().TransInt16(result.Content, 36));
+                crnProtocol.setxDistance(melsecMcNet.getByteTransform().TransInt16(result.Content, 40));
+                crnProtocol.setyDistance(melsecMcNet.getByteTransform().TransInt16(result.Content, 44));
+                crnProtocol.setxDuration(melsecMcNet.getByteTransform().TransInt16(result.Content, 48));
+                crnProtocol.setyDuration(melsecMcNet.getByteTransform().TransInt16(result.Content, 52));
 
                 OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
 
@@ -149,6 +195,9 @@
                 if (crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) {
                     log.error("-------------------------------------------绗竴姝ャ�乕鍫嗗灈鏈哄彿锛歿}][宸ヤ綔鍙凤細{}]==>> 鐘舵�佷负90锛岀瓑寰呯‘璁わ紒锛�",slave.getId(),crnProtocol.getTaskNo());
                     if (resetFlag) {
+                        if(crnProtocol.getTaskNo()==9999){
+                            backHpFlag = false;
+                        }
                         CrnCommand crnCommand = new CrnCommand();
                         crnCommand.setAckFinish((short)1);
                         if (write(crnCommand)) {
@@ -162,6 +211,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());
                 }
@@ -174,6 +224,7 @@
             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()));
             log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            initCrn();
         }
 
     }
@@ -186,6 +237,55 @@
             log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
             return false;
         }
+
+//        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();
@@ -228,7 +328,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;
@@ -244,6 +344,21 @@
         melsecMcNet.ConnectClose();
     }
 
+    /**
+     * 蹇冭烦
+     */
+    private void heartbeat(){
+        if (heartBeatVal == 1) {
+            heartBeatVal = 2;
+        } else {
+            heartBeatVal = 1;
+        }
+        OperateResult write = melsecMcNet.Write("D10", heartBeatVal);
+        if (!write.IsSuccess) {
+            log.error("鍫嗗灈鏈簆lc蹇冭烦閫氳澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+        }
+    }
+
 
     /******************************************************************************************/
     /**************************************** 娴嬭瘯涓撶敤 *****************************************/

--
Gitblit v1.9.1