From 904c3bf52d9861330c0ca47748c8202db6ad7e98 Mon Sep 17 00:00:00 2001
From: yxFwq <1>
Date: 星期日, 21 七月 2024 10:18:20 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/SiemensCrnThread.java |  881 ++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 631 insertions(+), 250 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
index 25674d7..699d8dc 100644
--- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -5,6 +5,7 @@
 import HslCommunication.Profinet.Siemens.SiemensPLCS;
 import HslCommunication.Profinet.Siemens.SiemensS7Net;
 import com.alibaba.fastjson.JSON;
+import com.core.common.Cools;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.BasCrnOpt;
@@ -18,6 +19,7 @@
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.Task;
 import com.zy.core.model.command.CrnCommand;
+import com.zy.core.model.cpmmandParam.CrnCommandParam;
 import com.zy.core.model.protocol.CrnProtocol;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
@@ -37,6 +39,17 @@
     private CrnSlave slave;
     private CrnProtocol crnProtocol;
     private boolean resetFlag = false;
+    private boolean resetFlagTwo = false;
+
+    public Long sign = System.currentTimeMillis();
+
+    public boolean isRunning = true;
+
+    /**
+     * 鍫嗗灈鏈烘槸鍚﹀湪鍥炲師鐐硅繍鍔ㄤ腑鏍囪
+     */
+    private boolean backHpFlag = false;
+    private boolean backHpFlagTwo = false;
 
     public SiemensCrnThread(CrnSlave slave) {
         this.slave = slave;
@@ -46,7 +59,8 @@
     @SuppressWarnings("InfiniteLoopStatement")
     public void run() {
         this.connect();
-        while (true) {
+        sign = System.currentTimeMillis();
+        while (isRunning) {
             try {
                 int step = 1;
                 Task task = MessageQueue.poll(SlaveType.Crn, slave.getId());
@@ -80,6 +94,32 @@
                         command.setDestinationPosZ((short)0);     // 鐩爣搴撲綅灞�
                         write(command);
                         break;
+                    // 鍐欏叆鏁版嵁
+                    case 5:
+                        write5((CrnCommand) task.getData());
+                        break;
+                    // 澶嶄綅
+                    case 6:
+                        CrnCommand command2 = (CrnCommand) task.getData();
+                        if (null == command2) {
+                            command2 = new CrnCommand();
+                        }
+                        command2.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+                        command2.setTaskNo((short) 0); // 宸ヤ綔鍙�
+                        command2.setAckFinish((short) 1);  // 浠诲姟瀹屾垚纭浣�
+                        command2.setTaskMode(CrnTaskModeType.NONE); // 浠诲姟妯″紡
+                        command2.setSourcePosX((short)0);     // 婧愬簱浣嶆帓
+                        command2.setSourcePosY((short)0);     // 婧愬簱浣嶅垪
+                        command2.setSourcePosZ((short)0);     // 婧愬簱浣嶅眰
+                        command2.setDestinationPosX((short)0);     // 鐩爣搴撲綅鎺�
+                        command2.setDestinationPosY((short)0);     // 鐩爣搴撲綅鍒�
+                        command2.setDestinationPosZ((short)0);     // 鐩爣搴撲綅灞�
+                        write5(command2);
+                        break;
+                    // 鍙屽伐浣嶅悓鏃朵綔涓�
+                    case 9:
+                        write9((CrnCommandParam) task.getData());
+                        break;
                     default:
                         break;
                 }
@@ -87,7 +127,45 @@
             } catch (Exception e) {
 //                e.printStackTrace();
             }
+//            System.out.println("绗�"+slave.getId()+"涓爢鍨涙満绾跨▼杩愯涓�杞細"+(System.currentTimeMillis()-sign));
+            sign = System.currentTimeMillis();
+        }
+    }
 
+    /**
+     * 鍒濆鍖栧爢鍨涙満鐘舵��
+     */
+    private void initCrn() {
+        if (null == crnProtocol) {
+            crnProtocol = new CrnProtocol();
+        }
+        crnProtocol.setMode((short) -1);
+//        crnProtocol.setTaskNo((short)0);
+        crnProtocol.setStatus((short)-1);
+        crnProtocol.setStatusTwo((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);
+
+        // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+        BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
+        BasCrnp basCrnp = basCrnpService.selectById(slave.getId());
+        basCrnp.setCrnSts((int)crnProtocol.getMode());
+        basCrnp.setCrnStatusOne(-1);
+        basCrnp.setCrnStatusTwo(-1);
+        if (!basCrnpService.updateById(basCrnp)){
+            log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
         }
     }
 
@@ -105,8 +183,9 @@
         } else {
             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());
+            initCrn();
         }
-        siemensNet.ConnectClose();
+//        siemensNet.ConnectClose();
         return result;
     }
 
