From bc517b90731dfc34b8aee0d7f4877d96b09c18da Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <xltys1995>
Date: 星期二, 03 十一月 2020 09:06:03 +0800
Subject: [PATCH] Merge branch 'jswcs' of https://gitee.com/luxiaotao1123/zy-wcs into jswcs

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   70 +++++++--
 src/main/java/com/zy/core/thread/MelsecCrnThread.java       |  176 ++++++++++++++++--------
 src/main/java/com/zy/core/enums/CrnLiftPosType.java         |    1 
 src/main/java/com/zy/asrs/controller/CrnController.java     |    2 
 src/main/java/com/zy/core/enums/CrnForkPosType.java         |    2 
 src/main/java/com/zy/core/model/command/CrnCommand.java     |   29 ++++
 src/main/java/com/zy/core/model/protocol/CrnProtocol.java   |   20 ++
 src/main/java/com/zy/core/ServerBootstrap.java              |   19 +
 src/main/java/com/zy/core/enums/CrnTaskModeType.java        |    1 
 src/main/java/com/zy/core/thread/SiemensCrnThread.java      |    8 
 src/main/java/com/zy/asrs/controller/ConsoleController.java |    6 
 src/main/java/com/zy/core/enums/CrnStatusType.java          |    3 
 src/main/java/com/zy/core/enums/CrnFingerPosType.java       |   41 +++++
 src/main/webapp/views/crn.html                              |    1 
 src/main/java/com/zy/core/CrnThread.java                    |   11 +
 src/main/resources/application.yml                          |    9 +
 16 files changed, 301 insertions(+), 98 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/ConsoleController.java b/src/main/java/com/zy/asrs/controller/ConsoleController.java
index e637dc3..d84ee24 100644
--- a/src/main/java/com/zy/asrs/controller/ConsoleController.java
+++ b/src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -24,7 +24,7 @@
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.properties.SystemProperties;
 import com.zy.core.thread.BarcodeThread;
