From 87c4efe93e6fe31a9c989b4aa5cc0c8f559b845d Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 31 三月 2023 16:50:47 +0800
Subject: [PATCH] 提升机代码,四向穿梭车线程优化
---
src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java | 16
src/main/java/com/zy/asrs/mapper/BasLiftMapper.java | 12
src/main/java/com/zy/asrs/domain/vo/LiftDataVo.java | 16
src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java | 223 ++++
src/main/java/com/zy/core/model/command/LiftAssignCommand.java | 40
src/main/java/com/zy/core/model/protocol/LiftProtocol.java | 66 +
src/main/java/com/zy/asrs/service/impl/BasLiftServiceImpl.java | 12
src/main/java/com/zy/asrs/domain/param/LiftOperatorParam.java | 17
src/main/java/com/zy/common/utils/CommonUtils.java | 4
src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java | 87 +
src/main/java/com/zy/asrs/entity/BasLiftOpt.java | 126 ++
src/main/webapp/views/index.html | 2
src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java | 77 -
src/main/java/com/zy/core/MainProcess.java | 4
src/main/java/com/zy/asrs/service/impl/BasLiftOptServiceImpl.java | 12
src/main/webapp/static/css/lift.css | 334 ++++++
src/main/java/com/zy/core/enums/LiftProtocolStatusType.java | 40
src/main/resources/mapper/BasLiftMapper.xml | 38
src/main/java/com/zy/asrs/service/BasLiftOptService.java | 8
src/main/java/com/zy/core/thread/LiftThread.java | 327 +++++-
src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java | 13
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 169 +++
src/main/java/com/zy/core/thread/ShuttleThread.java | 64
src/main/resources/mapper/BasLiftOptMapper.xml | 19
src/main/java/com/zy/core/cache/MessageQueue.java | 14
src/main/resources/mapper/WrkMastMapper.xml | 17
src/main/java/com/zy/asrs/mapper/BasLiftOptMapper.java | 12
src/main/java/com/zy/asrs/service/BasLiftService.java | 8
src/main/java/com/zy/asrs/entity/BasLift.java | 299 ++++++
src/main/java/com/zy/core/ServerBootstrap.java | 2
src/main/webapp/views/lift.html | 484 ++++++++++
src/main/java/com/zy/core/model/command/LiftCommand.java | 17
src/main/java/com/zy/asrs/controller/ShuttleController.java | 23
src/main/java/com/zy/asrs/domain/vo/LiftSensorDataVo.java | 13
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | 4
src/main/java/com/zy/asrs/controller/LiftController.java | 216 ++++
36 files changed, 2,641 insertions(+), 194 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/LiftController.java b/src/main/java/com/zy/asrs/controller/LiftController.java
new file mode 100644
index 0000000..f88ea21
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/LiftController.java
@@ -0,0 +1,216 @@
+package com.zy.asrs.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.exception.CoolException;
+import com.zy.asrs.domain.param.LiftOperatorParam;
+import com.zy.asrs.domain.vo.*;
+import com.zy.asrs.entity.BasLift;
+import com.zy.asrs.service.BasLiftService;
+import com.zy.asrs.service.WrkMastService;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.LiftSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.LiftAssignCommand;
+import com.zy.core.model.protocol.LiftProtocol;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.core.thread.LiftThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鎻愬崌鏈烘帴鍙�
+ */
+@Slf4j
+@RestController
+@RequestMapping("/lift")
+public class LiftController {
+
+ @Autowired
+ private SlaveProperties slaveProperties;
+ @Autowired
+ private BasLiftService basLiftService;
+ @Autowired
+ private WrkMastService wrkMastService;
+
+ @PostMapping("/table/lift/state")
+ @ManagerAuth(memo = "鎻愬崌鏈轰俊鎭〃")
+ public R liftStateTable(){
+ List<LiftStateTableVo> list = new ArrayList<>();
+ List<BasLift> lifts = basLiftService.selectList(new EntityWrapper<BasLift>().orderBy("lift_no"));
+ for (BasLift basLift : lifts) {
+ // 琛ㄦ牸琛�
+ LiftStateTableVo vo = new LiftStateTableVo();
+ vo.setLiftNo(basLift.getLiftNo()); //鎻愬崌鏈哄彿
+ list.add(vo);
+ // 鑾峰彇鎻愬崌鏈轰俊鎭�
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basLift.getLiftNo());
+ if (liftThread == null) {
+ continue;
+ }
+ LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+ if (liftProtocol == null || liftProtocol.getLiftNo()==null) {
+ continue;
+ }
+ vo.setTaskNo(liftProtocol.getTaskNo()); // 浠诲姟鍙�
+ vo.setProtocolStatus(liftProtocol.getProtocolStatusType().desc);
+ vo.setLiftLock(liftProtocol.getLiftLock());
+ vo.setPositionArrivalFeedback(liftProtocol.getPositionArrivalFeedback());
+ vo.setReady(liftProtocol.getReady());
+ vo.setRunning(liftProtocol.getRunning());
+ vo.setMode(liftProtocol.getMode());
+ vo.setLineFrontHasStock(liftProtocol.getLineFrontHasStock());
+ vo.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback());
+ vo.setReverseFeedback(liftProtocol.getReverseFeedback());
+ vo.setMotorOverload(liftProtocol.getMotorOverload());
+ vo.setLineEndHasStock(liftProtocol.getLineEndHasStock());
+ vo.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm());
+ vo.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm());
+ vo.setPlatPositionDeviationAlarm(liftProtocol.getPlatPositionDeviationAlarm());
+ vo.setPlatTorqueDeviationAlarm(liftProtocol.getPlatTorqueDeviationAlarm());
+ vo.setPlatShuttleCheck(liftProtocol.getPlatShuttleCheck());
+ vo.setNotReady(liftProtocol.getNotReady());
+ vo.setServoError1(liftProtocol.getServoError1());
+ vo.setServoError2(liftProtocol.getServoError2());
+ vo.setServoError3(liftProtocol.getServoError3());
+ vo.setServoError4(liftProtocol.getServoError4());
+ vo.setLiftActualSpeed(liftProtocol.getLiftActualSpeed());
+ vo.setPakMk(liftProtocol.getPakMk());
+ }
+ return R.ok().add(list);
+ }
+
+ @PostMapping("/table/lift/msg")
+ @ManagerAuth(memo = "鎻愬崌鏈烘暟鎹〃")
+ public R liftMsgTable(){
+ List<LiftMsgTableVo> list = new ArrayList<>();
+ List<BasLift> lifts = basLiftService.selectList(new EntityWrapper<BasLift>().orderBy("lift_no"));
+ for (BasLift basLift : lifts) {
+ // 琛ㄦ牸琛�
+ LiftMsgTableVo vo = new LiftMsgTableVo();
+ vo.setLiftNo(basLift.getLiftNo()); // 鎻愬崌鏈哄彿
+ list.add(vo);
+ // 鑾峰彇鎻愬崌鏈轰俊鎭�
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basLift.getLiftNo());
+ if (liftThread == null) {
+ continue;
+ }
+ LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+ if (liftProtocol == null) {
+ continue;
+ }
+
+ vo.setWorkNo(liftProtocol.getTaskNo().intValue());//浠诲姟鍙�
+ vo.setPakMk(liftProtocol.getPakMk()?"Y" : "N"); // 浣滀笟鏍囪
+ vo.setLineFrontHasStock(liftProtocol.getLineFrontHasStock());
+ vo.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback());
+ vo.setReverseFeedback(liftProtocol.getReverseFeedback());
+ vo.setMotorOverload(liftProtocol.getMotorOverload());
+ vo.setLineEndHasStock(liftProtocol.getLineEndHasStock());
+ vo.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm());
+ vo.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm());
+ }
+ return R.ok().add(list);
+ }
+
+ @PostMapping("/output/lift")
+ @ManagerAuth
+ public R liftOutput(){
+ StringBuilder str = new StringBuilder();
+ String s;
+ int i = 0;
+ while((s = OutputQueue.LIFT.poll()) != null && i <=10) {
+ str.append("\n").append(s);
+ i++;
+ }
+ return R.ok().add(str.toString());
+ }
+
+ @GetMapping("/detl/{liftNo}")
+ public R liftDetl(@PathVariable("liftNo") Integer liftNo){
+ LiftDataVo vo = new LiftDataVo();
+ for (LiftSlave liftSlave : slaveProperties.getLift()) {
+ if (liftNo.equals(liftSlave.getId())) {
+ vo.setLiftNo(liftSlave.getId());
+ BasLift basLift = basLiftService.selectById(liftSlave.getId());
+ if (!Cools.isEmpty(basLift)) {
+ vo.setWorkNo(basLift.getWrkNo());
+ vo.setPakMk(basLift.getPakMk());
+ }
+ break;
+ }
+ }
+ return R.ok().add(vo);
+ }
+
+ @GetMapping("/sensor/detl/{liftNo}")
+ public R liftSensorDetl(@PathVariable("liftNo") Integer liftNo){
+ LiftSensorDataVo vo = new LiftSensorDataVo();
+ for (LiftSlave liftSlave : slaveProperties.getLift()) {
+ if (liftNo.equals(liftSlave.getId())) {
+ vo.setLiftNo(liftSlave.getId());
+ // 鑾峰彇鎻愬崌鏈轰俊鎭�
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
+ if (liftThread == null) {
+ return R.error("璁惧涓嶅湪绾�");
+ }
+ LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+ if (liftProtocol == null) {
+ return R.error("璁惧涓嶅湪绾�");
+ }
+
+ break;
+ }
+ }
+ return R.ok().add(vo);
+ }
+
+ /****************************************************************/
+ /************************** 鎵嬪姩鎿嶄綔 ******************************/
+ /****************************************************************/
+
+ @ManagerAuth(memo = "鎵嬪姩鎿嶄綔")
+ @PostMapping("/operator/lift")
+ public R liftOperator(LiftOperatorParam param){
+ if (Cools.isEmpty(param.getLiftNo())) {
+ return R.parse(BaseRes.PARAM);
+ }
+
+ for (LiftSlave liftSlave : slaveProperties.getLift()) {
+ if (param.getLiftNo().equals(liftSlave.getId())) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
+ if (liftThread == null) {
+ throw new CoolException("鎻愬崌鏈轰笉鍦ㄧ嚎");
+ }
+ LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+ if (liftProtocol == null) {
+ throw new CoolException("鎻愬崌鏈轰笉鍦ㄧ嚎");
+ }
+
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setLiftNo(liftSlave.getId().shortValue()); // 鎻愬崌鏈虹紪鍙�
+ assignCommand.setTaskNo((short) 9999);
+ assignCommand.setTaskMode(param.getLiftTaskMode().shortValue());
+ assignCommand.setAuto(false);//鎵嬪姩妯″紡
+
+ if (MessageQueue.offer(SlaveType.Lift, liftSlave.getId(), new Task(3, assignCommand))) {
+ return R.ok();
+ } else {
+ throw new CoolException("鍛戒护涓嬪彂澶辫触");
+ }
+ }
+ }
+ return R.error();
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java
index bb931f7..58cfaed 100644
--- a/src/main/java/com/zy/asrs/controller/ShuttleController.java
+++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java
@@ -30,7 +30,6 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
-import java.util.Random;
/**
* 鍥涘悜绌挎杞︽帴鍙�
@@ -246,8 +245,14 @@
return R.parse(BaseRes.PARAM);
}
- if (Cools.isEmpty(param.getSourceLocNo(), param.getDistLocNo())) {
- return R.parse(BaseRes.PARAM);
+ ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+
+ if (param.getShuttleTaskMode() == 1 || param.getShuttleTaskMode() == 2) {
+ if (Cools.isEmpty(param.getSourceLocNo(), param.getDistLocNo())) {
+ return R.parse(BaseRes.PARAM);
+ }
+ assignCommand.setSourceLocNo(param.getSourceLocNo());
+ assignCommand.setLocNo(param.getDistLocNo());
}
for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
@@ -262,14 +267,12 @@
}
ShuttleTaskModeType shuttleTaskModeType = ShuttleTaskModeType.get(param.getShuttleTaskMode());
- ShuttleAssignCommand command = new ShuttleAssignCommand();
- command.setShuttleNo(shuttleSlave.getId().shortValue()); // 鍥涘悜绌挎杞︾紪鍙�
- command.setTaskMode(shuttleTaskModeType.id.shortValue());
- command.setSourceLocNo(param.getSourceLocNo());
- command.setLocNo(param.getDistLocNo());
- command.setTaskNo((short) 9999);
+ assignCommand.setShuttleNo(shuttleSlave.getId().shortValue()); // 鍥涘悜绌挎杞︾紪鍙�
+ assignCommand.setTaskMode(shuttleTaskModeType.id.shortValue());
+ assignCommand.setTaskNo((short) 9999);
+ assignCommand.setAuto(false);//鎵嬪姩妯″紡
- if (MessageQueue.offer(SlaveType.Shuttle, shuttleSlave.getId(), new Task(3, command))) {
+ if (MessageQueue.offer(SlaveType.Shuttle, shuttleSlave.getId(), new Task(3, assignCommand))) {
return R.ok();
} else {
throw new CoolException("鍛戒护涓嬪彂澶辫触");
diff --git a/src/main/java/com/zy/asrs/domain/param/LiftOperatorParam.java b/src/main/java/com/zy/asrs/domain/param/LiftOperatorParam.java
new file mode 100644
index 0000000..433cd17
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/param/LiftOperatorParam.java
@@ -0,0 +1,17 @@
+package com.zy.asrs.domain.param;
+
+import lombok.Data;
+
+@Data
+public class LiftOperatorParam {
+
+ // 鎻愬崌鏈哄彿
+ private Integer liftNo;
+
+ // 浠诲姟鍙�
+ private Integer taskNo = 0;
+
+ //鎿嶄綔妯″紡
+ private Integer liftTaskMode;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/LiftDataVo.java b/src/main/java/com/zy/asrs/domain/vo/LiftDataVo.java
new file mode 100644
index 0000000..12bef47
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/LiftDataVo.java
@@ -0,0 +1,16 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class LiftDataVo {
+
+ // 鎻愬崌鏈哄彿
+ private Integer liftNo;
+
+ // 宸ヤ綔鍙�
+ private Integer workNo;
+
+ private Boolean pakMk;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java b/src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java
new file mode 100644
index 0000000..b09be1e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java
@@ -0,0 +1,87 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class LiftMsgTableVo {
+
+ // 鎻愬崌鏈哄彿
+ private Integer liftNo;
+
+ // 宸ヤ綔鍙�
+ private Integer workNo = 0;
+
+ // 浣滀笟鏍囪
+ private String pakMk = "-";
+
+ /**
+ * 杈撻�佺嚎鍓嶇鍏夌數鏈夎揣
+ * 鏈夎揣涓�1锛屾棤璐т负0锛堝墠绔寚闈犺繎璐ф灦渚э級
+ */
+ private Boolean lineFrontHasStock;
+
+ /**
+ * 杈撻�佺嚎姝h浆鍙嶉
+ * 姝h浆杩愯涓�1锛屽惁鍒欎负0
+ */
+ private Boolean forwardRotationFeedback;
+
+ /**
+ * 杈撻�佺嚎鍙嶈浆鍙嶉
+ * 鍙嶈浆杩愯涓�1锛屽惁鍒欎负0
+ */
+ private Boolean reverseFeedback;
+
+ /**
+ * 杈撻�佺嚎鐢垫満杩囪浇
+ * 杩囪浇涓�0锛屾甯镐负1
+ */
+ private Boolean motorOverload;
+
+ /**
+ * 杈撻�佺嚎鏈鍏夌數鏈夎揣
+ * 鏈夎揣涓�1锛屾棤璐т负0
+ */
+ private Boolean lineEndHasStock;
+
+ /**
+ * 杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�
+ * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0
+ */
+ private Boolean inConveyLineCardTrayAlarm;
+
+ /**
+ * 鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�
+ * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0
+ */
+ private Boolean outConveyLineCardTrayAlarm;
+
+ public String getLineFrontHasStock$() {
+ return this.lineFrontHasStock ? "Y" : "N";
+ }
+
+ public String getForwardRotationFeedback$() {
+ return this.forwardRotationFeedback ? "Y" : "N";
+ }
+
+ public String getReverseFeedback$() {
+ return this.reverseFeedback ? "Y" : "N";
+ }
+
+ public String getMotorOverload$() {
+ return this.motorOverload ? "Y" : "N";
+ }
+
+ public String getLineEndHasStock$() {
+ return this.lineEndHasStock ? "Y" : "N";
+ }
+
+ public String getInConveyLineCardTrayAlarm$() {
+ return this.inConveyLineCardTrayAlarm ? "Y" : "N";
+ }
+
+ public String getOutConveyLineCardTrayAlarm$() {
+ return this.outConveyLineCardTrayAlarm ? "Y" : "N";
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/LiftSensorDataVo.java b/src/main/java/com/zy/asrs/domain/vo/LiftSensorDataVo.java
new file mode 100644
index 0000000..e88b0e7
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/LiftSensorDataVo.java
@@ -0,0 +1,13 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class LiftSensorDataVo {
+
+ /**
+ * 鎻愬崌鏈哄彿
+ */
+ private Integer liftNo;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java b/src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java
new file mode 100644
index 0000000..3a43152
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/LiftStateTableVo.java
@@ -0,0 +1,223 @@
+package com.zy.asrs.domain.vo;
+
+import com.zy.core.enums.LiftProtocolStatusType;
+import lombok.Data;
+
+@Data
+public class LiftStateTableVo {
+
+ // 鎻愬崌鏈哄彿
+ private Integer liftNo;
+
+ /**
+ * 浠诲姟鍙�
+ */
+ private Short taskNo = 0;
+
+ /**
+ * 褰撳墠鎻愬崌鏈虹姸鎬侊紙鍐呴儴鑷垜缁存姢锛�
+ */
+ private String protocolStatus;
+
+ /**
+ * 鎻愬崌鏈洪攣瀹�
+ */
+ private Boolean liftLock;
+
+ /**
+ * 浣嶇疆鍒拌揪鍙嶉
+ */
+ private Short positionArrivalFeedback;
+
+ /**
+ * 鍑嗗灏辩华
+ * 灏辩华涓�1锛屾湭灏辩华涓�0
+ */
+ private Boolean ready;
+
+ /**
+ * 杩愯涓�
+ * 杩愯涓负1锛屾湭杩愯涓�0
+ */
+ private Boolean running;
+
+ /**
+ * 鑱旀満/鍗曟満
+ * 鑱旀満涓�1锛屽崟鏈轰负0
+ */
+ private Boolean mode;
+
+ /**
+ * 杈撻�佺嚎鍓嶇鍏夌數鏈夎揣
+ * 鏈夎揣涓�1锛屾棤璐т负0锛堝墠绔寚闈犺繎璐ф灦渚э級
+ */
+ private Boolean lineFrontHasStock;
+
+ /**
+ * 杈撻�佺嚎姝h浆鍙嶉
+ * 姝h浆杩愯涓�1锛屽惁鍒欎负0
+ */
+ private Boolean forwardRotationFeedback;
+
+ /**
+ * 杈撻�佺嚎鍙嶈浆鍙嶉
+ * 鍙嶈浆杩愯涓�1锛屽惁鍒欎负0
+ */
+ private Boolean reverseFeedback;
+
+ /**
+ * 杈撻�佺嚎鐢垫満杩囪浇
+ * 杩囪浇涓�0锛屾甯镐负1
+ */
+ private Boolean motorOverload;
+
+ /**
+ * 杈撻�佺嚎鏈鍏夌數鏈夎揣
+ * 鏈夎揣涓�1锛屾棤璐т负0
+ */
+ private Boolean lineEndHasStock;
+
+ /**
+ * 杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�
+ * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0
+ */
+ private Boolean inConveyLineCardTrayAlarm;
+
+ /**
+ * 鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�
+ * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0
+ */
+ private Boolean outConveyLineCardTrayAlarm;
+
+ /**
+ * 骞冲彴浣嶇疆鍋忓樊鎶ヨ
+ * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0
+ */
+ private Boolean platPositionDeviationAlarm;
+
+ /**
+ * 骞冲彴鎵煩鍋忓樊鎶ヨ
+ * 鎶ヨ涓�1锛屾湭鎶ヨ涓�0
+ */
+ private Boolean platTorqueDeviationAlarm;
+
+ /**
+ * 骞冲彴鍥涘悜杞︽娴�
+ * 鏈夎溅涓�1锛屾棤杞︿负0
+ */
+ private Boolean platShuttleCheck;
+
+ /**
+ * 鏈氨缁姸鎬�
+ * 1. 涓嶅湪鎸囧畾灞�
+ * 2. 鍥涜酱涓嶅悓姝�
+ * 3. 骞冲彴鍓嶉檺鍏夌數琚尅鍒帮紙闈犺繎璐ф灦锛�
+ * 4. 骞冲彴鍚庨檺鍏夌數琚尅鍒帮紙杩滅璐ф灦锛�
+ * 5. 骞冲彴涓婇檺浣嶆姤璀�
+ * 6. 骞冲彴涓嬮檺浣嶆姤璀�
+ * 7. 鐢垫煖鎬ュ仠鎶ヨ
+ * 8. 杈撻�佺嚎鍓嶉檺浣嶈鎸″埌锛堥潬杩戣揣鏋讹級
+ * 9. 杈撻�佺嚎鍚庨檺浣嶈鎸″埌锛堣繙绂昏揣鏋讹級
+ * 10. 瑙︽懜灞忕揣鎬ュ仠姝㈣鎸変笅
+ * 11. 鍥涜酱鍔ㄥ姏绾挎柇绾�
+ * 12. 鍗曟満妯″紡
+ * 13. 鍥涜酱鎶ヨ
+ * 14. 浣嶇疆鍋忓樊杩囧ぇ
+ * 15. 鎵煩鍋忓樊杩囧ぇ
+ * 16. 杈撻�佺嚎杩囪浇
+ * 17. 杩涙彁鍗囨満鍗℃墭鐩�
+ * 18. 鍑烘彁鍗囨満鍗℃墭鐩�
+ */
+ private Short notReady;
+
+ /**
+ * 浼烘湇1閿欒
+ */
+ private Short servoError1;
+
+ /**
+ * 浼烘湇2閿欒
+ */
+ private Short servoError2;
+
+ /**
+ * 浼烘湇3閿欒
+ */
+ private Short servoError3;
+
+ /**
+ * 浼烘湇4閿欒
+ */
+ private Short servoError4;
+
+ /**
+ * 鎻愬崌鏈哄疄闄呴�熷害鍙嶉
+ */
+ private Short liftActualSpeed;
+
+ /**
+ * 浣滀笟鏍囪
+ */
+ private Boolean pakMk = true;
+
+ public String getLiftLock$() {
+ return this.liftLock ? "Y" : "N";
+ }
+
+ public String getReady$() {
+ return this.ready ? "Y" : "N";
+ }
+
+ public String getRunning$() {
+ return this.running ? "Y" : "N";
+ }
+
+ public String getMode$() {
+ return this.mode ? "Y" : "N";
+ }
+
+ public String getLineFrontHasStock$() {
+ return this.lineFrontHasStock ? "Y" : "N";
+ }
+
+ public String getForwardRotationFeedback$() {
+ return this.forwardRotationFeedback ? "Y" : "N";
+ }
+
+ public String getReverseFeedback$() {
+ return this.reverseFeedback ? "Y" : "N";
+ }
+
+ public String getMotorOverload$() {
+ return this.motorOverload ? "Y" : "N";
+ }
+
+ public String getLineEndHasStock$() {
+ return this.lineEndHasStock ? "Y" : "N";
+ }
+
+ public String getInConveyLineCardTrayAlarm$() {
+ return this.inConveyLineCardTrayAlarm ? "Y" : "N";
+ }
+
+ public String getOutConveyLineCardTrayAlarm$() {
+ return this.outConveyLineCardTrayAlarm ? "Y" : "N";
+ }
+
+ public String getPlatPositionDeviationAlarm$() {
+ return this.platPositionDeviationAlarm ? "Y" : "N";
+ }
+
+ public String getPlatTorqueDeviationAlarm$() {
+ return this.platTorqueDeviationAlarm ? "Y" : "N";
+ }
+
+ public String getPlatShuttleCheck$() {
+ return this.platShuttleCheck ? "Y" : "N";
+ }
+
+ public String getPakMk$() {
+ return this.pakMk ? "Y" : "N";
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java b/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java
index 03ef340..2af7d20 100644
--- a/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java
+++ b/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java
@@ -10,81 +10,4 @@
*/
private Integer shuttleNo;
- // 浠诲姟淇℃伅 ---------------------------------------------------------
- /**
- * 96.鍏ュ簱浠诲姟涓�
- */
- private boolean pakInTask;
-
- /**
- * 97. 鍑哄簱浠诲姟涓�
- */
- private boolean pakOutTask;
-
- /**
- * 98. 绉诲簱浠诲姟涓�
- */
- private boolean pakMoveTask;
-
- /**
- * 99. 鍥炲師鐐逛换鍔′腑
- */
- private boolean goHpTask;
-
- /**
- * 100. 鍘诲弽鍘熺偣浠诲姟涓�
- */
- private boolean goOHpTask;
-
- /**
- * 101. 鍘诲師鐐归伩璁╀綅
- */
- private boolean goHpAvoid;
-
- /**
- * 102. 鍘诲弽鍘熺偣閬胯浣�
- */
- private boolean goOHpAvoid;
-
- /**
- * 104. 鍏ュ簱鍙栫┖缁撴潫
- */
- private boolean pakInEmpty;
-
- /**
- * 105. 鍏ュ簱姝e父缁撴潫
- */
- private boolean pakInFinish;
-
- /**
- * 106. 鍑哄簱鍙栫┖缁撴潫
- */
- private boolean pakOutEmpty;
-
- /**
- * 107. 鍑哄簱姝e父缁撴潫
- */
- private boolean pakOutFinish;
-
- /**
- * 108. 鍘诲師鐐归伩璁╁畬鎴�
- */
- private boolean goHpAvoidFinish;
-
- /**
- * 109. 鍘诲弽鍘熺偣閬胯瀹屾垚
- */
- private boolean goOHpAvoidFinish;
-
- /**
- * 110. 鍘诲師鐐归伩璁╁畬鎴�
- */
- private boolean goHpAvoidErr;
-
- /**
- * 111. 鍘诲弽鍘熺偣閬胯瀹屾垚
- */
- private boolean goOHpAvoidErr;
-
-
}
diff --git a/src/main/java/com/zy/asrs/entity/BasLift.java b/src/main/java/com/zy/asrs/entity/BasLift.java
new file mode 100644
index 0000000..0276d84
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasLift.java
@@ -0,0 +1,299 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_bas_lift")
+public class BasLift implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 鎻愬崌鏈哄彿
+ */
+ @ApiModelProperty(value= "鎻愬崌鏈哄彿")
+ @TableId(value = "lift_no", type = IdType.INPUT)
+ @TableField("lift_no")
+ private Integer liftNo;
+
+ /**
+ * 褰撳墠浠诲姟鐘舵��
+ */
+ @ApiModelProperty(value= "褰撳墠浠诲姟鐘舵��")
+ @TableField("status")
+ private Integer status;
+
+ /**
+ * 浠诲姟鍙�
+ */
+ @ApiModelProperty(value= "浠诲姟鍙�")
+ @TableField("wrk_no")
+ private Integer wrkNo;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ @ApiModelProperty(value= "淇敼鏃堕棿")
+ @TableField("update_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 淇敼浜哄憳
+ */
+ @ApiModelProperty(value= "淇敼浜哄憳")
+ @TableField("update_by")
+ private Long updateBy;
+
+ /**
+ * 澶囨敞
+ */
+ @ApiModelProperty(value= "澶囨敞")
+ private String memo;
+
+ /**
+ * 浣滀笟鏍囪
+ */
+ @ApiModelProperty(value= "浣滀笟鏍囪")
+ @TableField("pak_mk")
+ private Boolean pakMk;
+
+ /**
+ * 鎻愬崌鏈洪攣瀹�
+ */
+ @ApiModelProperty(value= "鎻愬崌鏈洪攣瀹�")
+ @TableField("lift_lock")
+ private Boolean liftLock;
+
+ /**
+ * 浣嶇疆鍒拌揪鍙嶉
+ */
+ @ApiModelProperty(value= "浣嶇疆鍒拌揪鍙嶉")
+ @TableField("position_arrival_feedback")
+ private Integer positionArrivalFeedback;
+
+ /**
+ * 鍑嗗灏辩华
+ */
+ @ApiModelProperty(value= "鍑嗗灏辩华")
+ private Boolean ready;
+
+ /**
+ * 杩愯涓�
+ */
+ @ApiModelProperty(value= "杩愯涓�")
+ private Boolean running;
+
+ /**
+ * 鑱旀満/鍗曟満
+ */
+ @ApiModelProperty(value= "鑱旀満/鍗曟満")
+ private Boolean mode;
+
+ /**
+ * 杈撻�佺嚎鍓嶇鍏夌數鏈夎揣
+ */
+ @ApiModelProperty(value= "杈撻�佺嚎鍓嶇鍏夌數鏈夎揣")
+ @TableField("line_front_has_stock")
+ private Boolean lineFrontHasStock;
+
+ /**
+ * 杈撻�佺嚎姝h浆鍙嶉
+ */
+ @ApiModelProperty(value= "杈撻�佺嚎姝h浆鍙嶉")
+ @TableField("forward_rotation_feedback")
+ private Boolean forwardRotationFeedback;
+
+ /**
+ * 杈撻�佺嚎鍙嶈浆鍙嶉
+ */
+ @ApiModelProperty(value= "杈撻�佺嚎鍙嶈浆鍙嶉")
+ @TableField("reverse_feedback")
+ private Boolean reverseFeedback;
+
+ /**
+ * 杈撻�佺嚎鐢垫満杩囪浇
+ */
+ @ApiModelProperty(value= "杈撻�佺嚎鐢垫満杩囪浇")
+ @TableField("motor_overload")
+ private Boolean motorOverload;
+
+ /**
+ * 杈撻�佺嚎鏈鍏夌數鏈夎揣
+ */
+ @ApiModelProperty(value= "杈撻�佺嚎鏈鍏夌數鏈夎揣")
+ @TableField("line_end_has_stock")
+ private Boolean lineEndHasStock;
+
+ /**
+ * 杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�
+ */
+ @ApiModelProperty(value= "杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�")
+ @TableField("in_convey_line_card_tray_alarm")
+ private Boolean inConveyLineCardTrayAlarm;
+
+ /**
+ * 鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�
+ */
+ @ApiModelProperty(value= "鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�")
+ @TableField("out_convey_line_card_tray_alarm")
+ private Boolean outConveyLineCardTrayAlarm;
+
+ /**
+ * 骞冲彴浣嶇疆鍋忓樊鎶ヨ
+ */
+ @ApiModelProperty(value= "骞冲彴浣嶇疆鍋忓樊鎶ヨ")
+ @TableField("plat_position_deviation_alarm")
+ private Boolean platPositionDeviationAlarm;
+
+ /**
+ * 骞冲彴鎵煩鍋忓樊鎶ヨ
+ */
+ @ApiModelProperty(value= "骞冲彴鎵煩鍋忓樊鎶ヨ")
+ @TableField("plat_torque_deviation_alarm")
+ private Boolean platTorqueDeviationAlarm;
+
+ /**
+ * 骞冲彴鍥涘悜杞︽娴�
+ */
+ @ApiModelProperty(value= "骞冲彴鍥涘悜杞︽娴�")
+ @TableField("plat_shuttle_check")
+ private Boolean platShuttleCheck;
+
+ /**
+ * 鏈氨缁姸鎬�
+ */
+ @ApiModelProperty(value= "鏈氨缁姸鎬�")
+ @TableField("not_ready")
+ private Integer notReady;
+
+ /**
+ * 浼烘湇1閿欒
+ */
+ @ApiModelProperty(value= "浼烘湇1閿欒")
+ @TableField("servo_error1")
+ private Integer servoError1;
+
+ /**
+ * 浼烘湇2閿欒
+ */
+ @ApiModelProperty(value= "浼烘湇2閿欒")
+ @TableField("servo_error2")
+ private Integer servoError2;
+
+ /**
+ * 浼烘湇3閿欒
+ */
+ @ApiModelProperty(value= "浼烘湇3閿欒")
+ @TableField("servo_error3")
+ private Integer servoError3;
+
+ /**
+ * 浼烘湇4閿欒
+ */
+ @ApiModelProperty(value= "浼烘湇4閿欒")
+ @TableField("servo_error4")
+ private Integer servoError4;
+
+ /**
+ * 鎻愬崌鏈哄疄闄呴�熷害鍙嶉
+ */
+ @ApiModelProperty(value= "鎻愬崌鏈哄疄闄呴�熷害鍙嶉")
+ @TableField("lift_actual_speed")
+ private Integer liftActualSpeed;
+
+ public BasLift() {}
+
+ public BasLift(Integer liftNo,Integer status,Integer wrkNo,Date updateTime,Long updateBy,String memo,Boolean pakMk,Boolean liftLock,Integer positionArrivalFeedback,Boolean ready,Boolean running,Boolean mode,Boolean lineFrontHasStock,Boolean forwardRotationFeedback,Boolean reverseFeedback,Boolean motorOverload,Boolean lineEndHasStock,Boolean inConveyLineCardTrayAlarm,Boolean outConveyLineCardTrayAlarm,Boolean platPositionDeviationAlarm,Boolean platTorqueDeviationAlarm,Boolean platShuttleCheck,Integer notReady,Integer servoError1,Integer servoError2,Integer servoError3,Integer servoError4,Integer liftActualSpeed) {
+ this.liftNo = liftNo;
+ this.status = status;
+ this.wrkNo = wrkNo;
+ this.updateTime = updateTime;
+ this.updateBy = updateBy;
+ this.memo = memo;
+ this.pakMk = pakMk;
+ this.liftLock = liftLock;
+ this.positionArrivalFeedback = positionArrivalFeedback;
+ this.ready = ready;
+ this.running = running;
+ this.mode = mode;
+ this.lineFrontHasStock = lineFrontHasStock;
+ this.forwardRotationFeedback = forwardRotationFeedback;
+ this.reverseFeedback = reverseFeedback;
+ this.motorOverload = motorOverload;
+ this.lineEndHasStock = lineEndHasStock;
+ this.inConveyLineCardTrayAlarm = inConveyLineCardTrayAlarm;
+ this.outConveyLineCardTrayAlarm = outConveyLineCardTrayAlarm;
+ this.platPositionDeviationAlarm = platPositionDeviationAlarm;
+ this.platTorqueDeviationAlarm = platTorqueDeviationAlarm;
+ this.platShuttleCheck = platShuttleCheck;
+ this.notReady = notReady;
+ this.servoError1 = servoError1;
+ this.servoError2 = servoError2;
+ this.servoError3 = servoError3;
+ this.servoError4 = servoError4;
+ this.liftActualSpeed = liftActualSpeed;
+ }
+
+// BasLift basLift = new BasLift(
+// null, // 鎻愬崌鏈哄彿[闈炵┖]
+// null, // 褰撳墠鎻愬崌鏈虹姸鎬�
+// null, // 浠诲姟鍙�
+// null, // 淇敼鏃堕棿
+// null, // 淇敼浜哄憳
+// null, // 澶囨敞
+// null, // 浣滀笟鏍囪
+// null, // 鎻愬崌鏈洪攣瀹�
+// null, // 浣嶇疆鍒拌揪鍙嶉
+// null, // 鍑嗗灏辩华
+// null, // 杩愯涓�
+// null, // 鑱旀満/鍗曟満
+// null, // 杈撻�佺嚎鍓嶇鍏夌數鏈夎揣
+// null, // 杈撻�佺嚎姝h浆鍙嶉
+// null, // 杈撻�佺嚎鍙嶈浆鍙嶉
+// null, // 杈撻�佺嚎鐢垫満杩囪浇
+// null, // 杈撻�佺嚎鏈鍏夌數鏈夎揣
+// null, // 杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�
+// null, // 鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�
+// null, // 骞冲彴浣嶇疆鍋忓樊鎶ヨ
+// null, // 骞冲彴鎵煩鍋忓樊鎶ヨ
+// null, // 骞冲彴鍥涘悜杞︽娴�
+// null, // 鏈氨缁姸鎬�
+// null, // 浼烘湇1閿欒
+// null, // 浼烘湇2閿欒
+// null, // 浼烘湇3閿欒
+// null, // 浼烘湇4閿欒
+// null // 鎻愬崌鏈哄疄闄呴�熷害鍙嶉
+// );
+
+ public String getUpdateTime$(){
+ if (Cools.isEmpty(this.updateTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+ }
+
+ public String getUpdateBy$(){
+ UserService service = SpringUtils.getBean(UserService.class);
+ User user = service.selectById(this.updateBy);
+ if (!Cools.isEmpty(user)){
+ return String.valueOf(user.getUsername());
+ }
+ return null;
+ }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BasLiftOpt.java b/src/main/java/com/zy/asrs/entity/BasLiftOpt.java
new file mode 100644
index 0000000..932332f
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasLiftOpt.java
@@ -0,0 +1,126 @@
+package com.zy.asrs.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import com.baomidou.mybatisplus.annotations.TableField;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_bas_lift_opt")
+public class BasLiftOpt implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value= "")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ /**
+ * 浠诲姟鍙�
+ */
+ @ApiModelProperty(value= "浠诲姟鍙�")
+ @TableField("wrk_no")
+ private Integer wrkNo;
+
+ /**
+ * 鎻愬崌鏈哄彿
+ */
+ @ApiModelProperty(value= "鎻愬崌鏈哄彿")
+ @TableField("lift_no")
+ private Integer liftNo;
+
+ /**
+ * 涓嬪彂鏃堕棿
+ */
+ @ApiModelProperty(value= "涓嬪彂鏃堕棿")
+ @TableField("send_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date sendTime;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ @ApiModelProperty(value= "淇敼鏃堕棿")
+ @TableField("update_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 淇敼浜哄憳
+ */
+ @ApiModelProperty(value= "淇敼浜哄憳")
+ @TableField("update_by")
+ private Long updateBy;
+
+ /**
+ * 澶囨敞
+ */
+ @ApiModelProperty(value= "澶囨敞")
+ private String memo;
+
+ /**
+ * 鍛戒护
+ */
+ @ApiModelProperty(value= "鍛戒护")
+ private String command;
+
+ public BasLiftOpt() {}
+
+ public BasLiftOpt(Integer wrkNo,Integer liftNo,Date sendTime,Date updateTime,Long updateBy,String memo,String command) {
+ this.wrkNo = wrkNo;
+ this.liftNo = liftNo;
+ this.sendTime = sendTime;
+ this.updateTime = updateTime;
+ this.updateBy = updateBy;
+ this.memo = memo;
+ this.command = command;
+ }
+
+// BasLiftOpt basLiftOpt = new BasLiftOpt(
+// null, // 浠诲姟鍙�
+// null, // 鎻愬崌鏈哄彿
+// null, // 涓嬪彂鏃堕棿
+// null, // 浣滀笟
+// null, // 淇敼鏃堕棿
+// null, // 淇敼浜哄憳
+// null, // 澶囨敞
+// null // 鍛戒护
+// );
+
+ public String getSendTime$(){
+ if (Cools.isEmpty(this.sendTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.sendTime);
+ }
+
+ public String getUpdateTime$(){
+ if (Cools.isEmpty(this.updateTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+ }
+
+ public String getUpdateBy$(){
+ UserService service = SpringUtils.getBean(UserService.class);
+ User user = service.selectById(this.updateBy);
+ if (!Cools.isEmpty(user)){
+ return String.valueOf(user.getUsername());
+ }
+ return null;
+ }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasLiftMapper.java b/src/main/java/com/zy/asrs/mapper/BasLiftMapper.java
new file mode 100644
index 0000000..158122e
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasLiftMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasLift;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasLiftMapper extends BaseMapper<BasLift> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasLiftOptMapper.java b/src/main/java/com/zy/asrs/mapper/BasLiftOptMapper.java
new file mode 100644
index 0000000..0acb88d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasLiftOptMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasLiftOpt;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasLiftOptMapper extends BaseMapper<BasLiftOpt> {
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
index 80a0f32..43d11a3 100644
--- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
+++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -99,4 +99,8 @@
WrkMast selectRackInStep48(Short workNo,Integer sourceStaNo);
WrkMast selectByWorkNo59(Integer workNo);
+
+ WrkMast selectLiftStep6();
+
+ WrkMast selectByWorkNo7(Integer workNo);
}
diff --git a/src/main/java/com/zy/asrs/service/BasLiftOptService.java b/src/main/java/com/zy/asrs/service/BasLiftOptService.java
new file mode 100644
index 0000000..40961e0
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasLiftOptService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasLiftOpt;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasLiftOptService extends IService<BasLiftOpt> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasLiftService.java b/src/main/java/com/zy/asrs/service/BasLiftService.java
new file mode 100644
index 0000000..5f39b02
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasLiftService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasLift;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasLiftService extends IService<BasLift> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasLiftOptServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasLiftOptServiceImpl.java
new file mode 100644
index 0000000..a581c4b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasLiftOptServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasLiftOptMapper;
+import com.zy.asrs.entity.BasLiftOpt;
+import com.zy.asrs.service.BasLiftOptService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basLiftOptService")
+public class BasLiftOptServiceImpl extends ServiceImpl<BasLiftOptMapper, BasLiftOpt> implements BasLiftOptService {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasLiftServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasLiftServiceImpl.java
new file mode 100644
index 0000000..868706d
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasLiftServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasLiftMapper;
+import com.zy.asrs.entity.BasLift;
+import com.zy.asrs.service.BasLiftService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basLiftService")
+public class BasLiftServiceImpl extends ServiceImpl<BasLiftMapper, BasLift> implements BasLiftService {
+
+}
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 8bb3c30..0db902b 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -23,10 +23,7 @@
import com.zy.core.enums.*;
import com.zy.core.model.*;
import com.zy.core.model.command.*;
-import com.zy.core.model.protocol.CrnProtocol;
-import com.zy.core.model.protocol.ShuttleProtocol;
-import com.zy.core.model.protocol.StaProtocol;
-import com.zy.core.model.protocol.SteProtocol;
+import com.zy.core.model.protocol.*;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.*;
import lombok.extern.slf4j.Slf4j;
@@ -673,9 +670,8 @@
//鍏ュ嚭搴撴ā寮�
assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());
//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
- Short currentCode = shuttleProtocol.getCurrentCode();
- LocMast currentLocMast = locMastService.queryByQrCode(currentCode.toString());
- assignCommand.setSourceLocNo(currentLocMast.getLocNo());
+ String currentLocNo = shuttleProtocol.getCurrentLocNo();
+ assignCommand.setSourceLocNo(currentLocNo);
if (wrkMast.getWrkSts() == 8 || Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) {
//鍚屼竴灞�
@@ -688,7 +684,6 @@
//涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿
//灏忚溅褰撳墠灞傞珮
- String currentLocNo = currentLocMast.getLocNo();
Integer currentLev = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length()));
//鑾峰彇鎻愬崌鏈�
@@ -736,9 +731,7 @@
continue;
}
- Short currentCode = shuttleProtocol.getCurrentCode();//鍥涘悜绌挎杞﹀綋鍓嶄綅缃簩缁寸爜
- LocMast shuttleLocMast = locMastService.queryByQrCode(currentCode.toString());//鎵惧埌浜岀淮鐮佸搴旂殑搴撲綅璁板綍
- String shuttleLocNo = shuttleLocMast.getLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿
+ String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿
String shuttleLocNoLay = shuttleLocNo.substring(shuttleLocNo.length() - 2, shuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂�
if (lay.equals(shuttleLocNoLay)) {
//褰撳墠鍥涘悜绌挎杞﹀拰宸ヤ綔妗d换鍔″湪鍚屼竴灞傦紝鍒欒皟閰嶈杞﹁締
@@ -752,9 +745,7 @@
recentShuttle = shuttleThread;
}else {
ShuttleProtocol recentShuttleProtocol = recentShuttle.getShuttleProtocol();//鐩墠鏈�杩戠┛姊溅
- Short recentShuttleCurrentCode = recentShuttleProtocol.getCurrentCode();//鐩墠鏈�杩戠┛姊溅浣嶇疆浜岀淮鐮�
- LocMast recentShuttleLocMast = locMastService.queryByQrCode(recentShuttleCurrentCode.toString());//鎵惧埌浜岀淮鐮佸搴旂殑搴撲綅璁板綍
- String recentShuttleLocNo = recentShuttleLocMast.getLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿
+ String recentShuttleLocNo = recentShuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿
String recentShuttleLocNoLay = recentShuttleLocNo.substring(recentShuttleLocNo.length() - 2, recentShuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂�
int recentShuttleLocNoLayInt = Integer.parseInt(recentShuttleLocNoLay);
@@ -838,7 +829,9 @@
shuttleProtocol.setLocNo(null);
//鏍囪澶嶄綅
shuttleProtocol.setPakMk(true);
- News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚爢鍨涙満鍙�={}", shuttleProtocol.getShuttleNo());
+ //浠诲姟鎸囦护娓呴浂
+ shuttleProtocol.setAssignCommand(null);
+ News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
} else {
News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
}
@@ -849,6 +842,152 @@
}
/**
+ * 鎻愬崌鏈轰换鍔�
+ */
+ public synchronized void liftIoExecute() {
+ for (LiftSlave liftSlave : slaveProperties.getLift()) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
+ if (liftThread == null) {
+ continue;
+ }
+ LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+ if (liftProtocol == null) {
+ continue;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂茬姸鎬�
+ if (!liftProtocol.isIdle()) {
+ continue;
+ }
+
+ //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
+ WrkMast wrkMast = wrkMastMapper.selectLiftStep6();
+ if (wrkMast == null) {
+ continue;
+ }
+
+ //缁欐彁鍗囨満鍒嗛厤浠诲姟
+ liftProtocol.setLiftLock(true);//閿佸畾鎻愬崌鏈�
+ liftProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());//璁剧疆浠诲姟鍙�
+ liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿
+ liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓�
+
+ //鎵惧埌鍥涘悜绌挎杞︾殑绾跨▼
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, liftProtocol.getShuttleNo().intValue());
+ if (shuttleThread == null) {
+ continue;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ if (shuttleProtocol == null) {
+ continue;
+ }
+
+ //鍛戒护list
+ ArrayList<LiftCommand> commands = new ArrayList<>();
+
+ //褰撳墠绌挎杞﹀簱浣嶅彿
+ String currentLocNo = shuttleProtocol.getCurrentLocNo();
+ //褰撳墠绌挎杞︽ゼ灞�
+ int currentLocNoLey = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length()));
+
+ //宸ヤ綔妗g洰鏍囧簱浣嶅彿
+ String wrkMastLocNo = wrkMast.getLocNo();
+ //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞�
+ int wrkMastLocNoLey = Integer.parseInt(wrkMastLocNo.substring(wrkMastLocNo.length() - 2, wrkMastLocNo.length()));
+
+ //鎻愬崌鏈哄綋鍓嶆ゼ灞�
+ int liftLev = liftProtocol.getLev().intValue();
+ if (liftLev != currentLocNoLey) {
+ //涓嶅悓妤煎眰
+ LiftCommand command1 = new LiftCommand();
+ command1.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿
+ command1.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙�
+ command1.setRun((short) 1);//鍗囬檷
+ command1.setDistPosition((short) currentLocNoLey);//鐩爣妤煎眰(绌挎杞︽墍鍦ㄦゼ灞�)
+ command1.setLiftLock(true);//閿佸畾鎻愬崌鏈�
+
+ commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list
+ }
+
+ //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩杩涙潵
+ LiftCommand command2 = new LiftCommand();
+ command2.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿
+ command2.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙�
+ command2.setRun((short) 6);//杈撻�佺嚎杩愪綔
+ command2.setLiftLock(true);//閿佸畾鎻愬崌鏈�
+
+ commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list
+
+ //鎻愬崌鏈烘惉杩愬洓鍚戠┛姊溅
+ LiftCommand command3 = new LiftCommand();
+ command3.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿
+ command3.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙�
+ command3.setRun((short) 1);//鍗囬檷
+ command3.setDistPosition((short) wrkMastLocNoLey);//宸ヤ綔妗g洰鏍囨ゼ灞�
+ command3.setLiftLock(true);//閿佸畾鎻愬崌鏈�
+
+ commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list
+
+ //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲嚭鍘�
+ //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩杩涙潵
+ LiftCommand command4 = new LiftCommand();
+ command4.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿
+ command4.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙�
+ command4.setRun((short) 3);//杈撻�佺嚎杩愪綔
+ command4.setLiftLock(true);//閿佸畾鎻愬崌鏈�
+
+ commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list
+
+ wrkMast.setWrkSts(7L);//绉诲姩浠诲姟
+ //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣�
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setCommands(commands);
+ assignCommand.setLiftNo(liftProtocol.getLiftNo());
+ assignCommand.setTaskNo(liftProtocol.getTaskNo());
+ if (wrkMastMapper.updateById(wrkMast) > 0) {
+ //涓嬪彂浠诲姟
+ MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
+ }
+ }
+ }
+
+ /**
+ * 鎻愬崌鏈轰换鍔″畬鎴�
+ */
+ public synchronized void liftFinished() {
+ for (LiftSlave liftSlave : slaveProperties.getLift()) {
+ //鑾峰彇鎻愬崌鏈轰俊鎭�
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
+ LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+ if (liftProtocol == null) {
+ continue;
+ }
+
+ //鎻愬崌鏈轰负绛夊緟纭
+ if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id && liftProtocol.getTaskNo() != 0) {
+ //灏嗕换鍔℃。鏍囪涓哄畬鎴�
+ WrkMast wrkMast = wrkMastMapper.selectByWorkNo7(liftProtocol.getTaskNo().intValue());
+ if (wrkMast != null) {
+ wrkMast.setWrkSts(8L);
+ if (wrkMastMapper.updateById(wrkMast) > 0) {
+ //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵��
+ liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
+ //浠诲姟鍙锋竻闆�
+ liftProtocol.setTaskNo((short) 0);
+ //鏍囪澶嶄綅
+ liftProtocol.setPakMk(true);
+ //浠诲姟鎸囦护娓呴浂
+ liftProtocol.setAssignCommand(null);
+ News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
+ } else {
+ News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
+ }
+ }
+ }
+ }
+ }
+
+ /**
* 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
*/
public synchronized void crnIoExecute(){
diff --git a/src/main/java/com/zy/common/utils/CommonUtils.java b/src/main/java/com/zy/common/utils/CommonUtils.java
index 7d850db..2b371c0 100644
--- a/src/main/java/com/zy/common/utils/CommonUtils.java
+++ b/src/main/java/com/zy/common/utils/CommonUtils.java
@@ -40,4 +40,8 @@
return new short[]{byteToShort2, byteToShort};
}
+ public static boolean shortToBoolean(Short num) {
+ return num != 0;
+ }
+
}
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index a2f1a1d..b032df4 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -61,6 +61,10 @@
mainService.shuttleIoExecute();
//鍥涘悜绌挎杞︿换鍔″畬鎴�
mainService.shuttleFinished();
+ //鎻愬崌鏈轰换鍔�
+ mainService.liftIoExecute();
+ //鎻愬崌鏈轰换鍔″畬鎴�
+ mainService.liftFinished();
// 鍏ュ簱 ===>> 鎵ц鍫嗗灈鏈哄宸ヤ綔妗g殑瀹屾垚鎿嶄綔
mainService.storeFinished();
// 鍏ュ簱 ===>> 鎵ц绌挎杞﹀宸ヤ綔妗g殑瀹屾垚鎿嶄綔
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 48d373b..665d92d 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -108,7 +108,7 @@
// 鍒濆鍖栨彁鍗囨満
News.info("鍒濆鍖栨彁鍗囨満........................................................");
for (LiftSlave liftSlave : slaveProperties.getLift()) {
- LiftThread liftThread = new LiftThread(liftSlave);
+ LiftThread liftThread = new LiftThread(liftSlave, redisUtil);
new Thread(liftThread).start();
SlaveConnection.put(SlaveType.Lift, liftSlave.getId(), liftThread);
}
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index bc17bec..cad0ffb 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -31,6 +31,8 @@
private static final Map<Integer, ConcurrentLinkedQueue<Task>> CAR_EXCHANGE = new ConcurrentHashMap<>();
//鍥涘悜绌挎杞q浜ゆ崲鏈�
private static final Map<Integer, ConcurrentLinkedQueue<Task>> SHUTTLE_EXCHANGE = new ConcurrentHashMap<>();
+ //鎻愬崌鏈簃q浜ゆ崲鏈�
+ private static final Map<Integer, ConcurrentLinkedQueue<Task>> LIFT_EXCHANGE = new ConcurrentHashMap<>();
/**
* mq 浜ゆ崲鏈哄垵濮嬪寲
@@ -61,6 +63,9 @@
case Shuttle:
SHUTTLE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
break;
+ case Lift:
+ LIFT_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
+ break;
default:
break;
}
@@ -88,6 +93,8 @@
return CAR_EXCHANGE.get(id).offer(task);
case Shuttle:
return SHUTTLE_EXCHANGE.get(id).offer(task);
+ case Lift:
+ return LIFT_EXCHANGE.get(id).offer(task);
default:
return false;
}
@@ -115,6 +122,8 @@
return CAR_EXCHANGE.get(id).poll();
case Shuttle:
return SHUTTLE_EXCHANGE.get(id).poll();
+ case Lift:
+ return LIFT_EXCHANGE.get(id).poll();
default:
return null;
}
@@ -141,6 +150,8 @@
return CAR_EXCHANGE.get(id).peek();
case Shuttle:
return SHUTTLE_EXCHANGE.get(id).peek();
+ case Lift:
+ return LIFT_EXCHANGE.get(id).peek();
default:
return null;
}
@@ -172,6 +183,9 @@
case Shuttle:
SHUTTLE_EXCHANGE.get(id).clear();
break;
+ case Lift:
+ LIFT_EXCHANGE.get(id).clear();
+ break;
default:
break;
}
diff --git a/src/main/java/com/zy/core/enums/LiftProtocolStatusType.java b/src/main/java/com/zy/core/enums/LiftProtocolStatusType.java
new file mode 100644
index 0000000..f3c8e67
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/LiftProtocolStatusType.java
@@ -0,0 +1,40 @@
+package com.zy.core.enums;
+
+public enum LiftProtocolStatusType {
+ IDLE(1, "绌洪棽"),
+ WORKING(2, "浣滀笟涓�"),
+ WAITING(3, "绛夊緟纭"),
+ ;
+
+ public Integer id;
+ public String desc;
+
+ LiftProtocolStatusType(Integer id, String desc) {
+ this.id = id;
+ this.desc = desc;
+ }
+
+ public static LiftProtocolStatusType get(Integer id) {
+ if (null == id) {
+ return null;
+ }
+ for (LiftProtocolStatusType type : LiftProtocolStatusType.values()) {
+ if (type.id.equals(id.intValue())) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ public static LiftProtocolStatusType get(LiftProtocolStatusType type) {
+ if (null == type) {
+ return null;
+ }
+ for (LiftProtocolStatusType type2 : LiftProtocolStatusType.values()) {
+ if (type2 == type) {
+ return type2;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/zy/core/model/command/LiftAssignCommand.java b/src/main/java/com/zy/core/model/command/LiftAssignCommand.java
new file mode 100644
index 0000000..f164e46
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/LiftAssignCommand.java
@@ -0,0 +1,40 @@
+package com.zy.core.model.command;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class LiftAssignCommand {
+
+ /**
+ * 鎻愬崌鏈哄彿
+ */
+ private Short liftNo = 0;
+
+ /**
+ * 浠诲姟鍙�
+ */
+ private Short taskNo = 0;
+
+ /**
+ * 鍛戒护list
+ */
+ private List<LiftCommand> commands;
+
+ /**
+ * 浣滀笟绫诲瀷
+ * 1: 涓婂崌涓�灞�
+ * 2锛� 涓嬮檷涓�灞�
+ * 3锛� 鏈夎揣姝h浆
+ * 4锛� 鏈夎揣鍙嶈浆
+ * 5锛� 澶嶄綅
+ */
+ private Short taskMode = 0;
+
+ /**
+ * 鏄惁鑷姩锛宼rue锛氳嚜鍔ㄦā寮忥紝false锛氭墜鍔ㄦā寮�
+ */
+ private Boolean auto = true;
+
+}
diff --git a/src/main/java/com/zy/core/model/command/LiftCommand.java b/src/main/java/com/zy/core/model/command/LiftCommand.java
index bb1d3d0..b1b1755 100644
--- a/src/main/java/com/zy/core/model/command/LiftCommand.java
+++ b/src/main/java/com/zy/core/model/command/LiftCommand.java
@@ -12,22 +12,12 @@
/**
* 鎻愬崌鏈哄彿
*/
- private Integer liftNo = 0;
+ private Short liftNo = 0;
/**
* 浠诲姟鍙�
*/
- private Integer taskNo = 0;
-
- /**
- * 浣滀笟绫诲瀷
- */
- private Short taskMode = 0;
-
- /**
- * 浠诲姟纭 false锛氭湭纭 true锛氬凡纭
- */
- private Boolean complete = Boolean.FALSE;
+ private Short taskNo = 0;
/**
* 寮�濮嬭繍琛�
@@ -65,6 +55,9 @@
private Boolean liftLock;
public Short getLiftLockShortValue() {
+ if (liftLock == null) {
+ return (short) 0;
+ }
return liftLock ? (short) 1 : (short) 0;
}
diff --git a/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java
index 07c1e2c..623a7e3 100644
--- a/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java
+++ b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java
@@ -2,6 +2,9 @@
import lombok.Data;
+import java.util.ArrayList;
+import java.util.List;
+
@Data
public class ShuttleAssignCommand {
@@ -38,4 +41,14 @@
*/
private String locNo;
+ /**
+ * 鍛戒护list
+ */
+ private List<ShuttleCommand> commands = new ArrayList<>();
+
+ /**
+ * 鏄惁鑷姩锛宼rue锛氳嚜鍔ㄦā寮忥紝false锛氭墜鍔ㄦā寮�
+ */
+ private Boolean auto = true;
+
}
diff --git a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java
index cd00e23..ff69c13 100644
--- a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java
@@ -1,5 +1,13 @@
package com.zy.core.model.protocol;
+import com.core.common.SpringUtils;
+import com.zy.asrs.service.BasShuttleService;
+import com.zy.core.News;
+import com.zy.core.enums.LiftProtocolStatusType;
+import com.zy.core.enums.ShuttleErrorCodeType;
+import com.zy.core.enums.ShuttleProtocolStatusType;
+import com.zy.core.enums.ShuttleStatusType;
+import com.zy.core.model.command.LiftAssignCommand;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
@@ -19,6 +27,21 @@
* 浠诲姟鍙�
*/
private Short taskNo = 0;
+
+ /**
+ * 鍥涘悜绌挎杞﹀彿
+ */
+ private Short shuttleNo = 0;
+
+ /**
+ * 褰撳墠鎻愬崌鏈虹姸鎬侊紙鍐呴儴鑷垜缁存姢锛�
+ */
+ private Integer protocolStatus = 1;
+
+ /**
+ * 褰撳墠鎻愬崌鏈虹姸鎬佹灇涓�
+ */
+ private LiftProtocolStatusType protocolStatusType = LiftProtocolStatusType.IDLE;
/**
* 灞�
@@ -161,8 +184,51 @@
*/
private Short liftActualSpeed;
+ /**
+ * 浣滀笟鏍囪
+ */
+ private Boolean pakMk = true;
+
+ /**
+ * 浠诲姟鍛戒护
+ */
+ private LiftAssignCommand assignCommand;
+
public Short getLiftLockShortValue() {
return liftLock ? (short) 1 : (short) 0;
}
+ /**
+ * 璁剧疆鎻愬崌鏈虹姸鎬�
+ */
+ public void setProtocolStatus(Integer status) {
+ this.protocolStatus = status;
+ this.protocolStatusType = LiftProtocolStatusType.get(status);
+ }
+
+ /**
+ * 璁剧疆鎻愬崌鏈虹姸鎬�
+ */
+ public void setProtocolStatus(LiftProtocolStatusType status) {
+ this.protocolStatus = status.id;
+ this.protocolStatusType = status;
+ }
+
+ // 鏄惁澶勪簬绌洪棽寰呭懡鐘舵��
+ public Boolean isIdle() {
+ boolean res = this.taskNo == 0
+ && !this.liftLock
+ && this.ready
+ && !this.running
+ && this.mode
+ && this.pakMk.equals(true)
+ ;
+ return res;
+ }
+
+ public void setPositionArrivalFeedback(Short position) {
+ this.lev = position;//灞傞珮
+ this.positionArrivalFeedback = position;//浣嶇疆鍒拌揪鍙嶉
+ }
+
}
diff --git a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
index 8e407ec..d370e72 100644
--- a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
@@ -1,7 +1,9 @@
package com.zy.core.model.protocol;
import com.core.common.SpringUtils;
+import com.zy.asrs.entity.LocMast;
import com.zy.asrs.service.BasShuttleService;
+import com.zy.asrs.service.LocMastService;
import com.zy.core.News;
import com.zy.core.enums.ShuttleErrorCodeType;
import com.zy.core.enums.ShuttleProtocolStatusType;
@@ -228,4 +230,18 @@
}
}
+ //閫氳繃褰撳墠浜岀淮鐮佽幏鍙栧綋鍓嶅簱浣嶅彿
+ public String getCurrentLocNo() {
+ LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
+ if (locMastService == null) {
+ return null;
+ }
+ //婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+ LocMast currentLocMast = locMastService.queryByQrCode(this.currentCode.toString());
+ if (currentLocMast == null) {
+ return null;
+ }
+ return currentLocMast.getLocNo();
+ }
+
}
diff --git a/src/main/java/com/zy/core/thread/LiftThread.java b/src/main/java/com/zy/core/thread/LiftThread.java
index 0f9a811..34ea0c1 100644
--- a/src/main/java/com/zy/core/thread/LiftThread.java
+++ b/src/main/java/com/zy/core/thread/LiftThread.java
@@ -5,22 +5,40 @@
import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.ModBus.ModbusTcpNet;
import com.alibaba.fastjson.JSON;
+import com.core.common.Cools;
import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
import com.core.exception.CoolException;
+import com.zy.asrs.entity.BasLift;
+import com.zy.asrs.entity.BasLiftOpt;
+import com.zy.asrs.entity.BasShuttle;
+import com.zy.asrs.entity.BasShuttleOpt;
+import com.zy.asrs.service.BasLiftOptService;
+import com.zy.asrs.service.BasLiftService;
+import com.zy.asrs.service.BasShuttleOptService;
+import com.zy.asrs.service.BasShuttleService;
+import com.zy.common.utils.CommonUtils;
+import com.zy.common.utils.RedisUtil;
import com.zy.core.News;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
-import com.zy.core.enums.SlaveType;
+import com.zy.core.enums.*;
import com.zy.core.model.LiftSlave;
import com.zy.core.model.Task;
+import com.zy.core.model.command.LiftAssignCommand;
import com.zy.core.model.command.LiftCommand;
+import com.zy.core.model.command.ShuttleAssignCommand;
+import com.zy.core.model.command.ShuttleCommand;
import com.zy.core.model.protocol.LiftProtocol;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
/**
* 鎻愬崌鏈虹嚎绋�
@@ -32,9 +50,11 @@
private ModbusTcpNet modbusTcpNet;
private LiftSlave slave;
private LiftProtocol liftProtocol;
+ private RedisUtil redisUtil;
- public LiftThread(LiftSlave slave) {
+ public LiftThread(LiftSlave slave,RedisUtil redisUtil) {
this.slave = slave;
+ this.redisUtil = redisUtil;
}
@Override
@@ -56,6 +76,10 @@
case 2:
write((LiftCommand) task.getData());
break;
+ //鍒嗛厤浠诲姟
+ case 3:
+ assignWork((LiftAssignCommand) task.getData());
+ break;
default:
break;
}
@@ -70,7 +94,7 @@
public boolean connect() {
boolean result = false;
//-------------------------鎻愬崌鏈鸿繛鎺ユ柟娉�------------------------//
- modbusTcpNet = new ModbusTcpNet(slave.getIp(), slave.getPort(), (byte) 0x01);
+ modbusTcpNet = new ModbusTcpNet(slave.getIp(), slave.getPort(), (byte) 0x02);
// 褰撲綘闇�瑕佹寚瀹氭牸寮忕殑鏁版嵁瑙f瀽鏃讹紝灏遍渶瑕佽缃笅闈㈢殑杩欎釜淇℃伅
modbusTcpNet.setDataFormat(DataFormat.ABCD);
OperateResult connect = modbusTcpNet.ConnectServer();
@@ -94,7 +118,7 @@
private void readStatus() {
try {
- OperateResultExOne<byte[]> result = modbusTcpNet.Read("29", (short) 17);
+ OperateResultExOne<byte[]> result = modbusTcpNet.Read("29", (short) 50);
if (result.IsSuccess) {
if (null == liftProtocol) {
liftProtocol = new LiftProtocol();
@@ -105,55 +129,106 @@
//鑾峰彇鏁版嵁
byte[] content = result.Content;
//鎻愬崌鏈洪攣瀹�
- liftProtocol.setLiftLock(modbusTcpNet.getByteTransform().TransBool(content,0));
+ liftProtocol.setLiftLock(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content, 0)));
//浣嶇疆鍒拌揪鍙嶉
liftProtocol.setPositionArrivalFeedback(modbusTcpNet.getByteTransform().TransInt16(content,2));
//鍑嗗灏辩华
- liftProtocol.setReady(modbusTcpNet.getByteTransform().TransBool(content,3));
+ liftProtocol.setReady(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content,4)));
//杩愯涓�
- liftProtocol.setRunning(modbusTcpNet.getByteTransform().TransBool(content,4));
+ liftProtocol.setRunning(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content,6)));
//鑱旀満/鍗曟満
- liftProtocol.setMode(modbusTcpNet.getByteTransform().TransBool(content,5));
+ liftProtocol.setMode(CommonUtils.shortToBoolean(modbusTcpNet.getByteTransform().TransInt16(content,8)));
+
+ //浠ヤ笅鍙傛暟骞舵湭杩涜璋冩暣(闇�瑕佸悗缁拡瀵瑰疄鏈鸿繘琛岃幏鍙栧拰璋冭瘯)
//杈撻�佺嚎鍓嶇鍏夌數鏈夎揣
- liftProtocol.setLineFrontHasStock(modbusTcpNet.getByteTransform().TransBool(content,6));
+ liftProtocol.setLineFrontHasStock(modbusTcpNet.getByteTransform().TransBool(content,10));
//杈撻�佺嚎姝h浆鍙嶉
- liftProtocol.setForwardRotationFeedback(modbusTcpNet.getByteTransform().TransBool(content,7));
+ liftProtocol.setForwardRotationFeedback(modbusTcpNet.getByteTransform().TransBool(content,12));
//杈撻�佺嚎鍙嶈浆鍙嶉
- liftProtocol.setReverseFeedback(modbusTcpNet.getByteTransform().TransBool(content,8));
+ liftProtocol.setReverseFeedback(modbusTcpNet.getByteTransform().TransBool(content,14));
//杈撻�佺嚎鐢垫満杩囪浇
- liftProtocol.setMotorOverload(modbusTcpNet.getByteTransform().TransBool(content,9));
+ liftProtocol.setMotorOverload(modbusTcpNet.getByteTransform().TransBool(content,16));
//杈撻�佺嚎鏈鍏夌數鏈夎揣
- liftProtocol.setLineEndHasStock(modbusTcpNet.getByteTransform().TransBool(content,10));
+ liftProtocol.setLineEndHasStock(modbusTcpNet.getByteTransform().TransBool(content,18));
//杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�
- liftProtocol.setInConveyLineCardTrayAlarm(modbusTcpNet.getByteTransform().TransBool(content,11));
+ liftProtocol.setInConveyLineCardTrayAlarm(modbusTcpNet.getByteTransform().TransBool(content,20));
//鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�
- liftProtocol.setOutConveyLineCardTrayAlarm(modbusTcpNet.getByteTransform().TransBool(content,12));
+ liftProtocol.setOutConveyLineCardTrayAlarm(modbusTcpNet.getByteTransform().TransBool(content,22));
//骞冲彴浣嶇疆鍋忓樊鎶ヨ
- liftProtocol.setPlatPositionDeviationAlarm(modbusTcpNet.getByteTransform().TransBool(content,13));
+ liftProtocol.setPlatPositionDeviationAlarm(modbusTcpNet.getByteTransform().TransBool(content,24));
//骞冲彴鎵煩鍋忓樊鎶ヨ
- liftProtocol.setPlatTorqueDeviationAlarm(modbusTcpNet.getByteTransform().TransBool(content,14));
+ liftProtocol.setPlatTorqueDeviationAlarm(modbusTcpNet.getByteTransform().TransBool(content,26));
//骞冲彴鍥涘悜杞︽娴�
- liftProtocol.setPlatShuttleCheck(modbusTcpNet.getByteTransform().TransBool(content,15));
+ liftProtocol.setPlatShuttleCheck(modbusTcpNet.getByteTransform().TransBool(content,28));
//鏈氨缁姸鎬�
- liftProtocol.setNotReady(modbusTcpNet.getByteTransform().TransInt16(content,16));
+ liftProtocol.setNotReady(modbusTcpNet.getByteTransform().TransInt16(content,30));
//浼烘湇1閿欒
- liftProtocol.setServoError1(modbusTcpNet.getByteTransform().TransInt16(content,17));
+ liftProtocol.setServoError1(modbusTcpNet.getByteTransform().TransInt16(content,32));
//浼烘湇2閿欒
- liftProtocol.setServoError2(modbusTcpNet.getByteTransform().TransInt16(content,18));
+ liftProtocol.setServoError2(modbusTcpNet.getByteTransform().TransInt16(content,34));
//浼烘湇3閿欒
- liftProtocol.setServoError3(modbusTcpNet.getByteTransform().TransInt16(content,19));
+ liftProtocol.setServoError3(modbusTcpNet.getByteTransform().TransInt16(content,36));
//浼烘湇4閿欒
- liftProtocol.setServoError4(modbusTcpNet.getByteTransform().TransInt16(content,20));
+ liftProtocol.setServoError4(modbusTcpNet.getByteTransform().TransInt16(content,38));
//鎻愬崌鏈哄疄闄呴�熷害鍙嶉
- liftProtocol.setLiftActualSpeed(modbusTcpNet.getByteTransform().TransInt16(content,21));
+ liftProtocol.setLiftActualSpeed(modbusTcpNet.getByteTransform().TransInt16(content,40));
///璇诲彇鎻愬崌鏈虹姸鎬�-end
- OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
-// log.info(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+ //灏忚溅澶勪簬杩愯鐘舵�侊紝灏嗘爣璁扮疆涓簍rue
+ if (liftProtocol.getRunning()) {
+ liftProtocol.setPakMk(true);
+ }
- // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
- //.....
+ //鎻愬崌鏈哄浜庨攣瀹氥�佹湭杩愯銆佸氨缁�佹爣璁皌rue銆佹湁浠诲姟鍙�
+ if (liftProtocol.getLiftLock()
+ && !liftProtocol.getRunning()
+ && liftProtocol.getReady()
+ && liftProtocol.getPakMk()
+ && liftProtocol.getTaskNo() != 0
+ && liftProtocol.getAssignCommand() != null) {
+ //杩樻湁鏈畬鎴愮殑鍛戒护
+ executeWork(liftProtocol.getAssignCommand());
+ }
+
+ //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴�
+ BasLiftService liftService = SpringUtils.getBean(BasLiftService.class);
+ BasLift basLift = liftService.selectById(liftProtocol.getLiftNo());
+ if (basLift == null) {
+ basLift = new BasLift();
+ //鎻愬崌鏈哄彿
+ basLift.setLiftNo(slave.getId());
+ liftService.insert(basLift);
+ }
+ basLift.setStatus(liftProtocol.getProtocolStatus());
+ basLift.setWrkNo(liftProtocol.getTaskNo().intValue());
+ basLift.setUpdateTime(new Date());
+ basLift.setPakMk(liftProtocol.getPakMk());
+ basLift.setLiftLock(liftProtocol.getLiftLock());
+ basLift.setPositionArrivalFeedback(liftProtocol.getPositionArrivalFeedback().intValue());
+ basLift.setReady(liftProtocol.getReady());
+ basLift.setRunning(liftProtocol.getRunning());
+ basLift.setMode(liftProtocol.getMode());
+ basLift.setLineFrontHasStock(liftProtocol.getLineFrontHasStock());
+ basLift.setForwardRotationFeedback(liftProtocol.getForwardRotationFeedback());
+ basLift.setReverseFeedback(liftProtocol.getReverseFeedback());
+ basLift.setMotorOverload(liftProtocol.getMotorOverload());
+ basLift.setLineEndHasStock(liftProtocol.getLineEndHasStock());
+ basLift.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm());
+ basLift.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm());
+ basLift.setPlatPositionDeviationAlarm(liftProtocol.getPlatPositionDeviationAlarm());
+ basLift.setPlatTorqueDeviationAlarm(liftProtocol.getPlatTorqueDeviationAlarm());
+ basLift.setPlatShuttleCheck(liftProtocol.getPlatShuttleCheck());
+ basLift.setNotReady(liftProtocol.getNotReady().intValue());
+ basLift.setServoError1(liftProtocol.getServoError1().intValue());
+ basLift.setServoError2(liftProtocol.getServoError2().intValue());
+ basLift.setServoError3(liftProtocol.getServoError3().intValue());
+ basLift.setServoError4(liftProtocol.getServoError4().intValue());
+ basLift.setLiftActualSpeed(liftProtocol.getLiftActualSpeed().intValue());
+ if (liftService.updateById(basLift)) {
+ OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+// log.info(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+ }
}else {
OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆憑1}鎻愬崌鏈簆lc鐘舵�佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId()));
@@ -171,23 +246,35 @@
return false;
}
- command.setLiftNo(slave.getId());
+ command.setLiftNo(slave.getId().shortValue());
// 寮�濮嬩换鍔�
short[] array = new short[30];
//寮�濮嬭繍琛�
array[0] = command.getRun();
- //鐩爣浣嶇疆
- array[1] = command.getDistPosition();
- //杩愯閫熷害
- array[2] = command.getSpeed();
- //浜屽眰楂樺害璁惧畾
- array[3] = command.getHeight2();
- //涓夊眰楂樺害璁惧畾
- array[4] = command.getHeight3();
- //鍥涘眰楂樺害璁惧畾
- array[5] = command.getHeight4();
- //鎻愬崌鏈洪攣瀹�
- array[29] = command.getLiftLockShortValue();
+ if (command.getDistPosition() != null) {
+ //鐩爣浣嶇疆
+ array[1] = command.getDistPosition();
+ }
+ if (command.getSpeed() != null) {
+ //杩愯閫熷害
+ array[2] = command.getSpeed();
+ }
+ if (command.getHeight2() != null) {
+ //浜屽眰楂樺害璁惧畾
+ array[3] = command.getHeight2();
+ }
+ if (command.getHeight3() != null) {
+ //涓夊眰楂樺害璁惧畾
+ array[4] = command.getHeight3();
+ }
+ if (command.getHeight4() != null) {
+ //鍥涘眰楂樺害璁惧畾
+ array[5] = command.getHeight4();
+ }
+ if (command.getLiftLockShortValue() != null) {
+ //鎻愬崌鏈洪攣瀹�
+ array[29] = command.getLiftLockShortValue();
+ }
OperateResult result = modbusTcpNet.Write("0", array);;
if (result != null && result.IsSuccess) {
@@ -199,6 +286,138 @@
News.error("鍐欏叆鎻愬崌鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
return false;
}
+ }
+
+ //鍒嗛厤浠诲姟
+ private void assignWork(LiftAssignCommand assignCommand) {
+ //灏嗘map瀛樺叆redis涓�
+ HashMap<String, Object> map = new HashMap<>();
+
+ //鎻愬崌鏈哄彿
+ map.put("lift_no", assignCommand.getLiftNo());
+ //宸ヤ綔鍙�
+ map.put("wrk_no", assignCommand.getTaskNo());
+ //鍛戒护鎵ц姝ュ簭
+ map.put("commandStep", 0);
+ //鍛戒护
+ map.put("assignCommand", assignCommand);
+ //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+ redisUtil.set("lift_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map));
+ liftProtocol.setAssignCommand(assignCommand);
+ liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);
+ //鎵ц涓嬪彂浠诲姟
+ executeWork(assignCommand);
+ }
+
+ //鎵ц浠诲姟
+ private boolean executeWork(LiftAssignCommand assignCommand) {
+ //璇诲彇redis鏁版嵁
+ if (assignCommand == null) {
+ return false;
+ }
+
+ //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂)
+ liftProtocol.setPakMk(false);
+
+ //鎵嬪姩妯″紡鎸囦护
+ if (!assignCommand.getAuto()) {
+ LiftCommand command = new LiftCommand();
+ //鎻愬崌鏈哄綋鍓嶆ゼ灞�
+ Short lev = liftProtocol.getLev();
+ List<LiftCommand> commands = assignCommand.getCommands();
+ if (commands == null) {
+ commands = new ArrayList<LiftCommand>();
+ }
+ liftProtocol.setTaskNo(assignCommand.getTaskNo());
+ switch (assignCommand.getTaskMode()) {
+ case 1://涓婂崌涓�灞�
+ command.setRun((short) 1);//鍗囬檷
+ command.setDistPosition(++lev);
+ break;
+ case 2://涓嬮檷涓�灞�
+ command.setRun((short) 1);//涓嬮檷
+ command.setDistPosition(--lev);
+ break;
+ case 3://鏈夎揣姝h浆
+ command.setRun((short) 6);
+ break;
+ case 4://鏈夎揣鍙嶈浆
+ command.setRun((short) 3);
+ break;
+ case 5://澶嶄綅
+ command.setRun((short) 0);
+ command.setLiftLock(false);
+ liftProtocol.setTaskNo((short) 0);
+ liftProtocol.setShuttleNo((short) 0);
+ liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
+ liftProtocol.setPakMk(true);
+ break;
+ default:
+ }
+ commands.add(command);
+ assignCommand.setCommands(commands);
+ }
+
+ Object o = redisUtil.get("lift_wrk_no_" + assignCommand.getTaskNo());
+ if (o == null) {
+ return false;
+ }
+ HashMap map = JSON.parseObject(o.toString(), HashMap.class);
+ List<LiftCommand> commands = assignCommand.getCommands();
+ //褰撳墠姝ュ簭
+ int commandStep = Integer.parseInt(map.get("commandStep").toString());
+ //鎬绘搴�
+ int size = commands.size();
+
+ //鍙栧嚭鍛戒护
+ LiftCommand command = commands.get(commandStep);
+ //涓嬪彂鍛戒护
+ if (!write(command)) {
+ News.error("鎻愬崌鏈哄懡浠や笅鍙戝け璐ワ紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command));
+ return false;
+ }else {
+ News.info("鎻愬崌鏈哄懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command));
+
+ //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚
+ if (commandStep < size - 1) {
+ //鏇存柊redis鏁版嵁
+ //姝ュ簭澧炲姞
+ commandStep++;
+ map.put("commandStep", commandStep);
+ //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+ redisUtil.set("lift_wrk_no_" + map.get("wrk_no").toString(), JSON.toJSONString(map));
+ }else {
+ //宸叉墽琛屽畬鎴�
+ //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘�
+ BasLiftOptService liftOptService = SpringUtils.getBean(BasLiftOptService.class);
+ if (liftOptService != null) {
+ BasLiftOpt opt = new BasLiftOpt(
+ assignCommand.getTaskNo().intValue(),
+ assignCommand.getLiftNo().intValue(),
+ new Date(),
+ null,
+ null,
+ null,
+ JSON.toJSONString(assignCommand)
+ );
+ liftOptService.insert(opt);
+ }
+ //鍒犻櫎redis
+ redisUtil.del("lift_wrk_no_" + map.get("wrk_no").toString());
+
+ if (assignCommand.getAuto()) {
+ //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
+ liftProtocol.setProtocolStatus(LiftProtocolStatusType.WAITING);
+ News.info("鎻愬崌鏈轰换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛屾彁鍗囨満鍙�={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command));
+ }else {
+ //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬�
+ News.info("鎻愬崌鏈烘墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command));
+ }
+
+ }
+ }
+
+ return true;
}
/**
@@ -218,19 +437,19 @@
slave.setId(1);
slave.setIp("192.168.4.24");
slave.setPort(502);
- LiftThread thread = new LiftThread(slave);
- thread.connect();
- thread.readStatus();
-
- LiftCommand command = new LiftCommand();
- command.setRun((short) 0);
- command.setDistPosition((short) 12);
- command.setSpeed((short) 300);
- command.setHeight2((short) 100);
- command.setHeight3((short) 200);
- command.setHeight4((short) 303);
- command.setLiftLock(true);
- thread.write(command);
+// LiftThread thread = new LiftThread(slave,);
+// thread.connect();
+// thread.readStatus();
+//
+// LiftCommand command = new LiftCommand();
+// command.setRun((short) 1);
+// command.setDistPosition((short) 12);
+// command.setSpeed((short) 300);
+// command.setHeight2((short) 100);
+// command.setHeight3((short) 200);
+// command.setHeight4((short) 303);
+// command.setLiftLock(true);
+// thread.write(command);
}
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index db733ce..73613c9 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -10,7 +10,6 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasShuttle;
import com.zy.asrs.entity.BasShuttleOpt;
-import com.zy.asrs.mapper.BasShuttleMapper;
import com.zy.asrs.service.BasShuttleOptService;
import com.zy.asrs.service.BasShuttleService;
import com.zy.common.model.NavigateNode;
@@ -168,8 +167,11 @@
shuttleProtocol.setPakMk(true);
}
- //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟涓旀爣璁颁负true锛岄渶瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠�
- if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE && shuttleProtocol.getTaskNo() != 0 && shuttleProtocol.getPakMk()) {
+ //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠�
+ if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE
+ && shuttleProtocol.getTaskNo() != 0
+ && shuttleProtocol.getPakMk()
+ && shuttleProtocol.getAssignCommand() != null) {
//鎵ц涓嬩竴姝ユ寚浠�
executeWork(shuttleProtocol.getAssignCommand());
}
@@ -347,19 +349,23 @@
//灏嗘map瀛樺叆redis涓�
HashMap<String, Object> map = new HashMap<>();
- //璁$畻璺緞
- List<NavigateNode> calc = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), assignCommand.getTaskMode().intValue());
- if (calc != null) {
- //鑾峰彇鍒嗘璺緞
- ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
- //璺緞鏁版嵁
- map.put("path", data);
- //璺緞娆℃暟
- map.put("pathSize", data.size());
- }else {
- if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue()) {
- //灞炰簬鍏ュ簱鍑哄簱锛屽繀椤昏璁$畻璺緞锛屽垯鎶涘嚭寮傚父
- throw new Exception("鏈兘鎵惧埌杩愯璺緞");
+ if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue()
+ || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue()) {
+ //鍏ュ簱鎴栧嚭搴撴ā寮忥紝璁$畻璺緞
+ //璁$畻璺緞
+ List<NavigateNode> calc = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), assignCommand.getTaskMode().intValue());
+ if (calc != null) {
+ //鑾峰彇鍒嗘璺緞
+ ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
+ //璺緞鏁版嵁
+ map.put("path", data);
+ //璺緞娆℃暟
+ map.put("pathSize", data.size());
+ }else {
+ if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue()) {
+ //灞炰簬鍏ュ簱鍑哄簱锛屽繀椤昏璁$畻璺緞锛屽垯鎶涘嚭寮傚父
+ throw new Exception("鏈兘鎵惧埌杩愯璺緞");
+ }
}
}
@@ -373,6 +379,7 @@
map.put("assignCommand", assignCommand);
shuttleProtocol.setTaskNo(assignCommand.getTaskNo());
shuttleProtocol.setAssignCommand(assignCommand);
+ shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
//浠诲姟鏁版嵁淇濆瓨鍒皉edis
redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map));
//鎵ц涓嬪彂浠诲姟
@@ -385,7 +392,14 @@
if (assignCommand == null) {
return false;
}
+
+ //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂)
+ shuttleProtocol.setPakMk(false);
+
Object o = redisUtil.get("wrk_no_" + assignCommand.getTaskNo());
+ if (o == null) {
+ return false;
+ }
HashMap map = JSON.parseObject(o.toString(), HashMap.class);
//褰撳墠姝ュ簭
int commandStep = Integer.parseInt(map.get("commandStep").toString());
@@ -453,6 +467,8 @@
shuttleProtocol.setTaskNo((short) 0);
//鏍囪澶嶄綅
shuttleProtocol.setPakMk(true);
+ //浠诲姟鎸囦护娓呴浂
+ shuttleProtocol.setAssignCommand(null);
break;
default:
}
@@ -464,9 +480,6 @@
return false;
} else {
News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
-
- //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂)
- shuttleProtocol.setPakMk(false);
//鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚
if (commandStep < size - 1) {
@@ -491,17 +504,22 @@
null,
null,
null,
- JSON.toJSONString(command)
+ JSON.toJSONString(assignCommand)
);
shuttleOptService.insert(opt);
}
//鍒犻櫎redis
redisUtil.del("wrk_no_" + map.get("wrk_no").toString());
- //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
- shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+ if (!assignCommand.getAuto()) {
+ //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅
+ News.info("鍥涘悜绌挎杞︽墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
+ }else {
+ //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
+ shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING);
+ News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
+ }
- News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
}
}
diff --git a/src/main/resources/mapper/BasLiftMapper.xml b/src/main/resources/mapper/BasLiftMapper.xml
new file mode 100644
index 0000000..8bac418
--- /dev/null
+++ b/src/main/resources/mapper/BasLiftMapper.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BasLiftMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasLift">
+ <result column="lift_no" property="liftNo" />
+ <result column="lift_status" property="liftStatus" />
+ <result column="wrk_no" property="wrkNo" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_by" property="updateBy" />
+ <result column="memo" property="memo" />
+ <result column="pak_mk" property="pakMk" />
+ <result column="lift_lock" property="liftLock" />
+ <result column="position_arrival_feedback" property="positionArrivalFeedback" />
+ <result column="ready" property="ready" />
+ <result column="running" property="running" />
+ <result column="mode" property="mode" />
+ <result column="line_front_has_stock" property="lineFrontHasStock" />
+ <result column="forward_rotation_feedback" property="forwardRotationFeedback" />
+ <result column="reverse_feedback" property="reverseFeedback" />
+ <result column="motor_overload" property="motorOverload" />
+ <result column="line_end_has_stock" property="lineEndHasStock" />
+ <result column="in_convey_line_card_tray_alarm" property="inConveyLineCardTrayAlarm" />
+ <result column="out_convey_line_card_tray_alarm" property="outConveyLineCardTrayAlarm" />
+ <result column="plat_position_deviation_alarm" property="platPositionDeviationAlarm" />
+ <result column="plat_torque_deviation_alarm" property="platTorqueDeviationAlarm" />
+ <result column="plat_shuttle_check" property="platShuttleCheck" />
+ <result column="not_ready" property="notReady" />
+ <result column="servo_error1" property="servoError1" />
+ <result column="servo_error2" property="servoError2" />
+ <result column="servo_error3" property="servoError3" />
+ <result column="servo_error4" property="servoError4" />
+ <result column="lift_actual_speed" property="liftActualSpeed" />
+
+ </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/BasLiftOptMapper.xml b/src/main/resources/mapper/BasLiftOptMapper.xml
new file mode 100644
index 0000000..de36cbd
--- /dev/null
+++ b/src/main/resources/mapper/BasLiftOptMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zy.asrs.mapper.BasLiftOptMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasLiftOpt">
+ <id column="id" property="id" />
+ <result column="wrk_no" property="wrkNo" />
+ <result column="lift_no" property="liftNo" />
+ <result column="send_time" property="sendTime" />
+ <result column="mode" property="mode" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_by" property="updateBy" />
+ <result column="memo" property="memo" />
+ <result column="command" property="command" />
+
+ </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml
index f525429..90cfbca 100644
--- a/src/main/resources/mapper/WrkMastMapper.xml
+++ b/src/main/resources/mapper/WrkMastMapper.xml
@@ -247,6 +247,21 @@
</select>
<select id="selectByWorkNo59" resultMap="BaseResultMap">
- select top 1 * from dbo.asr_wrk_mast where wrk_no=#{workNo} and wrk_sts in (5,9)
+ select top 1 * from dbo.asr_wrk_mast
+ where wrk_no=#{workNo}
+ and wrk_sts in (5,9)
+ </select>
+
+ <select id="selectLiftStep6" resultMap="BaseResultMap">
+ select top 1 * from dbo.asr_wrk_mast
+ where wrk_sts in (6)
+ and shuttle_no is not null
+ order by io_pri desc,wrk_sts desc
+ </select>
+
+ <select id="selectByWorkNo7" resultMap="BaseResultMap">
+ select top 1 * from dbo.asr_wrk_mast
+ where wrk_no=#{workNo}
+ and wrk_sts in (7)
</select>
</mapper>
diff --git a/src/main/webapp/static/css/lift.css b/src/main/webapp/static/css/lift.css
new file mode 100644
index 0000000..c2160f2
--- /dev/null
+++ b/src/main/webapp/static/css/lift.css
@@ -0,0 +1,334 @@
+body {
+ background-color: #6CA7A8;
+}
+.button-window {
+ float: left;
+ width: 100%;
+ height: 100%;
+ padding: 10px;
+ background-color: #6CA7A8;
+ border-radius: 5px;
+ box-shadow: 0 0 3px rgba(0 0 0 .3);
+}
+/* -------------------- 绗竴妯″潡 -------------------- */
+.log-board {
+ background-color: #fff;
+ border-radius: 5px;
+ box-shadow: 0 0 3px rgba(0,0,0,.3);
+ height: 25%;
+}
+/* 宸� */
+.command-log {
+ float: left;
+ height: 100%;
+ width: 20%;
+ text-align: center;
+}
+.command-log h2 {
+ padding: 10px;
+}
+
+.lift-command-item {
+ padding: 4px 0;
+ margin-top: 5px;
+}
+.lift-command-item label {
+ font-size: 20px;
+ font-weight: bold;
+ vertical-align: middle;
+}
+.demoBtn {
+ vertical-align: middle;
+ /*width: 30%;*/
+ height: 30px;
+ left: 0;
+ top: 0;
+ padding: 5px 15px;
+ text-shadow: inherit;
+ font-size: 15px;
+ margin-left: 5px;
+ margin-right: 5px;
+ display: inline-block;
+ background-color: #FF5722;
+ border: none;
+ color: #FFF;
+ box-shadow: 1px 1px 5px #B6B6B6;
+ border-radius: 3px;
+ cursor: pointer;
+}
+.demoBtn:hover {
+ opacity: 0.8
+}
+.demoBtn:focus {
+ outline: 0;
+}
+
+/* 鍙� */
+.lift-state {
+ float: left;
+ height: 100%;
+ width: 80%;
+ overflow: auto;
+}
+/* 绌挎杞︾姸鎬佽〃 */
+#lift-state-table {
+ font-size: 12px;
+ border-collapse: collapse;
+ margin: 0 auto;
+ text-align: center;
+}
+#lift-state-table td, #lift-state-table th {
+ border: 1px solid #cad9ea;
+ color: #666;
+ height: 25px;
+}
+#lift-state-table thead th {
+ background-color: #CCE8EB;
+ width: 300px;
+}
+#lift-state-table tr:nth-child(odd) {
+ background: #fff;
+}
+#lift-state-table tr:nth-child(even) {
+ background: #F5FAFA;
+}
+
+/* -------------------- 绗簩妯″潡 -------------------- */
+.lift-msg {
+ /*overflow: auto;*/
+ margin-top: 10px;
+ height: 23%;
+ background-color: #fff;
+ border-radius: 5px;
+ box-shadow: 0 0 3px rgba(0,0,0,.3);
+}
+/* 鍫嗗灈鏈虹姸鎬佷俊鎭〃 */
+#lift-msg-table {
+ font-size: 12px;
+ border-collapse: collapse;
+ margin: 0 auto;
+ text-align: center;
+}
+#lift-msg-table td, #lift-msg-table th {
+ border: 1px solid #f1f1f1;
+ color: #666;
+ height: 30px;
+}
+#lift-msg-table thead th {
+ background-color: #fff;
+ width: 400px;
+}
+#lift-msg-table tr:nth-child(odd) {
+ background: #fff;
+}
+#lift-msg-table tr:nth-child(even) {
+ background: #fff;
+}
+
+/* -------------------- 绗笁妯″潡 -------------------- */
+
+.lift-operation {
+ position: relative;
+ margin-top: 10px;
+ height: 25%;
+ background-color: #fff;
+ border-radius: 5px;
+ box-shadow: 0 0 3px rgba(0,0,0,.3);
+}
+
+/* 浠诲姟璁惧閫夋嫨妗� */
+.task-select {
+ width: 13%;
+ height: 100%;
+ overflow: hidden;
+ display: inline-block;
+ padding: 20px 0 10px 20px;
+ /*clear: right;*/
+}
+.operator-item {
+ display: inline-block;
+ height: 100%;
+ text-align: center;
+ position: relative;
+ vertical-align: middle;
+ padding: 0 20px;
+}
+.operator-item .select-title {
+ display: inline-block;
+ position: absolute;
+ top: -11px;
+ left: 50%;
+ transform: translate(-50%, 0);
+ background-color: #fff;
+ color: #2e95d3;
+ font-size: 12px;
+ border: 1px solid #8d8d8d;
+ border-radius: 5px;
+ padding: 5px;
+ z-index: 999;
+}
+.operator-item .select-container {
+ padding: 30px 0;
+ height: 100%;
+ border: 1px solid #8d8d8d;
+ border-radius: 5px;
+}
+#lift-select .select-container label {
+ display: block;
+ padding: 5px 40px;
+ vertical-align: middle; margin-top:-2px; margin-bottom:1px;
+
+}
+.select-container input {
+ display: inline-block;
+ font-size: 12px;
+ vertical-align: middle; margin-top:-2px; margin-bottom:1px;
+}
+.select-container-item {
+ display: inline-block;
+ padding: 0 10px;
+}
+.select-container-item input {
+ height: 20px;
+ border: 1px solid #8D8D8D;
+ border-radius: 3px;
+ width: 80px;
+ outline: none;
+}
+
+/* 浠诲姟浣滀笟閫夋嫨妗� */
+.task-operator {
+ width: 86%;
+ height: 100%;
+ overflow: hidden;
+ padding: 5px 0 10px 20px;
+ display: inline-block;
+ margin-right: 10px;
+}
+.task-operator fieldset {
+ padding: 15px 20px 5px 50px;
+ /*border-width: 1px;*/
+ /*border-style: solid;*/
+ height: 100%;
+ border: 1px solid #8d8d8d;
+ border-radius: 5px;
+}
+.task-operator legend {
+ background-color: #fff;
+ color: #2e95d3;
+ font-size: 12px;
+ border: 1px solid #8d8d8d;
+ border-radius: 5px;
+ padding: 5px;
+ z-index: 999;
+}
+button.item {
+ margin-top: 5px;
+ border: 1px solid #333;
+ font-size: 13px;
+ padding: 1px 1px 1px 1px;
+ width: 100px;
+ height: 40px;
+ outline: none;
+ cursor: pointer;
+ color: #333;
+ background-color: transparent;
+ margin-right: 5px;
+ border-radius: 5px;
+}
+button.item:hover {
+ background-color: #333;
+ color: #fff;
+}
+
+/* 鎵嬪姩鎿嶄綔閬僵 */
+.lift-operation-shade {
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ z-index: 1000;
+ text-align: center;
+ padding: 80px 0;
+}
+.lift-operation-shade-span {
+ font-size: xx-large;
+ font-weight: bold;
+ color: red;
+}
+
+/* -------------------- 绗洓妯″潡 -------------------- */
+.lift-output-board {
+ margin-top: 10px;
+ height: 20%;
+ background-color: #fff;
+ border-radius: 5px;
+ box-shadow: 0 0 3px rgba(0,0,0,.3);
+}
+#lift-output {
+ border-left: none;
+ border-right: none;
+ border-top: 1px solid #9d9d9d;
+ border-bottom: 1px solid #333;
+ width: 100%;
+ height: 100%;
+ overflow: auto;
+ resize:none;
+ color: #666;
+}
+
+
+/* 璇︽儏寮瑰嚭灞� */
+#lift-detl {
+ padding: 30px 10px 0 25px;
+ overflow: hidden;
+}
+#lift-detl form {
+ overflow: hidden;
+}
+.form-item {
+ margin-bottom: 10px;
+}
+.form-label {
+ display: inline-block;
+ width: 130px;
+ text-align: right;
+}
+.form-input {
+ display: inline-block;
+ padding-left: 15px;
+}
+.form-input input {
+ outline-style: none ;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ padding: 5px 8px;
+ width: 150px;
+ height: 30px;
+ font-size: 14px;
+ font-weight: bolder;
+}
+.form-input input:focus{
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)
+}
+.form-button-container {
+ text-align: center;
+}
+.form-button {
+ margin: 10px 10px;
+ width: 50px;
+ height: 30px;
+ color:white;
+ background-color:cornflowerblue;
+ border-radius: 3px;
+ border-width: 0;
+ outline: none;
+ font-size: 15px;
+ text-align: center;
+ cursor: pointer;
+}
+.form-button:hover {
+ opacity: 0.7;
+}
diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html
index bbbf794..c1cbf39 100644
--- a/src/main/webapp/views/index.html
+++ b/src/main/webapp/views/index.html
@@ -20,7 +20,7 @@
<ul class="cl-effect-4">
<li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">涓绘帶鍥�</a></li>
<li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">杈撻�佽澶�</a></li>
-<!-- <li><a id="crn" onclick="nav(this.id)" class="nav-unselect" href="#">鍫嗗灈鏈�</a></li>-->
+ <li><a id="lift" onclick="nav(this.id)" class="nav-unselect" href="#">鎻愬崌鏈�</a></li>
<!-- <li><a id="ste" onclick="nav(this.id)" class="nav-unselect" href="#">绌挎杞�</a></li>-->
<li><a id="shuttle" onclick="nav(this.id)" class="nav-unselect" href="#">鍥涘悜绌挎杞�</a></li>
</ul>
diff --git a/src/main/webapp/views/lift.html b/src/main/webapp/views/lift.html
new file mode 100644
index 0000000..43e400e
--- /dev/null
+++ b/src/main/webapp/views/lift.html
@@ -0,0 +1,484 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8">
+ <title>鎻愬崌鏈虹洃鎺х鐞�</title>
+ <link rel="stylesheet" type="text/css" href="../static/css/normalize.css">
+ <link rel="stylesheet" type="text/css" href="../static/css/common.css">
+ <link rel="stylesheet" type="text/css" href="../static/layui/css/layui.css">
+ <link rel="stylesheet" href="../static/css/lift.css">
+ <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
+ <script type="text/javascript" src="../static/js/layer/layer.js"></script>
+ <script type="text/javascript" src="../static/layui/layui.js"></script>
+ <script type="text/javascript" src="../static/js/common.js"></script>
+</head>
+<body>
+<div style="padding: 10px;height: 100%;float: left;width: 6%">
+ <div class="button-window"></div>
+</div>
+<div style="height: 100%;padding-left: 6%">
+ <div style="padding: 10px;height: 100%">
+ <!-- 鏃ュ織鐩戞帶鏉� -->
+ <div class="log-board">
+ <div class="command-log" id="commandLogId">
+ </div>
+ <div class="lift-state">
+ <table id="lift-state-table">
+ <thead>
+ <tr>
+ <th>鎻愬崌鏈�</th>
+ <th>宸ヤ綔鍙�</th>
+ <th>浠诲姟鐘舵��</th>
+ <th>鎻愬崌鏈洪攣瀹�</th>
+ <th>浣嶇疆鍒拌揪鍙嶉</th>
+ <th>鍑嗗灏辩华</th>
+ <th>杩愯涓�</th>
+ <th>鑱旀満/鍗曟満</th>
+ <th>骞冲彴浣嶇疆鍋忓樊鎶ヨ</th>
+ <th>骞冲彴鎵煩鍋忓樊鎶ヨ</th>
+ <th>骞冲彴鍥涘悜杞︽娴�</th>
+ <th>鏈氨缁姸鎬�</th>
+ <th>浼烘湇1閿欒</th>
+ <th>浼烘湇2閿欒</th>
+ <th>浼烘湇3閿欒</th>
+ <th>浼烘湇4閿欒</th>
+ <th>鎻愬崌鏈哄疄闄呴�熷害鍙嶉</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <!-- 鎻愬崌鏈虹姸鎬� -->
+ <div class="lift-msg">
+ <table id="lift-msg-table">
+ <thead>
+ <tr>
+ <th>鎻愬崌鏈�</th>
+ <th>宸ヤ綔鍙�</th>
+ <th>杈撻�佺嚎鍓嶇鍏夌數鏈夎揣</th>
+ <th>杈撻�佺嚎姝h浆鍙嶉</th>
+ <th>杈撻�佺嚎鍙嶈浆鍙嶉</th>
+ <th>杈撻�佺嚎鐢垫満杩囪浇</th>
+ <th>杈撻�佺嚎鏈鍏夌數鏈夎揣</th>
+ <th>杩涜緭閫佺嚎鍗℃墭鐩樻姤璀�</th>
+ <th>鍑鸿緭閫佺嚎鍗℃墭鐩樻姤璀�</th>
+ <th>浣滀笟鏍囪</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
+ </div>
+ <!-- 鎵嬪姩鎿嶄綔 -->
+ <div class="lift-operation">
+ <!-- 閬僵灞� -->
+ <div class="lift-operation-shade">
+ <span class="lift-operation-shade-span">
+ WCS 绯荤粺杩愯涓紝璇峰仠姝㈠悗鎿嶄綔
+ </span>
+ </div>
+ <!-- 璁惧浠诲姟閫夋嫨 -->
+ <div class="task-select">
+ <!-- 閫夋嫨 -->
+ <div id="lift-select" class="operator-item">
+ <span class="select-title">鎻愬崌鏈哄彿</span>
+ <div class="select-container" id="liftRadioBoxId">
+ <!-- <label><input type="radio" name="liftSelect" value="1" checked> 1鍙锋彁鍗囨満</label>-->
+ </div>
+ </div>
+ </div>
+
+ <!-- 璁惧浠诲姟鎿嶄綔 -->
+ <div class="task-operator">
+ <fieldset>
+ <legend>鎵嬪姩鎿嶄綔</legend>
+ <div class="button-group">
+ <button class="item" onclick="liftOperator(1)">涓婂崌涓�灞�</button>
+ <button class="item" onclick="liftOperator(2)">涓嬮檷涓�灞�</button>
+ <button class="item" onclick="liftOperator(3)">鏈夎揣姝h浆</button>
+ <button class="item" onclick="liftOperator(4)">鏈夎揣鍙嶈浆</button>
+ <button class="item" onclick="liftOperator(5)">澶嶄綅</button>
+ </div>
+ </fieldset>
+ </div>
+
+ </div>
+ <!-- 鎻愬崌鏈烘棩蹇楄緭鍑� -->
+ <div class="lift-output-board">
+ <textarea id="lift-output"></textarea>
+ </div>
+ </div>
+</div>
+</body>
+</html>
+<script>
+ // 绌虹櫧琛屾暟
+ var liftStateTableBlankRows = 0;
+ var liftMsgTableBlankRows = 0;
+ // 瀹為檯琛屾暟
+ var liftStateTableFullRows = 0;
+ var liftMsgTableFullRows = 0;
+ // 鍒濆鍖�
+ var liftOutputDom = document.getElementById("lift-output");
+ $(document).ready(function() {
+ initliftStateTable();
+ getliftStateInfo();
+ initliftMsgTable();
+ getliftMsgInfo();
+ operatorBlockShow();
+ setliftRadio();
+ });
+
+ setInterval(function () {
+ getliftStateInfo()
+ getliftMsgInfo();
+ },1000)
+ setInterval(function () {
+ getliftOutput();
+ operatorBlockShow();
+ },500);
+
+ // 鍒ゆ柇鎵嬪姩鎿嶄綔妯″潡鏄惁鍙敤
+ function operatorBlockShow() {
+ if (parent.systemRunning) {
+ $('.lift-operation').css("opacity", "0.5");
+ $('.lift-operation-shade').show();
+ $('.lift-operation-shade-span').show();
+ } else {
+ $('.lift-operation').css("opacity", "1");
+ $('.lift-operation-shade').hide();
+ $('.lift-operation-shade-span').hide();
+ }
+ }
+
+ var layerIdx;
+ $(document).on('click ','.pos-btn', function () {
+ let liftNo = Number($(this).parent().attr("data-liftNo"));
+ layerIdx = layer.open({
+ type: 1,
+ title: false,
+ shadeClose: true,
+ offset: [$(this).offset().top + 30 + 'px', $(this).offset().left + 'px'],
+ anim: 5,
+ shade: [0],
+ area: ['310px', '370px'],
+ closeBtn: 0,
+ content: $("#lift-detl"),
+ success: function(layero, index){
+ http.get(baseUrl+ "/lift/detl/"+liftNo, null, function (res) {
+ $('#liftNo').val(liftNo);
+ $('#workNo').val(res.data.workNo);
+ $('#row').val(res.data.row);
+ $('#bay').val(res.data.bay);
+ $('#lev').val(res.data.lev);
+ $('#crnNo').val(res.data.crnNo);
+ $('#pakMk').val(res.data.pakMk);
+ })
+ },
+ end: function () {
+ $('#liftNo').val("");
+ $('#workNo').val("");
+ $('#row').val("");
+ $('#bay').val("");
+ $('#lev').val("");
+ $('#crnNo').val("");
+ $('#pakMk').val("");
+ }
+ })
+ })
+
+ var layerIdx0;
+ $(document).on('click ','.mode-btn', function () {
+ let liftNo = Number($(this).parent().attr("data-liftNo"));
+ layerIdx0 = layer.open({
+ type: 1,
+ title: false,
+ shadeClose: true,
+ offset: [$(this).offset().top + 30 + 'px', $(this).offset().left + 'px'],
+ anim: 5,
+ shade: [0],
+ area: ['70%', '85%'],
+ closeBtn: 0,
+ content: $("#lift-detl2"),
+ success: function(layero, index){
+ console.log(liftNo)
+ http.get(baseUrl+ "/lift/sensor/detl/"+liftNo, null, function (res) {
+ $('#liftNo1').val(res.data.liftNo);
+ getColor(res.data.pakInTask,'#pakInTask');
+ getColor(res.data.pakOutTask,'#pakOutTask');
+ getColor(res.data.pakMoveTask,'#pakMoveTask');
+ getColor(res.data.goHpTask,'#goHpTask');
+ getColor(res.data.goOHpTask,'#goOHpTask');
+ getColor(res.data.goHpAvoid,'#goHpAvoid');
+ getColor(res.data.goOHpAvoid,'#goOHpAvoid');
+ getColor(res.data.pakInEmpty,'#pakInEmpty');
+ getColor(res.data.pakInFinish,'#pakInFinish');
+ getColor(res.data.pakOutEmpty,'#pakOutEmpty');
+ getColor(res.data.pakOutFinish,'#pakOutFinish');
+ getColor(res.data.goHpAvoidFinish,'#goHpAvoidFinish');
+ getColor(res.data.goOHpAvoidFinish,'#goOHpAvoidFinish');
+ getColor(res.data.goHpAvoidErr,'#goHpAvoidErr');
+ getColor(res.data.goOHpAvoidErr,'#goOHpAvoidErr');
+ })
+ },
+ end: function () {
+ $('#liftNo').val("");
+ }
+ })
+ })
+
+ function getColor(res,e){
+ $(e).val(res?"鉁�":"鈥�");
+ if (res){
+ $(e).attr("style", "color: #FD482C;");
+ }else {
+ $(e).attr("style", "color: #00FF00;");
+ }
+ }
+
+ $(document).on('click ','#save', function () {
+ http.post(baseUrl+ "/lift/detl/update", {
+ liftNo: $('#liftNo').val(),
+ workNo: $('#workNo').val(),
+ row: $('#row').val(),
+ bay: $('#bay').val(),
+ lev: $('#lev').val(),
+ crnNo: $('#crnNo').val(),
+ pakMk: $('#pakMk').val(),
+ }, function (res) {
+ layer.msg("淇敼鎴愬姛", {icon: 1,});
+ layer.close(layerIdx);
+ })
+ })
+
+ $(document).on('click ','#cancel', function () {
+ layer.close(layerIdx);
+ })
+
+ function setliftRadio() {
+ $.ajax({
+ url: baseUrl+ "/lift/table/lift/state",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ let table = res.data;
+ for (let i=1;i<=table.length;i++){
+ //娓叉煋鎻愬崌鏈洪�夐」html
+ let liftRadioBox = '<label><input type="radio" name="liftSelect" ';
+ if (i === 1) {
+ liftRadioBox += 'checked '
+ }
+ liftRadioBox += 'value="' + table[i - 1].liftNo + '"> ' + table[i - 1].liftNo + '鍙锋彁鍗囨満</label>'
+ $("#liftRadioBoxId").append(liftRadioBox)
+
+
+ //娓叉煋鎻愬崌鏈烘暟鎹淮鎶ゅ拰璁惧淇℃伅html
+ let liftCommandLogBox = '<div class="lift-command-item" data-liftNo="' + table[i - 1].liftNo + '">\n' +
+ '<label>' + table[i - 1].liftNo + '#</label>\n' +
+ '</div>'
+ $("#commandLogId").append(liftCommandLogBox);
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 鎻愬崌鏈轰俊鎭〃鑾峰彇 ---- 琛ㄤ竴
+ function getliftStateInfo() {
+ let tableEl = $('#lift-state-table');
+ $.ajax({
+ url: baseUrl+ "/lift/table/lift/state",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ let table = res.data;
+ if (table.length > liftStateTableBlankRows && table.length !== liftStateTableFullRows) {
+ initliftStateTable(table.length-liftStateTableBlankRows);
+ liftStateTableFullRows = table.length;
+ }
+ for (let i=1;i<=table.length;i++){
+ // $("#mode-"+table[i-1].liftNo).html(table[i-1].statusVal===0?'鑱旀満':'鑴辨満');
+ let tr = tableEl.find("tr").eq(i);
+ setVal(tr.children("td").eq(0), table[i-1].liftNo);
+ setVal(tr.children("td").eq(1), table[i-1].taskNo);
+ setVal(tr.children("td").eq(2), table[i-1].protocolStatus);
+ setVal(tr.children("td").eq(3), table[i-1].liftLock$);
+ setVal(tr.children("td").eq(4), table[i-1].positionArrivalFeedback$);
+ setVal(tr.children("td").eq(5), table[i-1].ready$);
+ setVal(tr.children("td").eq(6), table[i-1].running$);
+ setVal(tr.children("td").eq(7), table[i-1].mode$);
+ setVal(tr.children("td").eq(8), table[i-1].platPositionDeviationAlarm$);
+ setVal(tr.children("td").eq(9), table[i-1].platTorqueDeviationAlarm$);
+ setVal(tr.children("td").eq(10), table[i-1].platShuttleCheck$);
+ setVal(tr.children("td").eq(11), table[i-1].notReady$);
+ setVal(tr.children("td").eq(12), table[i-1].servoError1);
+ setVal(tr.children("td").eq(13), table[i-1].servoError2);
+ setVal(tr.children("td").eq(14), table[i-1].servoError3);
+ setVal(tr.children("td").eq(14), table[i-1].servoError4);
+ setVal(tr.children("td").eq(14), table[i-1].liftActualSpeed);
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 鎻愬崌鏈烘暟鎹〃鑾峰彇 ---- 琛ㄤ簩
+ function getliftMsgInfo() {
+ let tableEl = $('#lift-msg-table');
+ $.ajax({
+ url: baseUrl+ "/lift/table/lift/msg",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ var table = res.data;
+ if (table.length > liftMsgTableBlankRows && table.length !== liftMsgTableFullRows) {
+ initliftMsgTable(table.length-liftMsgTableBlankRows);
+ liftMsgTableFullRows = table.length;
+ }
+ for (var i=1;i<=table.length;i++){
+ var tr = tableEl.find("tr").eq(i);
+ setVal(tr.children("td").eq(0), table[i-1].liftNo);
+ setVal(tr.children("td").eq(1), table[i-1].workNo);
+ setVal(tr.children("td").eq(2), table[i-1].lineFrontHasStock$);
+ setVal(tr.children("td").eq(3), table[i-1].forwardRotationFeedback$);
+ setVal(tr.children("td").eq(4), table[i-1].reverseFeedback$);
+ setVal(tr.children("td").eq(5), table[i-1].motorOverload$);
+ setVal(tr.children("td").eq(6), table[i-1].lineEndHasStock$);
+ setVal(tr.children("td").eq(7), table[i-1].inConveyLineCardTrayAlarm$);
+ setVal(tr.children("td").eq(8), table[i-1].outConveyLineCardTrayAlarm$);
+ setVal(tr.children("td").eq(9), table[i-1].pakMk);
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 鎻愬崌鏈烘棩蹇楄緭鍑� -----------------------------------------------------------------------
+ function getliftOutput() {
+ $.ajax({
+ url: baseUrl + "/lift/output/lift",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200) {
+ liftOutput(res.data);
+ } else if (res.code === 403) {
+ window.location.href = baseUrl + "/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ })
+ }
+
+ // 浠诲姟鎸囦护涓嬪彂
+ function liftOperator(liftTaskMode) {
+ http.post(baseUrl+"/lift/operator/lift", {
+ liftNo: $('input[name="liftSelect"]:checked').val(),
+ liftTaskMode: liftTaskMode,
+ }, function (res) {
+ layer.msg(res.msg, {icon: 1});
+ });
+ }
+
+
+ // ------------------------------------------------------------------------------------------------
+
+ // 鎻愬崌鏈轰俊鎭〃鑾峰彇 ----- 琛ㄤ竴
+ function initliftStateTable(row) {
+ let line;
+ if (row === undefined){
+ let one = $('#lift-state-table thead').height();
+ let total = $('.lift-state').height();
+ let count = total / one;
+ count = parseInt(count) - 1;
+ liftStateTableBlankRows = count;
+ line = count;
+ } else {
+ line = row;
+ }
+ let html = "";
+ for (let i = 0; i < line; i ++){
+ html += " <tr>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " </tr>\n";
+ }
+ $('#lift-state-table tbody').after(html);
+ }
+
+ // 鎻愬崌鏈烘暟鎹〃鑾峰彇 ----- 琛ㄤ簩
+ function initliftMsgTable(row) {
+ let line;
+ if (row === undefined){
+ let one = $('#lift-msg-table thead').height();
+ let total = $('.lift-msg').height();
+ let count = total / one;
+ count = parseInt(count) - 1;
+ liftMsgTableBlankRows = count;
+ line = count;
+ } else {
+ line = row;
+ }
+ let html = "";
+ for (let i = 0; i < line; i ++){
+ html += " <tr>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " <td></td>\n" +
+ " </tr>\n";
+ }
+ $('#lift-msg-table tbody').after(html);
+ }
+
+ // 鏃ュ織杈撳嚭妗�
+ function liftOutput(content){
+ liftOutputDom.value += content;
+ liftOutputDom.scrollTop = liftOutputDom.scrollHeight;
+ }
+
+</script>
--
Gitblit v1.9.1