From 4e005e4936039fca16bfd1679942daa416a21986 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 20 十一月 2025 14:27:47 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/network/entity/ZyRgvStatusEntity.java | 11
src/main/webapp/components/WatchRgvCard.js | 188 ++++++++++
src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java | 141 +++++++
src/main/java/com/zy/asrs/entity/BasRgv.java | 2
src/main/java/com/zy/core/enums/RgvModeType.java | 6
src/main/java/com/zy/common/utils/NavigateUtils.java | 52 ++
src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java | 5
src/main/java/com/zy/core/thread/impl/ZyRgvThread.java | 51 ++
src/main/java/com/zy/core/network/real/ZyStationRealConnect.java | 9
src/main/java/com/zy/core/network/ZyCrnConnectDriver.java | 6
src/main/java/com/zy/core/thread/impl/ZyStationThread.java | 5
src/main/java/com/zy/core/network/fake/ZyCrnFakeConnect.java | 2
src/main/java/com/zy/core/model/command/RgvCommand.java | 15
src/main/java/com/zy/core/network/real/ZyCrnRealConnect.java | 7
src/main/java/com/zy/core/network/ZyRgvConnectDriver.java | 7
src/main/webapp/views/watch/console.html | 73 ---
src/main/java/com/zy/asrs/domain/param/RgvCommandMoveParam.java | 12
src/main/java/com/zy/asrs/controller/RgvController.java | 159 ++++++++
src/main/java/com/zy/asrs/domain/param/RgvCommandTransportParam.java | 14
src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java | 26 +
src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java | 120 ++++++
src/main/java/com/zy/asrs/domain/param/RgvCommandTaskCompleteParam.java | 10
src/main/java/com/zy/common/CodeBuilder.java | 4
src/main/java/com/zy/core/thread/RgvThread.java | 2
src/main/java/com/zy/core/network/ZyStationConnectDriver.java | 6
src/main/java/com/zy/common/utils/NavigateSolution.java | 60 +++
src/main/java/com/zy/core/enums/RgvTaskModeType.java | 46 ++
27 files changed, 911 insertions(+), 128 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/RgvController.java b/src/main/java/com/zy/asrs/controller/RgvController.java
new file mode 100644
index 0000000..cd2a285
--- /dev/null
+++ b/src/main/java/com/zy/asrs/controller/RgvController.java
@@ -0,0 +1,159 @@
+package com.zy.asrs.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.annotations.ManagerAuth;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.zy.asrs.domain.param.RgvCommandMoveParam;
+import com.zy.asrs.domain.param.RgvCommandTaskCompleteParam;
+import com.zy.asrs.domain.param.RgvCommandTransportParam;
+import com.zy.asrs.domain.vo.RgvStateTableVo;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.entity.BasRgvErr;
+import com.zy.asrs.service.BasRgvService;
+import com.zy.asrs.service.BasRgvErrService;
+import com.zy.core.cache.MessageQueue;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.RgvModeType;
+import com.zy.core.enums.RgvStatusType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.Task;
+import com.zy.core.model.command.RgvCommand;
+import com.zy.core.model.protocol.RgvProtocol;
+import com.zy.core.thread.RgvThread;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/rgv")
+public class RgvController {
+
+ @Autowired
+ private BasRgvService basRgvService;
+ @Autowired
+ private BasRgvErrService basRgvErrService;
+
+ @PostMapping("/table/rgv/state")
+ @ManagerAuth(memo = "RGV淇℃伅琛�")
+ public R rgvStateTable() {
+ List<RgvStateTableVo> list = new ArrayList<>();
+ List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().orderBy("rgv_no"));
+ for (BasRgv basRgv : rgvs) {
+ RgvStateTableVo vo = new RgvStateTableVo();
+ vo.setRgvNo(basRgv.getRgvNo());
+ list.add(vo);
+
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo());
+ if (rgvThread == null) {
+ continue;
+ }
+ RgvProtocol rgvProtocol = rgvThread.getStatus();
+ if (rgvProtocol == null) {
+ continue;
+ }
+
+ vo.setTaskNo(rgvProtocol.getTaskNo());
+ RgvModeType modeType = RgvModeType.get(rgvProtocol.getMode());
+ vo.setMode(modeType == null ? "" : modeType.desc);
+ RgvStatusType statusType = RgvStatusType.get(rgvProtocol.getStatus() == null ? null : rgvProtocol.getStatus());
+ vo.setStatus(statusType == null ? "" : statusType.desc);
+ vo.setLoading(rgvProtocol.getLoaded() != null && rgvProtocol.getLoaded() == 1 ? "鏈夌墿" : "鏃犵墿");
+ vo.setTrackSiteNo(String.valueOf(rgvProtocol.getRgvPos()));
+
+ String deviceStatus = "";
+ if (modeType == RgvModeType.AUTO) {
+ deviceStatus = "AUTO";
+ }
+ if (rgvProtocol.getTaskNo() != null && rgvProtocol.getTaskNo() > 0) {
+ deviceStatus = "WORKING";
+ }
+ if(rgvProtocol.getAlarm() > 0) {
+ deviceStatus = "ERROR";
+ }
+ vo.setDeviceStatus(deviceStatus);
+
+ vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm()));
+ if (rgvProtocol.getAlarm() != null && rgvProtocol.getAlarm() > 0) {
+ BasRgvErr err = basRgvErrService.selectById(rgvProtocol.getAlarm());
+ vo.setAlarm(err == null ? "鏈煡寮傚父" : err.getErrName());
+ vo.setDeviceStatus("ERROR");
+ }
+ }
+ return R.ok().add(list);
+ }
+
+ @PostMapping("/output/site")
+ @ManagerAuth(memo = "RGV鎶ユ枃鏃ュ織杈撳嚭")
+ public R rgvOutput() {
+ StringBuilder str = new StringBuilder();
+ String s;
+ int i = 0;
+ while ((s = OutputQueue.RGV.poll()) != null && i <= 10) {
+ str.append("\n").append(s);
+ i++;
+ }
+ return R.ok().add(str.toString());
+ }
+
+ @PostMapping("/command/transport")
+ public R rgvCommandTransport(@RequestBody RgvCommandTransportParam param) {
+ if (Cools.isEmpty(param) || param.getRgvNo() == null || param.getTargetPos() == null) {
+ return R.error("缂哄皯鍙傛暟");
+ }
+
+ Integer rgvNo = param.getRgvNo();
+ Integer sourcePos = param.getSourcePos();
+ Integer targetPos = param.getTargetPos();
+
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo);
+ if (rgvThread == null) {
+ return R.error("绾跨▼涓嶅瓨鍦�");
+ }
+
+ RgvCommand command = rgvThread.getTransportCommand(9999, rgvNo, sourcePos, targetPos);
+ MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(2, command));
+ return R.ok();
+ }
+
+ @PostMapping("/command/move")
+ public R rgvCommandMove(@RequestBody RgvCommandMoveParam param) {
+ if (Cools.isEmpty(param) || param.getRgvNo() == null || param.getTargetPos() == null) {
+ return R.error("缂哄皯鍙傛暟");
+ }
+
+ Integer rgvNo = param.getRgvNo();
+ Integer targetPos = param.getTargetPos();
+
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo);
+ if (rgvThread == null) {
+ return R.error("绾跨▼涓嶅瓨鍦�");
+ }
+
+ RgvCommand command = rgvThread.getMoveCommand(9999, rgvNo, targetPos);
+ MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(2, command));
+ return R.ok();
+ }
+
+ @PostMapping("/command/taskComplete")
+ public R rgvCommandTaskComplete(@RequestBody RgvCommandTaskCompleteParam param) {
+ if (Cools.isEmpty(param) || param.getRgvNo() == null) {
+ return R.error("缂哄皯鍙傛暟");
+ }
+
+ Integer rgvNo = param.getRgvNo();
+
+ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo);
+ if (rgvThread == null) {
+ return R.error("绾跨▼涓嶅瓨鍦�");
+ }
+
+ RgvCommand command = rgvThread.getResetCommand(rgvNo);
+ MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(2, command));
+ return R.ok();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/zy/asrs/domain/param/RgvCommandMoveParam.java b/src/main/java/com/zy/asrs/domain/param/RgvCommandMoveParam.java
new file mode 100644
index 0000000..08c1649
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/param/RgvCommandMoveParam.java
@@ -0,0 +1,12 @@
+package com.zy.asrs.domain.param;
+
+import lombok.Data;
+
+@Data
+public class RgvCommandMoveParam {
+
+ private Integer rgvNo;
+
+ private Integer targetPos;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/param/RgvCommandTaskCompleteParam.java b/src/main/java/com/zy/asrs/domain/param/RgvCommandTaskCompleteParam.java
new file mode 100644
index 0000000..6a529f4
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/param/RgvCommandTaskCompleteParam.java
@@ -0,0 +1,10 @@
+package com.zy.asrs.domain.param;
+
+import lombok.Data;
+
+@Data
+public class RgvCommandTaskCompleteParam {
+
+ private Integer rgvNo;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/param/RgvCommandTransportParam.java b/src/main/java/com/zy/asrs/domain/param/RgvCommandTransportParam.java
new file mode 100644
index 0000000..5f7cefe
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/param/RgvCommandTransportParam.java
@@ -0,0 +1,14 @@
+package com.zy.asrs.domain.param;
+
+import lombok.Data;
+
+@Data
+public class RgvCommandTransportParam {
+
+ private Integer rgvNo;
+
+ private Integer sourcePos;
+
+ private Integer targetPos;
+
+}
diff --git a/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java b/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java
new file mode 100644
index 0000000..fdccefe
--- /dev/null
+++ b/src/main/java/com/zy/asrs/domain/vo/RgvStateTableVo.java
@@ -0,0 +1,26 @@
+package com.zy.asrs.domain.vo;
+
+import lombok.Data;
+
+@Data
+public class RgvStateTableVo {
+
+ private Integer rgvNo;
+
+ private Integer taskNo;
+
+ private String mode;
+
+ private String status;
+
+ private String loading;
+
+ private String trackSiteNo;
+
+ private String deviceStatus;
+
+ private String warnCode;
+
+ private String alarm;
+
+}
diff --git a/src/main/java/com/zy/asrs/entity/BasRgv.java b/src/main/java/com/zy/asrs/entity/BasRgv.java
index 04465d3..453395a 100644
--- a/src/main/java/com/zy/asrs/entity/BasRgv.java
+++ b/src/main/java/com/zy/asrs/entity/BasRgv.java
@@ -24,7 +24,7 @@
* 缂栧彿
*/
@ApiModelProperty(value= "缂栧彿")
- @TableId(value = "rgv_no", type = IdType.AUTO)
+ @TableId(value = "rgv_no", type = IdType.INPUT)
@TableField("rgv_no")
private Integer rgvNo;
diff --git a/src/main/java/com/zy/common/CodeBuilder.java b/src/main/java/com/zy/common/CodeBuilder.java
index 8ca736f..40b463c 100644
--- a/src/main/java/com/zy/common/CodeBuilder.java
+++ b/src/main/java/com/zy/common/CodeBuilder.java
@@ -12,10 +12,10 @@
CoolGenerator generator = new CoolGenerator();
// mysql
generator.sqlOsType = SqlOsType.MYSQL;
- generator.url="localhost:3306/wcs";
+ generator.url="192.168.4.11:3306/wcs";
generator.username="root";
generator.password="root";
- generator.table="asr_bas_devp";
+ generator.table="asr_bas_rgv_opt";
// sqlserver
// generator.sqlOsType = SqlOsType.SQL_SERVER;
// generator.url="127.0.0.1:1433;databasename=tzskasrs";
diff --git a/src/main/java/com/zy/common/utils/NavigateSolution.java b/src/main/java/com/zy/common/utils/NavigateSolution.java
index b76e86f..0cd7bed 100644
--- a/src/main/java/com/zy/common/utils/NavigateSolution.java
+++ b/src/main/java/com/zy/common/utils/NavigateSolution.java
@@ -63,6 +63,51 @@
return navigateNodeList;
}
+ public List<List<NavigateNode>> getRgvTrackMap() {
+ BasMapService basMapService = SpringUtils.getBean(BasMapService.class);
+ BasMap basMap = basMapService.selectOne(new EntityWrapper<BasMap>().eq("lev", 1));
+ if (basMap == null) {
+ throw new CoolException("鍦板浘涓嶅瓨鍦�");
+ }
+
+ List<List<JSONObject>> dataList = JSON.parseObject(basMap.getData(), List.class);
+
+ List<List<NavigateNode>> navigateNodeList = new ArrayList<>();
+ for (int i = 0; i < dataList.size(); i++) {
+ List<JSONObject> row = dataList.get(i);
+ List<NavigateNode> navigateNodeRow = new ArrayList<>();
+ for (int j = 0; j < row.size(); j++) {
+ JSONObject map = row.get(j);
+ NavigateNode navigateNode = new NavigateNode(i, j);
+
+ String nodeType = map.getString("type");
+ if(nodeType == null) {
+ navigateNode.setValue(MapNodeType.DISABLE.id);
+ }else if(nodeType.equals("rgv")){
+ navigateNode.setValue(MapNodeType.NORMAL_PATH.id);
+ JSONObject valueObj = JSON.parseObject(map.getString("value"));
+
+ //RGV鏆備笉鎺у埗琛岃蛋鏂瑰悜锛岄粯璁や笂涓嬪乏鍙抽兘鍙蛋
+ List<String> directionList = new ArrayList<>();
+ directionList.add("top");
+ directionList.add("bottom");
+ directionList.add("left");
+ directionList.add("right");
+ navigateNode.setDirectionList(directionList);
+ }else {
+ navigateNode.setValue(MapNodeType.DISABLE.id);
+ }
+
+ navigateNode.setNodeType(nodeType);
+ navigateNode.setNodeValue(map.getString("value"));
+ navigateNodeRow.add(navigateNode);
+ }
+ navigateNodeList.add(navigateNodeRow);
+ }
+
+ return navigateNodeList;
+ }
+
public NavigateNode astarSearchJava(List<List<NavigateNode>> map, NavigateNode start, NavigateNode end) {
// 娓呯悊涓婃鎼滅储鐨勭姸鎬侊紝闃叉澶嶇敤瀹炰緥瀵艰嚧璁板綍娈嬬暀
this.Open.clear();
@@ -184,6 +229,21 @@
return null;
}
+ public NavigateNode findTrackSiteNoNavigateNode(List<List<NavigateNode>> map, int trackSiteNo) {
+ for(int x = 0; x < map.size(); x++) {
+ for(int y = 0; y < map.get(0).size(); y++) {
+ NavigateNode node = map.get(x).get(y);
+ if("rgv".equals(node.getNodeType())) {
+ JSONObject valueObj = JSON.parseObject(node.getNodeValue());
+ if(valueObj.getInteger("trackSiteNo") == trackSiteNo) {
+ return node;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
//------------------A*鍚彂鍑芥暟------------------//
//璁$畻閫氳繃鐜板湪鐨勭粨鐐圭殑浣嶇疆鍜屾渶缁堢粨鐐圭殑浣嶇疆璁$畻H鍊�(鏇煎搱椤挎硶锛氬潗鏍囧垎鍒彇宸�肩浉鍔�)
diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index b0ff36d..e324def 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -66,4 +66,56 @@
return fitlerList;
}
+ public synchronized List<NavigateNode> calcByTrackSiteNo(Integer startTrackSiteNo, Integer endTrackSiteNo) {
+ NavigateSolution navigateSolution = new NavigateSolution();
+ List<List<NavigateNode>> rgvTrackMap = navigateSolution.getRgvTrackMap();
+
+ NavigateNode startNode = navigateSolution.findTrackSiteNoNavigateNode(rgvTrackMap, startTrackSiteNo);
+ if (startNode == null){
+ throw new CoolException("鏈壘鍒拌 璧风偣 瀵瑰簲鐨勮妭鐐�");
+ }
+
+ NavigateNode endNode = navigateSolution.findTrackSiteNoNavigateNode(rgvTrackMap, endTrackSiteNo);
+ if (endNode == null){
+ throw new CoolException("鏈壘鍒拌 缁堢偣 瀵瑰簲鐨勮妭鐐�");
+ }
+
+ NavigateNode res_node = navigateSolution.astarSearchJava(rgvTrackMap, startNode, endNode);
+ if (res_node == null) {
+ throw new CoolException("鏈壘鍒拌璺緞");
+ }
+
+ ArrayList<NavigateNode> list = new ArrayList<>();
+ // 浣跨敤 visited 闆嗗悎闃叉鐖堕摼鍑虹幇鐜鑷存寰幆锛屽悓鏃惰缃畨鍏ㄦ鏁颁笂闄�
+ HashSet<NavigateNode> visited = new HashSet<>();
+ int maxSteps = rgvTrackMap.size() * rgvTrackMap.get(0).size() + 5; // 瀹夊叏涓婇檺
+ int steps = 0;
+ while (res_node != null && visited.add(res_node) && steps++ < maxSteps) {
+ list.add(res_node);
+ res_node = res_node.getFather();//杩唬鎿嶄綔
+ }
+ if (steps >= maxSteps) {
+ throw new CoolException("璺緞鍥炴函瓒呭嚭瀹夊叏涓婇檺锛岀枒浼煎瓨鍦ㄧ埗閾惧惊鐜�");
+ }
+ Collections.reverse(list);
+ //灏嗘瘡涓妭鐐归噷闈㈢殑fatherNode鑷充负null(鏂逛究鍚庣画璁$畻鏃剁埗鑺傜偣杩囧瀵艰嚧鏄剧ず鐨勮妭鐐瑰お澶�)
+ for (NavigateNode navigateNode : list) {
+ //鐖惰妭鐐硅缃负null锛屼笉褰卞搷璁$畻缁撴灉锛屼笉褰卞搷鍚庣画鎿嶄綔銆�
+ //姝ゆ搷浣滀粎涓哄悗缁帓鏌ュ鐞嗘彁渚涜瑙夋柟渚裤��
+ navigateNode.setFather(null);
+ }
+
+ //鍘婚噸
+ HashSet<Integer> set = new HashSet<>();
+ List<NavigateNode> fitlerList = new ArrayList<>();
+ for(NavigateNode navigateNode : list){
+ JSONObject valuObject = JSON.parseObject(navigateNode.getNodeValue());
+ if(set.add(valuObject.getInteger("trackSiteNo"))){
+ fitlerList.add(navigateNode);
+ }
+ }
+
+ return fitlerList;
+ }
+
}
diff --git a/src/main/java/com/zy/core/enums/RgvModeType.java b/src/main/java/com/zy/core/enums/RgvModeType.java
index be41de3..34b7ab4 100644
--- a/src/main/java/com/zy/core/enums/RgvModeType.java
+++ b/src/main/java/com/zy/core/enums/RgvModeType.java
@@ -3,9 +3,9 @@
public enum RgvModeType {
NONE(-1, "绂荤嚎"),
- STOP(0, "鍏虫満"),
- HAND(1, "鎵嬪姩"),
- HALF_AUTO(2, "鍗婅嚜鍔�"),
+ HAND(0, "鎵嬪姩"),
+ COMPUTER(1, "鐢佃剳妯″紡"),
+ STOP(2, "鍋滄満"),
AUTO(3, "鑷姩"),
OTHER(100, "鍏跺畠"),
;
diff --git a/src/main/java/com/zy/core/enums/RgvTaskModeType.java b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
new file mode 100644
index 0000000..3e0067a
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/RgvTaskModeType.java
@@ -0,0 +1,46 @@
+package com.zy.core.enums;
+
+public enum RgvTaskModeType {
+
+ NONE(0), // 鏃�
+ FETCH(1), // 鍙栬揣
+ PUT(2), // 鏀捐揣
+ FETCH_PUT(3), // 鍙栨斁璐�
+ X_MOVE(4), // 绔欎綅绉昏浆
+// Y_MOVE(5), // 绔欎綅绉昏浆
+// XY_MOVE(6), // 绔欎綅绉昏浆
+ GO_ORIGIN(7), // 鍥炲師鐐�
+// BACK_ORIGIN(8), // 鍥炲弽鍘熺偣
+// CLEAR(9), // 娓呴敊
+ ;
+
+ public Integer id;
+ RgvTaskModeType(Integer id) {
+ this.id = id;
+ }
+
+ public static RgvTaskModeType get(Integer id) {
+ if (null == id) {
+ return null;
+ }
+ for (RgvTaskModeType type : RgvTaskModeType.values()) {
+ if (type.id.equals(id)) {
+ return type;
+ }
+ }
+ return null;
+ }
+
+ public static RgvTaskModeType get(RgvTaskModeType type) {
+ if (null == type) {
+ return null;
+ }
+ for (RgvTaskModeType rgvTaskModeType : RgvTaskModeType.values()) {
+ if (rgvTaskModeType == type) {
+ return rgvTaskModeType;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/zy/core/model/command/RgvCommand.java b/src/main/java/com/zy/core/model/command/RgvCommand.java
index 0ba0041..33d919e 100644
--- a/src/main/java/com/zy/core/model/command/RgvCommand.java
+++ b/src/main/java/com/zy/core/model/command/RgvCommand.java
@@ -5,15 +5,18 @@
@Data
public class RgvCommand {
- private Integer rgvNo = 0;
+ private Integer rgvNo;
- private Short ackFinish = 0;
+ // 浠诲姟瀹屾垚纭浣�
+ private Integer ackFinish = 0;
- private Short taskNo = 0;
+ private Integer taskNo;
- private Short taskMode = 0;
+ private Integer taskMode;
- private Short targetPos = 0;
+ private Integer sourcePos;
+
+ private Integer targetPos;
- private Short command = 0;
+ private Integer command;
}
\ No newline at end of file
diff --git a/src/main/java/com/zy/core/network/ZyCrnConnectDriver.java b/src/main/java/com/zy/core/network/ZyCrnConnectDriver.java
index 1127b47..f006143 100644
--- a/src/main/java/com/zy/core/network/ZyCrnConnectDriver.java
+++ b/src/main/java/com/zy/core/network/ZyCrnConnectDriver.java
@@ -18,12 +18,10 @@
public class ZyCrnConnectDriver implements ThreadHandler{
private boolean connected = false;
- private SiemensS7Net siemensNet;
private DeviceConfig deviceConfig;
private ZyCrnConnectApi zyCrnConnectApi;
- public ZyCrnConnectDriver(SiemensS7Net siemensS7Net, DeviceConfig deviceConfig) {
- this.siemensNet = siemensS7Net;
+ public ZyCrnConnectDriver(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
}
@@ -46,7 +44,7 @@
@Override
public boolean connect() {
if (deviceConfig.getFake() == 0) {
- zyCrnConnectApi = new ZyCrnRealConnect(siemensNet, deviceConfig);
+ zyCrnConnectApi = new ZyCrnRealConnect(deviceConfig);
}else {
zyCrnConnectApi = new ZyCrnFakeConnect(deviceConfig);
}
diff --git a/src/main/java/com/zy/core/network/ZyRgvConnectDriver.java b/src/main/java/com/zy/core/network/ZyRgvConnectDriver.java
index b9f6f9b..0bcfab7 100644
--- a/src/main/java/com/zy/core/network/ZyRgvConnectDriver.java
+++ b/src/main/java/com/zy/core/network/ZyRgvConnectDriver.java
@@ -1,6 +1,5 @@
package com.zy.core.network;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.zy.asrs.entity.DeviceConfig;
import com.zy.core.ThreadHandler;
import com.zy.core.model.CommandResponse;
@@ -14,12 +13,10 @@
@Slf4j
public class ZyRgvConnectDriver implements ThreadHandler {
private boolean connected = false;
- private SiemensS7Net siemensNet;
private DeviceConfig deviceConfig;
private ZyRgvConnectApi zyRgvConnectApi;
- public ZyRgvConnectDriver(SiemensS7Net siemensS7Net, DeviceConfig deviceConfig) {
- this.siemensNet = siemensS7Net;
+ public ZyRgvConnectDriver(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
}
@@ -41,7 +38,7 @@
@Override
public boolean connect() {
if (deviceConfig.getFake() == 0) {
- zyRgvConnectApi = new ZyRgvRealConnect(siemensNet, deviceConfig);
+ zyRgvConnectApi = new ZyRgvRealConnect(deviceConfig);
} else {
zyRgvConnectApi = new ZyRgvFakeConnect(deviceConfig);
}
diff --git a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
index e4d1cec..b8d3520 100644
--- a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
+++ b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
@@ -19,12 +19,10 @@
public class ZyStationConnectDriver implements ThreadHandler {
private boolean connected = false;
- private SiemensS7Net siemensNet;
private DeviceConfig deviceConfig;
private ZyStationConnectApi zyStationConnectApi;
- public ZyStationConnectDriver(SiemensS7Net siemensS7Net, DeviceConfig deviceConfig) {
- this.siemensNet = siemensS7Net;
+ public ZyStationConnectDriver(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
}
@@ -46,7 +44,7 @@
@Override
public boolean connect() {
if (deviceConfig.getFake() == 0) {
- zyStationConnectApi = new ZyStationRealConnect(siemensNet, deviceConfig);
+ zyStationConnectApi = new ZyStationRealConnect(deviceConfig);
} else {
zyStationConnectApi = new ZyStationFakeConnect(deviceConfig);
}
diff --git a/src/main/java/com/zy/core/network/entity/ZyRgvStatusEntity.java b/src/main/java/com/zy/core/network/entity/ZyRgvStatusEntity.java
index 0dc5d6c..8fedd26 100644
--- a/src/main/java/com/zy/core/network/entity/ZyRgvStatusEntity.java
+++ b/src/main/java/com/zy/core/network/entity/ZyRgvStatusEntity.java
@@ -5,6 +5,8 @@
@Data
public class ZyRgvStatusEntity {
+ private Integer rgvNo;
+
private Integer mode;
private Integer taskNo;
@@ -12,7 +14,14 @@
private Integer status;
private Integer rgvPos;
-
+
+ /**
+ * 璧拌鍦ㄥ畾浣�
+ * 0 = 鍦ㄥ畾浣�
+ * 1 = 涓嶅湪瀹氫綅
+ */
+ public Integer walkPos;
+
private Integer loaded;
private Integer alarm;
diff --git a/src/main/java/com/zy/core/network/fake/ZyCrnFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyCrnFakeConnect.java
index 1a3be97..a91560b 100644
--- a/src/main/java/com/zy/core/network/fake/ZyCrnFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyCrnFakeConnect.java
@@ -141,7 +141,7 @@
}
}
- private void sleep(long ms) {
+ private void sleep(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
diff --git a/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java b/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
index b42a65c..eca22e9 100644
--- a/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
+++ b/src/main/java/com/zy/core/network/fake/ZyRgvFakeConnect.java
@@ -1,15 +1,26 @@
package com.zy.core.network.fake;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.core.common.SpringUtils;
import com.zy.asrs.entity.DeviceConfig;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.utils.NavigateUtils;
+import com.zy.core.enums.RgvModeType;
+import com.zy.core.enums.RgvStatusType;
+import com.zy.core.enums.RgvTaskModeType;
import com.zy.core.model.CommandResponse;
import com.zy.core.model.command.RgvCommand;
import com.zy.core.network.api.ZyRgvConnectApi;
import com.zy.core.network.entity.ZyRgvStatusEntity;
+import com.zy.core.network.entity.ZyStationStatusEntity;
+
+import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ZyRgvFakeConnect implements ZyRgvConnectApi {
+
private ZyRgvStatusEntity status;
private final DeviceConfig deviceConfig;
private final ExecutorService executor = Executors.newSingleThreadExecutor();
@@ -38,18 +49,124 @@
@Override
public CommandResponse sendCommand(RgvCommand command) {
CommandResponse response = new CommandResponse(true);
- executor.submit(() -> {
- if (command.getTaskMode() != null && command.getTaskMode() == 1) {
- status.setTaskNo((int) command.getTaskNo());
- status.setStatus(1);
- try { Thread.sleep(300); } catch (InterruptedException ignored) {}
- status.setRgvPos((int) command.getTargetPos());
- status.setStatus(0);
- } else if (command.getTaskMode() != null && command.getTaskMode() == 0) {
- status.setTaskNo(0);
- status.setStatus(0);
- }
- });
+ if (command.getTaskMode() == RgvTaskModeType.FETCH_PUT.id) {
+ //鍙栨斁璐�
+ executor.submit(() -> commandTake(command));
+ } else if (command.getTaskMode() == RgvTaskModeType.X_MOVE.id) {
+ //绉诲姩
+ executor.submit(() -> commandMove(command));
+ }else if (command.getTaskMode() == RgvTaskModeType.NONE.id) {
+ //澶嶄綅
+ executor.submit(() -> commandTaskComplete(command));
+ }
return response;
}
+
+ private void commandTake(RgvCommand command) {
+ int taskNo = command.getTaskNo();
+ int taskMode = command.getTaskMode();
+ int sourcePos = command.getSourcePos();
+ int targetPos = command.getTargetPos();
+
+ NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
+ if (navigateUtils == null) {
+ return;
+ }
+
+ List<NavigateNode> navigateNodes = null;
+ try {
+ navigateNodes = navigateUtils.calcByTrackSiteNo(status.getRgvPos(), sourcePos);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (navigateNodes == null) {
+ return;
+ }
+
+ List<NavigateNode> targetNavigateNodes = null;
+ try {
+ targetNavigateNodes = navigateUtils.calcByTrackSiteNo(sourcePos, targetPos);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (targetNavigateNodes == null) {
+ return;
+ }
+
+ status.setTaskNo(taskNo);
+ status.setStatus(RgvStatusType.FETCHING.id);
+ for (int i = 0; i < navigateNodes.size(); i++) {
+ NavigateNode navigateNode = navigateNodes.get(i);
+ JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue());
+ Integer currentTrackSiteNo = valueObject.getInteger("trackSiteNo");
+
+ status.setRgvPos(currentTrackSiteNo);
+ sleep(1000);
+ }
+
+ status.setStatus(RgvStatusType.PUTTING.id);
+ status.setLoaded(1);
+ sleep(1000);
+
+ for (int i = 0; i < targetNavigateNodes.size(); i++) {
+ NavigateNode navigateNode = targetNavigateNodes.get(i);
+ JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue());
+ Integer currentTrackSiteNo = valueObject.getInteger("trackSiteNo");
+
+ status.setRgvPos(currentTrackSiteNo);
+ sleep(1000);
+ }
+
+ sleep(1000);
+ status.setStatus(RgvStatusType.WAITING.id);
+ }
+
+ private void commandMove(RgvCommand command) {
+ int taskNo = command.getTaskNo();
+ int taskMode = command.getTaskMode();
+ int targetPos = command.getTargetPos();
+
+ NavigateUtils navigateUtils = SpringUtils.getBean(NavigateUtils.class);
+ if (navigateUtils == null) {
+ return;
+ }
+
+ List<NavigateNode> navigateNodes = null;
+ try {
+ navigateNodes = navigateUtils.calcByTrackSiteNo(status.getRgvPos(), targetPos);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (navigateNodes == null) {
+ return;
+ }
+
+ status.setTaskNo(taskNo);
+ status.setStatus(RgvStatusType.WORKING.id);
+ for (int i = 0; i < navigateNodes.size(); i++) {
+ NavigateNode navigateNode = navigateNodes.get(i);
+ JSONObject valueObject = JSON.parseObject(navigateNode.getNodeValue());
+ Integer currentTrackSiteNo = valueObject.getInteger("trackSiteNo");
+
+ status.setRgvPos(currentTrackSiteNo);
+ sleep(1000);
+ }
+ status.setStatus(RgvStatusType.WAITING.id);
+ }
+
+ private void commandTaskComplete(RgvCommand command) {
+ status.setTaskNo(0);
+ status.setStatus(RgvStatusType.IDLE.id);
+ }
+
+ private void sleep(long ms) {
+ try {
+ Thread.sleep(ms);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/zy/core/network/real/ZyCrnRealConnect.java b/src/main/java/com/zy/core/network/real/ZyCrnRealConnect.java
index 694ef52..059ebf8 100644
--- a/src/main/java/com/zy/core/network/real/ZyCrnRealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyCrnRealConnect.java
@@ -2,6 +2,7 @@
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne;
+import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.core.common.DateUtils;
@@ -25,13 +26,13 @@
private SiemensS7Net siemensNet;
private DeviceConfig deviceConfig;
- public ZyCrnRealConnect(SiemensS7Net siemensS7Net, DeviceConfig deviceConfig) {
- this.siemensNet = siemensS7Net;
+ public ZyCrnRealConnect(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
}
public boolean connect() {
boolean connected = false;
+ siemensNet = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp());
OperateResult connect = siemensNet.ConnectServer();
if(connect.IsSuccess){
connected = true;
@@ -220,7 +221,7 @@
null, // 淇敼浜哄憳
null, // 澶囨敞
JSON.toJSONString(command), // 鎸囦护
- JSON.toJSONString(command), // 绯荤粺鐘舵��
+ JSON.toJSONString(getStatus()), // 绯荤粺鐘舵��
1, // 涓嬪彂鐘舵�亄0:鏈笅鍙�,1:宸蹭笅鍙憓
JSON.toJSONString(response) // 鍝嶅簲
);
diff --git a/src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java b/src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java
index f70729d..97a8ffc 100644
--- a/src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyRgvRealConnect.java
@@ -1,38 +1,146 @@
package com.zy.core.network.real;
+import HslCommunication.Core.Types.OperateResult;
+import HslCommunication.Core.Types.OperateResultExOne;
+import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
+
+import java.text.MessageFormat;
+import java.util.Date;
+
+import com.alibaba.fastjson.JSON;
+import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.BasCrnpOpt;
+import com.zy.asrs.entity.BasRgv;
+import com.zy.asrs.entity.BasRgvOpt;
import com.zy.asrs.entity.DeviceConfig;
+import com.zy.asrs.entity.DeviceDataLog;
+import com.zy.asrs.service.BasCrnpOptService;
+import com.zy.asrs.service.BasRgvOptService;
+import com.zy.asrs.service.BasRgvService;
+import com.zy.asrs.service.DeviceDataLogService;
+import com.zy.asrs.utils.Utils;
+import com.zy.core.News;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.RgvStatusType;
import com.zy.core.model.CommandResponse;
import com.zy.core.model.command.RgvCommand;
+import com.zy.core.model.protocol.RgvProtocol;
import com.zy.core.network.api.ZyRgvConnectApi;
import com.zy.core.network.entity.ZyRgvStatusEntity;
public class ZyRgvRealConnect implements ZyRgvConnectApi {
- private final SiemensS7Net siemensNet;
- private final DeviceConfig deviceConfig;
- public ZyRgvRealConnect(SiemensS7Net siemensNet, DeviceConfig deviceConfig) {
- this.siemensNet = siemensNet;
+ private SiemensS7Net siemensNet;
+ private DeviceConfig deviceConfig;
+
+ public ZyRgvRealConnect(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
}
@Override
public boolean connect() {
- return true;
+ boolean result = false;
+ siemensNet = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp());
+ OperateResult connect = siemensNet.ConnectServer();
+ if(connect.IsSuccess){
+ result = true;
+ OutputQueue.RGV.offer(MessageFormat.format( "銆恵0}銆慠GV plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+ News.info("RGV plc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort());
+ } else {
+ OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慠GV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+ News.error("RGV plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort());
+ }
+// siemensNet.ConnectClose();
+ return result;
}
@Override
public boolean disconnect() {
+ siemensNet.ConnectClose();
return true;
}
@Override
public ZyRgvStatusEntity getStatus() {
+ try {
+ OperateResultExOne<byte[]> result = siemensNet.Read("DB101.0", (short) 30);
+ if (result.IsSuccess) {
+ ZyRgvStatusEntity zyRgvStatusEntity = new ZyRgvStatusEntity();
+ zyRgvStatusEntity.setRgvNo(deviceConfig.getDeviceNo());
+ zyRgvStatusEntity.setMode((int) siemensNet.getByteTransform().TransInt16(result.Content, 0));
+ zyRgvStatusEntity.setStatus((int) siemensNet.getByteTransform().TransInt16(result.Content, 2));
+ zyRgvStatusEntity.setTaskNo((int) siemensNet.getByteTransform().TransInt16(result.Content, 4));
+ // zyRgvStatusEntity.setStatus((int) siemensNet.getByteTransform().TransInt16(result.Content, 6));
+ zyRgvStatusEntity.setLoaded((int) siemensNet.getByteTransform().TransInt16(result.Content, 8));
+ zyRgvStatusEntity.setRgvPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 10));
+ zyRgvStatusEntity.setWalkPos((int) siemensNet.getByteTransform().TransInt16(result.Content, 12));
+ zyRgvStatusEntity.setAlarm((int) siemensNet.getByteTransform().TransInt16(result.Content, 14));
+
+ OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), deviceConfig.getDeviceNo()));
+
+ return zyRgvStatusEntity;
+ } else {
+ OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戣鍙朢GV plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+ }
return null;
}
@Override
public CommandResponse sendCommand(RgvCommand command) {
- return new CommandResponse(false, "not implemented");
+ CommandResponse response = new CommandResponse(false);
+ try {
+ if (null == command) {
+ response.setMessage("RGV鍐欏叆鍛戒护涓虹┖");
+ return response;
+ }
+
+ short[] array = new short[5];
+ array[0] = command.getAckFinish().shortValue();
+ array[1] = command.getTaskNo().shortValue();
+ array[2] = command.getTaskMode().shortValue();
+ array[3] = command.getSourcePos().shortValue();
+ array[4] = command.getTargetPos().shortValue();
+ OperateResult result = siemensNet.Write("DB100.0", array);
+
+ if (result != null && result.IsSuccess) {
+ News.info("RGV 鍛戒护涓嬪彂[id:{}] >>>>> {}", deviceConfig.getDeviceNo(), JSON.toJSON(command));
+ OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), JSON.toJSON(command)));
+ response.setResult(true);
+ return response;
+ } else {
+ OutputQueue.RGV.offer(MessageFormat.format("銆恵0}銆戝啓鍏GV plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort()));
+ News.error("鍐欏叆RGV plc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", deviceConfig.getId(), deviceConfig.getIp(), deviceConfig.getPort());
+ response.setMessage("鍐欏叆RGV plc鏁版嵁澶辫触");
+ return response;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ // 鏃ュ織璁板綍
+ BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class);
+ BasRgvOpt basRgvOpt = new BasRgvOpt(
+ command.getTaskNo(), // 浠诲姟鍙�
+ command.getRgvNo(), // RGV[闈炵┖]
+ new Date(), // 涓嬪彂鏃堕棿
+ String.valueOf(command.getTaskMode()), // 妯″紡
+ String.valueOf(command.getSourcePos()), //婧愬簱浣�
+ String.valueOf(command.getTargetPos()), //鐩爣搴撲綅
+ null, // 淇敼鏃堕棿
+ null, // 淇敼浜哄憳
+ null, // 澶囨敞
+ JSON.toJSONString(command), // 鎸囦护
+ JSON.toJSONString(getStatus()), // 绯荤粺鐘舵��
+ 1, // 涓嬪彂鐘舵�亄0:鏈笅鍙�,1:宸蹭笅鍙憓
+ JSON.toJSONString(response) // 鍝嶅簲
+ );
+ bean.insert(basRgvOpt);
+ }
+ return response;
}
}
\ No newline at end of file
diff --git a/src/main/java/com/zy/core/network/real/ZyStationRealConnect.java b/src/main/java/com/zy/core/network/real/ZyStationRealConnect.java
index d74bc5a..0399061 100644
--- a/src/main/java/com/zy/core/network/real/ZyStationRealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyStationRealConnect.java
@@ -2,6 +2,7 @@
import HslCommunication.Core.Types.OperateResult;
import HslCommunication.Core.Types.OperateResultExOne;
+import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import lombok.extern.slf4j.Slf4j;
@@ -33,17 +34,17 @@
private List<ZyStationStatusEntity> statusList;
private List<ZyStationStatusEntity> barcodeStatusList;
- private final SiemensS7Net siemensNet;
- private final DeviceConfig deviceConfig;
+ private SiemensS7Net siemensNet;
+ private DeviceConfig deviceConfig;
- public ZyStationRealConnect(SiemensS7Net siemensNet, DeviceConfig deviceConfig) {
- this.siemensNet = siemensNet;
+ public ZyStationRealConnect(DeviceConfig deviceConfig) {
this.deviceConfig = deviceConfig;
}
@Override
public boolean connect() {
boolean connected = false;
+ siemensNet = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp());
OperateResult connect = siemensNet.ConnectServer();
if (connect.IsSuccess) {
connected = true;
diff --git a/src/main/java/com/zy/core/thread/RgvThread.java b/src/main/java/com/zy/core/thread/RgvThread.java
index 9d0f2ac..39fda80 100644
--- a/src/main/java/com/zy/core/thread/RgvThread.java
+++ b/src/main/java/com/zy/core/thread/RgvThread.java
@@ -9,6 +9,8 @@
RgvProtocol getStatus();
+ RgvCommand getTransportCommand(Integer taskNo, Integer rgvNo, Integer sourcePos, Integer targetPos);
+
RgvCommand getMoveCommand(Integer taskNo, Integer rgvNo, Integer targetPos);
RgvCommand getResetCommand(Integer rgvNo);
diff --git a/src/main/java/com/zy/core/thread/impl/ZyRgvThread.java b/src/main/java/com/zy/core/thread/impl/ZyRgvThread.java
index 130e0bc..6ce7e22 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyRgvThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyRgvThread.java
@@ -3,13 +3,18 @@
import HslCommunication.Profinet.Siemens.SiemensPLCS;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.DateUtils;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.BasRgv;
import com.zy.asrs.entity.DeviceConfig;
import com.zy.asrs.entity.DeviceDataLog;
+import com.zy.asrs.service.BasRgvService;
import com.zy.common.utils.RedisUtil;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
import com.zy.core.enums.RedisKeyType;
+import com.zy.core.enums.RgvTaskModeType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.CommandResponse;
import com.zy.core.model.Task;
@@ -28,6 +33,7 @@
@Data
@Slf4j
public class ZyRgvThread implements Runnable, RgvThread {
+
private DeviceConfig deviceConfig;
private RedisUtil redisUtil;
private ZyRgvConnectDriver zyRgvConnectDriver;
@@ -72,7 +78,7 @@
rgvProtocol = new RgvProtocol();
rgvProtocol.setRgvNo(deviceConfig.getDeviceNo());
}
- rgvProtocol.setMode(-1);
+ rgvProtocol.setMode(0);
rgvProtocol.setTaskNo(0);
rgvProtocol.setStatus(-1);
rgvProtocol.setRgvPos(0);
@@ -82,8 +88,7 @@
@Override
public boolean connect() {
- SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp());
- zyRgvConnectDriver = new ZyRgvConnectDriver(siemensS7Net, deviceConfig);
+ zyRgvConnectDriver = new ZyRgvConnectDriver(deviceConfig);
new Thread(zyRgvConnectDriver).start();
DeviceConnectPool.put(SlaveType.Rgv, deviceConfig.getDeviceNo(), zyRgvConnectDriver);
return true;
@@ -122,6 +127,18 @@
redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24);
rgvProtocol.setDeviceDataLog(System.currentTimeMillis());
}
+
+ BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class);
+ if (basRgvService != null) {
+ BasRgv basRgv = basRgvService.selectOne(new EntityWrapper<BasRgv>().eq("rgv_no", deviceConfig.getDeviceNo()));
+ if(basRgv == null) {
+ basRgv = new BasRgv();
+ basRgv.setRgvNo(deviceConfig.getDeviceNo());
+ basRgv.setStatus(1);
+ basRgv.setCreateTime(new Date());
+ basRgvService.insert(basRgv);
+ }
+ }
}
@Override
@@ -135,13 +152,25 @@
}
@Override
+ public RgvCommand getTransportCommand(Integer taskNo, Integer rgvNo, Integer sourcePos, Integer targetPos) {
+ RgvCommand cmd = new RgvCommand();
+ cmd.setRgvNo(rgvNo);
+ cmd.setTaskNo(taskNo);
+ cmd.setTaskMode(RgvTaskModeType.FETCH_PUT.id);
+ cmd.setSourcePos(sourcePos);
+ cmd.setTargetPos(targetPos);
+ cmd.setCommand(1);
+ return cmd;
+ }
+
+ @Override
public RgvCommand getMoveCommand(Integer taskNo, Integer rgvNo, Integer targetPos) {
RgvCommand cmd = new RgvCommand();
cmd.setRgvNo(rgvNo);
- cmd.setTaskNo(taskNo.shortValue());
- cmd.setTaskMode((short) 1);
- cmd.setTargetPos(targetPos.shortValue());
- cmd.setCommand((short) 1);
+ cmd.setTaskNo(taskNo);
+ cmd.setTaskMode(RgvTaskModeType.X_MOVE.id);
+ cmd.setTargetPos(targetPos);
+ cmd.setCommand(1);
return cmd;
}
@@ -149,10 +178,10 @@
public RgvCommand getResetCommand(Integer rgvNo) {
RgvCommand cmd = new RgvCommand();
cmd.setRgvNo(rgvNo);
- cmd.setTaskNo((short) 0);
- cmd.setAckFinish((short) 1);
- cmd.setTaskMode((short) 0);
- cmd.setCommand((short) 1);
+ cmd.setTaskNo(0);
+ cmd.setAckFinish(1);
+ cmd.setTaskMode(0);
+ cmd.setCommand(1);
return cmd;
}
diff --git a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
index e0d46c5..ee135e2 100644
--- a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnThread.java
@@ -1,7 +1,5 @@
package com.zy.core.thread.impl;
-import HslCommunication.Profinet.Siemens.SiemensPLCS;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.DateUtils;
@@ -109,8 +107,7 @@
@Override
public boolean connect() {
- SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp());
- zyCrnConnectDriver = new ZyCrnConnectDriver(siemensS7Net, deviceConfig);
+ zyCrnConnectDriver = new ZyCrnConnectDriver(deviceConfig);
new Thread(zyCrnConnectDriver).start();
DeviceConnectPool.put(SlaveType.Crn, deviceConfig.getDeviceNo(), zyCrnConnectDriver);
return true;
diff --git a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
index 5c0d73c..68cbd91 100644
--- a/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZyStationThread.java
@@ -1,7 +1,5 @@
package com.zy.core.thread.impl;
-import HslCommunication.Profinet.Siemens.SiemensPLCS;
-import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.BasDevp;
@@ -143,8 +141,7 @@
@Override
public boolean connect() {
- SiemensS7Net siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp());
- zyStationConnectDriver = new ZyStationConnectDriver(siemensS7Net, deviceConfig);
+ zyStationConnectDriver = new ZyStationConnectDriver(deviceConfig);
new Thread(zyStationConnectDriver).start();
DeviceConnectPool.put(SlaveType.Devp, deviceConfig.getDeviceNo(), zyStationConnectDriver);
return true;
diff --git a/src/main/webapp/components/WatchRgvCard.js b/src/main/webapp/components/WatchRgvCard.js
new file mode 100644
index 0000000..18e6ba5
--- /dev/null
+++ b/src/main/webapp/components/WatchRgvCard.js
@@ -0,0 +1,188 @@
+Vue.component("watch-rgv-card", {
+ template: `
+ <div>
+ <div style="display: flex;margin-bottom: 10px;">
+ <div style="width: 100%;">RGV鐩戞帶</div>
+ <div style="width: 100%;text-align: right;display: flex;">
+ <el-input size="mini" v-model="searchRgvNo" placeholder="璇疯緭鍏GV鍙�"></el-input>
+ <el-button @click="getRgvStateInfo" size="mini">鏌ヨ</el-button>
+ </div>
+ </div>
+ <div style="margin-bottom: 10px;">
+ <div style="margin-bottom: 5px;">
+ <el-button v-if="showControl" @click="openControl" size="mini">鍏抽棴鎺у埗涓績</el-button>
+ <el-button v-else @click="openControl" size="mini">鎵撳紑鎺у埗涓績</el-button>
+ </div>
+ <div v-if="showControl" style="display: flex;justify-content: space-between;flex-wrap: wrap;">
+ <div style="margin-bottom: 10px;width: 33%;"><el-input size="mini" v-model="controlParam.rgvNo" placeholder="RGV鍙�"></el-input></div>
+ <div style="margin-bottom: 10px;width: 33%;"><el-input size="mini" v-model="controlParam.sourcePos" placeholder="婧愮偣"></el-input></div>
+ <div style="margin-bottom: 10px;width: 33%;"><el-input size="mini" v-model="controlParam.targetPos" placeholder="鐩爣鐐�"></el-input></div>
+ <div style="margin-bottom: 10px;"><el-button @click="controlCommandTransport()" size="mini">鍙栨斁璐�</el-button></div>
+ <div style="margin-bottom: 10px;"><el-button @click="controlCommandMove()" size="mini">绉诲姩</el-button></div>
+ <div style="margin-bottom: 10px;"><el-button @click="controlCommandTaskComplete()" size="mini">浠诲姟瀹屾垚</el-button></div>
+ </div>
+ </div>
+ <el-collapse v-model="activeNames">
+ <el-collapse-item v-for="(item) in rgvList" :name="item.rgvNo">
+ <template slot="title">
+ <div style="width: 100%;display: flex;">
+ <div style="width: 50%;">{{ item.rgvNo }}鍙稲GV</div>
+ <div style="width: 50%;text-align: right;">
+ <el-tag v-if="item.deviceStatus === 'AUTO'" type="success" size="small">鑷姩</el-tag>
+ <el-tag v-else-if="item.deviceStatus === 'WORKING'" size="small">浣滀笟涓�</el-tag>
+ <el-tag v-else-if="item.deviceStatus === 'ERROR'" type="danger" size="small">鎶ヨ</el-tag>
+ <el-tag v-else type="warning" size="small">绂荤嚎</el-tag>
+ </div>
+ </div>
+ </template>
+ <el-descriptions border direction="vertical">
+ <el-descriptions-item label="缂栧彿">{{ item.rgvNo }}</el-descriptions-item>
+ <el-descriptions-item label="宸ヤ綔鍙�">{{ item.taskNo }}</el-descriptions-item>
+ <el-descriptions-item label="妯″紡">{{ item.mode }}</el-descriptions-item>
+ <el-descriptions-item label="鐘舵��">{{ item.status }}</el-descriptions-item>
+ <el-descriptions-item label="杞ㄩ亾浣�">{{ item.trackSiteNo }}</el-descriptions-item>
+ <el-descriptions-item label="鏄惁鏈夌墿">{{ item.loading }}</el-descriptions-item>
+ <el-descriptions-item label="鏁呴殰浠g爜">{{ item.warnCode }}</el-descriptions-item>
+ <el-descriptions-item label="鏁呴殰鎻忚堪">{{ item.alarm }}</el-descriptions-item>
+ </el-descriptions>
+ </el-collapse-item>
+ </el-collapse>
+ </div>
+ `,
+ props: ["param"],
+ data() {
+ return {
+ rgvList: [],
+ activeNames: "",
+ searchRgvNo: "",
+ showControl: true,
+ controlParam: {
+ rgvNo: "",
+ sourcePos: "",
+ targetPos: ""
+ }
+ };
+ },
+ created() {
+ setInterval(() => {
+ this.getRgvStateInfo();
+ }, 1000);
+ },
+ watch: {
+ param: {
+ handler(newVal) {
+ if (newVal && newVal.rgvNo != 0) {
+ this.activeNames = newVal.rgvNo;
+ }
+ },
+ deep: true,
+ immediate: true
+ },
+ },
+ methods: {
+ getRgvStateInfo() {
+ let that = this;
+ $.ajax({
+ url: baseUrl + "/rgv/table/rgv/state",
+ headers: {
+ token: localStorage.getItem("token"),
+ },
+ method: "post",
+ success: (res) => {
+ if (res.code == 200) {
+ let list = res.data || [];
+ if (that.searchRgvNo == "") {
+ that.rgvList = list;
+ } else {
+ let tmp = [];
+ list.forEach((item) => {
+ if (item.rgvNo == that.searchRgvNo) {
+ tmp.push(item);
+ }
+ });
+ that.rgvList = tmp;
+ }
+ }
+ },
+ });
+ },
+ openControl() {
+ this.showControl = !this.showControl;
+ },
+ controlCommandTransport() {
+ let that = this;
+ $.ajax({
+ url: baseUrl + "/rgv/command/transport",
+ headers: {
+ token: localStorage.getItem("token"),
+ },
+ contentType: "application/json",
+ method: "post",
+ data: JSON.stringify(that.controlParam),
+ success: (res) => {
+ if (res.code == 200) {
+ that.$message({
+ message: res.msg,
+ type: "success",
+ });
+ } else {
+ that.$message({
+ message: res.msg,
+ type: "warning",
+ });
+ }
+ },
+ });
+ },
+ controlCommandMove() {
+ let that = this;
+ $.ajax({
+ url: baseUrl + "/rgv/command/move",
+ headers: {
+ token: localStorage.getItem("token"),
+ },
+ contentType: "application/json",
+ method: "post",
+ data: JSON.stringify(that.controlParam),
+ success: (res) => {
+ if (res.code == 200) {
+ that.$message({
+ message: res.msg,
+ type: "success",
+ });
+ } else {
+ that.$message({
+ message: res.msg,
+ type: "warning",
+ });
+ }
+ },
+ });
+ },
+ controlCommandTaskComplete() {
+ let that = this;
+ $.ajax({
+ url: baseUrl + "/rgv/command/taskComplete",
+ headers: {
+ token: localStorage.getItem("token"),
+ },
+ contentType: "application/json",
+ method: "post",
+ data: JSON.stringify(that.controlParam),
+ success: (res) => {
+ if (res.code == 200) {
+ that.$message({
+ message: res.msg,
+ type: "success",
+ });
+ } else {
+ that.$message({
+ message: res.msg,
+ type: "warning",
+ });
+ }
+ },
+ });
+ },
+ },
+});
\ No newline at end of file
diff --git a/src/main/webapp/views/watch/console.html b/src/main/webapp/views/watch/console.html
index 4b83614..1108d29 100644
--- a/src/main/webapp/views/watch/console.html
+++ b/src/main/webapp/views/watch/console.html
@@ -24,7 +24,9 @@
<el-tab-pane label="杈撻�佺珯" name="devp">
<devp-card :param="devpParam"></devp-card>
</el-tab-pane>
- <el-tab-pane label="RGV" name="rgv">RGV</el-tab-pane>
+ <el-tab-pane label="RGV" name="rgv">
+ <watch-rgv-card :param="rgvParam"></watch-rgv-card>
+ </el-tab-pane>
<el-tab-pane label="鍦板浘閰嶇疆" name="mapSetting">
<map-setting-card :param="mapSettingParam"></map-setting-card>
</el-tab-pane>
@@ -75,6 +77,7 @@
<script src="../../components/WatchCrnCard.js"></script>
<script src="../../components/DevpCard.js"></script>
<script src="../../components/MapSettingCard.js"></script>
+ <script src="../../components/WatchRgvCard.js"></script>
<script>
var app = new Vue({
el: '#app',
@@ -94,6 +97,9 @@
},
devpParam: {
stationId: 0
+ },
+ rgvParam: {
+ rgvNo: 0
}
},
created() {
@@ -150,30 +156,8 @@
this.activateCard = 'crn';
},
openRgv(id) {
- this.rgvWindow = true; //鎵撳紑RGV淇℃伅寮圭獥
- $(".detailed").empty();
- $('.detailed').append(id + '鍙稲GV');
- $.ajax({
- url: baseUrl + "/console/rgv/detail",
- headers: {
- 'token': localStorage.getItem('token')
- },
- data: {
- rgvNo: id
- },
- method: 'post',
- success: function(res) {
- for (var val in res.data) {
- var find = $("#rgvWindow").find(":input[name='" + val + "']");
- if (find[0].type === 'text') {
- find.val(res.data[val]);
- } else if (find[0].type === 'checkbox') {
- find.attr("checked", res.data[val] === 'Y');
- }
- }
- }
-
- })
+ this.rgvParam.rgvNo = id;
+ this.activateCard = 'rgv';
},
openSite(id) {
this.devpParam.stationId = id;
@@ -303,38 +287,13 @@
let trackSiteNo = rgvs[i].trackSiteNo;
let trackSiteEl = $("#rgvTrackSiteNo-" + trackSiteNo);
- let flag = false;
- that.rgvPosition.forEach((item) => {
- if (item.id == rgvs[i].rgvNo) {
- if (item.trackSiteNo != trackSiteNo) {
- flag = true
- }
- }
- })
-
- if (flag) {
- let finalOffset = 0;
- let targetPosition = trackSiteEl.parent().parent().position().left;
- let rgvPosition = rgvEl.position().left;
- let calcResult = targetPosition - rgvPosition
- if (calcResult > 0) {
- finalOffset = targetPosition + trackSiteEl.width();
- }else {
- finalOffset = targetPosition;
- }
-
- rgvEl.animate({left: finalOffset + "px"}, 500);
-
- let position = []
- that.rgvPosition.forEach((item) => {
- if (item.id == rgvs[i].rgvNo) {
- item.trackSiteNo = trackSiteNo
- }
- position.push(item)
- })
- that.rgvPosition = position
- }
-
+ let parentLeft = rgvEl.offsetParent().offset().left;
+ let targetPosition = trackSiteEl.parent().parent().offset().left - parentLeft;
+ let rgvPosition = rgvEl.position().left;
+ let zoomFactor = that.mapSettingParam.zoom ? (that.mapSettingParam.zoom / 100) : 1;
+ if (zoomFactor <= 0) { zoomFactor = 1; }
+ let finalOffset = targetPosition / zoomFactor;
+ rgvEl.animate({left: finalOffset + "px"}, 500);
}
} else if (res.code === 403) {
parent.location.href = baseUrl + "/login";
--
Gitblit v1.9.1