-import com.zy.core.thread.CrnThread;
+import com.zy.core.thread.SiemensCrnThread;
 import com.zy.core.thread.DevpThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -111,7 +111,7 @@
         List<CrnLatestDataVo> vos = new ArrayList<>();
         for (CrnSlave crn : slaveProperties.getCrn()) {
             // 鑾峰彇鍫嗗灈鏈轰俊鎭�
-            CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+            SiemensCrnThread crnThread = (SiemensCrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
             if (crnThread == null) {
                 continue;
             }
@@ -224,7 +224,7 @@
         CrnDetailVo vo = new CrnDetailVo();
         for (CrnSlave crnSlave : slaveProperties.getCrn()) {
             if (crnSlave.getId().equals(crnNo)) {
-                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
+                SiemensCrnThread crnThread = (SiemensCrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId());
                 CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                 vo.setCrnNo(crnNo);
                 vo.setWorkNo(crnProtocol.getTaskNo());
diff --git a/src/main/java/com/zy/asrs/controller/CrnController.java b/src/main/java/com/zy/asrs/controller/CrnController.java
index 79fda80..6277cca 100644
--- a/src/main/java/com/zy/asrs/controller/CrnController.java
+++ b/src/main/java/com/zy/asrs/controller/CrnController.java
@@ -28,7 +28,7 @@
 import com.zy.core.model.command.CrnCommand;
 import com.zy.core.model.protocol.CrnProtocol;
 import com.zy.core.properties.SlaveProperties;
-import com.zy.core.thread.CrnThread;
+import com.zy.core.CrnThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 14e9a7c..8c131ef 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -26,7 +26,7 @@
 import com.zy.core.model.protocol.StaProtocol;
 import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.BarcodeThread;
-import com.zy.core.thread.CrnThread;
+import com.zy.core.CrnThread;
 import com.zy.core.thread.DevpThread;
 import com.zy.core.thread.LedThread;
 import lombok.extern.slf4j.Slf4j;
@@ -112,9 +112,11 @@
                 }
                 // 鑾峰彇鍏ュ簱绔欎俊鎭�
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()).clone();
+                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
                 if (staProtocol == null) {
                     continue;
+                } else {
+                    staProtocol = staProtocol.clone();
                 }
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
@@ -218,8 +220,12 @@
             for (DevpSlave.Sta inSta : devp.getInSta()) {
                 // 鑾峰彇鍏ュ簱绔欎俊鎭�
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()).clone();
-                if (staProtocol == null) { continue; }
+                StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
                 // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢
                 if (staProtocol.isAutoing() && staProtocol.isLoading()
                         && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0
@@ -264,8 +270,12 @@
             for (DevpSlave.Sta pickSta : devp.getPickSta()) {
                 // 鑾峰彇鎷f枡鍏ュ簱绔欎俊鎭�
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()).clone();
-                if (staProtocol == null) { continue; }
+                StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                     && staProtocol.getWorkNo() > 0 && staProtocol.isPakMk()){
                     WrkMast wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo().intValue());
@@ -350,8 +360,12 @@
             for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
                 // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()).clone();
-                if (staProtocol == null) { continue; }
+                StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                     // 鏌ヨ宸ヤ綔妗�
                     WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
@@ -452,8 +466,12 @@
             boolean flag = false;
             // 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()).clone();
-            if (staProtocol == null) { continue; }
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
             // 鏌ヨ绔欑偣璇︾粏淇℃伅
             BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
             if (staDetl == null) {
@@ -540,8 +558,12 @@
             }
             // 鑾峰彇鍫嗗灈鏈哄嚭搴撶珯淇℃伅
             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
-            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()).clone();
-            if (staProtocol == null) { continue; }
+            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo());
+            if (staProtocol == null) {
+                continue;
+            } else {
+                staProtocol = staProtocol.clone();
+            }
             // 鏌ヨ绔欑偣璇︾粏淇℃伅
             BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
             if (staDetl == null) {
@@ -712,8 +734,12 @@
             for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
                 // 鑾峰彇绌烘澘鍏ュ簱绔欎俊鎭�
                 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
-                StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo()).clone();
-                if (staProtocol == null) { continue; }
+                StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
                 // 绔欑偣鏉′欢鍒ゆ柇
                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                         && staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk()) {
@@ -790,8 +816,12 @@
             List<WrkMast> wrkMasts = new ArrayList<>();
             for (Integer staNo : led.getStaArr()) {
                 // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo).clone();
-                if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) { continue; }
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
                 // 鑾峰彇宸ヤ綔妗f暟鎹�
                 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
                 if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; }