@@ -114,291 +193,588 @@
      * 璇诲彇鐘舵��
      */
     private void readStatus(){
-        OperateResultExOne<byte[]> result = siemensNet.Read("DB11.2", (short) 104);
-        if (result.IsSuccess) {
-            if (null == crnProtocol) {
-                crnProtocol = new CrnProtocol();
+        try {
+            OperateResultExOne<byte[]> result = new OperateResultExOne<byte[]>();
+            if (slave.getId()>2 && slave.getId()<6){
+                result = siemensNet.Read("DB101.0", (short) 66);
+            } else {
+                result = siemensNet.Read("DB101.0", (short) 56);
             }
-            crnProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));   // 2
-            crnProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 2)); // 4
-            crnProtocol.setTaskNo(siemensNet.getByteTransform().TransInt16(result.Content, 4)); // 6
-            crnProtocol.setTaskFinish(siemensNet.getByteTransform().TransInt16(result.Content, 6)); // 8
-            crnProtocol.setValid(siemensNet.getByteTransform().TransInt16(result.Content, 8));  // 10
+            if (result.IsSuccess) {
+                if (null == crnProtocol) {
+                    crnProtocol = new CrnProtocol();
+                    crnProtocol.setCrnNo(slave.getId());
+                }
+                crnProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0));
+                crnProtocol.setTaskNo(siemensNet.getByteTransform().TransInt16(result.Content, 2));
+                crnProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 4));
+                crnProtocol.setBay(siemensNet.getByteTransform().TransInt16(result.Content, 6));
+                crnProtocol.setLevel(siemensNet.getByteTransform().TransInt16(result.Content, 8));
+                crnProtocol.setForkPos(siemensNet.getByteTransform().TransInt16(result.Content, 10));
 
