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/thread/ShuttleThread.java | 171 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 142 insertions(+), 29 deletions(-) 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