@@ -877,8 +907,12 @@
             boolean reset = true;
             for (Integer staNo : led.getStaArr()) {
                 // 鑾峰彇鍙夎溅绔欑偣
-                StaProtocol staProtocol = devpThread.getStation().get(staNo).clone();
-                if (staProtocol == null) {continue;}
+                StaProtocol staProtocol = devpThread.getStation().get(staNo);
+                if (staProtocol == null) {
+                    continue;
+                } else {
+                    staProtocol = staProtocol.clone();
+                }
                 if (staProtocol.getWorkNo() != 0) {
                     reset = false;
                     break;
diff --git a/src/main/java/com/zy/core/CrnThread.java b/src/main/java/com/zy/core/CrnThread.java
new file mode 100644
index 0000000..70c3d75
--- /dev/null
+++ b/src/main/java/com/zy/core/CrnThread.java
@@ -0,0 +1,11 @@
+package com.zy.core;
+
+import com.zy.core.model.protocol.CrnProtocol;
+
+public interface CrnThread extends ThreadHandler {
+
+    CrnProtocol getCrnProtocol();
+
+    void setResetFlag(boolean flag);
+
+}
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index ac5207a..3e034da 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -6,10 +6,7 @@
 import com.zy.core.model.CrnSlave;
 import com.zy.core.model.DevpSlave;
 import com.zy.core.properties.SlaveProperties;
-import com.zy.core.thread.BarcodeThread;
-import com.zy.core.thread.CarThread;
-import com.zy.core.thread.CrnThread;
-import com.zy.core.thread.DevpThread;
+import com.zy.core.thread.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -76,8 +73,18 @@
         // 鍒濆鍖栧爢鍨涙満绾跨▼
         log.info("鍒濆鍖栧爢鍨涙満绾跨▼...................................................");
         for (CrnSlave crn : slaveProperties.getCrn()) {
-            CrnThread crnThread = new CrnThread(crn);
-            new Thread(crnThread).start();
+            CrnThread crnThread = null;
+            switch (crn.getId()) {
+                case 1:
+                    crnThread = new SiemensCrnThread(crn);
+                    break;
+                case 2:
+                    crnThread = new MelsecCrnThread(crn);
+                    break;
+                default:
+                    break;
+            }
+            new Thread((Runnable) crnThread).start();
             SlaveConnection.put(SlaveType.Crn, crn.getId(), crnThread);
         }
 
diff --git a/src/main/java/com/zy/core/enums/CrnFingerPosType.java b/src/main/java/com/zy/core/enums/CrnFingerPosType.java
new file mode 100644
index 0000000..76d8c60
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/CrnFingerPosType.java
@@ -0,0 +1,41 @@
+package com.zy.core.enums;
+
+public enum CrnFingerPosType {
+
+    DOWN(2, "涓嬪畾浣�"),  // 涓嬪畾浣�
+    UP(1, "涓婂畾浣�"),   // 涓婂畾浣�
+    NONE(0, "涓嶅湪瀹氫綅"),   // 涓嶅湪瀹氫綅
+    ;
+
+    public Integer id;
+    public String desc;
+    CrnFingerPosType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static CrnFingerPosType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (CrnFingerPosType type : CrnFingerPosType.values()) {
+            if (type.id.equals(id.intValue())) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static CrnFingerPosType get(CrnFingerPosType type) {
+        if (null == type) {
+            return null;
+        }
+        for (CrnFingerPosType crnLiftPosType : CrnFingerPosType.values()) {
+            if (crnLiftPosType == type) {
+                return crnLiftPosType;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/enums/CrnForkPosType.java b/src/main/java/com/zy/core/enums/CrnForkPosType.java
index 2b4aa9e..27143ac 100644
--- a/src/main/java/com/zy/core/enums/CrnForkPosType.java
+++ b/src/main/java/com/zy/core/enums/CrnForkPosType.java
@@ -5,6 +5,8 @@
     HOME(0, "璐у弶鍘熶綅"),   // 璐у弶鍘熶綅
     LEFT(1, "璐у弶鍦ㄥ乏渚�"),  // 璐у弶鍦ㄥ乏渚�
     RIGHT(2, "璐у弶鍦ㄥ彸渚�"),   // 璐у弶鍦ㄥ彸渚�
+    _LEFT(3, "璐у弶鍦ㄥ乏渚ц繙"),   // 璐у弶鍦ㄥ彸渚ц繙
+    _RIGHT(4, "璐у弶鍦ㄥ彸渚ц繙"),   // 璐у弶鍦ㄥ彸渚ц繙
     ;
 
     public Integer id;
diff --git a/src/main/java/com/zy/core/enums/CrnLiftPosType.java b/src/main/java/com/zy/core/enums/CrnLiftPosType.java
index 0b20e54..6006489 100644
--- a/src/main/java/com/zy/core/enums/CrnLiftPosType.java
+++ b/src/main/java/com/zy/core/enums/CrnLiftPosType.java
@@ -2,6 +2,7 @@
 
 public enum CrnLiftPosType {
 
+    POSITION(3, "鍦ㄥ畾浣�"), // 鍦ㄥ畾浣�
     DOWN(2, "涓嬪畾浣�"),  // 涓嬪畾浣�
     UP(1, "涓婂畾浣�"),   // 涓婂畾浣�
     NONE(0, "涓嶅湪瀹氫綅"),   // 涓嶅湪瀹氫綅
diff --git a/src/main/java/com/zy/core/enums/CrnStatusType.java b/src/main/java/com/zy/core/enums/CrnStatusType.java
index 28d89c7..f4bcc05 100644
--- a/src/main/java/com/zy/core/enums/CrnStatusType.java
+++ b/src/main/java/com/zy/core/enums/CrnStatusType.java
@@ -10,6 +10,9 @@
     TO_ORIGIN(5, "鍥炲師鐐逛腑"),
     ORIGIN(6, "鍙嶅師鐐�"),
     LOC_MOVE(7, "搴撲綅绉讳綅"),
+    POSITON_MOVE(10, "鍧愭爣绉昏"),
+    FETCH_WAITING(21, "绛夊緟鍙栬揣鍏佽"),
+    PUT_WAITING(22, "绛夊緟鏀捐揣鍏佽"),
     WAITING(90, "浠诲姟瀹屾垚绛夊緟WCS纭"),
     SOS(99, "鎶ヨ"),
     ;
diff --git a/src/main/java/com/zy/core/enums/CrnTaskModeType.java b/src/main/java/com/zy/core/enums/CrnTaskModeType.java
index c34a8d2..9f8af09 100644
--- a/src/main/java/com/zy/core/enums/CrnTaskModeType.java
+++ b/src/main/java/com/zy/core/enums/CrnTaskModeType.java
@@ -9,6 +9,7 @@
     SITE_MOVE(4),    // 绔欎綅绉昏浆
     GO_ORIGIN(5),    // 鍥炲師鐐�
     OFFSET_MOVE(7),    // 鍧愭爣绉昏
+    TIMING(90),     // 鏍℃椂
     ;
 
     public Integer id;
diff --git a/src/main/java/com/zy/core/model/command/CrnCommand.java b/src/main/java/com/zy/core/model/command/CrnCommand.java
index 549c0ba..1d951f6 100644
--- a/src/main/java/com/zy/core/model/command/CrnCommand.java
+++ b/src/main/java/com/zy/core/model/command/CrnCommand.java
@@ -4,6 +4,9 @@
 import com.zy.core.enums.CrnTaskModeType;
 import lombok.Data;
 
+import java.util.Calendar;
+import java.util.Date;
+
 /**
  * 鍫嗗灈鏈哄懡浠ゆ姤鏂�
  * Created by vincent on 2020/8/11
@@ -30,6 +33,8 @@
      * 5 = 鍥炲師鐐�  涓嶇敤鍙�
      * 6 = 鍘诲弽鍘熺偣 鐩爣鍙�
      * 7 = 鍧愭爣绉昏 鐩爣鍙�
+     * 90 = 璁剧疆鏃堕棿
+     * 99 = 鍙栨秷褰撳墠浠诲姟
      */
     private Short taskMode = 0;
 
@@ -54,6 +59,8 @@
     // 鐩爣浣嶇疆灞傚彿
     private Short destinationPosZ = 0;
 
+    private Short taskSend = 0;
+
     public void setTaskMode(Short taskMode){
         this.taskMode = taskMode;
         this.taskModeType = CrnTaskModeType.get(taskModeType);
@@ -64,4 +71,26 @@
         this.taskMode = CrnTaskModeType.get(type).id.shortValue();
     }
 
+    public static void main(String[] args) {
+        Date date = new Date();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+
+        System.out.println(cal.get(Calendar.YEAR));
+        //榛樿浠�0-11
+        System.out.println(cal.get(Calendar.MONTH)+1);
+        System.out.println(cal.get(Calendar.DATE));
+        int hour = cal.get(Calendar.HOUR_OF_DAY);
+        System.out.println("鏃�");
+        System.out.println(hour);
+        int minute = cal.get(Calendar.MINUTE);
+        System.out.println("鍒�");
+        System.out.println(minute);
+        int second = cal.get(Calendar.SECOND);
+        System.out.println("绉�");
+        System.out.println(second);
+        int mm = cal.get(Calendar.DAY_OF_WEEK) - 1; // 鏄熸湡锛�0(鏃�)锝�6(鍏�)
+        System.out.println("绀兼嫓");
+        System.out.println(mm);
+    }
 }
diff --git a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
index 7048559..5969aee 100644
--- a/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/CrnProtocol.java
@@ -1,10 +1,7 @@
 package com.zy.core.model.protocol;
 
 import com.zy.asrs.entity.BasCrnp;
-import com.zy.core.enums.CrnForkPosType;
-import com.zy.core.enums.CrnLiftPosType;
-import com.zy.core.enums.CrnModeType;
-import com.zy.core.enums.CrnStatusType;
+import com.zy.core.enums.*;
 import lombok.Data;
 
 /**
@@ -92,6 +89,16 @@
      * 1 = 涓嶅湪瀹氫綅
      */
     public Short walkPos;
+
+    /**
+     * 鎷ㄦ寚浣嶇疆
+     * 0 = 涓嶅湪瀹氫綅
+     * 1 = 涓婂畾浣�
+     * 2 = 涓嬪畾浣�
+     */
+    public Short fingerPos;
+
+    public CrnFingerPosType fingerPosType;
 
     /**
      * 鍫嗗灈鏈轰换鍔″畬鎴�
@@ -233,6 +240,11 @@
         this.status = CrnStatusType.get(type).id.shortValue();
     }
 
+    public void setFingerPos(Short type) {
+        this.fingerPos = type;
+        this.fingerPosType = CrnFingerPosType.get(type);
+    }
+
     public void setError1(boolean[] error1){
         this.error1 = error1;
         this.crnError1 = new CrnError1();
diff --git a/src/main/java/com/zy/core/thread/CrnThread.java b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
similarity index 63%
copy from src/main/java/com/zy/core/thread/CrnThread.java
copy to src/main/java/com/zy/core/thread/MelsecCrnThread.java
index e548e0f..9990237 100644
--- a/src/main/java/com/zy/core/thread/CrnThread.java
+++ b/src/main/java/com/zy/core/thread/MelsecCrnThread.java
@@ -2,14 +2,14 @@
 
 import HslCommunication.Core.Types.OperateResult;
 import HslCommunication.Core.Types.OperateResultExOne;
-import HslCommunication.Profinet.Siemens.SiemensPLCS;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
+import HslCommunication.Profinet.Melsec.MelsecMcNet;
 import com.alibaba.fastjson.JSON;
+import com.core.common.Arith;
 import com.core.common.DateUtils;
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.service.BasCrnpService;
-import com.zy.core.ThreadHandler;
+import com.zy.core.CrnThread;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.enums.CrnStatusType;
@@ -23,6 +23,7 @@
 import lombok.extern.slf4j.Slf4j;
 
 import java.text.MessageFormat;
+import java.util.Calendar;
 import java.util.Date;
 
 /**
@@ -31,14 +32,16 @@
  */
 @Data
 @Slf4j
-public class CrnThread implements Runnable, ThreadHandler {
+public class MelsecCrnThread implements Runnable, CrnThread {
 
-    private SiemensS7Net siemensNet;
+    private MelsecMcNet melsecMcNet;
     private CrnSlave slave;
     private CrnProtocol crnProtocol;
     private boolean resetFlag = false;
+    private short heartBeatVal = 1;
+    private int heartTimes = 0;
 
-    public CrnThread(CrnSlave slave) {
+    public MelsecCrnThread(CrnSlave slave) {
         this.slave = slave;
     }
 
@@ -83,6 +86,12 @@
                     default:
                         break;
                 }
+                // 蹇冭烦 2s涓�娆�
+                heartTimes++;
+                if (Arith.remainder(heartTimes, 4) == 0) {
+                    heartbeat();
+                    heartTimes = 0;
+                }
                 Thread.sleep(500);
             } catch (Exception e) {
                 e.printStackTrace();
@@ -94,19 +103,46 @@
     @Override
     public boolean connect() {
         boolean result = false;
-        siemensNet = new SiemensS7Net(SiemensPLCS.S300, slave.getIp());
-        siemensNet.setRack(slave.getRack().byteValue());
-        siemensNet.setSlot(slave.getSlot().byteValue());
-        OperateResult connect = siemensNet.ConnectServer();
+        melsecMcNet = new MelsecMcNet(slave.getIp(), slave.getPort());
+        OperateResult connect = melsecMcNet.ConnectServer();
         if(connect.IsSuccess){
             result = true;
-            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.info("鍫嗗灈鏈簆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.info("鍫嗗灈鏈簆lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
         } 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());
         }
-        siemensNet.ConnectClose();
+        // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+        /**
+         *      array[1] = command.getSourcePosY(); // 鍒�
+         *         array[2] = command.getSourcePosZ(); // 灞�
+         *         array[3] = command.getSourcePosX(); // 鎺�
+         *         array[4] = command.getDestinationPosY(); // 鍒�
+         *         array[5] = command.getDestinationPosZ();  // 灞�
+         *         array[6] = command.getDestinationPosX(); // 鎺�
+         *         array[7] = command.getTaskNo();
+         */
+        Date date = new Date();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        CrnCommand crnCommand = new CrnCommand();
+        crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+        crnCommand.setTaskMode(CrnTaskModeType.TIMING); // 浠诲姟妯″紡:  璁剧疆鏃堕棿
+        crnCommand.setSourcePosY((short) cal.get(Calendar.YEAR));     // 骞达細1980锝�2079
+        crnCommand.setSourcePosZ((short) (cal.get(Calendar.MONTH)+1));     // 鏈堬細1锝�12
+        crnCommand.setSourcePosX((short) cal.get(Calendar.DATE));     // 鏃ワ細1锝�31
+        crnCommand.setDestinationPosY((short) cal.get(Calendar.HOUR_OF_DAY));     // 鏃讹細0锝�23
+        crnCommand.setDestinationPosZ((short) cal.get(Calendar.MINUTE));     // 鍒嗭細0锝�59
+        crnCommand.setDestinationPosX((short) cal.get(Calendar.SECOND));     // 绉掞細0锝�59
+        crnCommand.setTaskNo((short) (cal.get(Calendar.DAY_OF_WEEK) - 1));     // 鏄熸湡锛�0(鏃�)锝�6(鍏�)
+        crnCommand.setTaskSend((short) 1);
+        crnCommand.setAckFinish((short) 0);
+        if (write(crnCommand)) {
+            log.info("鍫嗗灈鏈簆lc鏍″鏃堕棿鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
+        }
+
+        melsecMcNet.ConnectClose();
         return result;
     }
 
@@ -114,36 +150,33 @@
      * 璇诲彇鐘舵��
      */
     private void readStatus(){
-        OperateResultExOne<byte[]> result = siemensNet.Read("DB8.18", (short) 62);
+        OperateResultExOne<byte[]> result = melsecMcNet.Read("D1119", (short) 58);
         if (result.IsSuccess) {
             if (null == crnProtocol) {
                 crnProtocol = new CrnProtocol();
             }
-            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.setLiftPos(siemensNet.getByteTransform().TransInt16(result.Content, 12));
-            crnProtocol.setWalkPos(siemensNet.getByteTransform().TransInt16(result.Content, 14));
-//            crnProtocol.setTaskFinish(siemensNet.getByteTransform().TransInt16(result.Content, 16));
-            crnProtocol.setLoaded(siemensNet.getByteTransform().TransInt16(result.Content, 18));
-            crnProtocol.setAlarm1(siemensNet.getByteTransform().TransInt16(result.Content, 20));
-            // 寮傚父淇℃伅
-            crnProtocol.setError1(siemensNet.getByteTransform().TransBool(result.Content, 22, 2));
-            crnProtocol.setError2(siemensNet.getByteTransform().TransBool(result.Content, 24, 2));
-            crnProtocol.setError3(siemensNet.getByteTransform().TransBool(result.Content, 26, 2));
-            crnProtocol.setError4(siemensNet.getByteTransform().TransBool(result.Content, 28, 2));
-            crnProtocol.setError5(siemensNet.getByteTransform().TransBool(result.Content, 30, 2));
-            crnProtocol.setError6(siemensNet.getByteTransform().TransBool(result.Content, 32, 2));
-            crnProtocol.setXSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 34));
-            crnProtocol.setYSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 38));
-            crnProtocol.setZSpeed(siemensNet.getByteTransform().TransSingle(result.Content, 42));
-            crnProtocol.setXDistance(siemensNet.getByteTransform().TransSingle(result.Content, 46));
-            crnProtocol.setYDistance(siemensNet.getByteTransform().TransSingle(result.Content, 50));
-            crnProtocol.setXDuration(siemensNet.getByteTransform().TransSingle(result.Content, 54));
-            crnProtocol.setYDuration(siemensNet.getByteTransform().TransSingle(result.Content, 58));
+            crnProtocol.setTaskNo(melsecMcNet.getByteTransform().TransInt16(result.Content, 0));
+            crnProtocol.setMode(melsecMcNet.getByteTransform().TransInt16(result.Content, 2));
+            crnProtocol.setStatus(melsecMcNet.getByteTransform().TransInt16(result.Content, 4));
+            crnProtocol.setBay(melsecMcNet.getByteTransform().TransInt16(result.Content, 6));
+            crnProtocol.setLevel(melsecMcNet.getByteTransform().TransInt16(result.Content, 8));
+            crnProtocol.setForkPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 10));
+            crnProtocol.setLiftPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 12));
+            crnProtocol.setWalkPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 14));
+            crnProtocol.setFingerPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 16));
+            crnProtocol.setLoaded(melsecMcNet.getByteTransform().TransInt16(result.Content, 18));
+            crnProtocol.setAlarm1(melsecMcNet.getByteTransform().TransInt16(result.Content, 20));
+            crnProtocol.setTemp1(melsecMcNet.getByteTransform().TransInt16(result.Content, 22));
+            crnProtocol.setTemp2(melsecMcNet.getByteTransform().TransInt16(result.Content, 24));
+            crnProtocol.setTemp3(melsecMcNet.getByteTransform().TransInt16(result.Content, 26));
+            crnProtocol.setTemp4(melsecMcNet.getByteTransform().TransInt16(result.Content, 28));
+            crnProtocol.setXSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 30));
+            crnProtocol.setYSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 34));
+            crnProtocol.setZSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 38));
+            crnProtocol.setXDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 42));
+            crnProtocol.setYDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 46));
+            crnProtocol.setXDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 50));
+            crnProtocol.setYDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 54));
 
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
 