-            crnProtocol.setLevel(siemensNet.getByteTransform().TransInt16(result.Content, 14)); // 16
-            crnProtocol.setBay(siemensNet.getByteTransform().TransInt16(result.Content, 16));   // 18
-            crnProtocol.setRow(siemensNet.getByteTransform().TransInt16(result.Content, 18));   // 20
-            crnProtocol.setLane(siemensNet.getByteTransform().TransInt16(result.Content, 20));  // 22
+                if (slave.getId()<3 || slave.getId()>5){
+                    crnProtocol.setLiftPos(siemensNet.getByteTransform().TransInt16(result.Content, 12));
+                    crnProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 14));
+                    crnProtocol.setLoaded(siemensNet.getByteTransform().TransInt16(result.Content, 16));
+                    crnProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 18));
+                    crnProtocol.setTemp1(siemensNet.getByteTransform().TransInt16(result.Content, 20));
+                    crnProtocol.setTemp2(siemensNet.getByteTransform().TransInt16(result.Content, 22));
+                    crnProtocol.setTemp3(siemensNet.getByteTransform().TransInt16(result.Content, 24));
+                    crnProtocol.setTemp4(siemensNet.getByteTransform().TransInt16(result.Content, 26));
+                    crnProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28));
+                    crnProtocol.setySpeed(siemensNet.getByteTransform().TransInt16(result.Content, 32));
+                    crnProtocol.setzSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 36));
+                    crnProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40));
+                    crnProtocol.setyDistance(siemensNet.getByteTransform().TransInt16(result.Content, 44));
+                    crnProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48));
+                    crnProtocol.setyDuration(siemensNet.getByteTransform().TransInt16(result.Content, 52));
+                } else {
+                    crnProtocol.setLoaded(siemensNet.getByteTransform().TransInt16(result.Content, 12));
 
-            // 寮傚父
-            crnProtocol.setAlarm1(0);
-            crnProtocol.setAlarm2(0);
-            crnProtocol.setAlarm3(0);
-            crnProtocol.setAlarm4(0);
-            boolean[] err1 = siemensNet.getByteTransform().TransBool(result.Content, 28, 1);    // 30
-            if (err1[0]) { crnProtocol.setAlarm1(1); }
-            if (err1[1]) { crnProtocol.setAlarm1(2); }
-            if (err1[2]) { crnProtocol.setAlarm1(3); }
-            boolean[] err2 = siemensNet.getByteTransform().TransBool(result.Content, 29, 1);    // 31
-            if (err2[0]) { crnProtocol.setAlarm1(4); }
-            if (err2[1]) { crnProtocol.setAlarm1(5); }
-            if (err2[2]) { crnProtocol.setAlarm1(6); }
-            boolean[] err3 = siemensNet.getByteTransform().TransBool(result.Content, 30, 1);    // 32
-            if (err3[6]) { crnProtocol.setAlarm1(7); }
-            if (err3[7]) { crnProtocol.setAlarm1(8); }
-            boolean[] err4 = siemensNet.getByteTransform().TransBool(result.Content, 31, 1);    // 33
-            if (err4[1]) { crnProtocol.setAlarm1(9); }
-            if (err4[5]) { crnProtocol.setAlarm1(10); }
-            if (err4[6]) { crnProtocol.setAlarm1(11); }
-            if (err4[7]) { crnProtocol.setAlarm1(12); }
-            boolean[] err5 = siemensNet.getByteTransform().TransBool(result.Content, 32, 1);    // 34
-            if (err5[0]) { crnProtocol.setAlarm2(13); }
-            if (err5[2]) { crnProtocol.setAlarm2(14); }
-            if (err5[3]) { crnProtocol.setAlarm2(15); }
-            if (err5[5]) { crnProtocol.setAlarm2(16); }
-            if (err5[6]) { crnProtocol.setAlarm2(17); }
-            if (err5[7]) { crnProtocol.setAlarm2(18); }
-            boolean[] err6 = siemensNet.getByteTransform().TransBool(result.Content, 33, 1);    // 35
-            if (err6[1]) { crnProtocol.setAlarm2(19); }
-            if (err6[2]) { crnProtocol.setAlarm2(20); }
-            if (err6[3]) { crnProtocol.setAlarm2(21); }
-            if (err6[4]) { crnProtocol.setAlarm2(22); }
-            boolean[] err7 = siemensNet.getByteTransform().TransBool(result.Content, 34, 1);    // 36
-            if (err7[4]) { crnProtocol.setAlarm2(23); }
-            if (err7[5]) { crnProtocol.setAlarm2(24); }
-            if (err7[6]) { crnProtocol.setAlarm2(25); }
-            boolean[] err8 = siemensNet.getByteTransform().TransBool(result.Content, 36, 1);    // 38
-            if (err8[0]) { crnProtocol.setAlarm3(26); }
-            if (err8[1]) { crnProtocol.setAlarm3(27); }
-            if (err8[2]) { crnProtocol.setAlarm3(28); }
-            if (err8[3]) { crnProtocol.setAlarm3(29); }
-            if (err8[4]) { crnProtocol.setAlarm3(30); }
-            if (err8[5]) { crnProtocol.setAlarm3(31); }
-            if (err8[6]) { crnProtocol.setAlarm3(32); }
-            if (err8[7]) { crnProtocol.setAlarm3(33); }
-            boolean[] err9 = siemensNet.getByteTransform().TransBool(result.Content, 37, 1);    // 39
-            if (err9[0]) { crnProtocol.setAlarm3(34); }
-            if (err9[1]) { crnProtocol.setAlarm3(35); }
-            if (err9[2]) { crnProtocol.setAlarm3(36); }
-            if (err9[3]) { crnProtocol.setAlarm3(37); }
-            if (err9[4]) { crnProtocol.setAlarm3(38); }
-            if (err9[5]) { crnProtocol.setAlarm3(39); }
-            if (err9[6]) { crnProtocol.setAlarm3(40); }
-            if (err9[7]) { crnProtocol.setAlarm3(41); }
-            boolean[] err10 = siemensNet.getByteTransform().TransBool(result.Content, 38, 1);    // 40
-            if (err10[0]) { crnProtocol.setAlarm3(42); }
-            if (err10[1]) { crnProtocol.setAlarm3(43); }
-            if (err10[2]) { crnProtocol.setAlarm3(44); }
-            if (err10[3]) { crnProtocol.setAlarm3(45); }
-            if (err10[4]) { crnProtocol.setAlarm3(46); }
-            boolean[] err11 = siemensNet.getByteTransform().TransBool(result.Content, 39, 1);    // 41
-            if (err11[0]) { crnProtocol.setAlarm3(47); }
-            if (err11[1]) { crnProtocol.setAlarm3(48); }
-            if (err11[2]) { crnProtocol.setAlarm3(49); }
-            boolean[] err12 = siemensNet.getByteTransform().TransBool(result.Content, 40, 1);    // 42
-            if (err12[0]) { crnProtocol.setAlarm4(50); }
-            if (err12[1]) { crnProtocol.setAlarm4(51); }
-            if (err12[2]) { crnProtocol.setAlarm4(52); }
-            if (err12[3]) { crnProtocol.setAlarm4(53); }
-            if (err12[4]) { crnProtocol.setAlarm4(54); }
-            if (err12[5]) { crnProtocol.setAlarm4(55); }
-            boolean[] err13 = siemensNet.getByteTransform().TransBool(result.Content, 41, 1);    // 43
-            if (err13[0]) { crnProtocol.setAlarm4(56); }
-            if (err13[1]) { crnProtocol.setAlarm4(57); }
-            if (err13[2]) { crnProtocol.setAlarm4(58); }
-            if (err13[3]) { crnProtocol.setAlarm4(59); }
-            boolean[] err14 = siemensNet.getByteTransform().TransBool(result.Content, 42, 1);    // 44
-            if (err14[0]) { crnProtocol.setAlarm4(60); }
-            if (err14[1]) { crnProtocol.setAlarm4(61); }
-            if (err14[2]) { crnProtocol.setAlarm4(62); }
-            if (err14[3]) { crnProtocol.setAlarm4(63); }
-            if (err14[4]) { crnProtocol.setAlarm4(64); }
-            if (err14[5]) { crnProtocol.setAlarm4(65); }
-            if (err14[6]) { crnProtocol.setAlarm4(66); }
-            if (err14[7]) { crnProtocol.setAlarm4(67); }
-            boolean[] err15 = siemensNet.getByteTransform().TransBool(result.Content, 43, 1);    // 45
-            if (err15[1]) { crnProtocol.setAlarm4(68); }
-            if (err15[2]) { crnProtocol.setAlarm4(69); }
-            if (err15[3]) { crnProtocol.setAlarm4(70); }
-            if (err15[4]) { crnProtocol.setAlarm4(71); }
-            if (err15[5]) { crnProtocol.setAlarm4(72); }
-            if (err15[6]) { crnProtocol.setAlarm4(73); }
+                    crnProtocol.setTaskNoTwo(siemensNet.getByteTransform().TransInt16(result.Content, 14));
+                    crnProtocol.setStatusTwo(siemensNet.getByteTransform().TransInt16(result.Content, 16));
+                    crnProtocol.setBayTwo(siemensNet.getByteTransform().TransInt16(result.Content, 18));
+                    crnProtocol.setLevelTwo(siemensNet.getByteTransform().TransInt16(result.Content, 20));
+                    crnProtocol.setForkPosTwo(siemensNet.getByteTransform().TransInt16(result.Content, 22));
+                    crnProtocol.setLoadedTwo(siemensNet.getByteTransform().TransInt16(result.Content, 24));
 
-            boolean[] bool1 = siemensNet.getByteTransform().TransBool(result.Content, 60, 1);    // 62
-            crnProtocol.setConnStatus(bool1[0]);
-            crnProtocol.setCorrection(bool1[3]);
-            crnProtocol.setTuError(bool1[4]);
-            crnProtocol.setNoneError(bool1[5]);
-            crnProtocol.setStockError(bool1[6]);
-            crnProtocol.setJobInvalid(bool1[7]);
-            boolean[] bool2 = siemensNet.getByteTransform().TransBool(result.Content, 61, 1);    // 63
-            crnProtocol.setIdle(bool2[0]);
-            crnProtocol.setControl(bool2[1]);
-            crnProtocol.setStopQuasi(bool2[2]);
-            crnProtocol.setRunning(bool2[3]);
-            crnProtocol.setFault(bool2[4]);
-            crnProtocol.setForkHome(bool2[5]);
-            crnProtocol.setForkSingleLeft(bool2[6]);
-            crnProtocol.setForkSingleRight(bool2[7]);
-            boolean[] bool3 = siemensNet.getByteTransform().TransBool(result.Content, 62, 1);    // 64
-            crnProtocol.setForkDoubleLeft(bool3[0]);
-            crnProtocol.setForkDoubleRight(bool3[1]);
-            crnProtocol.setSingleHigh(bool3[2]);
-            crnProtocol.setSingleLow(bool3[3]);
-            crnProtocol.setDoubleHigh(bool3[4]);
-            crnProtocol.setDoubleLow(bool3[5]);
-            crnProtocol.setPlatformHigh(bool3[6]);
-            crnProtocol.setPlatformLow(bool3[7]);
-            boolean[] bool4 = siemensNet.getByteTransform().TransBool(result.Content, 64, 1);    // 66
-            crnProtocol.setLoaded((short) (bool4[4]?1:0));  // 鏈夌墿
+                    crnProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 26));
+                    crnProtocol.setWalkPosTwo(siemensNet.getByteTransform().TransInt16(result.Content, 28));
 
