From 06bd2d6dbd31315b68e768d6b59139c753f8ff96 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 27 三月 2023 09:28:38 +0800
Subject: [PATCH] 四向穿梭车线程代码逻辑
---
src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java | 14 +-
src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java | 35 +++++
src/main/java/com/zy/asrs/controller/ShuttleController.java | 2
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 97 ++-------------
src/main/java/com/zy/core/thread/ShuttleThread.java | 171 +++++++++++++++++++++++----
src/main/java/com/zy/core/ServerBootstrap.java | 5
6 files changed, 205 insertions(+), 119 deletions(-)
diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java
index d1d94ea..f6b7fe7 100644
--- a/src/main/java/com/zy/asrs/controller/ShuttleController.java
+++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java
@@ -124,7 +124,7 @@
}
}
vo.setSpeed(shuttleProtocol.getCurrentMoveServoSpeed()); // 閫熷害
- vo.setPakMk(shuttleProtocol.getPakMk()); // 浣滀笟鏍囪
+ vo.setPakMk(shuttleProtocol.getPakMk().toString()); // 浣滀笟鏍囪
}
return R.ok().add(list);
}
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 538cced..b76cabc 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -22,10 +22,7 @@
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.*;
import com.zy.core.model.*;
-import com.zy.core.model.command.CrnCommand;
-import com.zy.core.model.command.LedCommand;
-import com.zy.core.model.command.ShuttleCommand;
-import com.zy.core.model.command.SteCommand;
+import com.zy.core.model.command.*;
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.ShuttleProtocol;
import com.zy.core.model.protocol.StaProtocol;
@@ -631,85 +628,23 @@
//鍒嗛厤鐩爣搴撲綅
shuttleProtocol.setLocNo(wrkSts.getLocNo());
- //璁$畻璺緞
- List<NavigateNode> calc = NavigateUtils.calc(wrkSts.getSourceLocNo(), wrkSts.getLocNo(), "in");
- //鑾峰彇鍒嗘璺緞
- ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
- //灏嗘map瀛樺叆redis涓�
- HashMap<String, Object> map = new HashMap<>();
- //鎵ц姝ュ簭
- map.put("step", 0);
- //璺緞鏁版嵁
- map.put("path", data);
- //宸ヤ綔鍙�
- map.put("wrk_no", wrkSts.getWrkNo());
- //浠诲姟鏁版嵁淇濆瓨鍒皉edis
- redisUtil.set("wrk_no_" + wrkSts.getWrkNo().shortValue(), JSON.toJSONString(map));
+
+ ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+ //鍥涘悜绌挎杞﹀彿
+ assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
+ //浠诲姟鍙�
+ assignCommand.setTaskNo(wrkSts.getWrkNo().shortValue());
+ //鍏ュ嚭搴撴ā寮�
+ assignCommand.setTaskMode(0);
+ //婧愬簱浣�
+ assignCommand.setSourceLocNo(wrkSts.getSourceLocNo());
+ //鐩爣搴撲綅
+ assignCommand.setDistLocNo(wrkSts.getLocNo());
+
+ //涓嬪彂浠诲姟
+ MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
}
- } else if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE && shuttleProtocol.getTaskNo() != 0) {
- //鍥涘悜绌挎杞︾┖闂� 骞朵笖鏈変换鍔�
- Object o = redisUtil.get("wrk_no_" + shuttleProtocol.getTaskNo());
- HashMap map = JSON.parseObject(o.toString(), HashMap.class);
- //褰撳墠姝ュ簭
- int step = Integer.parseInt(map.get("step").toString());
- //褰撳墠璺緞鏁版嵁
- Object data = map.get("path");
- ArrayList pathList = JSON.parseObject(data.toString(), ArrayList.class);
- //鍙栫涓�鏉¤矾寰�
- Object o1 = pathList.get(step);
- ArrayList path = JSON.parseObject(o1.toString(), ArrayList.class);
-
- int size = path.size();
- //寮�濮嬭矾寰�
- JSONObject startPath = JSON.parseObject(path.get(0).toString());
- System.out.println(startPath);
- //鐩爣璺緞
- JSONObject endPath = JSON.parseObject(path.get(size - 1).toString());
- System.out.println(endPath);
-
- //涓嬪彂鍛戒护
- ShuttleCommand command = new ShuttleCommand();
- command.setCommandWord((short) 1);
- command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getIntValue("x"), startPath.getIntValue("y")));
- command.setMiddleCodeNum((short) 0);
- command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getIntValue("x"), endPath.getIntValue("y")));
- command.setStartToDistDistance(1000);
- command.setMiddleToDistDistance(1000);
- command.setRunDirection(ShuttleRunDirection.get(startPath.get("direction").toString()).id);
- command.setPalletLift((short) 1);
- command.setForceMoveDistance(1000);
- command.setChargeSwitch((short) 2);
- command.setIOControl((short) 0);
- command.setRunSpeed((short) 1000);
- command.setRadarTmp((short) 0);
- command.setCommandEnd((short) 1);
-
- if (!MessageQueue.offer(SlaveType.Shuttle, shuttleProtocol.getShuttleNo().intValue(), new Task(2, command))) {
- News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
- } else {
- News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
-
- //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚
- if (step < size) {
- //鏇存柊redis鏁版嵁
- //姝ュ簭澧炲姞
- step++;
- map.put("step", step);
- //浠诲姟鏁版嵁淇濆瓨鍒皉edis
- redisUtil.set("wrk_no_" + map.get("wrk_no").toString(), JSON.toJSONString(map));
- }else {
- //宸叉墽琛屽畬鎴�
- //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘�
- //鍒犻櫎redis
- redisUtil.del("wrk_no_" + map.get("wrk_no").toString());
-
- //銆傘�傘��
- //1銆佸懡浠や笅鏂归渶瑕佸垽鏂皬杞︾┖闂茬姸鎬�
- //2銆�
- }
-
- }
}
}
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index 024304c..1958d24 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -1,5 +1,6 @@
package com.zy.core;
+import com.zy.common.utils.RedisUtil;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
@@ -25,6 +26,8 @@
private SlaveProperties slaveProperties;
@Autowired
private MainProcess mainProcess;
+ @Autowired
+ private RedisUtil redisUtil;
@PostConstruct
@@ -108,7 +111,7 @@
// 鍒濆鍖栧洓鍚戠┛姊溅
News.info("鍒濆鍖栧洓鍚戠┛姊溅......................................................");
for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
- ShuttleThread shuttleThread = new ShuttleThread(shuttleSlave);
+ ShuttleThread shuttleThread = new ShuttleThread(shuttleSlave,redisUtil);
new Thread(shuttleThread).start();
SlaveConnection.put(SlaveType.Shuttle, shuttleSlave.getId(), shuttleThread);
}
diff --git a/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java
new file mode 100644
index 0000000..556bd23
--- /dev/null
+++ b/src/main/java/com/zy/core/model/command/ShuttleAssignCommand.java
@@ -0,0 +1,35 @@
+package com.zy.core.model.command;
+
+import lombok.Data;
+
+@Data
+public class ShuttleAssignCommand {
+
+ /**
+ * 鍥涘悜绌挎杞﹀彿
+ */
+ private Short shuttleNo = 0;
+
+ /**
+ * 浠诲姟鍙�
+ */
+ private Short taskNo = 0;
+
+ /**
+ * 浣滀笟绫诲瀷
+ * 0: 鍏ュ簱
+ * 1锛� 鍑哄簱
+ */
+ private Integer taskMode = 0;
+
+ /**
+ * 婧愬簱浣�
+ */
+ private String sourceLocNo;
+
+ /**
+ * 鐩爣搴撲綅
+ */
+ private String distLocNo;
+
+}
diff --git a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
index 5f70de8..5412f9c 100644
--- a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
@@ -19,32 +19,32 @@
/**
* 浠诲姟鍙�
*/
- public Short taskNo = 0;
+ private Short taskNo = 0;
/**
* 婧愬簱浣�
*/
- public String sourceLocNo;
+ private String sourceLocNo;
/**
* 鐩爣搴撲綅
*/
- public String locNo;
+ private String locNo;
/**
* 鎺�
*/
- public Short row;
+ private Short row;
/**
* 鍒�
*/
- public Short bay;
+ private Short bay;
/**
* 灞�
*/
- public Short lev;
+ private Short lev;
/**
* 灏忚溅蹇欑姸鎬佷綅
@@ -142,7 +142,7 @@
/**
* 浣滀笟鏍囪
*/
- private String pakMk = "-";
+ private Boolean pakMk = true;
// 浠诲姟淇℃伅 ---------------------------------------------------------
/**
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index cbc2bf8..bbf61c4 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -5,23 +5,34 @@
import HslCommunication.Core.Types.OperateResultExOne;
import HslCommunication.ModBus.ModbusTcpNet;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
+import com.zy.common.model.NavigateNode;
import com.zy.common.utils.CommonUtils;
+import com.zy.common.utils.NavigatePositionConvert;
+import com.zy.common.utils.NavigateUtils;
+import com.zy.common.utils.RedisUtil;
import com.zy.core.News;
import com.zy.core.ThreadHandler;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.ShuttleRunDirection;
+import com.zy.core.enums.ShuttleStatusType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.ShuttleSlave;
import com.zy.core.model.Task;
+import com.zy.core.model.command.ShuttleAssignCommand;
import com.zy.core.model.command.ShuttleCommand;
import com.zy.core.model.protocol.ShuttleProtocol;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.text.MessageFormat;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
/**
* 鍥涘悜绌挎杞︾嚎绋�
@@ -33,9 +44,11 @@
private ModbusTcpNet modbusTcpNet;
private ShuttleSlave slave;
private ShuttleProtocol shuttleProtocol;
+ private RedisUtil redisUtil;
- public ShuttleThread(ShuttleSlave slave) {
+ public ShuttleThread(ShuttleSlave slave,RedisUtil redisUtil) {
this.slave = slave;
+ this.redisUtil = redisUtil;
}
@Override
@@ -53,9 +66,13 @@
case 1:
readStatus();
break;
- // 鍐欏叆鏁版嵁
- case 2:
- write((ShuttleCommand) task.getData());
+// // 鍐欏叆鏁版嵁
+// case 2:
+// write((ShuttleCommand) task.getData());
+// break;
+ //涓嬪彂浠诲姟
+ case 3:
+ assignWork((ShuttleAssignCommand) task.getData());
break;
default:
break;
@@ -145,8 +162,16 @@
OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
log.info(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId()));
- // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴�
- //.....
+ //灏忚溅澶勪簬蹇欑鐘舵�侊紝灏嗘爣璁扮疆涓簍rue
+ if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.BUSY) {
+ shuttleProtocol.setPakMk(true);
+ }
+
+ //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟涓旀爣璁颁负true锛岄渶瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠�
+ if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE && shuttleProtocol.getTaskNo() != 0 && shuttleProtocol.getPakMk()) {
+ //鎵ц涓嬩竴姝ユ寚浠�
+ executeWork(shuttleProtocol.getTaskNo());
+ }
}else {
OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆憑1}鍥涘悜绌挎杞lc鐘舵�佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId()));
@@ -226,9 +251,97 @@
if (null == shuttleProtocol) {
shuttleProtocol = new ShuttleProtocol();
}
-// shuttleProtocol.setShuttleNo(slave.getId().shortValue());
-// shuttleProtocol.setBusyStatus(ShuttleStatusType.BUSY);
-// shuttleProtocol.setCurrentCode("0");
+ }
+
+ //鍒嗛厤浠诲姟
+ private void assignWork(ShuttleAssignCommand assignCommand) {
+ //璁$畻璺緞
+ List<NavigateNode> calc = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getDistLocNo(), "in");
+ //鑾峰彇鍒嗘璺緞
+ ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
+ //灏嗘map瀛樺叆redis涓�
+ HashMap<String, Object> map = new HashMap<>();
+ //鍛戒护鎵ц姝ュ簭
+ map.put("commandStep", 0);
+ //璺緞鏁版嵁
+ map.put("path", data);
+ //宸ヤ綔鍙�
+ map.put("wrk_no", assignCommand.getTaskNo());
+ //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+ redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map));
+
+ //鎵ц涓嬪彂浠诲姟
+ executeWork(assignCommand.getTaskNo());
+ }
+
+ //鎵ц涓嬪彂鐨勬寚浠�
+ private void executeWork(Short taskNo) {
+ //璇诲彇redis鏁版嵁
+ Object o = redisUtil.get("wrk_no_" + taskNo);
+ HashMap map = JSON.parseObject(o.toString(), HashMap.class);
+ //褰撳墠姝ュ簭
+ int commandStep = Integer.parseInt(map.get("commandStep").toString());
+ //褰撳墠璺緞鏁版嵁
+ Object data = map.get("path");
+ ArrayList pathList = JSON.parseObject(data.toString(), ArrayList.class);
+ //鍙栫涓�鏉¤矾寰�
+ Object o1 = pathList.get(commandStep);
+ ArrayList path = JSON.parseObject(o1.toString(), ArrayList.class);
+
+ int size = path.size();
+ //寮�濮嬭矾寰�
+ JSONObject startPath = JSON.parseObject(path.get(0).toString());
+ System.out.println(startPath);
+ //鐩爣璺緞
+ JSONObject endPath = JSON.parseObject(path.get(size - 1).toString());
+ System.out.println(endPath);
+
+ //涓嬪彂鍛戒护
+ ShuttleCommand command = new ShuttleCommand();
+ command.setCommandWord((short) 1);
+ command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getIntValue("x"), startPath.getIntValue("y")));
+ command.setMiddleCodeNum((short) 0);
+ command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getIntValue("x"), endPath.getIntValue("y")));
+ command.setStartToDistDistance(1000);
+ command.setMiddleToDistDistance(1000);
+ command.setRunDirection(ShuttleRunDirection.get(startPath.get("direction").toString()).id);
+ command.setPalletLift((short) 1);
+ command.setForceMoveDistance(1000);
+ command.setChargeSwitch((short) 2);
+ command.setIOControl((short) 0);
+ command.setRunSpeed((short) 1000);
+ command.setRadarTmp((short) 0);
+ command.setCommandEnd((short) 1);
+
+ //涓嬪彂鍛戒护
+ if (!write(command)) {
+ News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
+ } else {
+ News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command));
+
+ //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂)
+ shuttleProtocol.setPakMk(false);
+
+ //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚
+ if (commandStep < size) {
+ //鏇存柊redis鏁版嵁
+ //姝ュ簭澧炲姞
+ commandStep++;
+ map.put("commandStep", commandStep);
+ //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+ redisUtil.set("wrk_no_" + map.get("wrk_no").toString(), JSON.toJSONString(map));
+ }else {
+ //宸叉墽琛屽畬鎴�
+ //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘�
+ //鍒犻櫎redis
+ redisUtil.del("wrk_no_" + map.get("wrk_no").toString());
+
+ //銆傘�傘��
+ //1銆佸懡浠や笅鏂归渶瑕佸垽鏂皬杞︾┖闂茬姸鎬�
+ //2銆�
+ }
+
+ }
}
/******************************************************************************************/
@@ -239,26 +352,26 @@
slave.setId(1);
slave.setIp("192.168.4.24");
slave.setPort(502);
- ShuttleThread thread = new ShuttleThread(slave);
- thread.connect();
- thread.readStatus();
-
- ShuttleCommand command = new ShuttleCommand();
- command.setCommandWord((short) 0);
- command.setStartCodeNum((short) 12323);
- command.setMiddleCodeNum((short) 22323);
- command.setDistCodeNum((short) 29999);
- command.setStartToDistDistance(109999);
- command.setMiddleToDistDistance(5000);
- command.setRunDirection((short) 1);
- command.setPalletLift((short) 2);
- command.setForceMoveDistance(3000);
- command.setChargeSwitch((short) 2);
- command.setIOControl((short) 0);
- command.setRunSpeed((short) 0);
- command.setRadarTmp((short) 0);
- command.setCommandEnd((short) 1);
- thread.write(command);
+// ShuttleThread thread = new ShuttleThread(slave);
+// thread.connect();
+// thread.readStatus();
+//
+// ShuttleCommand command = new ShuttleCommand();
+// command.setCommandWord((short) 0);
+// command.setStartCodeNum((short) 12323);
+// command.setMiddleCodeNum((short) 22323);
+// command.setDistCodeNum((short) 29999);
+// command.setStartToDistDistance(109999);
+// command.setMiddleToDistDistance(5000);
+// command.setRunDirection((short) 1);
+// command.setPalletLift((short) 2);
+// command.setForceMoveDistance(3000);
+// command.setChargeSwitch((short) 2);
+// command.setIOControl((short) 0);
+// command.setRunSpeed((short) 0);
+// command.setRadarTmp((short) 0);
+// command.setCommandEnd((short) 1);
+// thread.write(command);
}
}
--
Gitblit v1.9.1