@@ -164,12 +197,12 @@
             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());
+                log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
             }
 
         } 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());
         }
     }
 
@@ -181,32 +214,54 @@
             log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�");
             return false;
         }
+        if (command.getAckFinish() == 1) {
+            command.setTaskSend((short) 0);
+        } else if (command.getAckFinish() == 0) {
+            command.setTaskSend((short) 1);
+        }
         command.setCrnNo(slave.getId());
-        short[] array = new short[9];
-        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();
-        OperateResult result = siemensNet.Write("DB8.0", array);
+        short[] array = new short[10];
+        array[0] = command.getTaskMode();
+        array[1] = command.getSourcePosY(); // 鍒�
+        array[2] = command.getSourcePosZ(); // 灞�
+        array[3] = command.getSourcePosX(); // 鎺�
+        array[4] = command.getDestinationPosY(); // 鍒�
+        array[5] = command.getDestinationPosZ();  // 灞�
+        array[6] = command.getDestinationPosX(); // 鎺�
+        array[7] = command.getTaskNo();
+        array[8] = command.getTaskSend();
+        array[9] = command.getAckFinish();
+
+        OperateResult result = melsecMcNet.Write("D1001", array);
         if (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;
         } 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;
+        }
+    }
+
+    /**
+     * 蹇冭烦
+     */
+    private void heartbeat(){
+        if (heartBeatVal == 1) {
+            heartBeatVal = 0;
+        } else {
+            heartBeatVal = 1;
+        }
+        OperateResult write = melsecMcNet.Write("D1000", heartBeatVal);
+        if (!write.IsSuccess) {
+            log.error("杈撻�佺嚎plc缂栧彿={} 蹇冭烦澶辫触", slave.getId());
         }
     }
 
     @Override
     public void close() {
-        siemensNet.ConnectClose();
+        melsecMcNet.ConnectClose();
     }
 
     /******************************************************************************************/