-            // 閫熷害
-            crnProtocol.setXSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 22));    // 24
-            crnProtocol.setYSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 24));    // 26
-            crnProtocol.setZSpeed((float) siemensNet.getByteTransform().TransInt16(result.Content, 26));    // 28
-            // 绱閲岀▼銆佹椂闀�
-            crnProtocol.setXDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 88));    // 90
-            crnProtocol.setYDistance((float) siemensNet.getByteTransform().TransInt32(result.Content, 92));    // 94
-            crnProtocol.setXDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 96));    // 98
-            crnProtocol.setYDuration((float) siemensNet.getByteTransform().TransInt32(result.Content, 100));    // 102
+                    crnProtocol.setLiftPos(siemensNet.getByteTransform().TransInt16(result.Content, 30));
+                    crnProtocol.setAlarm(siemensNet.getByteTransform().TransInt16(result.Content, 32));
 
-            // 澧炲己
-            if (crnProtocol.getForkHome()) {
-                crnProtocol.setForkPos(CrnForkPosType.HOME);
-            }
-            if (crnProtocol.getForkSingleLeft()) {
-                crnProtocol.setForkPos(CrnForkPosType.LEFT);
-            }
-            if (crnProtocol.getForkSingleRight()) {
-                crnProtocol.setForkPos(CrnForkPosType.RIGHT);
-            }
-            if (crnProtocol.getForkDoubleLeft()) {
-                crnProtocol.setForkPos(CrnForkPosType._LEFT);
-            }
-            if (crnProtocol.getForkDoubleRight()) {
-                crnProtocol.setForkPos(CrnForkPosType._RIGHT);
-            }
-            if (crnProtocol.getSingleHigh()) {
-                crnProtocol.setLiftPos(CrnLiftPosType.UP);
-            }
-            if (crnProtocol.getSingleLow()) {
-                crnProtocol.setLiftPos(CrnLiftPosType.DOWN);
-            }
-            if (crnProtocol.getDoubleHigh()) {
-                crnProtocol.setLiftPos(CrnLiftPosType._UP);
-            }
-            if (crnProtocol.getDoubleLow()) {
-                crnProtocol.setLiftPos(CrnLiftPosType._DOWN);
-            }
-            if (crnProtocol.getIdle()) {
-                crnProtocol.setStatus(CrnStatusType.IDLE);
-            }
+                    crnProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 34));
+                    crnProtocol.setySpeed(siemensNet.getByteTransform().TransInt16(result.Content, 38));
+                    crnProtocol.setzSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 42));
+//                    crnProtocol.setzSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 42));
 
-            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+                    crnProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 50));
+                    crnProtocol.setyDistance(siemensNet.getByteTransform().TransInt16(result.Content, 54));
+                    crnProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 58));
+                    crnProtocol.setyDuration(siemensNet.getByteTransform().TransInt16(result.Content, 62));
+                }
 
