From c6bca77cf2603ceebc07fec7ece783c2f9bca74e Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期六, 10 六月 2023 19:24:53 +0800 Subject: [PATCH] Base地图更新 --- src/main/java/com/zy/core/thread/ShuttleThread.java | 351 ++++++++++++++++++++++++++++++---------------------------- 1 files changed, 182 insertions(+), 169 deletions(-) diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index b743dcc..025d0e9 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -16,11 +16,9 @@ import com.zy.asrs.service.BasShuttleOptService; import com.zy.asrs.service.BasShuttleService; import com.zy.asrs.service.LocMastService; +import com.zy.asrs.utils.Utils; 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.common.utils.*; import com.zy.core.News; import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; @@ -212,7 +210,7 @@ //灏嗗洓鍚戠┛姊溅鐘舵�佷繚瀛樿嚦鏁版嵁搴� BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); - BasShuttle basShuttle = shuttleService.selectById(shuttleProtocol.getShuttleNo()); + BasShuttle basShuttle = shuttleService.selectById(slave.getId()); if (basShuttle == null) { basShuttle = new BasShuttle(); //鍥涘悜绌挎杞﹀彿 @@ -394,9 +392,10 @@ //鍒嗛厤浠诲姟 private void assignWork(ShuttleAssignCommand assignCommand) { if (!assignCommand.getAuto()) { + List<NavigateNode> allNode = new ArrayList<>(); List<ShuttleCommand> commands = new ArrayList<>(); - ShuttleCommand command = new ShuttleCommand(); LocMastService locMastService = SpringUtils.getBean(LocMastService.class); + NavigateMapData navigateMapData; switch (assignCommand.getTaskMode()) { case 1://鍏ュ簱 case 2://鍑哄簱 @@ -404,7 +403,12 @@ //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 LocMast currentLocMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), ShuttleTaskModeType.PAK_IN.id); + //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + navigateMapData = new NavigateMapData(Utils.getLev(currentLocMast.getLocNo())); + navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + if (firstMastResult != null) { + allNode.addAll(firstMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� //鑾峰彇鍒嗘璺緞 ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(firstMastResult); //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 @@ -415,58 +419,29 @@ NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - ShuttleCommand command1 = new ShuttleCommand(); - command1.setCommandWord((short) 1); - command1.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), 1)); - command1.setMiddleCodeNum((short) 1); - command1.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), 1)); - command1.setStartToDistDistance(allDistance); - command1.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); - command1.setForceMoveDistance(0); - command1.setIOControl((short) 0); - command1.setRunSpeed((short) 1000); - command1.setCommandEnd((short) 1); - commands.add(command1); + //姝e父绉诲姩鍛戒护 + Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), 1);//寮�濮嬩簩缁寸爜 + Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), 1);//鐩爣浜岀淮鐮� + commands.add(getMoveCommand(startCode,distCode,allDistance,ShuttleRunDirection.get(startPath.getDirection()).id)); } //鎵樼洏椤跺崌 - ShuttleCommand command2 = new ShuttleCommand(); - command2.setCommandWord((short) 2); - command2.setStartCodeNum((short) 0); - command2.setMiddleCodeNum((short) 0); - command2.setDistCodeNum((short) 0); - command2.setStartToDistDistance(0); - command2.setMiddleToDistDistance(0); - command2.setRunDirection((short) 0); - command2.setForceMoveDistance(0); - command2.setPalletLift((short) 1); - command2.setRunSpeed((short) 0); - command2.setCommandEnd((short) 1); - commands.add(command2); + commands.add(getPalletCommand((short) 1)); }else { //娌℃湁璁$畻鍒拌矾寰勶紝鍙兘瀛樺湪灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆 if (currentLocMast.getLocNo().equals(assignCommand.getSourceLocNo())) { //灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆锛屾棤闇�绉诲姩锛岀洿鎺ラ《鍗� //鎵樼洏椤跺崌 - ShuttleCommand command2 = new ShuttleCommand(); - command2.setCommandWord((short) 2); - command2.setStartCodeNum((short) 0); - command2.setMiddleCodeNum((short) 0); - command2.setDistCodeNum((short) 0); - command2.setStartToDistDistance(0); - command2.setMiddleToDistDistance(0); - command2.setRunDirection((short) 0); - command2.setForceMoveDistance(0); - command2.setPalletLift((short) 1); - command2.setRunSpeed((short) 0); - command2.setCommandEnd((short) 1); - commands.add(command2); + commands.add(getPalletCommand((short) 1)); } } //璁$畻涓偣鍒扮粓鐐硅矾寰� List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), ShuttleTaskModeType.PAK_IN.id); + navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + if (secMastResult != null) { + allNode.addAll(secMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� //鑾峰彇鍒嗘璺緞 ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(secMastResult); //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 @@ -477,120 +452,57 @@ NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - ShuttleCommand command1 = new ShuttleCommand(); - command1.setCommandWord((short) 1); - command1.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), 1)); - command1.setMiddleCodeNum((short) 1); - command1.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), 1)); - command1.setStartToDistDistance(allDistance); - command1.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); - command1.setForceMoveDistance(0); - command1.setIOControl((short) 0); - command1.setRunSpeed((short) 1000); - command1.setCommandEnd((short) 1); - commands.add(command1); + //姝e父绉诲姩鍛戒护 + Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), 1);//寮�濮嬩簩缁寸爜 + Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), 1);//鐩爣浜岀淮鐮� + commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id)); } //鎵樼洏涓嬮檷 - ShuttleCommand command2 = new ShuttleCommand(); - command2.setCommandWord((short) 2); - command2.setStartCodeNum((short) 0); - command2.setMiddleCodeNum((short) 0); - command2.setDistCodeNum((short) 0); - command2.setStartToDistDistance(0); - command2.setMiddleToDistDistance(0); - command2.setRunDirection((short) 0); - command2.setForceMoveDistance(0); - command2.setPalletLift((short) 2); - command2.setRunSpeed((short) 0); - command2.setCommandEnd((short) 1); - commands.add(command2); + commands.add(getPalletCommand((short) 2)); } break; case 3://鎵樼洏椤跺崌 case 4://鎵樼洏涓嬮檷 - command.setCommandWord((short) 2); - command.setStartCodeNum((short) 0); - command.setMiddleCodeNum((short) 0); - command.setDistCodeNum((short) 0); - command.setStartToDistDistance(0); - command.setMiddleToDistDistance(0); - command.setRunDirection((short) 0); - command.setForceMoveDistance(0); - command.setPalletLift(assignCommand.getTaskMode() == 3 ? (short)1 : (short)2); - command.setRunSpeed((short) 0); - command.setCommandEnd((short) 1); - commands.add(command); + commands.add(getPalletCommand(assignCommand.getTaskMode() == 3 ? (short) 1 : (short) 2)); break; case 5://寮哄埗宸︾Щ + commands.add(getForceMoveCommand((short) 2)); + break; case 6://寮哄埗鍙崇Щ + commands.add(getForceMoveCommand((short) 1)); + break; case 7://寮哄埗涓婄Щ + commands.add(getForceMoveCommand((short) 3)); + break; case 8://寮哄埗涓嬬Щ - command.setCommandWord((short) 3); - command.setStartCodeNum((short) 0); - command.setMiddleCodeNum((short) 0); - command.setDistCodeNum((short) 0); - command.setStartToDistDistance(600); - command.setRunDirection((short) (assignCommand.getTaskMode() - 4)); - command.setForceMoveDistance(600); - command.setIOControl((short) 0); - command.setCommandEnd((short) 1); - command.setRunSpeed((short) 1000); - commands.add(command); + commands.add(getForceMoveCommand((short) 4)); break; case 9://鐘舵�佸浣� - command.setCommandWord((short) 6); - command.setStartCodeNum((short) 0); - command.setMiddleCodeNum((short) 0); - command.setDistCodeNum((short) 0); - command.setStartToDistDistance(0); - command.setMiddleToDistDistance(0); - command.setRunDirection((short) 0); - command.setPalletLift((short) 0); - command.setPalletLift((short) 0); - command.setForceMoveDistance(0); - command.setChargeSwitch((short) 0); - command.setIOControl((short) 0); - command.setRunSpeed((short) 0); - command.setCommandEnd((short) 1); - commands.add(command); + ShuttleCommand reset = getResetCommand(); + commands.add(reset); break; case 10://鍚戞鏂瑰悜(宸�)瀵诲簱浣� - command.setCommandWord((short) 4); - command.setRunDirection((short) 1); - command.setStartToDistDistance(3000); - command.setRunSpeed((short) 1000); - command.setCommandEnd((short) 1); - commands.add(command); + commands.add(getFindLocCommand((short) 1)); break; case 11://鍚戣礋鏂瑰悜(鍙�)瀵诲簱浣� - command.setCommandWord((short) 4); - command.setRunDirection((short) 2); - command.setStartToDistDistance(3000); - command.setRunSpeed((short) 1000); - command.setCommandEnd((short) 1); - commands.add(command); + commands.add(getFindLocCommand((short) 2)); break; case 12://鍚戞鏂瑰悜(鍓�)瀵诲簱浣� - command.setCommandWord((short) 4); - command.setRunDirection((short) 4); - command.setStartToDistDistance(3000); - command.setRunSpeed((short) 1000); - command.setCommandEnd((short) 1); - commands.add(command); + commands.add(getFindLocCommand((short) 4)); break; case 13://鍚戣礋鏂瑰悜(鍚�)瀵诲簱浣� - command.setCommandWord((short) 4); - command.setRunDirection((short) 3); - command.setStartToDistDistance(3000); - command.setRunSpeed((short) 1000); - command.setCommandEnd((short) 1); - commands.add(command); + commands.add(getFindLocCommand((short) 3)); break; case 14://绉诲姩鍒扮洰鏍囧簱浣� LocMast locMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), ShuttleTaskModeType.PAK_IN.id); + //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + navigateMapData = new NavigateMapData(Utils.getLev(locMast.getLocNo())); + navigateMapData.writeNavigateNodeToRedisMap(result, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + if (result != null) { + allNode.addAll(result);//灏嗚妭鐐硅繘琛屼繚瀛� //鑾峰彇鍒嗘璺緞 ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result); //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 @@ -603,29 +515,19 @@ LocMast distLocMast = locMastService.queryByLoc(assignCommand.getLocNo()); String qrCodeValue = distLocMast.getQrCodeValue(); - command.setCommandWord((short) 1); - command.setStartCodeNum(shuttleProtocol.getCurrentCode()); - command.setMiddleCodeNum((short) 1); - command.setDistCodeNum((short) Integer.parseInt(qrCodeValue)); - command.setStartToDistDistance(allDistance); - command.setRunSpeed((short) 1000); - command.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); - command.setForceMoveDistance(0); - command.setIOControl((short) 0); - command.setCommandEnd((short) 1); - commands.add(command); + + //姝e父绉诲姩鍛戒护 + commands.add(getMoveCommand(shuttleProtocol.getCurrentCode(),(short) Integer.parseInt(qrCodeValue),allDistance,ShuttleRunDirection.get(startPath.getDirection()).id)); } } break; case 15://鍏呯數寮�鍏� - command.setCommandWord((short) 8); - command.setIOControl((short) 4); - command.setCommandEnd((short) 1); - commands.add(command); + commands.add(getChargeSwitchCommand()); break; default: } assignCommand.setCommands(commands); + assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist } ShuttleRedisCommand redisCommand = new ShuttleRedisCommand(); @@ -798,6 +700,11 @@ liftProtocol.setSecurityMk(false); } } + + String locNo = shuttleProtocol.getLocNo() == null ? shuttleProtocol.getSourceLocNo() : shuttleProtocol.getLocNo(); + //瑙i櫎閿佸畾鐨勫簱浣嶈矾寰� + NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(locNo)); + navigateMapData.writeNavigateNodeToRedisMap(redisCommand.getAssignCommand().getNodes(), false); //鍒犻櫎redis redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo()); @@ -974,29 +881,13 @@ ShuttleCommand command = commands.get(commandStep - 1); //澶嶄綅鍛戒护 - ShuttleCommand resetCommand = new ShuttleCommand(); - resetCommand.setCommandWord((short) 6); - resetCommand.setStartCodeNum((short) 0); - resetCommand.setMiddleCodeNum((short) 0); - resetCommand.setDistCodeNum((short) 0); - resetCommand.setStartToDistDistance(0); - resetCommand.setMiddleToDistDistance(0); - resetCommand.setRunDirection((short) 0); - resetCommand.setPalletLift((short) 0); - resetCommand.setPalletLift((short) 0); - resetCommand.setForceMoveDistance(0); - resetCommand.setChargeSwitch((short) 0); - resetCommand.setIOControl((short) 0); - resetCommand.setRunSpeed((short) 0); - resetCommand.setCommandEnd((short) 1); + ShuttleCommand resetCommand = getResetCommand(); list.add(resetCommand); //杞﹁締绌洪棽锛岀瓑寰呭啓鍏ユ壘搴撲綅鍛戒护 //鎵惧簱浣嶅懡浠� - ShuttleCommand searchCommand = new ShuttleCommand(); - searchCommand.setCommandWord((short) 4); short direction = 1; - switch (command.getRunDirection()) { + switch (command.getRunDirection()) {//杞崲杩愯鏂瑰悜 case 1: direction = 2; break; @@ -1012,11 +903,8 @@ default: direction = 1; } - - searchCommand.setRunDirection(direction);//杩愯鏂瑰悜 - searchCommand.setStartToDistDistance(1200); - searchCommand.setRunSpeed((short) 1000); - searchCommand.setCommandEnd((short) 1); + //鎵惧簱浣嶅懡浠� + ShuttleCommand searchCommand = getFindLocCommand(direction, 1200, (short) 1000); list.add(searchCommand); //绉诲姩杞﹁締锛岄渶瑕佸湪鎵ц瀹屽鎵惧畾浣嶇偣鍚庡啀鎵ц @@ -1032,6 +920,131 @@ return true; } + /** + * 鑾峰彇鎵樼洏椤跺崌鍛戒护 + * @param lift 1椤跺崌锛�2涓嬮檷 + */ + public ShuttleCommand getPalletCommand(Short lift) { + ShuttleCommand command = new ShuttleCommand(); + command.setCommandWord((short) 2); + command.setStartCodeNum((short) 0); + command.setMiddleCodeNum((short) 0); + command.setDistCodeNum((short) 0); + command.setStartToDistDistance(0); + command.setMiddleToDistDistance(0); + command.setRunDirection((short) 0); + command.setForceMoveDistance(0); + command.setPalletLift(lift); + command.setRunSpeed((short) 0); + command.setCommandEnd((short) 1); + return command; + } + + /** + * 姝e父绉诲姩鍛戒护 + * @return + */ + public ShuttleCommand getMoveCommand(Short startCodeNum, Short distCodeNum, Integer startToDistDistance, Short runDirection) { + ShuttleCommand command = new ShuttleCommand(); + command.setCommandWord((short) 1); + command.setStartCodeNum(startCodeNum); + command.setMiddleCodeNum((short) 1); + command.setDistCodeNum(distCodeNum); + command.setStartToDistDistance(startToDistDistance); + command.setRunDirection(runDirection); + command.setForceMoveDistance(0); + command.setIOControl((short) 0); + command.setRunSpeed((short) 1000); + command.setCommandEnd((short) 1); + return command; + } + + /** + * 寮哄埗绉诲姩鍛戒护 + * @param direction 绉诲姩鏂瑰悜 1宸︾Щ锛�2鍙崇Щ锛�3鍓嶇Щ锛�4鍚庣Щ + */ + public ShuttleCommand getForceMoveCommand(Short direction) { + ShuttleCommand command = new ShuttleCommand(); + command.setCommandWord((short) 3); + command.setStartCodeNum((short) 0); + command.setMiddleCodeNum((short) 0); + command.setDistCodeNum((short) 0); + command.setStartToDistDistance(600); + command.setRunDirection(direction); + command.setForceMoveDistance(600); + command.setIOControl((short) 0); + command.setCommandEnd((short) 1); + command.setRunSpeed((short) 1000); + return command; + } + + /** + * 鐘舵�佸浣嶅懡浠� + */ + public ShuttleCommand getResetCommand() { + ShuttleCommand command = new ShuttleCommand(); + command.setCommandWord((short) 6); + command.setStartCodeNum((short) 0); + command.setMiddleCodeNum((short) 0); + command.setDistCodeNum((short) 0); + command.setStartToDistDistance(0); + command.setMiddleToDistDistance(0); + command.setRunDirection((short) 0); + command.setPalletLift((short) 0); + command.setPalletLift((short) 0); + command.setForceMoveDistance(0); + command.setChargeSwitch((short) 0); + command.setIOControl((short) 0); + command.setRunSpeed((short) 0); + command.setCommandEnd((short) 1); + return command; + } + + /** + * 鑾峰彇瀵诲簱浣嶅懡浠� + * @param direction 1:鍚戞鏂瑰悜(宸�)瀵诲簱浣�,2:鍚戣礋鏂瑰悜(鍙�)瀵诲簱浣�,3:鍚戣礋鏂瑰悜(鍚�)瀵诲簱浣�,4:鍚戞鏂瑰悜(鍓�)瀵诲簱浣� + */ + public ShuttleCommand getFindLocCommand(Short direction, Integer startToDistance, Short runSpeed) { + ShuttleCommand command = new ShuttleCommand(); + command.setCommandWord((short) 4); + command.setRunDirection(direction); + command.setStartToDistDistance(startToDistance); + command.setRunSpeed((short) runSpeed); + command.setCommandEnd((short) 1); + return command; + } + + /** + * 鑾峰彇瀵诲簱浣嶅懡浠わ紝榛樿绉诲姩璺濈3000锛岃繍琛岄�熷害1000 + * @param direction 1:鍚戞鏂瑰悜(宸�)瀵诲簱浣�,2:鍚戣礋鏂瑰悜(鍙�)瀵诲簱浣�,3:鍚戣礋鏂瑰悜(鍚�)瀵诲簱浣�,4:鍚戞鏂瑰悜(鍓�)瀵诲簱浣� + */ + public ShuttleCommand getFindLocCommand(Short direction) { + return getFindLocCommand(direction, 3000, (short) 1000); + } + + /** + * 鑾峰彇鍏呯數寮�鍏冲懡浠� + */ + public ShuttleCommand getChargeSwitchCommand() { + ShuttleCommand command = new ShuttleCommand(); + command.setCommandWord((short) 8); + command.setIOControl((short) 4); + command.setCommandEnd((short) 1); + return command; + } + + /** + * charge锛�1=>寮�濮嬪厖鐢碉紝2=>鏂紑鍏呯數 + */ + public ShuttleCommand getChargeSwitchCommand(Short charge) { + ShuttleCommand command = new ShuttleCommand(); + command.setCommandWord((short) 5);//鍏呯數 + command.setShuttleNo(shuttleProtocol.getShuttleNo()); + command.setChargeSwitch(charge);//寮�濮嬪厖鐢� + command.setCommandEnd((short) 1); + return command; + } + /******************************************************************************************/ /**************************************** 娴嬭瘯涓撶敤 *****************************************/ /*****************************************************************************************/ -- Gitblit v1.9.1