@@ -216,9 +271,7 @@
         CrnSlave slave = new CrnSlave();
         slave.setId(1);
         slave.setIp("192.168.6.9");
-        slave.setRack(0);
-        slave.setSlot(0);
-        CrnThread crnThread = new CrnThread(slave);
+        MelsecCrnThread crnThread = new MelsecCrnThread(slave);
         crnThread.connect();
         crnThread.readStatus();
         System.out.println(JSON.toJSONString(crnThread.crnProtocol));
@@ -323,5 +376,4 @@
 //        }
 
     }
-
 }
diff --git a/src/main/java/com/zy/core/thread/CrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
similarity index 98%
rename from src/main/java/com/zy/core/thread/CrnThread.java
rename to src/main/java/com/zy/core/thread/SiemensCrnThread.java
index e548e0f..afabb67 100644
--- a/src/main/java/com/zy/core/thread/CrnThread.java
+++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -9,7 +9,7 @@
 import com.core.common.SpringUtils;
 import com.zy.asrs.entity.BasCrnp;
 import com.zy.asrs.service.BasCrnpService;
-import com.zy.core.ThreadHandler;
+import com.zy.core.CrnThread;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
 import com.zy.core.enums.CrnStatusType;
@@ -31,14 +31,14 @@
  */
 @Data
 @Slf4j
