From d3696ce1ba6071f264aa3db8cc94bf090094a906 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期四, 11 五月 2023 09:19:05 +0800 Subject: [PATCH] 提升机命令封装 --- src/main/java/com/zy/core/thread/ShuttleThread.java | 809 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 708 insertions(+), 101 deletions(-) diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index ffc4717..2df784a 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -5,29 +5,30 @@ 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.common.SpringUtils; import com.core.exception.CoolException; +import com.zy.asrs.entity.BasDevp; +import com.zy.asrs.entity.BasShuttle; import com.zy.asrs.entity.BasShuttleOpt; +import com.zy.asrs.entity.LocMast; +import com.zy.asrs.service.BasDevpService; 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; import com.zy.core.cache.OutputQueue; -import com.zy.core.enums.ShuttleRunDirection; -import com.zy.core.enums.ShuttleStatusType; -import com.zy.core.enums.ShuttleTaskModeType; -import com.zy.core.enums.SlaveType; +import com.zy.core.cache.SlaveConnection; +import com.zy.core.enums.*; 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.command.*; +import com.zy.core.model.protocol.LiftProtocol; import com.zy.core.model.protocol.ShuttleProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -35,7 +36,6 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.List; /** @@ -121,6 +121,7 @@ if (null == shuttleProtocol) { shuttleProtocol = new ShuttleProtocol(); shuttleProtocol.setShuttleNo(slave.getId().shortValue()); + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); } //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- @@ -137,7 +138,12 @@ //閿欒缂栧彿 shuttleProtocol.setErrorCode(modbusTcpNet.getByteTransform().TransInt16(content,8)); //Plc杈撳嚭鐘舵�両O - shuttleProtocol.setPlcOutputStatusIO(modbusTcpNet.getByteTransform().TransInt16(content,10)); + boolean[] booleans = modbusTcpNet.getByteTransform().TransBool(content, 10, 2); + shuttleProtocol.setPlcOutputLift(booleans[1]); + shuttleProtocol.setPlcOutputTransfer(booleans[2]); + shuttleProtocol.setPlcOutputBrake(booleans[3]); + shuttleProtocol.setPlcOutputCharge(booleans[4]); + shuttleProtocol.setPlcOutputStatusIO(modbusTcpNet.getByteTransform().TransInt16(content, 10)); //閿欒淇℃伅鐮� shuttleProtocol.setStatusErrorCode(modbusTcpNet.getByteTransform().TransInt16(content,12)); //PLC杈撳叆鐘舵�� @@ -163,18 +169,99 @@ ///璇诲彇鍥涘悜绌挎杞︾姸鎬�-end - 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()) { + if (shuttleProtocol.getErrorCode() != 0 && shuttleProtocol.getProtocolStatusType() == ShuttleProtocolStatusType.WORKING) { + //鍑虹幇閿欒 + resetAndTryFix(shuttleProtocol.getTaskNo()); + } + + if(shuttleProtocol.getProtocolStatusType() == ShuttleProtocolStatusType.FIXING + && shuttleProtocol.getTaskNo() != 0 + && shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE){ + //澶勪簬鏁呴殰淇鐘舵�� //鎵ц涓嬩竴姝ユ寚浠� - executeWork(shuttleProtocol.getAssignCommand()); + executeWork(shuttleProtocol.getTaskNo()); + } + + //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠� + if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE + && shuttleProtocol.getTaskNo() != 0 + && shuttleProtocol.getPakMk()) { + //鎵ц涓嬩竴姝ユ寚浠� + executeWork(shuttleProtocol.getTaskNo()); + } + + //妫�娴嬫槸鍚︽湁鎻愬崌鏈洪攣瀹氭爣璁帮紝鏈夊垯妫�娴嬫彁鍗囨満鏄惁鍒颁綅锛屾槸鍚﹁兘璧颁笅涓�姝ュ懡浠� + if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE + && shuttleProtocol.getTaskNo() != 0) { + Object o = redisUtil.get("shuttle_wrk_no_" + shuttleProtocol.getTaskNo()); + if (o != null) { + ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); + if (redisCommand.getLiftSecurityMk()) { + //鎵ц涓嬩竴姝ユ寚浠� + executeWork(shuttleProtocol.getTaskNo()); + } + } + } + + //灏嗗洓鍚戠┛姊溅鐘舵�佷繚瀛樿嚦鏁版嵁搴� + BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); + BasShuttle basShuttle = shuttleService.selectById(shuttleProtocol.getShuttleNo()); + if (basShuttle == null) { + basShuttle = new BasShuttle(); + //鍥涘悜绌挎杞﹀彿 + basShuttle.setShuttleNo(slave.getId()); + shuttleService.insert(basShuttle); + } + //灏忚溅蹇欑姸鎬佷綅 + basShuttle.setBusyStatus(shuttleProtocol.getBusyStatus().intValue()); + //褰撳墠浜岀淮鐮� + basShuttle.setCurrentCode(shuttleProtocol.getCurrentCode().intValue()); + //鐢垫睜鐢甸噺鐧惧垎姣� + basShuttle.setBatteryPower(shuttleProtocol.getBatteryPower().intValue()); + //鐢垫睜娓╁害 + basShuttle.setBatteryTemp(shuttleProtocol.getBatteryTemp().intValue()); + //閿欒缂栧彿 + basShuttle.setErrorCode(shuttleProtocol.getErrorCode().intValue()); + //Plc杈撳嚭鐘舵�両O + basShuttle.setPlcOutputStatusIo(shuttleProtocol.getPlcOutputStatusIO().intValue()); + //閿欒淇℃伅鐮� + basShuttle.setStatusErrorCode(shuttleProtocol.getStatusErrorCode().intValue()); + //PLC杈撳叆鐘舵�� + basShuttle.setPlcInputStatus(shuttleProtocol.getPlcInputStatus().intValue()); + //褰撳墠鎴栬�呬箣鍓嶈鍒扮殑浜岀淮鐮佸�� + basShuttle.setCurrentOrBeforeCode(shuttleProtocol.getCurrentOrBeforeCode().intValue()); + //璇诲埌鐨勪簩缁寸爜X鏂瑰悜鍋忕Щ閲� + basShuttle.setCodeOffsetX(shuttleProtocol.getCodeOffsetX().intValue()); + //璇诲埌鐨勪簩缁寸爜Y鏂瑰悜鍋忕Щ閲� + basShuttle.setCodeOffsetY(shuttleProtocol.getCodeOffsetY().intValue()); + //褰撳墠鐨勭數鍘嬪�� + basShuttle.setCurrentVoltage(shuttleProtocol.getCurrentVoltage().intValue()); + //褰撳墠鐨勬ā鎷熼噺鍊� + basShuttle.setCurrentAnalogValue(shuttleProtocol.getCurrentAnalogValue().intValue()); + //褰撳墠鐨勫崌闄嶄己鏈嶉�熷害 + basShuttle.setCurrentLiftServoSpeed(shuttleProtocol.getCurrentLiftServoSpeed().intValue()); + //褰撳墠鐨勮璧颁己鏈嶉�熷害 + basShuttle.setCurrentMoveServoSpeed(shuttleProtocol.getCurrentMoveServoSpeed().intValue()); + //褰撳墠鐨勫崌闄嶄己鏈嶈礋杞界巼 + basShuttle.setCurrentLiftServoLoad(shuttleProtocol.getCurrentLiftServoLoad().intValue()); + //褰撳墠鐨勮璧颁己鏈嶈礋杞界巼 + basShuttle.setCurrentMoveServoLoad(shuttleProtocol.getCurrentMoveServoLoad().intValue()); + //褰撳墠灏忚溅鐘舵�侊紙鍐呴儴鑷垜缁存姢锛� + basShuttle.setShuttleStatus(shuttleProtocol.getProtocolStatus()); + //浠诲姟鍙� + basShuttle.setWrkNo(shuttleProtocol.getTaskNo().intValue()); + //淇敼鏃堕棿 + basShuttle.setUpdateTime(new Date()); + //浣滀笟鏍囪 + basShuttle.setPakMk(shuttleProtocol.getPakMk()); + if (shuttleService.updateById(basShuttle)) { + 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())); } }else { @@ -191,6 +278,18 @@ private boolean write(ShuttleCommand command){ if (null == command) { News.error("鍥涘悜绌挎杞﹀啓鍏ュ懡浠や负绌�"); + return false; + } + + BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); + if (shuttleService == null) { + News.error("绯荤粺閿欒"); + return false; + } + + BasShuttle basShuttle = shuttleService.selectById(slave.getId().shortValue()); + if (basShuttle == null) { + News.error("鍥涘悜绌挎杞︿笉瀛樺湪"); return false; } @@ -228,6 +327,7 @@ array[7] = middleToDistDistances[1]; } + array[8] = basShuttle.getRunSpeed().shortValue();//鍥涘悜绌挎杞﹁繍琛岄�熷害锛屼粠绯荤粺鏁版嵁搴撹鍑� if (command.getRunDirection() != null) { //灏忚溅杩愯鏂瑰悜 array[8] = command.getRunDirection(); @@ -291,109 +391,281 @@ //鍒嗛厤浠诲姟 private void assignWork(ShuttleAssignCommand assignCommand) { - //灏嗘map瀛樺叆redis涓� - HashMap<String, Object> map = new HashMap<>(); + if (!assignCommand.getAuto()) { + List<NavigateNode> allNode = new ArrayList<>(); + List<ShuttleCommand> commands = new ArrayList<>(); + LocMastService locMastService = SpringUtils.getBean(LocMastService.class); + NavigateMapData navigateMapData; + switch (assignCommand.getTaskMode()) { + case 1://鍏ュ簱 + case 2://鍑哄簱 + //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞 + //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 + 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);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� - //璁$畻璺緞 - List<NavigateNode> calc = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getDistLocNo(), assignCommand.getTaskMode().intValue()); - if (calc != null) { - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); - //璺緞鏁版嵁 - map.put("path", data); + if (firstMastResult != null) { + allNode.addAll(firstMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� + //鑾峰彇鍒嗘璺緞 + ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(firstMastResult); + //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 + for (ArrayList<NavigateNode> nodes : data) { + //寮�濮嬭矾寰� + NavigateNode startPath = nodes.get(0); + //鐩爣璺緞 + NavigateNode endPath = nodes.get(nodes.size() - 1); + Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + + //姝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)); + } + + //鎵樼洏椤跺崌 + commands.add(getPalletCommand((short) 1)); + }else { + //娌℃湁璁$畻鍒拌矾寰勶紝鍙兘瀛樺湪灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆 + if (currentLocMast.getLocNo().equals(assignCommand.getSourceLocNo())) { + //灏忚溅浣嶇疆灏辨槸璧风偣浣嶇疆锛屾棤闇�绉诲姩锛岀洿鎺ラ《鍗� + //鎵樼洏椤跺崌 + 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鎸囦护 + for (ArrayList<NavigateNode> nodes : data) { + //寮�濮嬭矾寰� + NavigateNode startPath = nodes.get(0); + //鐩爣璺緞 + NavigateNode endPath = nodes.get(nodes.size() - 1); + Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + + //姝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)); + } + + //鎵樼洏涓嬮檷 + commands.add(getPalletCommand((short) 2)); + } + break; + case 3://鎵樼洏椤跺崌 + case 4://鎵樼洏涓嬮檷 + commands.add(getPalletCommand(assignCommand.getTaskMode() == 3 ? (short) 1 : (short) 2)); + break; + case 5://寮哄埗宸︾Щ + case 6://寮哄埗鍙崇Щ + case 7://寮哄埗涓婄Щ + case 8://寮哄埗涓嬬Щ + commands.add(getForceMoveCommand((short) (assignCommand.getTaskMode() - 4))); + break; + case 9://鐘舵�佸浣� + ShuttleCommand reset = getResetCommand(); + commands.add(reset); + break; + case 10://鍚戞鏂瑰悜(宸�)瀵诲簱浣� + commands.add(getFindLocCommand((short) 1)); + break; + case 11://鍚戣礋鏂瑰悜(鍙�)瀵诲簱浣� + commands.add(getFindLocCommand((short) 2)); + break; + case 12://鍚戞鏂瑰悜(鍓�)瀵诲簱浣� + commands.add(getFindLocCommand((short) 4)); + break; + case 13://鍚戣礋鏂瑰悜(鍚�)瀵诲簱浣� + 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鎸囦护 + for (ArrayList<NavigateNode> nodes : data) { + //寮�濮嬭矾寰� + NavigateNode startPath = nodes.get(0); + //鐩爣璺緞 + NavigateNode endPath = nodes.get(nodes.size() - 1); + Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + + LocMast distLocMast = locMastService.queryByLoc(assignCommand.getLocNo()); + String qrCodeValue = distLocMast.getQrCodeValue(); + + //姝e父绉诲姩鍛戒护 + commands.add(getMoveCommand(shuttleProtocol.getCurrentCode(),(short) Integer.parseInt(qrCodeValue),allDistance,ShuttleRunDirection.get(startPath.getDirection()).id)); + } + } + break; + case 15://鍏呯數寮�鍏� + commands.add(getChargeSwitchCommand()); + break; + default: + } + assignCommand.setCommands(commands); + assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist } - //宸ヤ綔鍙� - map.put("wrk_no", assignCommand.getTaskNo()); - //鍛戒护鎵ц姝ュ簭 - map.put("commandStep", 0); - //鍛戒护 - map.put("assignCommand", assignCommand); + ShuttleRedisCommand redisCommand = new ShuttleRedisCommand(); + redisCommand.setShuttleNo(assignCommand.getShuttleNo());//鍥涘悜绌挎杞﹀彿 + redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙� + redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭 + redisCommand.setAssignCommand(assignCommand);//鍛戒护 + redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>());//鍙戠敓閿欒鏃跺皾璇曟墽琛岀殑鎸囦护锛屼紭鍏堢骇鏈�楂� shuttleProtocol.setTaskNo(assignCommand.getTaskNo()); shuttleProtocol.setAssignCommand(assignCommand); + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(map)); + redisUtil.set("shuttle_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand)); //鎵ц涓嬪彂浠诲姟 - executeWork(assignCommand); + executeWork(assignCommand.getTaskNo()); } //鎵ц涓嬪彂鐨勬寚浠� - private void executeWork(ShuttleAssignCommand assignCommand) { + private boolean executeWork(Short wrkNo) { //璇诲彇redis鏁版嵁 - Object o = redisUtil.get("wrk_no_" + assignCommand.getTaskNo()); - HashMap map = JSON.parseObject(o.toString(), HashMap.class); - //褰撳墠姝ュ簭 - int commandStep = Integer.parseInt(map.get("commandStep").toString()); - //path璺緞鏁扮洰 - int size = 0; - //涓嬪彂鍛戒护 - ShuttleCommand command = new ShuttleCommand(); - switch (assignCommand.getTaskMode()) { - case 1://鍏ュ簱 - case 2://鍑哄簱 - //褰撳墠璺緞鏁版嵁 - 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); - - size = path.size(); - //寮�濮嬭矾寰� - JSONObject startPath = JSON.parseObject(path.get(0).toString()); - //鐩爣璺緞 - JSONObject endPath = JSON.parseObject(path.get(size - 1).toString()); - - 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); - - break; - case 3://鎵樼洏椤跺崌 - case 4://鎵樼洏涓嬮檷 - command.setCommandWord((short) 2); - command.setPalletLift(assignCommand.getTaskMode() == 3 ? (short)1 : (short)2); - command.setCommandEnd((short) 1); - break; - case 5://寮哄埗宸︾Щ - case 6://寮哄埗鍙崇Щ - case 7://寮哄埗涓婄Щ - case 8://寮哄埗涓嬬Щ - command.setCommandWord((short) 3); - command.setForceMoveDistance(1000); - command.setRunDirection((short) (assignCommand.getTaskMode() - 4)); - command.setCommandEnd((short) 1); - break; + if (wrkNo == null) { + return false; } - command.setCommandEnd((short) 1); + Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); + if (o == null) { + return false; + } + ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); + + if (!checkLiftStation(wrkNo)) {//妫�娴嬫槸鍚︽湁鎻愬崌鏈虹珯鐐癸紝鏈夊垯璋冨害鎻愬崌鏈� + return false; + } + + //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) + shuttleProtocol.setPakMk(false); + + List<ShuttleCommand> errorCommands = redisCommand.getErrorCommands(); + if (errorCommands.size() > 0) { + //浼樺厛鎵ц璇ユ寚浠� + ShuttleCommand errorCommand = errorCommands.get(0);//鍙栧嚭鎸囦护 + + if(errorCommand.getCommandWord() == 1){//姝e父琛岃蛋鍛戒护锛岄渶瑕佸厛鎵ц瀹屾壘搴撲綅鍛戒护鍚庯紝鍐嶆墽琛� + LocMastService locMastService = SpringUtils.getBean(LocMastService.class); + LocMast locMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); + LocMast distLocMast = locMastService.queryByQrCode(errorCommand.getStartCodeNum().toString()); + if (shuttleProtocol.getCurrentCode().equals(errorCommand.getStartCodeNum())) { + //璧风偣鍜岀粓鐐瑰睘浜庡悓涓�搴撲綅锛屾棤闇�鍐嶆墽琛岀Щ鍔ㄦ搷浣� + errorCommands.remove(0);//绉婚櫎璇ュ懡浠� + redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>()); + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); + //褰撳墠姝ュ簭 + int commandStep = redisCommand.getCommandStep(); + //姝ュ簭鍥為�� + commandStep--; + redisCommand.setCommandStep(commandStep); + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); + shuttleProtocol.setPakMk(true); + return true; + }else { + List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), distLocMast.getLocNo(), ShuttleTaskModeType.PAK_IN.id); + if (result != null) { + //鑾峰彇鍒嗘璺緞 + ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result); + //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 + for (ArrayList<NavigateNode> nodes : data) { + //寮�濮嬭矾寰� + NavigateNode startPath = nodes.get(0); + //鐩爣璺緞 + NavigateNode endPath = nodes.get(nodes.size() - 1); + Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + + String qrCodeValue = distLocMast.getQrCodeValue(); + errorCommand.setCommandWord((short) 1); + errorCommand.setStartCodeNum(shuttleProtocol.getCurrentCode()); + errorCommand.setMiddleCodeNum((short) 1); + errorCommand.setDistCodeNum((short) Integer.parseInt(qrCodeValue)); + errorCommand.setStartToDistDistance(allDistance); + errorCommand.setRunSpeed((short) 1000); + errorCommand.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); + errorCommand.setForceMoveDistance(0); + errorCommand.setIOControl((short) 0); + errorCommand.setCommandEnd((short) 1); + break; + } + } + } + + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING); + //褰撳墠姝ュ簭 + int commandStep = redisCommand.getCommandStep(); + //姝ュ簭鍥為�� + commandStep--; + redisCommand.setCommandStep(commandStep); + } + + if (!write(errorCommand)) { + News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand)); + return false; + } else { + News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand)); + errorCommands.remove(0); + redisCommand.setErrorCommands(errorCommands); + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); + return true; + } + } + + List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); + //褰撳墠姝ュ簭 + int commandStep = redisCommand.getCommandStep(); + //path璺緞鏁扮洰 + int size = commands.size(); + ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand(); + + //鍙栧嚭鍛戒护 + ShuttleCommand command = commands.get(commandStep); + + if (assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_IN.id.shortValue() + || assignCommand.getTaskMode() == ShuttleTaskModeType.PAK_OUT.id.shortValue() + ) { + //灏忚溅澶卞幓鍧愭爣锛岀姝笅鍙戝懡浠� + if (shuttleProtocol.getCurrentCode() == 0) { + return false; + } + } + //涓嬪彂鍛戒护 if (!write(command)) { News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + return false; } else { News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); - //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) - shuttleProtocol.setPakMk(false); - //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 - if (commandStep < size) { + if (commandStep < size - 1) { //鏇存柊redis鏁版嵁 //姝ュ簭澧炲姞 commandStep++; - map.put("commandStep", commandStep); + redisCommand.setCommandStep(commandStep); //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("wrk_no_" + map.get("wrk_no").toString(), JSON.toJSONString(map)); + redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); }else { //宸叉墽琛屽畬鎴� //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� @@ -405,19 +677,354 @@ new Date(), ShuttleTaskModeType.get(assignCommand.getTaskMode()).desc, assignCommand.getSourceLocNo(), - assignCommand.getDistLocNo(), + assignCommand.getLocNo(), null, null, null, - JSON.toJSONString(command) + JSON.toJSONString(assignCommand) ); shuttleOptService.insert(opt); } + + if (redisCommand.getLiftSecurityMk()) { + //鏇鹃攣瀹氳繃鎻愬崌鏈猴紝闇�瑕佽繘琛岃В閿� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol != null) { + 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("wrk_no_" + map.get("wrk_no").toString()); + redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo()); + + if (!assignCommand.getAuto()) { + //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅 + //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵�� + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + //浠诲姟鍙锋竻闆� + shuttleProtocol.setTaskNo((short) 0); + //鏍囪澶嶄綅 + shuttleProtocol.setPakMk(true); + News.info("鍥涘悜绌挎杞︽墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + }else { + if (!assignCommand.getCharge()) { + //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WAITING); + }else { + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING); + } + News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛岀┛姊溅鍙�={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + } + } } + return true; + } + + /** + * 妫�娴嬫槸鍚︽湁鎻愬崌鏈虹珯鐐癸紝鏈夊垯璋冨害鎻愬崌鏈� + */ + private boolean checkLiftStation(Short wrkNo) { + //璇诲彇redis鏁版嵁 + if (wrkNo == null) { + return false; + } + + Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); + if (o == null) { + return false; + } + ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); + //褰撳墠姝ュ簭 + int commandStep = redisCommand.getCommandStep(); + + //妫�娴嬫槸鍚﹀瓨鍦ㄦ彁鍗囨満鍙g殑鎸囦护 + List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); + ArrayList<Short> qrCodeValues = new ArrayList<>(); + for (BasDevp basDevp : basDevpService.selectList(null)) { + //灏嗘墍鏈夋彁鍗囨満鍙d簩缁寸爜瀛樺叆list + qrCodeValues.add(Short.parseShort(basDevp.getQrCodeValue())); + } + + //閬嶅巻鎵�鏈夋寚浠わ紝鍒ゆ柇鏄惁鏈夊埌鎻愬崌鏈哄彛鐨勬寚浠わ紝骞惰幏鍙栧埌杈捐鎻愬崌鏈哄彛鎵�闇�姝ュ簭 + int step = 0; + ShuttleCommand command = null; + for (int i = 1; i < commands.size(); i++) { + command = commands.get(i); + if (qrCodeValues.contains(command.getDistCodeNum())) { + //瀛樺湪 + step = i + 1; + break; + } + } + + if (step == 0) { + //鏃犻渶鍚庣画妫�娴嬶紝鐩存帴鏀捐 + return true; + } + + //鍒ゆ柇涓嬩竴姝ユ槸鍚︿负鎻愬崌鏈哄彛 + if (commandStep + 1 != step) { + //涓嬩竴姝ヤ笉鏄彁鍗囨満鍙o紝璺宠繃鍚庣画娴佺▼ + return true; + } + + //鎷垮埌鎻愬崌鏈虹嚎绋� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + return false; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return false; + } + + //鑾峰彇鍥涘悜绌挎杞﹀綋鍓嶆ゼ灞� + String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 + Integer shuttleLocNoLev = Integer.parseInt(shuttleLocNo.substring(shuttleLocNo.length() - 2, shuttleLocNo.length()));//搴撲綅鍙峰搴斿眰楂� + + //绋嬪簭璧板埌杩欙紝琛ㄧず鎻愬崌鏈哄彲鑳戒竴鐩村氨鍦ㄥ綋鍓嶅眰锛屽彲鑳界粡杩囦簡绉诲姩鍒拌揪浜嗚灞� + if (liftProtocol.getProtocolStatusType() == LiftProtocolStatusType.WAITING) { + //鎻愬崌鏈虹瓑寰呯‘璁� + //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� + liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); + //浠诲姟鍙锋竻闆� + liftProtocol.setTaskNo((short) 0); + //鏍囪澶嶄綅 + liftProtocol.setPakMk(true); + //浠诲姟鎸囦护娓呴浂 + liftProtocol.setAssignCommand(null); + //鎻愬崌鏈鸿В閿� + liftProtocol.setLiftLock(false); + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪鐩爣妤煎眰 + if (liftProtocol.getLev().intValue() == shuttleLocNoLev) { + //鍚屼竴灞傦紝鐩存帴鏀捐 + return true; + } + + //鎻愬崌鏈哄拰绌挎杞﹀浜庝笉鍚屾ゼ灞傦紝闇�瑕佽繘琛岃皟搴� + if (!liftProtocol.isIdle()) { + //鎻愬崌鏈轰笉鏄┖闂� + return false; + } + + //缁欐彁鍗囨満鍒嗛厤浠诲姟 + liftProtocol.setLiftLock(true);//閿佸畾鎻愬崌鏈� + liftProtocol.setTaskNo(shuttleProtocol.getTaskNo());//璁剧疆浠诲姟鍙� + liftProtocol.setShuttleNo(shuttleProtocol.getShuttleNo());//璁剧疆鍥涘悜绌挎杞﹀彿 + liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓� + liftProtocol.setSecurityMk(true);//鏍囪缃负true锛岄槻姝㈠叾浠栦换鍔″崰鐢ㄥ綋鍓嶆彁鍗囨満 + redisCommand.setLiftSecurityMk(true);//鏍囪缃负true锛岄槻姝㈠叾浠栦换鍔″崰鐢ㄥ綋鍓嶆彁鍗囨満 + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); + + //鍛戒护list + ArrayList<LiftCommand> liftCommands = new ArrayList<>(); + LiftCommand liftCommand = new LiftCommand(); + liftCommand.setLiftNo(liftProtocol.getLiftNo());//鎻愬崌鏈哄彿 + liftCommand.setTaskNo(liftProtocol.getTaskNo());//浠诲姟鍙� + liftCommand.setRun((short) 1);//鍗囬檷 + liftCommand.setDistPosition(shuttleLocNoLev.shortValue());//鐩爣妤煎眰(绌挎杞︽墍鍦ㄦゼ灞�) + liftCommand.setLiftLock(true);//閿佸畾鎻愬崌鏈� + liftCommands.add(liftCommand);//灏嗗懡浠ゆ坊鍔犺繘list + + LiftAssignCommand liftAssignCommand = new LiftAssignCommand(); + liftAssignCommand.setCommands(liftCommands); + liftAssignCommand.setLiftNo(liftProtocol.getLiftNo()); + liftAssignCommand.setTaskNo(liftProtocol.getTaskNo()); + //涓嬪彂浠诲姟 + MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, liftAssignCommand)); + + return false; + } + + /** + * 澶嶄綅骞跺皾璇曚慨澶嶉敊璇� + */ + private boolean resetAndTryFix(Short wrkNo) { + //璇诲彇redis鏁版嵁 + if (wrkNo == null) { + return false; + } + + Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); + if (o == null) { + return false; + } + + ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class); + List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); + //褰撳墠姝ュ簭 + int commandStep = redisCommand.getCommandStep(); + //path璺緞鏁扮洰 + int size = commands.size(); + + ArrayList<ShuttleCommand> list = new ArrayList<>(); + + //鍙栧嚭鍛戒护 + ShuttleCommand command = commands.get(commandStep - 1); + + //澶嶄綅鍛戒护 + ShuttleCommand resetCommand = getResetCommand(); + list.add(resetCommand); + + //杞﹁締绌洪棽锛岀瓑寰呭啓鍏ユ壘搴撲綅鍛戒护 + //鎵惧簱浣嶅懡浠� + short direction = 1; + switch (command.getRunDirection()) {//杞崲杩愯鏂瑰悜 + case 1: + direction = 2; + break; + case 2: + direction = 1; + break; + case 3: + direction = 4; + break; + case 4: + direction = 3; + break; + default: + direction = 1; + } + //鎵惧簱浣嶅懡浠� + ShuttleCommand searchCommand = getFindLocCommand(direction, 1200, (short) 1000); + list.add(searchCommand); + + //绉诲姩杞﹁締锛岄渶瑕佸湪鎵ц瀹屽鎵惧畾浣嶇偣鍚庡啀鎵ц + ShuttleCommand moveCommand = new ShuttleCommand(); + moveCommand.setCommandWord((short) 1); + moveCommand.setStartCodeNum(command.getStartCodeNum());//瀛樺叆鐩爣搴撲綅鍙� + list.add(moveCommand); + + redisCommand.setErrorCommands(list); + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand)); + shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.FIXING); + return true; + } + + /** + * 鑾峰彇鎵樼洏椤跺崌鍛戒护 + * @param lift 1椤跺崌锛�2涓嬮檷 + */ + private 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 + */ + private 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鍚庣Щ + */ + private 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; + } + + /** + * 鐘舵�佸浣嶅懡浠� + */ + private 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:鍚戞鏂瑰悜(鍓�)瀵诲簱浣� + */ + private 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:鍚戞鏂瑰悜(鍓�)瀵诲簱浣� + */ + private ShuttleCommand getFindLocCommand(Short direction) { + return getFindLocCommand(direction, 3000, (short) 1000); + } + + /** + * 鑾峰彇鍏呯數寮�鍏冲懡浠� + */ + private ShuttleCommand getChargeSwitchCommand() { + ShuttleCommand command = new ShuttleCommand(); + command.setCommandWord((short) 8); + command.setIOControl((short) 4); + command.setCommandEnd((short) 1); + return command; } /******************************************************************************************/ -- Gitblit v1.9.1