From a2c563572181cf54946020db619b6867f11f088a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 24 三月 2023 08:56:19 +0800
Subject: [PATCH] 四向穿梭车
---
src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java | 294 +++++
src/main/java/com/zy/core/enums/ShuttlePlcInputStatusType.java | 41
src/main/java/com/zy/core/model/command/ShuttleCommand.java | 98 +
src/main/java/com/zy/asrs/domain/vo/ShuttleMsgTableVo.java | 44
src/main/java/com/zy/asrs/mapper/BasShuttleMapper.java | 12
src/main/resources/mapper/BasShuttleMapper.xml | 29
src/main/java/com/zy/asrs/domain/vo/ShuttleDataVo.java | 22
src/main/webapp/static/css/shuttle.css | 334 ++++++
src/main/java/com/zy/core/enums/ShuttleStatusType.java | 45
src/main/java/com/zy/asrs/service/BasShuttleService.java | 8
src/main/java/com/zy/core/enums/ShuttleErrorCodeType.java | 50
src/main/webapp/views/index.html | 3
src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java | 90 +
src/main/java/com/zy/core/enums/SlaveType.java | 1
src/main/java/com/zy/core/cache/OutputQueue.java | 2
src/main/java/com/zy/core/MainProcess.java | 2
src/main/webapp/views/shuttle.html | 786 +++++++++++++++
src/main/java/com/zy/asrs/service/impl/BasShuttleServiceImpl.java | 12
src/main/java/com/zy/core/model/ShuttleSlave.java | 46
src/main/java/com/zy/asrs/entity/BasShuttle.java | 258 +++++
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 27
src/main/java/com/zy/core/thread/ShuttleThread.java | 275 +++++
src/main/java/com/zy/asrs/domain/vo/ShuttleStateTableVo.java | 63 +
src/main/java/com/zy/core/cache/MessageQueue.java | 14
src/main/java/com/zy/core/enums/ShuttlePlcOutputStatusType.java | 45
src/main/java/com/zy/core/ServerBootstrap.java | 16
src/main/java/com/zy/core/properties/SlaveProperties.java | 7
src/main/java/com/zy/asrs/controller/ShuttleController.java | 294 +++++
src/main/java/com/zy/core/enums/ShuttleTaskModeType.java | 40
src/main/webapp/static/js/map.json | 30
src/main/java/com/zy/asrs/domain/param/ShuttleOperatorParam.java | 26
31 files changed, 2,986 insertions(+), 28 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java
new file mode 100644
index 0000000..d1d94ea
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java
@@ -0,0 +1,294 @@
+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.enums.CrnStatusType;
+import com.zy.asrs.domain.param.ShuttleOperatorParam;
+import com.zy.asrs.domain.param.SteModeParam;
+import com.zy.asrs.domain.param.SteOperatorParam;
+import com.zy.asrs.domain.vo.*;
+import com.zy.asrs.entity.BasShuttle;
+import com.zy.asrs.entity.BasSte;
+import com.zy.asrs.entity.WrkMast;
+import com.zy.asrs.service.BasShuttleService;
+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.*;
+import com.zy.core.model.ShuttleSlave;
+import com.zy.core.model.SteSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.ShuttleCommand;
+import com.zy.core.model.command.SteCommand;
+import com.zy.core.model.protocol.ShuttleProtocol;
+import com.zy.core.model.protocol.SteProtocol;
+import com.zy.core.properties.SlaveProperties;
+import com.zy.core.properties.SystemProperties;
+import com.zy.core.thread.ShuttleThread;
+import com.zy.core.thread.SteThread;
+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.Date;
+import java.util.List;
+
+/**
+ * 鍥涘悜绌挎杞︽帴鍙�
+ */
+@Slf4j
+@RestController
+@RequestMapping("/shuttle")
+public class ShuttleController {
+
+ @Autowired
+ private SlaveProperties slaveProperties;
+ @Autowired
+ private BasShuttleService basShuttleService;
+ @Autowired
+ private WrkMastService wrkMastService;
+
+ @PostMapping("/table/shuttle/state")
+ @ManagerAuth(memo = "鍥涘悜绌挎杞︿俊鎭〃")
+ public R steStateTable(){
+ List<ShuttleStateTableVo> list = new ArrayList<>();
+ List<BasShuttle> shuttles = basShuttleService.selectList(new EntityWrapper<BasShuttle>().orderBy("shuttle_no"));
+ for (BasShuttle basShuttle : shuttles) {
+ // 琛ㄦ牸琛�
+ ShuttleStateTableVo vo = new ShuttleStateTableVo();
+ vo.setShuttleNo(basShuttle.getShuttleNo()); //鍥涘悜绌挎杞﹀彿
+ list.add(vo);
+ // 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, basShuttle.getShuttleNo());
+ if (shuttleThread == null) {
+ continue;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ if (shuttleProtocol == null) {
+ continue;
+ }
+ vo.setTaskNo(shuttleProtocol.getTaskNo().intValue()); // 浠诲姟鍙�
+ if (!Cools.isEmpty(shuttleProtocol.getBusyStatus())) {
+ vo.setStatus(shuttleProtocol.getBusyStatusType().desc); // 鐘舵��
+ }
+ vo.setRow(shuttleProtocol.getRow());
+ vo.setBay(shuttleProtocol.getBay());
+ vo.setLev(shuttleProtocol.getLev());
+ vo.setBatteryPower(shuttleProtocol.getBatteryPower() + "%");
+ vo.setSpeed(shuttleProtocol.getCurrentMoveServoSpeed());
+ if (!Cools.isEmpty(shuttleProtocol.getErrorCode())) {
+ vo.setAlarm1(String.valueOf(shuttleProtocol.getErrorCode()));
+ }
+ if (!Cools.isEmpty(shuttleProtocol.getStatusErrorCode())) {
+ vo.setAlarm2(String.valueOf(shuttleProtocol.getStatusErrorCode()));
+ }
+ }
+ return R.ok().add(list);
+ }
+
+ @PostMapping("/table/shuttle/msg")
+ @ManagerAuth(memo = "鍥涘悜绌挎杞︽暟鎹〃")
+ public R steMsgTable(){
+ List<ShuttleMsgTableVo> list = new ArrayList<>();
+ List<BasShuttle> shuttles = basShuttleService.selectList(new EntityWrapper<BasShuttle>().orderBy("shuttle_no"));
+ for (BasShuttle basShuttle : shuttles) {
+ // 琛ㄦ牸琛�
+ ShuttleMsgTableVo vo = new ShuttleMsgTableVo();
+ vo.setShuttleNo(basShuttle.getShuttleNo()); // 鍥涘悜绌挎杞﹀彿
+ list.add(vo);
+ // 鑾峰彇绌挎杞︿俊鎭�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, basShuttle.getShuttleNo());
+ if (shuttleThread == null) {
+ continue;
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ if (shuttleProtocol == null) {
+ continue;
+ }
+
+ vo.setWorkNo(shuttleProtocol.getTaskNo().intValue()); // 浠诲姟鍙�
+ if (shuttleProtocol.getTaskNo() > 0) {
+ WrkMast wrkMast = wrkMastService.selectById(shuttleProtocol.getTaskNo());
+ if (wrkMast != null) {
+ //vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc()); // 妯″紡鐘舵��
+ vo.setSourceStaNo(wrkMast.getSourceStaNo$()); // 婧愮珯
+ vo.setStaNo(wrkMast.getStaNo$()); // 鐩爣绔�
+ vo.setSourceLocNo(wrkMast.getSourceLocNo()); // 婧愬簱浣�
+ vo.setLocNo(wrkMast.getLocNo()); // 鐩爣搴撲綅
+ }
+ }
+ vo.setSpeed(shuttleProtocol.getCurrentMoveServoSpeed()); // 閫熷害
+ vo.setPakMk(shuttleProtocol.getPakMk()); // 浣滀笟鏍囪
+ }
+ return R.ok().add(list);
+ }
+
+ @PostMapping("/output/shuttle")
+ @ManagerAuth
+ public R steOutput(){
+ StringBuilder str = new StringBuilder();
+ String s;
+ int i = 0;
+ while((s = OutputQueue.SHUTTLE.poll()) != null && i <=10) {
+ str.append("\n").append(s);
+ i++;
+ }
+ return R.ok().add(str.toString());
+ }
+
+ @GetMapping("/detl/{shuttleNo}")
+ public R steDetl(@PathVariable("shuttleNo") Integer shuttleNo){
+ ShuttleDataVo vo = new ShuttleDataVo();
+ for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+ if (shuttleNo.equals(shuttleSlave.getId())) {
+ vo.setShuttleNo(shuttleSlave.getId());
+ BasShuttle basShuttle = basShuttleService.selectById(shuttleSlave.getId());
+ if (!Cools.isEmpty(basShuttle)) {
+ vo.setRow(basShuttle.getRow());
+ vo.setBay(basShuttle.getBay());
+ vo.setLev(basShuttle.getLev());
+ vo.setWorkNo(basShuttle.getWrkNo());
+ vo.setPakMk(basShuttle.getPakMk());
+ }
+ break;
+ }
+ }
+ return R.ok().add(vo);
+ }
+
+ @GetMapping("/sensor/detl/{shuttleNo}")
+ public R shuttleSensorDetl(@PathVariable("shuttleNo") Integer shuttleNo){
+ ShuttleSensorDataVo vo = new ShuttleSensorDataVo();
+ for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+ if (shuttleNo.equals(shuttleSlave.getId())) {
+ vo.setShuttleNo(shuttleSlave.getId());
+ // 鑾峰彇绌挎杞︿俊鎭�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
+ if (shuttleThread == null) {
+ return R.error("璁惧涓嶅湪绾�");
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ if (shuttleProtocol == null) {
+ return R.error("璁惧涓嶅湪绾�");
+ }
+
+ // 绌挎杞﹀紓甯� -----------
+
+ // 绌挎杞︽彁绀轰俊鎭� ----------------------
+
+ // 浠诲姟淇℃伅 ----------------
+ vo.setPakInTask(shuttleProtocol.isPakInTask());
+ vo.setPakOutTask(shuttleProtocol.isPakOutTask());
+ vo.setPakMoveTask(shuttleProtocol.isPakMoveTask());
+ vo.setGoHpTask(shuttleProtocol.isGoHpTask());
+ vo.setGoOHpTask(shuttleProtocol.isGoOHpTask());
+ vo.setGoHpAvoid(shuttleProtocol.isGoHpAvoid());
+ vo.setGoOHpAvoid(shuttleProtocol.isGoOHpAvoid());
+ vo.setPakInEmpty(shuttleProtocol.isPakInEmpty());
+ vo.setPakInFinish(shuttleProtocol.isPakInFinish());
+ vo.setPakOutEmpty(shuttleProtocol.isPakOutEmpty());
+ vo.setPakOutFinish(shuttleProtocol.isPakOutFinish());
+ vo.setGoHpAvoidFinish(shuttleProtocol.isGoHpAvoidFinish());
+ vo.setGoOHpAvoidFinish(shuttleProtocol.isGoOHpAvoidFinish());
+ vo.setGoHpAvoidErr(shuttleProtocol.isGoHpAvoidErr());
+ vo.setGoOHpAvoidErr(shuttleProtocol.isGoOHpAvoidErr());
+
+ // 鐘舵�佷俊鎭� -------------
+
+ break;
+ }
+ }
+ return R.ok().add(vo);
+ }
+
+ @PostMapping("/detl/update")
+ @ManagerAuth
+ public R steUpdate(ShuttleDataVo vo){
+ BasShuttle basShuttle = basShuttleService.selectById(vo.getShuttleNo());
+ if (basShuttle == null) {
+ return R.error();
+ }
+ // 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, vo.getShuttleNo());
+ ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ if (shuttleProtocol == null) {
+ throw new CoolException(vo.getShuttleNo() + "鍙峰洓鍚戠┛姊溅涓嶅湪绾匡紝鏃犳硶淇濆瓨");
+ }
+// if (!Cools.isEmpty(vo.getRow(), vo.getBay(), vo.getLev())) {
+// if (!shuttleThread.modifyPosHandle(vo.getRow(), vo.getBay(), vo.getLev())) {
+// throw new CoolException("鏈嶅姟鍣ㄩ敊璇�");
+// }
+// }
+ ShuttleCommand shuttleCommand = new ShuttleCommand();
+ shuttleCommand.setTaskNo(vo.getWorkNo());
+ if (MessageQueue.offer(SlaveType.Shuttle, vo.getShuttleNo(), new Task(2, shuttleCommand))) {
+ } else {
+ throw new CoolException("鍛戒护涓嬪彂澶辫触");
+ }
+ basShuttle.setRow(vo.getRow());
+ basShuttle.setBay(vo.getBay());
+ basShuttle.setLev(vo.getLev());
+
+ basShuttle.setPakMk(vo.getPakMk());
+ basShuttle.setWrkNo(vo.getWorkNo());
+ basShuttle.setUpdateTime(new Date());
+ if (!basShuttleService.updateById(basShuttle)) {
+ throw new CoolException("淇敼澶辫触");
+ }
+ return R.ok();
+ }
+
+ /****************************************************************/
+ /************************** 鎵嬪姩鎿嶄綔 ******************************/
+ /****************************************************************/
+
+ @ManagerAuth(memo = "鎵嬪姩鎿嶄綔")
+ @PostMapping("/operator/shuttle")
+ public R shuttleOperator(ShuttleOperatorParam param){
+ if (Cools.isEmpty(param.getShuttleNo(), param.getShuttleTaskMode())) {
+ return R.parse(BaseRes.PARAM);
+ }
+
+ for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+ if (param.getShuttleNo().equals(shuttleSlave.getId())) {
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
+ if (shuttleThread == null) {
+ throw new CoolException("鍥涘悜绌挎杞︿笉鍦ㄧ嚎");
+ }
+ ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ if (shuttleProtocol == null) {
+ throw new CoolException("鍥涘悜绌挎杞︿笉鍦ㄧ嚎");
+ }
+ ShuttleTaskModeType shuttleTaskModeType = ShuttleTaskModeType.get(param.getShuttleTaskMode());
+ ShuttleCommand shuttleCommand = new ShuttleCommand();
+ shuttleCommand.setShuttleNo(shuttleSlave.getId()); // 鍥涘悜绌挎杞︾紪鍙�
+// if (param.getShuttleTaskMode() == 16) {
+// steCommand.setComplete(true);
+// } else if (param.getSteTaskMode() == 99) {
+// steCommand.setControlMode((short) 1);
+// } else if (param.getSteTaskMode() == 100) {
+// steCommand.setControlMode((short) 0);
+// } else {
+// if (steTaskModeType == null) {
+// throw new CoolException("浠诲姟绫诲瀷閿欒");
+// }
+// steCommand.setTaskNo(param.getTaskNo()); // 宸ヤ綔鍙�
+// steCommand.setTaskMode(steTaskModeType);
+// }
+ if (MessageQueue.offer(SlaveType.Shuttle, shuttleSlave.getId(), new Task(2, shuttleCommand))) {
+ return R.ok();
+ } else {
+ throw new CoolException("鍛戒护涓嬪彂澶辫触");
+ }
+ }
+ }
+ return R.error();
+ }
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/param/ShuttleOperatorParam.java b/src/main/java/com/zy/asrs/domain/param/ShuttleOperatorParam.java
new file mode 100644
index 0000000..3e198e3
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/param/ShuttleOperatorParam.java
@@ -0,0 +1,26 @@
+package com.zy.asrs.domain.param;
+
+import lombok.Data;
+
+@Data
+public class ShuttleOperatorParam {
+
+ // 鍥涘悜绌挎杞﹀彿
+ private Integer shuttleNo;
+
+ // 鍛戒护绫诲瀷
+ private Short shuttleTaskMode;
+
+ // 浠诲姟鍙�
+ private Integer taskNo = 0;
+
+ // 鐩爣搴撲綅-鎺�
+ private Short row;
+
+ // 鐩爣搴撲綅-鍒�
+ private Short bay;
+
+ // 鐩爣搴撲綅-灞�
+ private Short lev;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/ShuttleDataVo.java b/src/main/java/com/zy/asrs/domain/vo/ShuttleDataVo.java
new file mode 100644
index 0000000..82a7f81
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/ShuttleDataVo.java
@@ -0,0 +1,22 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class ShuttleDataVo {
+
+ // 鍥涘悜绌挎杞﹀彿
+ private Integer shuttleNo;
+
+ // 宸ヤ綔鍙�
+ private Integer workNo;
+
+ private Integer row;
+
+ private Integer bay;
+
+ private Integer lev;
+
+ private String pakMk;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/ShuttleMsgTableVo.java b/src/main/java/com/zy/asrs/domain/vo/ShuttleMsgTableVo.java
new file mode 100644
index 0000000..7963b64
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/ShuttleMsgTableVo.java
@@ -0,0 +1,44 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class ShuttleMsgTableVo {
+
+ // 鍥涘悜绌挎杞﹀彿
+ private Integer shuttleNo;
+
+ // 宸ヤ綔鍙�
+ private Integer workNo = 0;
+
+ // 鐘舵��
+ private String status = "-";
+
+ // 婧愮珯
+ private String sourceStaNo = "-";
+
+ // 鐩爣绔�
+ private String staNo = "-";
+
+ // 婧愬簱浣�
+ private String sourceLocNo = "-";
+
+ // 鐩爣搴撲綅
+ private String locNo = "-";
+
+ // 寮傚父
+ private String error = "";
+
+ // 鍘熺偣
+ private String origin = "";
+
+ // 鍛戒护
+ private String command = "";
+
+ // 閫熷害
+ private Double speed = 0.0D;
+
+ // 浣滀笟鏍囪
+ private String pakMk = "-";
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java b/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java
new file mode 100644
index 0000000..03ef340
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/ShuttleSensorDataVo.java
@@ -0,0 +1,90 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class ShuttleSensorDataVo {
+
+ /**
+ * 鍥涘悜绌挎杞﹀彿
+ */
+ 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/domain/vo/ShuttleStateTableVo.java b/src/main/java/com/zy/asrs/domain/vo/ShuttleStateTableVo.java
new file mode 100644
index 0000000..70e3c4a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/ShuttleStateTableVo.java
@@ -0,0 +1,63 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class ShuttleStateTableVo {
+
+ // 鍥涘悜绌挎杞﹀彿
+ private Integer shuttleNo;
+
+ // 鐘舵��
+ private String status = "-";
+
+ // 鏈夌墿
+ private String loading = "-";
+
+ /**
+ * 浠诲姟鍙�
+ */
+ public Integer taskNo;
+
+ // 姝e湪鎵ц浠诲姟
+ private String execute;
+
+ // 浠诲姟瀹屾垚锛岀瓑寰匴CS纭
+ private String waiting;
+
+ // 鎺�
+ private Short row;
+
+ // 鍒�
+ private Short bay;
+
+ // 灞�
+ private Short lev;
+
+ // 寮傚父鐮�1
+ private String alarm1 = "-";
+
+ // 寮傚父鐮�2
+ private String alarm2 = "-";
+
+ /**
+ * 鐢垫睜鐢甸噺
+ */
+ public String batteryPower = "-";
+
+ /**
+ * 褰撳墠閫熷害
+ */
+ public Double speed;
+
+ /**
+ * 鍏呯數鐘舵��
+ */
+ public String chargeStatus = "-";
+
+ /**
+ * 褰撳墠浣嶇疆
+ */
+ public String loca = "-";
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BasShuttle.java b/src/main/java/com/zy/asrs/entity/BasShuttle.java
new file mode 100644
index 0000000..999eb2b
--- /dev/null
+++ b/src/main/java/com/zy/asrs/entity/BasShuttle.java
@@ -0,0 +1,258 @@
+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 com.core.common.SpringUtils;
+import com.zy.system.service.UserService;
+import com.zy.system.entity.User;
+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 java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("asr_bas_shuttle")
+public class BasShuttle implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 鍥涘悜绌挎杞﹀彿
+ */
+ @ApiModelProperty(value= "鍥涘悜绌挎杞﹀彿")
+ @TableId(value = "shuttle_no", type = IdType.INPUT)
+ @TableField("shuttle_no")
+ private Integer shuttleNo;
+
+ /**
+ * 鐘舵�� 1: 姝e父 0: 绂佺敤
+ */
+ @ApiModelProperty(value= "鐘舵�� 1: 姝e父 0: 绂佺敤 ")
+ private Integer status;
+
+ /**
+ * 浣滀笟鎬�
+ */
+ @ApiModelProperty(value= "浣滀笟鎬�")
+ @TableField("shuttle_status")
+ private Integer shuttleStatus;
+
+ /**
+ * 浠诲姟鍙�
+ */
+ @ApiModelProperty(value= "浠诲姟鍙�")
+ @TableField("wrk_no")
+ private Integer wrkNo;
+
+ /**
+ * 鎺�
+ */
+ @ApiModelProperty(value= "鎺�")
+ private Integer row;
+
+ /**
+ * 鍒�
+ */
+ @ApiModelProperty(value= "鍒�")
+ private Integer bay;
+
+ /**
+ * 灞�
+ */
+ @ApiModelProperty(value= "灞�")
+ private Integer lev;
+
+ /**
+ * 鍘嗗彶鎺�
+ */
+ @ApiModelProperty(value= "鍘嗗彶鎺�")
+ @TableField("his_row")
+ private Integer hisRow;
+
+ /**
+ * 鍘嗗彶鍒�
+ */
+ @ApiModelProperty(value= "鍘嗗彶鍒�")
+ @TableField("his_bay")
+ private Integer hisBay;
+
+ /**
+ * 鍘嗗彶灞�
+ */
+ @ApiModelProperty(value= "鍘嗗彶灞�")
+ @TableField("his_lev")
+ private Integer hisLev;
+
+ /**
+ * 鏆傚瓨搴撲綅
+ */
+ @ApiModelProperty(value= "鏆傚瓨搴撲綅")
+ @TableField("idle_loc")
+ private String idleLoc;
+
+ /**
+ * 鑷姩鍏呯數
+ */
+ @ApiModelProperty(value= "鑷姩鍏呯數")
+ @TableField("auto_charge")
+ private Integer autoCharge;
+
+ /**
+ * 鐢甸噺绾�
+ */
+ @ApiModelProperty(value= "鐢甸噺绾�")
+ @TableField("charge_line")
+ private Integer chargeLine;
+
+ /**
+ * 娣诲姞浜哄憳
+ */
+ @ApiModelProperty(value= "娣诲姞浜哄憳")
+ @TableField("create_by")
+ private Long createBy;
+
+ /**
+ * 娣诲姞鏃堕棿
+ */
+ @ApiModelProperty(value= "娣诲姞鏃堕棿")
+ @TableField("create_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 淇敼浜哄憳
+ */
+ @ApiModelProperty(value= "淇敼浜哄憳")
+ @TableField("update_by")
+ private Long updateBy;
+
+ /**
+ * 淇敼鏃堕棿
+ */
+ @ApiModelProperty(value= "淇敼鏃堕棿")
+ @TableField("update_time")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 澶囨敞
+ */
+ @ApiModelProperty(value= "澶囨敞")
+ private String memo;
+
+ /**
+ * 鎻愬崌鏈哄彿
+ */
+ @ApiModelProperty(value= "鎻愬崌鏈哄彿")
+ @TableField("lift_no")
+ private Integer liftNo;
+
+ /**
+ * 鏍囪
+ */
+ @ApiModelProperty(value= "鏍囪")
+ @TableField("pak_mk")
+ private String pakMk;
+
+ public BasShuttle() {}
+
+ public BasShuttle(Integer shuttleNo,Integer status,Integer shuttleStatus,Integer wrkNo,Integer row,Integer bay,Integer lev,Integer hisRow,Integer hisBay,Integer hisLev,String idleLoc,Integer autoCharge,Integer chargeLine,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo,Integer liftNo) {
+ this.shuttleNo = shuttleNo;
+ this.status = status;
+ this.shuttleStatus = shuttleStatus;
+ this.wrkNo = wrkNo;
+ this.row = row;
+ this.bay = bay;
+ this.lev = lev;
+ this.hisRow = hisRow;
+ this.hisBay = hisBay;
+ this.hisLev = hisLev;
+ this.idleLoc = idleLoc;
+ this.autoCharge = autoCharge;
+ this.chargeLine = chargeLine;
+ this.createBy = createBy;
+ this.createTime = createTime;
+ this.updateBy = updateBy;
+ this.updateTime = updateTime;
+ this.memo = memo;
+ this.liftNo = liftNo;
+ }
+
+// BasShuttle basShuttle = new BasShuttle(
+// null, // 鍥涘悜绌挎杞﹀彿[闈炵┖]
+// null, // 鐘舵��
+// null, // 浣滀笟鎬�
+// null, // 浠诲姟鍙�
+// null, // 鎺�
+// null, // 鍒�
+// null, // 灞�
+// null, // 鍘嗗彶鎺�
+// null, // 鍘嗗彶鍒�
+// null, // 鍘嗗彶灞�
+// null, // 鏆傚瓨搴撲綅
+// null, // 鑷姩鍏呯數
+// null, // 鐢甸噺绾�
+// null, // 娣诲姞浜哄憳
+// null, // 娣诲姞鏃堕棿
+// null, // 淇敼浜哄憳
+// null, // 淇敼鏃堕棿
+// null, // 澶囨敞
+// null // 鎻愬崌鏈哄彿
+// );
+
+ public String getStatus$(){
+ if (null == this.status){ return null; }
+ switch (this.status){
+ case 1:
+ return "姝e父";
+ case 0:
+ return "绂佺敤";
+ default:
+ return String.valueOf(this.status);
+ }
+ }
+
+ public String getCreateBy$(){
+ UserService service = SpringUtils.getBean(UserService.class);
+ User user = service.selectById(this.createBy);
+ if (!Cools.isEmpty(user)){
+ return String.valueOf(user.getUsername());
+ }
+ return null;
+ }
+
+ public String getCreateTime$(){
+ if (Cools.isEmpty(this.createTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+ }
+
+ 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;
+ }
+
+ public String getUpdateTime$(){
+ if (Cools.isEmpty(this.updateTime)){
+ return "";
+ }
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+ }
+
+
+}
diff --git a/src/main/java/com/zy/asrs/mapper/BasShuttleMapper.java b/src/main/java/com/zy/asrs/mapper/BasShuttleMapper.java
new file mode 100644
index 0000000..d85304a
--- /dev/null
+++ b/src/main/java/com/zy/asrs/mapper/BasShuttleMapper.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.mapper;
+
+import com.zy.asrs.entity.BasShuttle;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface BasShuttleMapper extends BaseMapper<BasShuttle> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/BasShuttleService.java b/src/main/java/com/zy/asrs/service/BasShuttleService.java
new file mode 100644
index 0000000..ed45783
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/BasShuttleService.java
@@ -0,0 +1,8 @@
+package com.zy.asrs.service;
+
+import com.zy.asrs.entity.BasShuttle;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface BasShuttleService extends IService<BasShuttle> {
+
+}
diff --git a/src/main/java/com/zy/asrs/service/impl/BasShuttleServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasShuttleServiceImpl.java
new file mode 100644
index 0000000..7c3f623
--- /dev/null
+++ b/src/main/java/com/zy/asrs/service/impl/BasShuttleServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.service.impl;
+
+import com.zy.asrs.mapper.BasShuttleMapper;
+import com.zy.asrs.entity.BasShuttle;
+import com.zy.asrs.service.BasShuttleService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("basShuttleService")
+public class BasShuttleServiceImpl extends ServiceImpl<BasShuttleMapper, BasShuttle> implements BasShuttleService {
+
+}
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 0380f0b..4651f27 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -30,13 +30,11 @@
import com.zy.core.model.command.LedCommand;
import com.zy.core.model.command.SteCommand;
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.properties.SlaveProperties;
-import com.zy.core.thread.BarcodeThread;
-import com.zy.core.thread.LedThread;
-import com.zy.core.thread.SiemensDevpThread;
-import com.zy.core.thread.SteThread;
+import com.zy.core.thread.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -612,6 +610,27 @@
}
/**
+ * 鍏ュ嚭搴� ===>> 鍥涘悜绌挎杞﹀叆鍑哄簱浣滀笟涓嬪彂
+ */
+ public synchronized void shuttleIoExecute() {
+ for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+ //鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
+ ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+ if (shuttleProtocol == null) {
+ continue;
+ }
+
+ // 鍙湁褰撳洓鍚戠┛姊溅绌洪棽 骞朵笖鏃犱换鍔℃椂鎵嶇户缁墽琛�
+ if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE && shuttleProtocol.getTaskNo() == 0) {
+ //鍏ュ嚭搴撻�昏緫
+ //.....
+ }
+ }
+
+ }
+
+ /**
* 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
*/
public synchronized void crnIoExecute(){
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index c5895a9..6e02faa 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -57,6 +57,8 @@
mainService.crnStnToOutStn();
// 鍏ュ嚭搴� ===>> 鍫嗗灈鏈哄叆鍑哄簱浣滀笟涓嬪彂
mainService.crnIoExecute();
+ // 鍏ュ嚭搴� ===>> 鍥涘悜绌挎杞﹀叆鍑哄簱浣滀笟涓嬪彂
+ mainService.shuttleIoExecute();
// 鍏ュ簱 ===>> 鎵ц鍫嗗灈鏈哄宸ヤ綔妗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 151df14..6d94ede 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -3,10 +3,7 @@
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
-import com.zy.core.model.CrnSlave;
-import com.zy.core.model.DevpSlave;
-import com.zy.core.model.LedSlave;
-import com.zy.core.model.SteSlave;
+import com.zy.core.model.*;
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.*;
import lombok.extern.slf4j.Slf4j;
@@ -73,6 +70,10 @@
for (Slave ste : slaveProperties.getSte()) {
MessageQueue.init(SlaveType.Ste, ste);
}
+ // 鍒濆鍖栧洓鍚戠┛姊溅mq
+ for (Slave shuttle : slaveProperties.getShuttle()) {
+ MessageQueue.init(SlaveType.Shuttle, shuttle);
+ }
}
private void initThread(){
@@ -97,6 +98,13 @@
new Thread((Runnable) devpThread).start();
SlaveConnection.put(SlaveType.Devp, devp.getId(), devpThread);
}
+ // 鍒濆鍖栧洓鍚戠┛姊溅
+ News.info("鍒濆鍖栧洓鍚戠┛姊溅......................................................");
+ for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+ ShuttleThread shuttleThread = new ShuttleThread(shuttleSlave);
+ new Thread(shuttleThread).start();
+ SlaveConnection.put(SlaveType.Shuttle, shuttleSlave.getId(), shuttleThread);
+ }
// 鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼
News.info("鍒濆鍖栨潯鐮佹壂鎻忎华绾跨▼...................................................");
for (Slave barcode : slaveProperties.getBarcode()) {
diff --git a/src/main/java/com/zy/core/cache/MessageQueue.java b/src/main/java/com/zy/core/cache/MessageQueue.java
index ed5b018..bc17bec 100644
--- a/src/main/java/com/zy/core/cache/MessageQueue.java
+++ b/src/main/java/com/zy/core/cache/MessageQueue.java
@@ -29,6 +29,8 @@
private static final Map<Integer, ConcurrentLinkedQueue<Task>> SCALE_EXCHANGE = new ConcurrentHashMap<>();
// 鍙拌溅mq浜ゆ崲鏈�
private static final Map<Integer, ConcurrentLinkedQueue<Task>> CAR_EXCHANGE = new ConcurrentHashMap<>();
+ //鍥涘悜绌挎杞q浜ゆ崲鏈�
+ private static final Map<Integer, ConcurrentLinkedQueue<Task>> SHUTTLE_EXCHANGE = new ConcurrentHashMap<>();
/**
* mq 浜ゆ崲鏈哄垵濮嬪寲
@@ -56,6 +58,9 @@
case Car:
CAR_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
break;
+ case Shuttle:
+ SHUTTLE_EXCHANGE.put(slave.getId(), new ConcurrentLinkedQueue<>());
+ break;
default:
break;
}
@@ -81,6 +86,8 @@
return SCALE_EXCHANGE.get(id).offer(task);
case Car:
return CAR_EXCHANGE.get(id).offer(task);
+ case Shuttle:
+ return SHUTTLE_EXCHANGE.get(id).offer(task);
default:
return false;
}
@@ -106,6 +113,8 @@
return SCALE_EXCHANGE.get(id).poll();
case Car:
return CAR_EXCHANGE.get(id).poll();
+ case Shuttle:
+ return SHUTTLE_EXCHANGE.get(id).poll();
default:
return null;
}
@@ -130,6 +139,8 @@
return SCALE_EXCHANGE.get(id).peek();
case Car:
return CAR_EXCHANGE.get(id).peek();
+ case Shuttle:
+ return SHUTTLE_EXCHANGE.get(id).peek();
default:
return null;
}
@@ -158,6 +169,9 @@
case Car:
CAR_EXCHANGE.get(id).clear();
break;
+ case Shuttle:
+ SHUTTLE_EXCHANGE.get(id).clear();
+ break;
default:
break;
}
diff --git a/src/main/java/com/zy/core/cache/OutputQueue.java b/src/main/java/com/zy/core/cache/OutputQueue.java
index b8bf8fa..6a18ab3 100644
--- a/src/main/java/com/zy/core/cache/OutputQueue.java
+++ b/src/main/java/com/zy/core/cache/OutputQueue.java
@@ -17,5 +17,7 @@
public static ArrayBlockingQueue<JSONObject> BARCODE = new ArrayBlockingQueue<>(32);
// 绌挎杞﹁緭鍑烘棩蹇�
public static ArrayBlockingQueue<String> STE = new ArrayBlockingQueue<>(32);
+ //鍥涘悜绌挎杞﹁緭鍑烘棩蹇�
+ public static ArrayBlockingQueue<String> SHUTTLE = new ArrayBlockingQueue<>(32);
}
diff --git a/src/main/java/com/zy/core/enums/ShuttleErrorCodeType.java b/src/main/java/com/zy/core/enums/ShuttleErrorCodeType.java
new file mode 100644
index 0000000..bd4797d
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/ShuttleErrorCodeType.java
@@ -0,0 +1,50 @@
+package com.zy.core.enums;
+
+/**
+ * 鍥涘悜绌挎杞�
+ * Wm204 閿欒缂栧彿
+ */
+public enum ShuttleErrorCodeType {
+
+ NORMAL(0, "鏃犻敊璇�"),
+ PCB_SUBMODULE(1, "PCB瀛愭ā鍧�"),
+ PCB_PLATE(2, "PCB鏉�"),
+ SERVO(10, "浼烘湇"),
+ CANOPEN(11, "canopen"),
+ RUN_ERROR(14, "杩愯閿欒"),
+ SYSTEM_ERROR(16, "绯荤粺閿欒")
+ ;
+
+ public Integer id;
+ public String desc;
+
+ ShuttleErrorCodeType(Integer id, String desc) {
+ this.id = id;
+ this.desc = desc;
+ }
+
+ public static ShuttleErrorCodeType get(Integer id) {
+ if (null == id) {
+ return null;
+ }
+ for (ShuttleErrorCodeType type : ShuttleErrorCodeType.values()) {
+ if (type.id.equals(id.intValue())) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ public static ShuttleErrorCodeType get(ShuttleErrorCodeType type) {
+ if (null == type) {
+ return null;
+ }
+ for (ShuttleErrorCodeType shuttleErrorCodeType : ShuttleErrorCodeType.values()) {
+ if (shuttleErrorCodeType == type) {
+ return shuttleErrorCodeType;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/zy/core/enums/ShuttlePlcInputStatusType.java b/src/main/java/com/zy/core/enums/ShuttlePlcInputStatusType.java
new file mode 100644
index 0000000..d9df63f
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/ShuttlePlcInputStatusType.java
@@ -0,0 +1,41 @@
+package com.zy.core.enums;
+
+/**
+ * 鍥涘悜绌挎杞�
+ * Wm207 PLC杈撳叆鐘舵��
+ */
+public enum ShuttlePlcInputStatusType {
+
+ LIFT_STATUS(Byte.parseByte("6"), "鎵樼洏椤堕儴浼犳劅鍣ㄧ姸鎬�")
+ ;
+
+ public byte id;
+ public String desc;
+
+ ShuttlePlcInputStatusType(byte id, String desc) {
+ this.id = id;
+ this.desc = desc;
+ }
+
+ public static ShuttlePlcInputStatusType get(byte id) {
+ for (ShuttlePlcInputStatusType type : ShuttlePlcInputStatusType.values()) {
+ if (type.id == id) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ public static ShuttlePlcInputStatusType get(ShuttlePlcInputStatusType type) {
+ if (null == type) {
+ return null;
+ }
+ for (ShuttlePlcInputStatusType shuttlePlcInputStatusType : ShuttlePlcInputStatusType.values()) {
+ if (shuttlePlcInputStatusType == type) {
+ return shuttlePlcInputStatusType;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/zy/core/enums/ShuttlePlcOutputStatusType.java b/src/main/java/com/zy/core/enums/ShuttlePlcOutputStatusType.java
new file mode 100644
index 0000000..dd67492
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/ShuttlePlcOutputStatusType.java
@@ -0,0 +1,45 @@
+package com.zy.core.enums;
+
+/**
+ * 鍥涘悜绌挎杞�
+ * WM205 Plc杈撳嚭鐘舵�両O
+ */
+public enum ShuttlePlcOutputStatusType {
+
+ NULL(Byte.parseByte("0"), "绌�"),
+ LIFT(Byte.parseByte("1"), "椤跺崌浣�"),
+ TURN(Byte.parseByte("2"), "杞悜浣�"),
+ BRAKE(Byte.parseByte("3"), "鎶遍椄浣�"),
+ CHARGE(Byte.parseByte("4"), "鍐茬數浣�")
+ ;
+
+ public byte id;
+ public String desc;
+
+ ShuttlePlcOutputStatusType(byte id, String desc) {
+ this.id = id;
+ this.desc = desc;
+ }
+
+ public static ShuttlePlcOutputStatusType get(byte id) {
+ for (ShuttlePlcOutputStatusType type : ShuttlePlcOutputStatusType.values()) {
+ if (type.id == id) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ public static ShuttlePlcOutputStatusType get(ShuttlePlcOutputStatusType type) {
+ if (null == type) {
+ return null;
+ }
+ for (ShuttlePlcOutputStatusType shuttlePlcOutputStatusType : ShuttlePlcOutputStatusType.values()) {
+ if (shuttlePlcOutputStatusType == type) {
+ return shuttlePlcOutputStatusType;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/zy/core/enums/ShuttleStatusType.java b/src/main/java/com/zy/core/enums/ShuttleStatusType.java
new file mode 100644
index 0000000..36fc6d4
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/ShuttleStatusType.java
@@ -0,0 +1,45 @@
+package com.zy.core.enums;
+
+/**
+ * 鍥涘悜绌挎杞�
+ * Wm200 灏忚溅蹇欑姸鎬佷綅
+ */
+public enum ShuttleStatusType {
+
+ IDLE(false, "绌洪棽"),
+ BUSY(true, "蹇�"),
+ ;
+
+ public Boolean id;
+ public String desc;
+
+ ShuttleStatusType(Boolean id,String desc) {
+ this.id = id;
+ this.desc = desc;
+ }
+
+ public static ShuttleStatusType get(Boolean id) {
+ if (null == id) {
+ return null;
+ }
+ for (ShuttleStatusType type : ShuttleStatusType.values()) {
+ if (type.id.equals(id.booleanValue())) {
+ return type;
+ }
+ }
+ return BUSY;
+ }
+
+ public static ShuttleStatusType get(ShuttleStatusType type) {
+ if (null == type) {
+ return null;
+ }
+ for (ShuttleStatusType shuttleStatusType : ShuttleStatusType.values()) {
+ if (shuttleStatusType == type) {
+ return shuttleStatusType;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java b/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java
new file mode 100644
index 0000000..a24d901
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java
@@ -0,0 +1,40 @@
+package com.zy.core.enums;
+
+public enum ShuttleTaskModeType {
+
+ INIT(0, "鍒濆"), // 鍒濆
+ ;
+
+ public Integer id;
+ public String desc;
+
+ ShuttleTaskModeType(Integer id, String desc) {
+ this.id = id;
+ this.desc = desc;
+ }
+
+ public static ShuttleTaskModeType get(Short id) {
+ if (null == id) {
+ return null;
+ }
+ for (ShuttleTaskModeType type : ShuttleTaskModeType.values()) {
+ if (type.id.equals(id.intValue())) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ public static ShuttleTaskModeType get(ShuttleTaskModeType type) {
+ if (null == type) {
+ return null;
+ }
+ for (ShuttleTaskModeType shuttleTaskModeType : ShuttleTaskModeType.values()) {
+ if (shuttleTaskModeType == type) {
+ return shuttleTaskModeType;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/zy/core/enums/SlaveType.java b/src/main/java/com/zy/core/enums/SlaveType.java
index c6c2f6c..86d676a 100644
--- a/src/main/java/com/zy/core/enums/SlaveType.java
+++ b/src/main/java/com/zy/core/enums/SlaveType.java
@@ -9,6 +9,7 @@
Scale,
Car,
Ste,
+ Shuttle,
;
public static SlaveType findInstance(String s){
diff --git a/src/main/java/com/zy/core/model/ShuttleSlave.java b/src/main/java/com/zy/core/model/ShuttleSlave.java
new file mode 100644
index 0000000..2635e5f
--- /dev/null
+++ b/src/main/java/com/zy/core/model/ShuttleSlave.java
@@ -0,0 +1,46 @@
+package com.zy.core.model;
+
+import com.zy.core.Slave;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ShuttleSlave extends Slave {
+
+ private Integer rack;
+
+ private Integer slot;
+
+ private Boolean demo;
+
+ // 绌挎杞﹀叆搴撶珯鐐�
+ private List<Sta> shuttleInStn = new ArrayList<>();
+
+ // 绌挎杞﹀嚭搴撶珯鐐�
+ private List<Sta> shuttleOutStn = new ArrayList<>();
+
+ @Data
+ public static class Sta {
+
+ // 杈撻�佺嚎plc缂栧彿
+ private Integer devpPlcId;
+
+ // 绌挎杞︾珯鐐圭紪鍙�
+ private Integer staNo;
+
+ // 鎺�
+ private Integer row;
+
+ // 鍒�
+ private Integer bay;
+
+ // 灞�
+ private Integer lev;
+
+ }
+
+}
diff --git a/src/main/java/com/zy/core/model/command/ShuttleCommand.java b/src/main/java/com/zy/core/model/command/ShuttleCommand.java
new file mode 100644
index 0000000..7acb6d6
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/ShuttleCommand.java
@@ -0,0 +1,98 @@
+package com.zy.core.model.command;
+
+import lombok.Data;
+
+@Data
+public class ShuttleCommand {
+
+ /**
+ * 鍥涘悜绌挎杞﹀彿
+ */
+ private Integer shuttleNo = 0;
+
+ /**
+ * 浠诲姟鍙�
+ */
+ private Integer taskNo = 0;
+
+ /**
+ * 浣滀笟绫诲瀷
+ */
+ private Short taskMode = 0;
+
+ /**
+ * 浠诲姟纭 false锛氭湭纭 true锛氬凡纭
+ */
+ private Boolean complete = Boolean.FALSE;
+
+ /**
+ * 鎺у埗鎸囦护瀛�
+ */
+ private Integer commandWord;
+
+ /**
+ * 鍚浜岀淮缂栧彿
+ */
+ private String startCodeNum;
+
+ /**
+ * 涓棿浜岀淮缂栧彿
+ */
+ private String middleCodeNum;
+
+ /**
+ * 鐩爣浜岀淮缂栧彿
+ */
+ private String distCodeNum;
+
+ /**
+ * 璧风偣鍒扮洰鏍囩偣鐨勮窛绂婚暱搴�
+ */
+ private Integer startToDistDistance;
+
+ /**
+ * 涓棿鐐瑰埌鐩爣鐐圭殑璺濈闀垮害
+ */
+ private Integer middleToDistDistance;
+
+ /**
+ * 灏忚溅杩愯鏂瑰悜
+ */
+ private Integer runDirection;
+
+ /**
+ * 鎵樼洏椤跺崌
+ */
+ private Integer palletLift;
+
+ /**
+ * 灏忚溅寮哄埗绉诲姩璺濈
+ */
+ private Integer forceMoveDistance;
+
+ /**
+ * 鍏呯數寮�鍏�
+ */
+ private Integer chargeSwitch;
+
+ /**
+ * 灏忚溅IO鎺у埗
+ */
+ private byte IOControl;
+
+ /**
+ * 灏忚溅杩愯閫熷害
+ */
+ private Integer runSpeed;
+
+ /**
+ * 灏忚溅闆疯揪澶囩敤
+ */
+ private Integer radarTmp;
+
+ /**
+ * 鎸囦护缁撴潫浣�
+ */
+ private Integer commandEnd;
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
new file mode 100644
index 0000000..b82f97b
--- /dev/null
+++ b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
@@ -0,0 +1,294 @@
+package com.zy.core.model.protocol;
+
+import com.zy.core.enums.ShuttleStatusType;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 鍥涘悜绌挎杞�
+ */
+@Slf4j
+@Data
+public class ShuttleProtocol {
+
+ /**
+ * 鍥涘悜绌挎杞﹀彿
+ */
+ private Short shuttleNo;
+
+ /**
+ * 浠诲姟鍙�
+ */
+ public Short taskNo = 0;
+
+ /**
+ * 鎺�
+ */
+ public Short row;
+
+ /**
+ * 鍒�
+ */
+ public Short bay;
+
+ /**
+ * 灞�
+ */
+ public Short lev;
+
+ /**
+ * 鎺у埗鎸囦护瀛�
+ */
+ private Integer commandWord;
+
+ /**
+ * 鍚浜岀淮缂栧彿
+ */
+ private Integer startCodeNum;
+
+ /**
+ * 涓棿浜岀淮缂栧彿
+ */
+ private Integer middleCodeNum;
+
+ /**
+ * 鐩爣浜岀淮缂栧彿
+ */
+ private Integer distCodeNum;
+
+ /**
+ * 璧风偣鍒扮洰鏍囩偣鐨勮窛绂婚暱搴�
+ */
+ private Integer startToDistDistance;
+
+ /**
+ * 涓棿鐐瑰埌鐩爣鐐圭殑璺濈闀垮害
+ */
+ private Integer middleToDistDistance;
+
+ /**
+ * 灏忚溅杩愯鏂瑰悜
+ */
+ private Integer runDirection;
+
+ /**
+ * 鎵樼洏椤跺崌
+ */
+ private Integer palletLift;
+
+ /**
+ * 灏忚溅寮哄埗绉诲姩璺濈
+ */
+ private Integer forceMoveDistance;
+
+ /**
+ * 鍏呯數寮�鍏�
+ */
+ private Integer chargeSwitch;
+
+ /**
+ * 灏忚溅IO鎺у埗
+ */
+ private Integer IOControl;
+
+ /**
+ * 灏忚溅杩愯閫熷害
+ */
+ private Integer runSpeed;
+
+ /**
+ * 灏忚溅闆疯揪澶囩敤
+ */
+ private Integer radarTmp;
+
+ /**
+ * 鎸囦护缁撴潫浣�
+ */
+ private Integer commandEnd;
+
+
+ /**
+ * 灏忚溅蹇欑姸鎬佷綅
+ * true: 蹇�
+ * false: 绌洪棽
+ */
+ private Boolean busyStatus;
+
+ /**
+ * 灏忚溅蹇欑姸鎬佷綅鏋氫妇
+ */
+ private ShuttleStatusType busyStatusType;
+
+ /**
+ * 褰撳墠浜岀淮鐮�
+ * 0涓虹┖
+ */
+ private String currentCode;
+
+ /**
+ * 鐢垫睜鐢甸噺鐧惧垎姣�
+ */
+ private Double batteryPower;
+
+ /**
+ * 鐢垫睜娓╁害
+ */
+ private Double batteryTemp;
+
+ /**
+ * 閿欒缂栧彿
+ */
+ private Integer errorCode;
+
+ /**
+ * Plc杈撳嚭鐘舵�両O
+ */
+ private byte plcOutputStatusIO;
+
+ /**
+ * 閿欒淇℃伅鐮�
+ */
+ private Integer statusErrorCode;
+
+ /**
+ * PLC杈撳叆鐘舵��
+ */
+ private byte plcInputStatus;
+
+ /**
+ * 褰撳墠鎴栬�呬箣鍓嶈鍒扮殑浜岀淮鐮佸��
+ */
+ private String currentOrBeforeCode;
+
+ /**
+ * 璇诲埌鐨勪簩缁寸爜X鏂瑰悜鍋忕Щ閲�
+ */
+ private Integer codeOffsetX;
+
+ /**
+ * 璇诲埌鐨勪簩缁寸爜Y鏂瑰悜鍋忕Щ閲�
+ */
+ private Integer codeOffsetY;
+
+ /**
+ * 褰撳墠鐨勭數鍘嬪��
+ */
+ private Double currentVoltage;
+
+ /**
+ * 褰撳墠鐨勬ā鎷熼噺鍊�
+ */
+ private Integer currentAnalogValue;
+
+ /**
+ * 褰撳墠鐨勫崌闄嶄己鏈嶉�熷害
+ */
+ private Double currentLiftServoSpeed;
+
+ /**
+ * 褰撳墠鐨勮璧颁己鏈嶉�熷害
+ */
+ private Double currentMoveServoSpeed;
+
+ /**
+ * 褰撳墠鐨勫崌闄嶄己鏈嶈礋杞界巼
+ */
+ private Double currentLiftServoLoad;
+
+ /**
+ * 褰撳墠鐨勮璧颁己鏈嶈礋杞界巼
+ */
+ private Double currentMoveServoLoad;
+
+ /**
+ * 浣滀笟鏍囪
+ */
+ private String pakMk = "-";
+
+ // 浠诲姟淇℃伅 ---------------------------------------------------------
+ /**
+ * 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;
+
+ public void setBusyStatus(Boolean status) {
+ this.busyStatus = status;
+ this.busyStatusType = ShuttleStatusType.get(status);
+ }
+
+ public void setBusyStatus(ShuttleStatusType type) {
+ this.busyStatus = type.id.booleanValue();
+ this.busyStatusType = type;
+ }
+
+}
diff --git a/src/main/java/com/zy/core/properties/SlaveProperties.java b/src/main/java/com/zy/core/properties/SlaveProperties.java
index b40fca2..4d026aa 100644
--- a/src/main/java/com/zy/core/properties/SlaveProperties.java
+++ b/src/main/java/com/zy/core/properties/SlaveProperties.java
@@ -1,10 +1,7 @@
package com.zy.core.properties;
import com.zy.core.Slave;
-import com.zy.core.model.CrnSlave;
-import com.zy.core.model.DevpSlave;
-import com.zy.core.model.LedSlave;
-import com.zy.core.model.SteSlave;
+import com.zy.core.model.*;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@@ -42,4 +39,6 @@
private List<Slave> car = new ArrayList<>();
+ private List<ShuttleSlave> shuttle = new ArrayList<>();
+
}
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
new file mode 100644
index 0000000..224377b
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -0,0 +1,275 @@
+package com.zy.core.thread;
+
+import HslCommunication.Core.Transfer.DataFormat;
+import HslCommunication.Core.Types.OperateResult;
+import HslCommunication.Core.Types.OperateResultExOne;
+import HslCommunication.ModBus.ModbusTcpNet;
+import HslCommunication.Profinet.Siemens.SiemensPLCS;
+import HslCommunication.Profinet.Siemens.SiemensS7Net;
+import com.alibaba.fastjson.JSON;
+import com.core.common.DateUtils;
+import com.core.common.RadixTools;
+import com.core.exception.CoolException;
+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.cache.SlaveConnection;
+import com.zy.core.enums.ShuttleStatusType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.ShuttleSlave;
+import com.zy.core.model.SteSlave;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.ShuttleCommand;
+import com.zy.core.model.command.SteCommand;
+import com.zy.core.model.protocol.ShuttleProtocol;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.Date;
+
+/**
+ * 鍥涘悜绌挎杞︾嚎绋�
+ */
+@Data
+@Slf4j
+public class ShuttleThread implements Runnable, ThreadHandler {
+
+ private ModbusTcpNet modbusTcpNet;
+ private ShuttleSlave slave;
+ private ShuttleProtocol shuttleProtocol;
+ private SiemensS7Net siemensS7Net;
+
+ public ShuttleThread(ShuttleSlave slave) {
+ this.slave = slave;
+ }
+
+ @Override
+ public void run() {
+ this.connect();
+ while (true) {
+ try {
+ int step = 1;
+ Task task = MessageQueue.poll(SlaveType.Shuttle, slave.getId());
+ if (task != null) {
+ step = task.getStep();
+ }
+ switch (step) {
+ // 璇绘暟鎹�
+ case 1:
+ readStatus();
+ break;
+ // 鍐欏叆鏁版嵁
+ case 2:
+ write((ShuttleCommand) task.getData());
+ break;
+ default:
+ break;
+ }
+ Thread.sleep(500);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Override
+ public boolean connect() {
+ boolean result = false;
+ //-------------------------鍥涘悜绌挎杞﹁繛鎺ユ柟娉�------------------------//
+ modbusTcpNet = new ModbusTcpNet(slave.getIp(), slave.getPort(), (byte) 0x01);
+ // 褰撲綘闇�瑕佹寚瀹氭牸寮忕殑鏁版嵁瑙f瀽鏃讹紝灏遍渶瑕佽缃笅闈㈢殑杩欎釜淇℃伅
+ modbusTcpNet.setDataFormat(DataFormat.ABCD);
+ OperateResult connect = modbusTcpNet.ConnectServer();
+ if(connect.IsSuccess){
+ result = true;
+ OutputQueue.CRN.offer(MessageFormat.format( "銆恵0}銆戝洓鍚戠┛姊溅plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ log.info("鍥涘悜绌挎杞lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
+ } else {
+ OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ log.error("鍥涘悜绌挎杞lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] ", slave.getId(), slave.getIp(), slave.getPort());
+ }
+ modbusTcpNet.ConnectClose();
+ //-------------------------鍥涘悜绌挎杞﹁繛鎺ユ柟娉�------------------------//
+ return result;
+ }
+
+ @Override
+ public void close() {
+
+ }
+
+ private void readStatus() {
+ try {
+ OperateResultExOne<byte[]> result = modbusTcpNet.Read("0", (short) 17);
+ if (result.IsSuccess) {
+ if (null == shuttleProtocol) {
+ shuttleProtocol = new ShuttleProtocol();
+ shuttleProtocol.setShuttleNo(slave.getId().shortValue());
+ }
+
+ //----------璁剧疆鍥涘悜绌挎杞︾姸鎬�-----------
+ //鑾峰彇鏁版嵁
+ byte[] content = result.Content;
+
+ //--------鎺у埗瀛�--------
+ //鎺у埗鎸囦护瀛�
+ shuttleProtocol.setCommandWord(modbusTcpNet.getByteTransform().TransUInt16(content, 0));
+ //鍚浜岀淮缂栧彿
+ shuttleProtocol.setStartCodeNum(modbusTcpNet.getByteTransform().TransUInt16(content, 2));
+ //涓棿浜岀淮缂栧彿
+ shuttleProtocol.setMiddleCodeNum(modbusTcpNet.getByteTransform().TransUInt16(content, 4));
+ //鐩爣浜岀淮缂栧彿
+ shuttleProtocol.setDistCodeNum(modbusTcpNet.getByteTransform().TransUInt16(content, 6));
+ //璧风偣鍒扮洰鏍囩偣鐨勮窛绂婚暱搴�
+ shuttleProtocol.setStartToDistDistance(modbusTcpNet.getByteTransform().TransInt32(content, 8));
+ //涓棿鐐瑰埌鐩爣鐐圭殑璺濈闀垮害
+ shuttleProtocol.setMiddleToDistDistance(modbusTcpNet.getByteTransform().TransInt32(content, 12));
+ //灏忚溅杩愯鏂瑰悜
+ shuttleProtocol.setRunDirection(modbusTcpNet.getByteTransform().TransUInt16(content, 16));
+ //鎵樼洏椤跺崌
+ shuttleProtocol.setPalletLift(modbusTcpNet.getByteTransform().TransUInt16(content,18));
+ //灏忚溅寮哄埗绉诲姩璺濈
+ shuttleProtocol.setForceMoveDistance(modbusTcpNet.getByteTransform().TransInt32(content, 20));
+ //鍏呯數寮�鍏�
+ shuttleProtocol.setChargeSwitch(modbusTcpNet.getByteTransform().TransUInt16(content,24));
+ //灏忚溅IO鎺у埗
+ shuttleProtocol.setIOControl(modbusTcpNet.getByteTransform().TransUInt16(content,26));
+ //灏忚溅杩愯閫熷害
+ shuttleProtocol.setRunSpeed(modbusTcpNet.getByteTransform().TransUInt16(content,28));
+ //灏忚溅闆疯揪澶囩敤
+ shuttleProtocol.setRadarTmp(modbusTcpNet.getByteTransform().TransUInt16(content,30));
+ //鎸囦护缁撴潫浣�
+ shuttleProtocol.setCommandEnd(modbusTcpNet.getByteTransform().TransUInt16(content,32));
+
+
+ //---------鐘舵�佸瓧---------
+// shuttleProtocol.setBusyStatus(modbusTcpNet.getByteTransform().TransUInt16(content,32));
+
+ ///璁剧疆鍥涘悜绌挎杞︾姸鎬�-end
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
+ //璇诲彇鍥涘悜绌挎杞﹁澶囦俊鎭紝鎻愪緵鏌ヨ
+ //.....
+
+
+ // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
+ //.....
+
+
+ }else {
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆憑1}鍥涘悜绌挎杞lc鐘舵�佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId()));
+ throw new CoolException(MessageFormat.format( "鍥涘悜绌挎杞lc鐘舵�佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort()));
+ }
+ } catch (Exception e) {
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ initShuttle();
+ }
+ }
+
+ private boolean write(ShuttleCommand command){
+ if (null == command) {
+ News.error("鍥涘悜绌挎杞﹀啓鍏ュ懡浠や负绌�");
+ return false;
+ }
+
+ //鍒ゆ柇灏忚溅鏄惁鍦ㄥ厖鐢�
+ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
+ if (devpThread.charge1){
+
+ }
+
+ command.setShuttleNo(slave.getId());
+ OperateResult result = null;
+ // 寮�濮嬩换鍔�
+ //...
+
+
+ try {
+ // 鏃ュ織璁板綍
+ if (!command.getComplete() && command.getTaskMode() != 0) {
+ //鏃ュ織璁板綍淇濆瓨鍒版暟鎹簱涓�
+ //.....
+ }
+ } catch (Exception ignore) {}
+
+ if (result != null && result.IsSuccess) {
+ // 缁存姢鏁版嵁搴撴帓鍒楀眰
+// if (!steProtocol.getWaiting()) {
+// if (!Cools.isEmpty(command.getRow(), command.getBay(), command.getLev())) {
+// this.modifyPos(command.getRow().intValue(), command.getBay().intValue(), command.getLev().intValue());
+// }
+// }
+
+ News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command));
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command)));
+ return true;
+ } else {
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ洓鍚戠┛姊溅plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ News.error("鍐欏叆鍥涘悜绌挎杞lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort());
+ return false;
+ }
+ }
+
+ /**
+ * 鍒濆鍖栧洓鍚戠┛姊溅
+ */
+ private void initShuttle() {
+ if (null == shuttleProtocol) {
+ shuttleProtocol = new ShuttleProtocol();
+ }
+ shuttleProtocol.setShuttleNo(slave.getId().shortValue());
+ shuttleProtocol.setBusyStatus(ShuttleStatusType.BUSY);
+ shuttleProtocol.setCurrentCode("0");
+ }
+
+ /******************************************************************************************/
+ /**************************************** 娴嬭瘯涓撶敤 *****************************************/
+ /*****************************************************************************************/
+ public static void main(String[] args) throws InterruptedException {
+ ShuttleSlave slave = new ShuttleSlave();
+ slave.setId(1);
+ slave.setIp("192.168.4.24");
+ slave.setPort(502);
+ ShuttleThread thread = new ShuttleThread(slave);
+ thread.connect();
+ thread.readStatus();
+ System.out.println(JSON.toJSONString(thread.shuttleProtocol));
+
+ // 浠诲姟浣滀笟
+// SteCommand command = new SteCommand();
+// command.setSteNo(1); // 鍫嗗灈鏈虹紪鍙�
+// Random random = new Random();
+// int taskNo = random.nextInt(9090);
+// command.setTaskNo(taskNo); // 宸ヤ綔鍙�
+// command.setTaskMode(SteTaskModeType.MOVE_LEFT); // 浠诲姟妯″紡
+// thread.write(command);
+
+ // 浠诲姟瀹屾垚
+// SteCommand command = new SteCommand();
+// command.setSteNo(1); // 鍫嗗灈鏈虹紪鍙�
+// command.setComplete(Boolean.TRUE); // 浠诲姟妯″紡
+// thread.write(command);
+
+ // 鎺у埗妯″紡
+// SteCommand command = new SteCommand();
+// command.setControlMode((short) 1);
+// thread.write(command);
+
+ // 澶嶄綅淇″彿
+// SteCommand command = new SteCommand();
+// command.setReset(Boolean.TRUE);
+// thread.write(command);
+
+ // 鍒犻櫎鎸囦护
+// SteCommand command = new SteCommand();
+// command.setDelete(Boolean.TRUE);
+// thread.write(command);
+
+ // 绌挎杞﹁繍琛岀姝�
+// SteCommand command = new SteCommand();
+// command.setRun((short)0);
+// thread.write(command);
+
+ }
+}
diff --git a/src/main/resources/mapper/BasShuttleMapper.xml b/src/main/resources/mapper/BasShuttleMapper.xml
new file mode 100644
index 0000000..724891e
--- /dev/null
+++ b/src/main/resources/mapper/BasShuttleMapper.xml
@@ -0,0 +1,29 @@
+<?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.BasShuttleMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasShuttle">
+ <result column="shuttle_no" property="shuttleNo" />
+ <result column="status" property="status" />
+ <result column="shuttle_status" property="shuttleStatus" />
+ <result column="wrk_no" property="wrkNo" />
+ <result column="row" property="row" />
+ <result column="bay" property="bay" />
+ <result column="lev" property="lev" />
+ <result column="his_row" property="hisRow" />
+ <result column="his_bay" property="hisBay" />
+ <result column="his_lev" property="hisLev" />
+ <result column="idle_loc" property="idleLoc" />
+ <result column="auto_charge" property="autoCharge" />
+ <result column="charge_line" property="chargeLine" />
+ <result column="create_by" property="createBy" />
+ <result column="create_time" property="createTime" />
+ <result column="update_by" property="updateBy" />
+ <result column="update_time" property="updateTime" />
+ <result column="memo" property="memo" />
+ <result column="lift_no" property="liftNo" />
+
+ </resultMap>
+
+</mapper>
diff --git a/src/main/webapp/static/css/shuttle.css b/src/main/webapp/static/css/shuttle.css
new file mode 100644
index 0000000..b507363
--- /dev/null
+++ b/src/main/webapp/static/css/shuttle.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;
+}
+
+.shuttle-command-item {
+ padding: 4px 0;
+ margin-top: 5px;
+}
+.shuttle-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;
+}
+
+/* 鍙� */
+.shuttle-state {
+ float: left;
+ height: 100%;
+ width: 80%;
+ overflow: auto;
+}
+/* 绌挎杞︾姸鎬佽〃 */
+#shuttle-state-table {
+ font-size: 12px;
+ border-collapse: collapse;
+ margin: 0 auto;
+ text-align: center;
+}
+#shuttle-state-table td, #shuttle-state-table th {
+ border: 1px solid #cad9ea;
+ color: #666;
+ height: 25px;
+}
+#shuttle-state-table thead th {
+ background-color: #CCE8EB;
+ width: 300px;
+}
+#shuttle-state-table tr:nth-child(odd) {
+ background: #fff;
+}
+#shuttle-state-table tr:nth-child(even) {
+ background: #F5FAFA;
+}
+
+/* -------------------- 绗簩妯″潡 -------------------- */
+.shuttle-msg {
+ /*overflow: auto;*/
+ margin-top: 10px;
+ height: 23%;
+ background-color: #fff;
+ border-radius: 5px;
+ box-shadow: 0 0 3px rgba(0,0,0,.3);
+}
+/* 鍫嗗灈鏈虹姸鎬佷俊鎭〃 */
+#shuttle-msg-table {
+ font-size: 12px;
+ border-collapse: collapse;
+ margin: 0 auto;
+ text-align: center;
+}
+#shuttle-msg-table td, #shuttle-msg-table th {
+ border: 1px solid #f1f1f1;
+ color: #666;
+ height: 30px;
+}
+#shuttle-msg-table thead th {
+ background-color: #fff;
+ width: 400px;
+}
+#shuttle-msg-table tr:nth-child(odd) {
+ background: #fff;
+}
+#shuttle-msg-table tr:nth-child(even) {
+ background: #fff;
+}
+
+/* -------------------- 绗笁妯″潡 -------------------- */
+
+.shuttle-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;
+}
+#shuttle-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;
+}
+
+/* 鎵嬪姩鎿嶄綔閬僵 */
+.shuttle-operation-shade {
+ position: absolute;
+ height: 100%;
+ width: 100%;
+ z-index: 1000;
+ text-align: center;
+ padding: 80px 0;
+}
+.shuttle-operation-shade-span {
+ font-size: xx-large;
+ font-weight: bold;
+ color: red;
+}
+
+/* -------------------- 绗洓妯″潡 -------------------- */
+.shuttle-output-board {
+ margin-top: 10px;
+ height: 20%;
+ background-color: #fff;
+ border-radius: 5px;
+ box-shadow: 0 0 3px rgba(0,0,0,.3);
+}
+#shuttle-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;
+}
+
+
+/* 璇︽儏寮瑰嚭灞� */
+#shuttle-detl {
+ padding: 30px 10px 0 25px;
+ overflow: hidden;
+}
+#shuttle-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/static/js/map.json b/src/main/webapp/static/js/map.json
index c0e9b7c..6670040 100644
--- a/src/main/webapp/static/js/map.json
+++ b/src/main/webapp/static/js/map.json
@@ -1072,8 +1072,8 @@
"value": -1,
"data": ""
}, {
- "value": 4,
- "data": "200"
+ "value": -1,
+ "data": ""
}, {
"value": -1,
"data": ""
@@ -1151,11 +1151,11 @@
"value": -1,
"data": ""
}, {
- "value": 4,
- "data": "201"
+ "value": -1,
+ "data": ""
}, {
- "value": 4,
- "data": "202"
+ "value": -1,
+ "data": ""
}, {
"value": -1,
"data": ""
@@ -1233,11 +1233,11 @@
"value": -1,
"data": ""
}, {
- "value": 4,
- "data": "203"
+ "value": -1,
+ "data": ""
}, {
"value": 4,
- "data": "204"
+ "data": "100"
}, {
"value": -1,
"data": ""
@@ -1316,10 +1316,10 @@
"data": ""
}, {
"value": 4,
- "data": "205"
+ "data": "104"
}, {
"value": 4,
- "data": "206"
+ "data": "101"
}, {
"value": -1,
"data": ""
@@ -1397,11 +1397,11 @@
"value": -1,
"data": ""
}, {
- "value": -1,
- "data": ""
+ "value": 4,
+ "data": "103"
}, {
"value": 4,
- "data": "207"
+ "data": "102"
}, {
"value": -1,
"data": ""
@@ -1483,7 +1483,7 @@
"data": ""
}, {
"value": 4,
- "data": "208"
+ "data": ""
}, {
"value": 0,
"data": ""
diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html
index 738eb63..043106d 100644
--- a/src/main/webapp/views/index.html
+++ b/src/main/webapp/views/index.html
@@ -21,7 +21,8 @@
<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="ste" 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>
</div>
</div>
diff --git a/src/main/webapp/views/shuttle.html b/src/main/webapp/views/shuttle.html
new file mode 100644
index 0000000..f1eafbb
--- /dev/null
+++ b/src/main/webapp/views/shuttle.html
@@ -0,0 +1,786 @@
+<!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/shuttle.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 data-shuttleNo="1" class="shuttle-command-item">-->
+<!-- <label>1#</label>-->
+<!-- <button class="demoBtn pos-btn">鏁版嵁缁存姢</button>-->
+<!-- <button id="mode-1" class="demoBtn mode-btn" >璁惧淇℃伅</button>-->
+<!-- </div>-->
+ </div>
+ <!-- 鍫嗗灈鏈虹姸鎬佷綅淇℃伅 -->
+ <div class="shuttle-state">
+ <table id="shuttle-state-table">
+ <thead>
+ <tr>
+ <th>鍥涘悜绌挎杞�</th>
+ <th>寰呭畾</th>
+ <th>鐘舵��</th>
+ <th>鏈夌墿</th>
+ <th>鍦ㄨ建</th>
+ <th>鐢甸噺</th>
+ <th>鎺�</th>
+ <th>鍒�</th>
+ <th>灞�</th>
+ <th>绛夊緟WCS纭</th>
+ <th>瀹氫綅</th>
+ <th>鍏呯數鐘舵��</th>
+ <th>鎶ヨ淇℃伅1</th>
+ <th>鎶ヨ淇℃伅2</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ <!-- 绌挎杞︾姸鎬� -->
+ <div class="shuttle-msg">
+ <table id="shuttle-msg-table">
+ <thead>
+ <tr>
+ <th>鍥涘悜绌挎杞�</th>
+ <th>宸ヤ綔鍙�</th>
+ <th>鐘舵��</th>
+ <th>婧愮珯</th>
+ <th>鐩爣绔�</th>
+ <th>婧愬簱浣�</th>
+ <th>鐩爣搴撲綅</th>
+ <th>閫熷害</th>
+ <th>浣滀笟鏍囪</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ </table>
+ </div>
+ <!-- 鎵嬪姩鎿嶄綔 -->
+ <div class="shuttle-operation">
+ <!-- 閬僵灞� -->
+ <div class="shuttle-operation-shade">
+ <span class="shuttle-operation-shade-span">
+ WCS 绯荤粺杩愯涓紝璇峰仠姝㈠悗鎿嶄綔
+ </span>
+ </div>
+ <!-- 璁惧浠诲姟閫夋嫨 -->
+ <div class="task-select">
+ <!-- 閫夋嫨 -->
+ <div id="shuttle-select" class="operator-item">
+ <span class="select-title">鍥涘悜绌挎杞﹀彿</span>
+ <div class="select-container" id="shuttleRadioBoxId">
+<!-- <label><input type="radio" name="shuttleSelect" value="1" checked> 1鍙风┛姊溅</label>-->
+ </div>
+ </div>
+ </div>
+
+ <!-- 璁惧浠诲姟鎿嶄綔 -->
+ <div class="task-operator">
+ <div style="display: flex;">
+ <div class="task-operator" style="height: auto;width: auto;">
+ <div class="operator-item" style="height: auto">
+ <span class="select-title">婧愮珯/婧愬簱浣�</span>
+ <div class="select-container" style="height: auto">
+ <div class="select-container-item">
+ <span>绔�</span>
+ <label><input id="sourceStaNo" type="number" name="points" min="0" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>鎺�</span>
+ <label><input id="sourceRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>鍒�</span>
+ <label><input id="sourceBay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>灞�</span>
+ <label><input id="sourceLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="task-operator" style="height: auto;width: auto;">
+ <div class="operator-item" style="height: auto">
+ <span class="select-title">婧愮珯/婧愬簱浣�</span>
+ <div class="select-container" style="height: auto">
+ <div class="select-container-item">
+ <span>绔�</span>
+ <label><input id="distStaNo" type="number" name="points" min="0" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>鎺�</span>
+ <label><input id="distRow" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>鍒�</span>
+ <label><input id="distBay" type="number" name="points" min="0" style="background-color: #a9eeff" value="0" /></label>
+ </div>
+ <div class="select-container-item">
+ <span>灞�</span>
+ <label><input id="distLev" type="number" name="points" min="1" style="background-color: #a9eeff" value="1" /></label>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <fieldset style="height: auto;padding-bottom: 20px;">
+ <legend>鎵嬪姩鎿嶄綔</legend>
+ <div class="button-group">
+ <button class="item" onclick="shuttleOperator(4)">鎵樼洏椤跺崌</button>
+ <button class="item" onclick="shuttleOperator(4)">鎵樼洏鏀句笅</button>
+ <button class="item" onclick="shuttleOperator(5)">宸︾Щ</button>
+ <button class="item" onclick="shuttleOperator(6)">鍙崇Щ</button>
+ <button class="item" onclick="shuttleOperator(7)">鍓嶇Щ</button>
+ <button class="item" onclick="shuttleOperator(8)">鍚庣Щ</button>
+ <button class="item" onclick="shuttleOperator(9)">寮哄埗绉诲姩</button>
+ <button class="item" onclick="shuttleOperator(16)">浠诲姟瀹屾垚</button>
+ </div>
+ </fieldset>
+ </div>
+
+ </div>
+ <!-- 绌挎杞︽棩蹇楄緭鍑� -->
+ <div class="shuttle-output-board">
+ <textarea id="shuttle-output"></textarea>
+ </div>
+ </div>
+ </div>
+
+ <div id="shuttle-detl" style="display: none">
+ <div>
+ <div class="form-item">
+ <label class="form-label">鍥涘悜绌挎杞﹀彿:</label>
+ <div class="form-input">
+ <input id="shuttleNo" name="shuttleNo" class="layui-input" lay-verify="required|number" autocomplete="off" disabled="disabled">
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">宸ヤ綔鍙�:</label>
+ <div class="form-input">
+ <input id="workNo" name="workNo" type="number" class="layui-input" lay-verify="number" autocomplete="off">
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鎺�:</label>
+ <div class="form-input">
+ <input id="row" name="row" type="number" class="layui-input" lay-verify="number" autocomplete="off">
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍒�:</label>
+ <div class="form-input">
+ <input id="bay" name="bay" type="number" class="layui-input" autocomplete="off">
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">灞�:</label>
+ <div class="form-input">
+ <input id="lev" name="lev" type="number" class="layui-input" autocomplete="off">
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">浣滀笟鏍囪:</label>
+ <div class="form-input">
+ <input id="pakMk" name="pakMk" type="text" class="layui-input" autocomplete="off">
+ </div>
+ </div>
+ <div class="form-item form-button-container">
+ <button class="form-button" id="save">淇濆瓨</button>
+ <button class="form-button" id="cancel" style="background-color: #D0D0D0">鍙栨秷</button>
+ </div>
+ </div>
+ </div>
+ <div id="shuttle-detl2" style="display: none">
+ <div style="width: 1400px">
+ <div class="form-item" style="text-align: left">
+ <spen style="margin: 20px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted;">
+ 寮傚父锛�<spen style="color: #FD482C;">鉁�</spen>
+ </spen>
+ <spen style="margin: 20px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style: double;">
+ 姝e父锛�<spen style="color: #00FF00;">鈥�</spen>
+ </spen>
+ </div>
+ <div style="float:left;margin: 10px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted;">
+ <div class="form-item" style="text-align: center">
+ <label>鍥涘悜绌挎杞﹀紓甯�</label>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍥涘悜绌挎杞﹀彿:</label>
+ <div class="form-input">
+ <input id="shuttleNo1" name="shuttleNo" class="layui-input" lay-verify="required|number" autocomplete="off" disabled="disabled" readonly>
+ </div>
+ </div>
+
+ </div>
+ <div style="float:left;margin: 10px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted">
+ <div class="form-item" style="text-align: center">
+ <label>鍥涘悜绌挎杞︽彁绀轰俊鎭�</label>
+ </div>
+
+ </div>
+ <div style="float:left;margin: 10px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted">
+ <div class="form-item" style="text-align: center">
+ <label>浠诲姟淇℃伅</label>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍏ュ簱浠诲姟涓�:</label>
+ <div class="form-input">
+ <input id="pakInTask" name="pakInTask" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍑哄簱浠诲姟涓�:</label>
+ <div class="form-input">
+ <input id="pakOutTask" name="pakOutTask" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">绉诲簱浠诲姟涓�:</label>
+ <div class="form-input">
+ <input id="pakMoveTask" name="pakMoveTask" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍥炲師鐐逛换鍔′腑:</label>
+ <div class="form-input">
+ <input id="goHpTask" name="goHpTask" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍘诲弽鍘熺偣浠诲姟涓�:</label>
+ <div class="form-input">
+ <input id="goOHpTask" name="goOHpTask" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍘诲師鐐归伩璁╀綅:</label>
+ <div class="form-input">
+ <input id="goHpAvoid" name="goHpAvoid" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍘诲弽鍘熺偣閬胯浣�:</label>
+ <div class="form-input">
+ <input id="goOHpAvoid" name="goOHpAvoid" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍏ュ簱鍙栫┖缁撴潫:</label>
+ <div class="form-input">
+ <input id="pakInEmpty" name="pakInEmpty" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍏ュ簱姝e父缁撴潫:</label>
+ <div class="form-input">
+ <input id="pakInFinish" name="pakInFinish" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍑哄簱鍙栫┖缁撴潫:</label>
+ <div class="form-input">
+ <input id="pakOutEmpty" name="pakOutEmpty" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍑哄簱姝e父缁撴潫:</label>
+ <div class="form-input">
+ <input id="pakOutFinish" name="pakOutFinish" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍘诲師鐐归伩璁╁畬鎴�:</label>
+ <div class="form-input">
+ <input id="goHpAvoidFinish" name="goHpAvoidFinish" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍘诲弽鍘熺偣閬胯瀹屾垚:</label>
+ <div class="form-input">
+ <input id="goOHpAvoidFinish" name="goOHpAvoidFinish" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍘诲師鐐归伩璁╁畬鎴�:</label>
+ <div class="form-input">
+ <input id="goHpAvoidErr" name="goHpAvoidErr" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ <div class="form-item">
+ <label class="form-label">鍘诲弽鍘熺偣閬胯瀹屾垚:</label>
+ <div class="form-input">
+ <input id="goOHpAvoidErr" name="goOHpAvoidErr" class="layui-input" autocomplete="off" readonly>
+ </div>
+ </div>
+ </div>
+ <div style="float:left;margin: 10px 10px 10px 10px; padding: 10px 10px 10px 10px;border: black;border-width: 3px;border-style:dotted">
+ <div class="form-item" style="text-align: center">
+ <label>鐘舵�佷俊鎭�</label>
+ </div>
+<!-- <div class="form-item">-->
+<!-- <label class="form-label">鑱旀満妯″紡:</label>-->
+<!-- <div class="form-input">-->
+<!-- <input id="autoMode" name="autoMode" class="layui-input" autocomplete="off" readonly>-->
+<!-- </div>-->
+<!-- </div>-->
+<!-- <div class="form-item">-->
+<!-- <label class="form-label">鐢靛帇杩囦綆:</label>-->
+<!-- <div class="form-input">-->
+<!-- <input id="voltageLow" name="voltageLow" class="layui-input" autocomplete="off" readonly>-->
+<!-- </div>-->
+<!-- </div>-->
+ </div>
+ </div>
+ </div>
+</body>
+</html>
+<script>
+ // 绌虹櫧琛屾暟
+ var shuttleStateTableBlankRows = 0;
+ var shuttleMsgTableBlankRows = 0;
+ // 瀹為檯琛屾暟
+ var shuttleStateTableFullRows = 0;
+ var shuttleMsgTableFullRows = 0;
+ // 鍒濆鍖�
+ var shuttleOutputDom = document.getElementById("shuttle-output");
+ $(document).ready(function() {
+ initShuttleStateTable();
+ getShuttleStateInfo();
+ initShuttleMsgTable();
+ getShuttleMsgInfo();
+ operatorBlockShow();
+ setShuttleRadio();
+ });
+
+ setInterval(function () {
+ getShuttleStateInfo()
+ getShuttleMsgInfo();
+ },1000)
+ setInterval(function () {
+ getShuttleOutput();
+ operatorBlockShow();
+ },500);
+
+ // 鍒ゆ柇鎵嬪姩鎿嶄綔妯″潡鏄惁鍙敤
+ function operatorBlockShow() {
+ if (parent.systemRunning) {
+ $('.shuttle-operation').css("opacity", "0.5");
+ $('.shuttle-operation-shade').show();
+ $('.shuttle-operation-shade-span').show();
+ } else {
+ $('.shuttle-operation').css("opacity", "1");
+ $('.shuttle-operation-shade').hide();
+ $('.shuttle-operation-shade-span').hide();
+ }
+ }
+
+ var layerIdx;
+ $(document).on('click ','.pos-btn', function () {
+ let shuttleNo = Number($(this).parent().attr("data-shuttleNo"));
+ 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: $("#shuttle-detl"),
+ success: function(layero, index){
+ http.get(baseUrl+ "/shuttle/detl/"+shuttleNo, null, function (res) {
+ $('#shuttleNo').val(shuttleNo);
+ $('#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 () {
+ $('#shuttleNo').val("");
+ $('#workNo').val("");
+ $('#row').val("");
+ $('#bay').val("");
+ $('#lev').val("");
+ $('#crnNo').val("");
+ $('#pakMk').val("");
+ }
+ })
+ })
+
+ var layerIdx0;
+ $(document).on('click ','.mode-btn', function () {
+ let shuttleNo = Number($(this).parent().attr("data-shuttleNo"));
+ 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: $("#shuttle-detl2"),
+ success: function(layero, index){
+ console.log(shuttleNo)
+ http.get(baseUrl+ "/shuttle/sensor/detl/"+shuttleNo, null, function (res) {
+ $('#shuttleNo1').val(res.data.shuttleNo);
+ // getColor(res.data.liftErr,'#liftErr');
+ // getColor(res.data.inFetchErr,'#inFetchErr');
+ // getColor(res.data.outFetchErr,'#outFetchErr');
+ // getColor(res.data.antiErr,'#antiErr');
+ // getColor(res.data.liftSwitchErr,'#liftSwitchErr');
+ // getColor(res.data.trackErr,'#trackErr');
+ // getColor(res.data.timeoutErr,'#timeoutErr');
+ // getColor(res.data.connectErr,'#connectErr');
+ // getColor(res.data.emergencyErr,'#emergencyErr');
+ // getColor(res.data.taskTypeErr,'#taskTypeErr');
+ // getColor(res.data.taskNoErr,'#taskNoErr');
+ // getColor(res.data.newTaskErr,'#newTaskErr');
+ // getColor(res.data.errTaskErr,'#errTaskErr');
+ // getColor(res.data.stopErr,'#stopErr');
+ // getColor(res.data.offlineTaskErr,'#offlineTaskErr');
+ // getColor(res.data.startTaskErr,'#startTaskErr');
+ // getColor(res.data.voltageTaskErr,'#voltageTaskErr');
+ // getColor(res.data.devpErr,'#devpErr');
+ // getColor(res.data.online,'#online');
+ // getColor(res.data.notOnTrack,'#notOnTrack');
+ // getColor(res.data.lowVoltage,'#lowVoltage');
+ // getColor(res.data.electricityLoss,'#electricityLoss');
+ // getColor(res.data.forcedTravel,'#forcedTravel');
+ // getColor(res.data.demoMode,'#demoMode');
+ // getColor(res.data.brushConnect,'#brushConnect');
+ // getColor(res.data.taskManualForbid,'#taskManualForbid');
+ // getColor(res.data.onlineManualForbid,'#onlineManualForbid');
+ // getColor(res.data.devpEmergency,'#devpEmergency');
+ // getColor(res.data.taskInterrupt,'#taskInterrupt');
+ // getColor(res.data.taskClear,'#taskClear');
+ // getColor(res.data.taskConfirmTimeout,'#taskConfirmTimeout');
+ // getColor(res.data.taskWithCharge,'#taskWithCharge');
+ 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');
+ // getColor(res.data.autoMode,'#autoMode');
+ // getColor(res.data.voltageLow,'#voltageLow');
+ })
+ },
+ end: function () {
+ $('#shuttleNo').val("");
+ }
+ })
+ })
+
+ function getColor(res,e){
+ $(e).val(res?"鉁�":"鈥�");
+ if (res){
+ $(e).attr("style", "color: #FD482C;");
+ }else {
+ $(e).attr("style", "color: #00FF00;");
+ }
+ }
+
+ // $(document).on('click ','.mode-btn', function () {
+ // let shuttleNo = Number($(this).parent().attr("data-shuttleNo"));
+ // layer.confirm("鏀瑰彉" + shuttleNo + ' 鍙风┛姊溅鍦ㄧ嚎鐘舵�佸悧锛�', function(){
+ // var index = layer.load(1, {
+ // shade: [0.1,'#fff']
+ // });
+ // $.ajax({
+ // url: baseUrl+ "/shuttle/mode/switch",
+ // headers: {'token': localStorage.getItem('token')},
+ // data: {
+ // shuttleNo: Number(shuttleNo),
+ // password: 'root'
+ // },
+ // method: 'POST',
+ // success: function (res) {
+ // layer.close(index);
+ // if (res.code === 200){
+ // layer.msg(res.msg, {icon: 1});
+ // } else if (res.code === 403){
+ // window.location.href = baseUrl+"/login";
+ // } else {
+ // layer.msg(res.msg, {icon: 2});
+ // }
+ // }
+ // });
+ // });
+ // })
+
+
+
+ $(document).on('click ','#save', function () {
+ http.post(baseUrl+ "/shuttle/detl/update", {
+ shuttleNo: $('#shuttleNo').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 setShuttleRadio() {
+ $.ajax({
+ url: baseUrl+ "/shuttle/table/shuttle/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 shuttleRadioBox = '<label><input type="radio" name="shuttleSelect" ';
+ if (i === 1) {
+ shuttleRadioBox += 'checked '
+ }
+ shuttleRadioBox += 'value="' + table[i - 1].shuttleNo + '"> ' + table[i - 1].shuttleNo + '鍙风┛姊溅</label>'
+ $("#shuttleRadioBoxId").append(shuttleRadioBox)
+
+
+ //娓叉煋鍥涘悜绌挎杞︽暟鎹淮鎶ゅ拰璁惧淇℃伅html
+ let shuttleCommandLogBox = '<div class="shuttle-command-item" data-shuttleNo="' + table[i - 1].shuttleNo + '">\n' +
+ '<label>' + table[i - 1].shuttleNo + '#</label>\n' +
+ '<button class="demoBtn pos-btn">鏁版嵁缁存姢</button>\n' +
+ '<button class="demoBtn mode-btn" id="mode-' + table[i - 1].shuttleNo + '">璁惧淇℃伅</button>\n' +
+ '</div>'
+ $("#commandLogId").append(shuttleCommandLogBox);
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇 ---- 琛ㄤ竴
+ function getShuttleStateInfo() {
+ let tableEl = $('#shuttle-state-table');
+ $.ajax({
+ url: baseUrl+ "/shuttle/table/shuttle/state",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ let table = res.data;
+ if (table.length > shuttleStateTableBlankRows && table.length !== shuttleStateTableFullRows) {
+ initShuttleStateTable(table.length-shuttleStateTableBlankRows);
+ shuttleStateTableFullRows = table.length;
+ }
+ for (let i=1;i<=table.length;i++){
+ // $("#mode-"+table[i-1].shuttleNo).html(table[i-1].statusVal===0?'鑱旀満':'鑴辨満');
+ let tr = tableEl.find("tr").eq(i);
+ setVal(tr.children("td").eq(0), table[i-1].shuttleNo);
+ setVal(tr.children("td").eq(1), table[i-1].status);
+ setVal(tr.children("td").eq(2), table[i-1].status);
+ setVal(tr.children("td").eq(3), table[i-1].loading);
+ setVal(tr.children("td").eq(4), table[i-1].track);
+ setVal(tr.children("td").eq(5), table[i-1].batteryPower);
+ setVal(tr.children("td").eq(6), table[i-1].row);
+ setVal(tr.children("td").eq(7), table[i-1].bay);
+ setVal(tr.children("td").eq(8), table[i-1].lev);
+ setVal(tr.children("td").eq(9), table[i-1].waiting);
+ setVal(tr.children("td").eq(10), table[i-1].loca);
+ setVal(tr.children("td").eq(11), table[i-1].chargeStatus);
+ setVal(tr.children("td").eq(12), table[i-1].alarm1);
+ setVal(tr.children("td").eq(13), table[i-1].alarm2);
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 鍥涘悜绌挎杞︽暟鎹〃鑾峰彇 ---- 琛ㄤ簩
+ function getShuttleMsgInfo() {
+ let tableEl = $('#shuttle-msg-table');
+ $.ajax({
+ url: baseUrl+ "/shuttle/table/shuttle/msg",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200){
+ var table = res.data;
+ if (table.length > shuttleMsgTableBlankRows && table.length !== shuttleMsgTableFullRows) {
+ initShuttleMsgTable(table.length-shuttleMsgTableBlankRows);
+ shuttleMsgTableFullRows = 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].shuttleNo);
+ setVal(tr.children("td").eq(1), table[i-1].workNo);
+ setVal(tr.children("td").eq(2), table[i-1].status);
+ setVal(tr.children("td").eq(3), table[i-1].sourceStaNo);
+ setVal(tr.children("td").eq(4), table[i-1].staNo);
+ setVal(tr.children("td").eq(5), table[i-1].sourceLocNo);
+ setVal(tr.children("td").eq(6), table[i-1].locNo);
+ setVal(tr.children("td").eq(7), table[i-1].speed);
+ setVal(tr.children("td").eq(8), table[i-1].pakMk);
+ }
+ } else if (res.code === 403){
+ window.location.href = baseUrl+"/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ });
+ }
+
+ // 绌挎杞︽棩蹇楄緭鍑� -----------------------------------------------------------------------
+ function getShuttleOutput() {
+ $.ajax({
+ url: baseUrl + "/shuttle/output/shuttle",
+ headers: {'token': localStorage.getItem('token')},
+ method: 'POST',
+ success: function (res) {
+ if (res.code === 200) {
+ shuttleOutput(res.data);
+ } else if (res.code === 403) {
+ window.location.href = baseUrl + "/login";
+ } else {
+ console.log(res.msg);
+ }
+ }
+ })
+ }
+
+ // 浠诲姟鎸囦护涓嬪彂
+ function shuttleOperator(shuttleTaskMode) {
+ http.post(baseUrl+"/shuttle/operator/shuttle", {
+ shuttleNo: $('input[name="shuttleSelect"]:checked').val(),
+ shuttleTaskMode: shuttleTaskMode
+ }, function (res) {
+ layer.msg(res.msg, {icon: 1});
+ });
+ }
+
+
+ // ------------------------------------------------------------------------------------------------
+
+ // 鍥涘悜绌挎杞︿俊鎭〃鑾峰彇 ----- 琛ㄤ竴
+ function initShuttleStateTable(row) {
+ let line;
+ if (row === undefined){
+ let one = $('#shuttle-state-table thead').height();
+ let total = $('.shuttle-state').height();
+ let count = total / one;
+ count = parseInt(count) - 1;
+ shuttleStateTableBlankRows = 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";
+ }
+ $('#shuttle-state-table tbody').after(html);
+ }
+
+ // 绌挎杞︽暟鎹〃鑾峰彇 ----- 琛ㄤ簩
+ function initShuttleMsgTable(row) {
+ let line;
+ if (row === undefined){
+ let one = $('#shuttle-msg-table thead').height();
+ let total = $('.shuttle-msg').height();
+ let count = total / one;
+ count = parseInt(count) - 1;
+ shuttleMsgTableBlankRows = 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";
+ }
+ $('#shuttle-msg-table tbody').after(html);
+ }
+
+ // 鏃ュ織杈撳嚭妗�
+ function shuttleOutput(content){
+ shuttleOutputDom.value += content;
+ shuttleOutputDom.scrollTop = shuttleOutputDom.scrollHeight;
+ }
+
+</script>
--
Gitblit v1.9.1