-public class CrnThread implements Runnable, ThreadHandler {
+public class SiemensCrnThread implements Runnable, CrnThread {
 
     private SiemensS7Net siemensNet;
     private CrnSlave slave;
     private CrnProtocol crnProtocol;
     private boolean resetFlag = false;
 
-    public CrnThread(CrnSlave slave) {
+    public SiemensCrnThread(CrnSlave slave) {
         this.slave = slave;
     }
 
@@ -218,7 +218,7 @@
         slave.setIp("192.168.6.9");
         slave.setRack(0);
         slave.setSlot(0);
-        CrnThread crnThread = new CrnThread(slave);
+        SiemensCrnThread crnThread = new SiemensCrnThread(slave);
         crnThread.connect();
         crnThread.readStatus();
         System.out.println(JSON.toJSONString(crnThread.crnProtocol));
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index cc44d10..1bb177f 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -62,6 +62,15 @@
       row: 1
       bay: 0
       lev: 1
+    # 鍫嗗灈鏈�2
+    crn[1]:
+      id: 1
+      ip: 192.168.6.10
+      port: 102
+      rack: 0
+      slot: 0
+      # 鍋忕Щ閲忥紝褰撳爢鍨涙満绔欑偣鍒楀彿=1鏃讹紝鍋忕Щ閲�=2
+      offset: 2
   # 杈撻�佺嚎
   devp[0]:
     id: 1
diff --git a/src/main/webapp/views/crn.html b/src/main/webapp/views/crn.html
index 0090b06..d3f4602 100644
--- a/src/main/webapp/views/crn.html
+++ b/src/main/webapp/views/crn.html
@@ -96,6 +96,7 @@
             <span class="select-title">鍫嗗灈鏈哄彿</span>
             <div class="select-container">
                 <label><input type="radio" name="crnSelect" value="1" checked>&nbsp;1鍙峰爢鍨涙満</label>
+                <label><input type="radio" name="crnSelect" value="2">&nbsp;2鍙峰爢鍨涙満</label>
             </div>
         </div>
         <!-- 婧愮珯/婧愬簱浣� 閫夋嫨 -->

--
Gitblit v1.9.1