-            // 澶嶄綅淇″彿
-            if (crnProtocol.getTaskFinish() == 1) {
-                if (resetFlag) {
-                    CrnCommand crnCommand = new CrnCommand();
-                    crnCommand.setAckFinish((short)1);
-                    if (write(crnCommand)) {
-                        resetFlag = false;
+                OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+
+                // 澶嶄綅淇″彿
+                if (!Cools.isEmpty(crnProtocol.getStatusType()) && (crnProtocol.getStatusType().equals(CrnStatusType.WAITING) || crnProtocol.getStatusType().equals(CrnStatusType.SEPARATE_WAITING))) {
+                    log.error("-------------------------宸ヤ綅1-------------------------绗竴姝ャ�乕鍫嗗灈鏈哄彿锛歿}, 宸ヤ綔鍙凤細{}, 杞借揣鍙�:{}]==>> 鐘舵�佷负{}锛岀瓑寰呯‘璁わ紒锛�",
+                            slave.getId(),crnProtocol.getTaskNo(), crnProtocol.getLoaded()==1 ? "鏈夌墿" : "鏃犵墿",crnProtocol.getStatusType());
+                    if (resetFlag) {
+                        if(crnProtocol.getTaskNo()==9999){
+                            backHpFlag = false;
+                        }
+                        CrnCommand crnCommand = new CrnCommand();
+                        crnCommand.setAckFinish((short)1);
+                        if (write(crnCommand)) {
+                            resetFlag = false;
+                        }
                     }
-
                 }
+
+                // 澶嶄綅淇″彿
+                if (!Cools.isEmpty(crnProtocol.getStatusTypeTwo()) && (crnProtocol.getStatusTypeTwo().equals(CrnStatusType.WAITING) || crnProtocol.getStatusTypeTwo().equals(CrnStatusType.SEPARATE_WAITING))) {
+                    log.error("-------------------------宸ヤ綅2-------------------------绗竴姝ャ�乕鍫嗗灈鏈哄彿锛歿}, 宸ヤ綔鍙凤細{}, 杞借揣鍙�:{}]==>> 鐘舵�佷负{}锛岀瓑寰呯‘璁わ紒锛�",
+                            slave.getId(),crnProtocol.getTaskNoTwo(), crnProtocol.getLoadedTwo()==1 ? "鏈夌墿" : "鏃犵墿",crnProtocol.getStatusTypeTwo());
+                    if (resetFlagTwo) {
+                        if(crnProtocol.getTaskNoTwo()==9999){
+                            backHpFlagTwo = false;
+                        }
+                        CrnCommand crnCommand = new CrnCommand();
+                        crnCommand.setAckFinish((short)1);
+                        if (write5(crnCommand)) {
+                            resetFlagTwo = false;
+                        }
+                    }
+                }
+
+                try {
+                    // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+                    BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
+                    BasCrnp basCrnp = new BasCrnp();
+                    basCrnp.setCrnNo(slave.getId());
+                    basCrnp.setCrnSts((int)crnProtocol.getMode());
+                    if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){
+                        log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
+                    }
+                } catch (Exception ignore){}
+
+            } 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()));
+                log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
             }
+        } 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()));
+            log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+            initCrn();
+        }
+    }
 
-            try {
-                // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
-                BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
-                BasCrnp basCrnp = new BasCrnp();
-                basCrnp.setCrnNo(slave.getId());
-                if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){
-                    log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot());
-                }
-            } catch (Exception ignore){}
-
-        } else {
-            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());
+    private void convertRow(CrnCommand crnCommand) {
+        if (crnCommand.getSourcePosX() != null && crnCommand.getSourcePosX() != 0) {
+            crnCommand.setSourcePosX((short) (crnCommand.getSourcePosX() - ((slave.getId() - 1) * 4)));
+        }
+        if (crnCommand.getDestinationPosX() != null && crnCommand.getDestinationPosX() != 0) {
+            crnCommand.setDestinationPosX((short) (crnCommand.getDestinationPosX() - ((slave.getId() - 1) * 4)));
         }
     }
 
     /**
      * 鍐欏叆鏁版嵁
      */
-    private boolean write(CrnCommand command){
+    private boolean write(CrnCommand command) throws InterruptedException {
         if (null == command) {
             log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
             return false;
         }
-        if (command.getTaskNo() == 0 && command.getAckFinish() == 0) {
-            command.setTaskNo((short) 9999);
-        }
+//        convertRow(command);
         command.setCrnNo(slave.getId());
-        short[] array = new short[9];
-        if (command.getAckFinish() == 0) {
-            array[0] = 5;
-        } else {
-            array[0] = 0;
-        }
-        array[1] = command.getSourcePosZ();
-        array[2] = command.getSourcePosY();
+        short[] array = new short[10];
+        array[0] = command.getAckFinish();
+        array[1] = command.getTaskNo();
+        array[2] = command.getTaskMode();
         array[3] = command.getSourcePosX();
-        array[4] = command.getDestinationPosZ();
-        array[5] = command.getDestinationPosY();
+        array[4] = command.getSourcePosY();
+        array[5] = command.getSourcePosZ();
         array[6] = command.getDestinationPosX();
-        array[7] = command.getSourceStaNo();
-        array[8] = command.getDestinationStaNo();
-        // 浣滀笟淇℃伅
-        OperateResult result = siemensNet.Write("DB1000.0", array);
-        // 浠诲姟鍙� + 瀹屾垚浣�
-        short[] array2 = new short[2];
-        array2[0] = command.getTaskNo();
-        array2[1] = command.getAckFinish();
-        OperateResult result1 = siemensNet.Write("DB1000.24", array2);
+        array[7] = command.getDestinationPosY();
+        array[8] = command.getDestinationPosZ();
+//        array[9] = command.getSourceStaNo();
+//        array[10] = command.getDestinationStaNo();
+        array[9] = command.getCommand();
+        OperateResult result18 = siemensNet.Write("DB100.18", (short)0);
+        OperateResult result = siemensNet.Write("DB100.0", array);
+        log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), array);
 
