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