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> 1鍙峰爢鍨涙満</label>
+ <label><input type="radio" name="crnSelect" value="2"> 2鍙峰爢鍨涙満</label>
</div>
</div>
<!-- 婧愮珯/婧愬簱浣� 閫夋嫨 -->
--
Gitblit v1.9.1