-        // 缁撴潫浣�
+
+
+        //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
+        Thread.sleep(200);
+        int writeCount = 1;
+        do {
+            try{
+                if(!result.IsSuccess){
+                    log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂颁笅鍙戜换鍔�  鍐欏叆鐩存帴澶辫触 ===>> [id:{}],{},[鍐欏叆娆℃暟:{}]", slave.getId(), JSON.toJSONString(command),writeCount);
+                    result = siemensNet.Write("DB100.0", array);
+                    Thread.sleep(100);
+                    writeCount++;
+                    continue;
+                }
+                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 24);
+                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{
+                            log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐�==>涓嶄竴鑷碵id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSONString(command),JSON.toJSONString(one));
+                        }catch (Exception e){
+                            try{
+                                log.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSONString(command),JSON.toJSONString(resultRead));
+                            }catch (Exception e1){
+                                log.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSONString(command));
+                            }
+                        }
+                        try{
+                            Thread.sleep(100);
+                        }catch (Exception e){
+
+                        }
+                        log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂颁笅鍙戜换鍔�  鍥炶涓嶄竴鑷� ===>> [id:{}],{},[鍐欏叆娆℃暟:{}]", slave.getId(), JSON.toJSONString(command),writeCount);
+                        result = siemensNet.Write("DB100.0", array);
+                        writeCount++;
+                        continue;
+                    } else {
+                        log.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSONString(command),JSON.toJSONString(one));
+                        break;
+                    }
+                }
+            }catch (Exception e){
+                log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�,寮傚父锛�"+e);
+            }
+            writeCount++;
+        } while (writeCount<6);
+
         if (command.getAckFinish() == 0) {
-            OperateResult result2 = siemensNet.Write("DB1000.28.1", true);
+            short commandFinish = 1;
+            Thread.sleep(100L);
+            result = siemensNet.Write("DB100.18", commandFinish);
+            int signFinish = 1;
+            while (signFinish<5){
+                OperateResultExOne<byte[]> result10018 = siemensNet.Read("DB100.18", (short) 2);
+                short transInt16 = siemensNet.getByteTransform().TransInt16(result10018.Content, 0);
+                if (transInt16 != commandFinish){
+                    log.info("涓嬪彂DB100.18  鍥炶澶辫触" + "commandFinish:"+commandFinish);
+                    log.info("涓嬪彂DB100.18  鍥炶澶辫触" + "array:"+ JSON.toJSONString(array));
+                    result = siemensNet.Write("DB100.18", commandFinish);
+                    signFinish++;
+                }else {
+                    log.info("涓嬪彂DB100.18" + "commandFinish:"+commandFinish);
+                    log.info("涓嬪彂DB100.18" + "array:"+ JSON.toJSONString(array));
+                    break;
+                }
+            }
         }
 
-        // 鏃ュ織璁板綍
         try {
-            if (command.getAckFinish() != 1) {
-                BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
-                BasCrnOpt basCrnOpt = new BasCrnOpt(
-                        command.getTaskNo().intValue(),    // 浠诲姟鍙�
-                        command.getCrnNo(),    // 鍫嗗灈鏈篬闈炵┖]
-                        new Date(),    // 涓嬪彂鏃堕棿
-                        command.getTaskModeType().toString(),    // 妯″紡
-                        command.getSourcePosX().intValue(),    // 婧愭帓
-                        command.getSourcePosY().intValue(),    // 婧愬垪
-                        command.getSourcePosZ().intValue(),    // 婧愬眰
-                        null,    // 婧愮珯
-                        command.getDestinationPosX().intValue(),    // 鐩爣鎺�
-                        command.getDestinationPosY().intValue(),    // 鐩爣鍒�
-                        command.getDestinationPosZ().intValue(),    // 鐩爣灞�
-                        null,    // 鐩爣绔�
-                        null,    // 鍝嶅簲缁撴灉
-                        null,    // 淇敼鏃堕棿
-                        null    // 淇敼浜哄憳
-                );
-                bean.insert(basCrnOpt);
-            }
+            // 鏃ュ織璁板綍
+            BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
+            BasCrnOpt basCrnOpt = new BasCrnOpt(
+                    command.getTaskNo().intValue(),    // 浠诲姟鍙�
+                    command.getCrnNo(),    // 鍫嗗灈鏈篬闈炵┖]
+                    new Date(),    // 涓嬪彂鏃堕棿
+                    command.getTaskModeType().toString(),    // 妯″紡
+                    command.getSourcePosX().intValue(),    // 婧愭帓
+                    command.getSourcePosY().intValue(),    // 婧愬垪
+                    command.getSourcePosZ().intValue(),    // 婧愬眰
+                    null,    // 婧愮珯
+                    command.getDestinationPosX().intValue(),    // 鐩爣鎺�
+                    command.getDestinationPosY().intValue(),    // 鐩爣鍒�
+                    command.getDestinationPosZ().intValue(),    // 鐩爣灞�
+                    null,    // 鐩爣绔�
+                    null,    // 鍝嶅簲缁撴灉
+                    null,    // 淇敼鏃堕棿
+                    null    // 淇敼浜哄憳
+            );
+            bean.insert(basCrnOpt);
         } catch (Exception ignore) {}
 
-        if (result.IsSuccess && result1.IsSuccess) {
-
-            log.warn("鍫嗗灈鏈哄懡浠や笅鍙慬id:{},鏃堕棿锛歿}] >>>>> {}", slave.getId(), DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmsssss_F), JSON.toJSON(command));
-            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSONString(command));
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSONString(command)));
             return true;
         } else {
-            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());
+            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());
             return false;
         }
     }
+
+    /**
+     * 鍐欏叆鏁版嵁  宸ヤ綅2
+     */
+    private boolean write5(CrnCommand command) throws InterruptedException {
+        if (null == command) {
+            log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
+            return false;
+        }
+//        convertRow(command);
+        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.getSourceStaNo();
+//        array[10] = command.getDestinationStaNo();
+        array[9] = command.getCommand();
+        OperateResult result18 = siemensNet.Write("DB100.38", (short)0);
+        OperateResult result = siemensNet.Write("DB100.20", array);
+        log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), array);
+
+        //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
+        Thread.sleep(200);
+        int writeCount = 1;
+        do {
+            try{
+                if(!result.IsSuccess){
+                    log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂颁笅鍙戜换鍔�  鍐欏叆鐩存帴澶辫触 ===>> [id:{}],{},[鍐欏叆娆℃暟:{}]", slave.getId(), JSON.toJSONString(command),writeCount);
+                    result = siemensNet.Write("DB100.20", array);
+                    Thread.sleep(100);
+                    writeCount++;
+                    continue;
+                }
+                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.20", (short) 24);
+                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{
+                            log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐�==>涓嶄竴鑷碵id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSONString(command),JSON.toJSONString(one));
+                        }catch (Exception e){
+                            try{
+                                log.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSONString(command),JSON.toJSONString(resultRead));
+                            }catch (Exception e1){
+                                log.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSONString(command));
+                            }
+                        }
+                        try{
+                            Thread.sleep(100);
+                        }catch (Exception e){
+
+                        }
+                        log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂颁笅鍙戜换鍔�  鍥炶涓嶄竴鑷� ===>> [id:{}],{},[鍐欏叆娆℃暟:{}]", slave.getId(), JSON.toJSONString(command),writeCount);
+                        result = siemensNet.Write("DB100.20", array);
+                        writeCount++;
+                        continue;
+                    } else {
+                        log.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSONString(command),JSON.toJSONString(one));
+                        break;
+                    }
+                }
+            }catch (Exception e){
+                log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�,寮傚父锛�"+e);
+            }
+            writeCount++;
+        } while (writeCount<6);
+
+        if (command.getAckFinish() == 0) {
+            short commandFinish = 1;
+            Thread.sleep(100L);
+            result = siemensNet.Write("DB100.38", commandFinish);
+            int signFinish = 1;
+            while (signFinish<5){
+                OperateResultExOne<byte[]> result10018 = siemensNet.Read("DB100.38", (short) 2);
+                short transInt16 = siemensNet.getByteTransform().TransInt16(result10018.Content, 0);
+                if (transInt16 != commandFinish){
+                    log.info("涓嬪彂DB100.38  鍥炶澶辫触" + "commandFinish:"+commandFinish);
+                    log.info("涓嬪彂DB100.38  鍥炶澶辫触" + "array:"+ JSON.toJSONString(array));
+                    result = siemensNet.Write("DB100.38", commandFinish);
+                    signFinish++;
+                }else {
+                    log.info("涓嬪彂DB100.38" + "commandFinish:"+commandFinish);
+                    log.info("涓嬪彂DB100.38" + "array:"+ JSON.toJSONString(array));
+                    break;
+                }
+            }
+        }
+
+        try {
+            // 鏃ュ織璁板綍
+            BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
+            BasCrnOpt basCrnOpt = new BasCrnOpt(
+                    command.getTaskNo().intValue(),    // 浠诲姟鍙�
+                    command.getCrnNo(),    // 鍫嗗灈鏈篬闈炵┖]
+                    new Date(),    // 涓嬪彂鏃堕棿
+                    command.getTaskModeType().toString(),    // 妯″紡
+                    command.getSourcePosX().intValue(),    // 婧愭帓
+                    command.getSourcePosY().intValue(),    // 婧愬垪
+                    command.getSourcePosZ().intValue(),    // 婧愬眰
+                    null,    // 婧愮珯
+                    command.getDestinationPosX().intValue(),    // 鐩爣鎺�
+                    command.getDestinationPosY().intValue(),    // 鐩爣鍒�
+                    command.getDestinationPosZ().intValue(),    // 鐩爣灞�
+                    null,    // 鐩爣绔�
+                    null,    // 鍝嶅簲缁撴灉
+                    null,    // 淇敼鏃堕棿
+                    null    // 淇敼浜哄憳
+            );
+            bean.insert(basCrnOpt);
+        } catch (Exception ignore) {}
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSONString(command));
+            OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSONString(command)));
+            return true;
+        } 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());
+            return false;
+        }
+    }
+
+    /**
+     * 鍐欏叆鏁版嵁  鍙屽伐浣�
+     */
+    private boolean write9(CrnCommandParam command) throws InterruptedException {
+        if (null == command) {
+            log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
+            return false;
+        }
+        command.setCrnNo(slave.getId());
+        short[] array = new short[22];
+        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();
+        array[10] = command.getAckFinish2();
+        array[11] = command.getTaskNo2();
+        array[12] = command.getTaskMode2();
+        array[13] = command.getSourcePosX2();
+        array[14] = command.getSourcePosY2();
+        array[15] = command.getSourcePosZ2();
+        array[16] = command.getDestinationPosX2();
+        array[17] = command.getDestinationPosY2();
+        array[18] = command.getDestinationPosZ2();
+        array[19] = command.getCommand();
+        array[20] = (short)1;
+        array[21] = (short)1;
+        OperateResult result18 = siemensNet.Write("DB100.18", (short)0);
+        OperateResult result38 = siemensNet.Write("DB100.38", (short)0);
+        OperateResult result = siemensNet.Write("DB100.0", array);
+//        OperateResult result = siemensNet.Write("DB100.20", array);
+        log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), array);
+
+        //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔�
+        Thread.sleep(200);
+        int writeCount = 1;
+        do {
+            try{
+                if(!result.IsSuccess){
+                    log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂颁笅鍙戜换鍔�  鍐欏叆鐩存帴澶辫触 ===>> [id:{}],{},[鍐欏叆娆℃暟:{}]", slave.getId(), JSON.toJSON(command),writeCount);
+                    result = siemensNet.Write("DB100.0", array);
+                    Thread.sleep(100);
+                    writeCount++;
+                    continue;
+                }
+                OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 40);
+                if (resultRead.IsSuccess) {
+                    CrnCommandParam one = new CrnCommandParam();
+                    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.setTaskNo2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 22));
+                    one.setTaskMode2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 24));
+                    one.setSourcePosX2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 26));
+                    one.setSourcePosY2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 28));
+                    one.setSourcePosZ2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 30));
+                    one.setDestinationPosX2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 32));
+                    one.setDestinationPosY2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 34));
+                    one.setDestinationPosZ2(siemensNet.getByteTransform().TransInt16(resultRead.Content, 36));
+                    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())
+                            ||
+                            !command.getTaskNo2().equals(one.getTaskNo2()) || !command.getTaskMode2().equals(one.getTaskMode2())
+                            || !command.getSourcePosX2().equals(one.getSourcePosX2()) || !command.getSourcePosY2().equals(one.getSourcePosY2())
+                            || !command.getSourcePosZ2().equals(one.getSourcePosZ2()) || !command.getDestinationPosX2().equals(one.getDestinationPosX2())
+                            || !command.getDestinationPosY2().equals(one.getDestinationPosY2()) || !command.getDestinationPosZ2().equals(one.getDestinationPosZ2())
+                    ){
+                        try{
+                            log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐�==>涓嶄竴鑷碵id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                        }catch (Exception e){
+                            try{
+                                log.error("鏃ュ織鎵撳嵃澶辫触锛�===>>鍙傛暟one鎶ラ敊 [id:{}],{}", slave.getId(), JSON.toJSON(command),JSON.toJSON(resultRead));
+                            }catch (Exception e1){
+                                log.error("鏃ュ織鎵撳嵃澶辫触锛�===>> [id:{}],{}", slave.getId(), JSON.toJSON(command));
+                            }
+                        }
+                        try{
+                            Thread.sleep(100);
+                        }catch (Exception e){
+
+                        }
+                        log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂颁笅鍙戜换鍔�  鍥炶涓嶄竴鑷� ===>> [id:{}],{},[鍐欏叆娆℃暟:{}]", slave.getId(), JSON.toJSON(command),writeCount);
+                        result = siemensNet.Write("DB100.0", array);
+                        writeCount++;
+                        continue;
+                    } else {
+                        log.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one));
+                        break;
+                    }
+                }
+            }catch (Exception e){
+                log.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲嚭閿�,寮傚父锛�"+e);
+            }
+            writeCount++;
+        } while (writeCount<6);
+
+        if (command.getAckFinish() == 0) {
+            short commandFinish = 1;
+            Thread.sleep(100L);
+            result18 = siemensNet.Write("DB100.18", commandFinish);
+            result38 = siemensNet.Write("DB100.38", commandFinish);
+            int signFinish = 1;
+            while (signFinish<5){
+                OperateResultExOne<byte[]> result10018 = siemensNet.Read("DB100.18", (short) 2);
+                OperateResultExOne<byte[]> result10038 = siemensNet.Read("DB100.38", (short) 2);
+                short transInt1618 = siemensNet.getByteTransform().TransInt16(result10018.Content, 0);
+                short transInt1638 = siemensNet.getByteTransform().TransInt16(result10038.Content, 0);
+                if (transInt1618 != commandFinish || transInt1638 != commandFinish){
+                    log.info("涓嬪彂DB100.18/DB100.38  鍥炶澶辫触" + "commandFinish:"+commandFinish);
+                    log.info("涓嬪彂DB100.18/DB100.38  鍥炶澶辫触" + "array:"+ JSON.toJSONString(array));
+                    result18 = siemensNet.Write("DB100.18", commandFinish);
+                    result38 = siemensNet.Write("DB100.38", commandFinish);
+                    signFinish++;
+                }else {
+                    log.info("涓嬪彂DB100.18/DB100.38" + "commandFinish:"+commandFinish);
+                    log.info("涓嬪彂DB100.18/DB100.38" + "array:"+ JSON.toJSONString(array));
+                    break;
+                }
+            }
+        }
+
+        try {
+            // 鏃ュ織璁板綍
+            BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class);
+            BasCrnOpt basCrnOpt = new BasCrnOpt(
+                    command.getTaskNo().intValue(),    // 浠诲姟鍙�
+                    command.getCrnNo(),    // 鍫嗗灈鏈篬闈炵┖]
+                    new Date(),    // 涓嬪彂鏃堕棿
+                    command.getTaskModeType().toString(),    // 妯″紡
+                    command.getSourcePosX().intValue(),    // 婧愭帓
+                    command.getSourcePosY().intValue(),    // 婧愬垪
+                    command.getSourcePosZ().intValue(),    // 婧愬眰
+                    null,    // 婧愮珯
+                    command.getDestinationPosX().intValue(),    // 鐩爣鎺�
+                    command.getDestinationPosY().intValue(),    // 鐩爣鍒�
+                    command.getDestinationPosZ().intValue(),    // 鐩爣灞�
+                    null,    // 鐩爣绔�
+                    null,    // 鍝嶅簲缁撴灉
+                    null,    // 淇敼鏃堕棿
+                    null    // 淇敼浜哄憳
+            );
+            bean.insert(basCrnOpt);
+        } catch (Exception ignore) {}
+
+        if (result != null && result.IsSuccess) {
+            Thread.sleep(200);
+            this.readStatus();
+            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;
+        } 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());
+            return false;
+        }
+    }
+
 
     @Override
     public void close() {
@@ -520,4 +896,9 @@
 
     }
 
+    // 鎻愪緵涓�涓柟娉曟潵鍋滄绾跨▼
+    public void requestStop() {
+        isRunning = false;
+    }
+
 }

--
Gitblit v1.9.1