From c1c6e4385c986ac63d7884cfaa818e05207005c9 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期四, 15 六月 2023 17:36:08 +0800 Subject: [PATCH] 出入库代码(暂) --- src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java | 5 src/main/java/com/zy/asrs/controller/SiteController.java | 2 src/main/java/com/zy/core/thread/LiftThread.java | 80 ++-- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 442 ++++++++++++++------- src/main/java/com/zy/core/thread/ShuttleThread.java | 329 ++++++++++----- src/main/java/com/zy/asrs/service/BasDevpService.java | 2 src/main/resources/mapper/WrkMastMapper.xml | 2 src/main/webapp/views/pipeline.html | 6 src/main/java/com/zy/asrs/mapper/BasDevpMapper.java | 2 src/main/java/com/zy/core/model/protocol/LiftProtocol.java | 40 + src/main/java/com/zy/core/enums/LiftLevType.java | 71 +++ src/main/java/com/zy/core/enums/ShuttleRunDirection.java | 4 src/main/java/com/zy/core/model/protocol/StaProtocol.java | 9 src/main/java/com/zy/core/model/command/LiftCommand.java | 21 + src/main/java/com/zy/asrs/utils/Utils.java | 64 +++ src/main/java/com/zy/core/enums/ShuttleTaskModeType.java | 1 src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | 2 src/main/java/com/zy/core/MainProcess.java | 21 src/main/webapp/views/shuttle.html | 1 src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java | 6 src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java | 2 src/main/java/com/zy/core/thread/SiemensDevpThread.java | 88 ++- 22 files changed, 836 insertions(+), 364 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/SiteController.java b/src/main/java/com/zy/asrs/controller/SiteController.java index 941bc9f..ea312e4 100644 --- a/src/main/java/com/zy/asrs/controller/SiteController.java +++ b/src/main/java/com/zy/asrs/controller/SiteController.java @@ -151,6 +151,8 @@ vo.setLoading(staProtocol.isLoading()?"Y":"N"); // 鏈夌墿 vo.setInEnable(staProtocol.isInEnable()?"Y":"N"); // 鍙叆 vo.setOutEnable(staProtocol.isOutEnable()?"Y":"N"); // 鍙嚭 + vo.setLiftArrival(staProtocol.isLiftArrival()?"Y":"N"); // 鎻愬崌鏈哄埌浣嶄俊鍙� + vo.setShuttleTakeEnable(staProtocol.isShuttleTakeEnable()?"Y":"N"); // 绌挎杞﹀彲鍙栦俊鍙� vo.setPakMk(staProtocol.isPakMk()?"Y":"N"); // 鍏ュ簱鏍囪 vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N"); // 绌烘澘淇″彿 vo.setStaNo(staProtocol.getStaNo()); // 鐩爣绔� diff --git a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java index aa3f0d3..a262df6 100644 --- a/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java +++ b/src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java @@ -35,4 +35,10 @@ // 鐩爣绔� private Short staNo = 0; + //鎻愬崌鏈哄埌浣嶄俊鍙� + private String liftArrival = "-"; + + //鍥涘悜绌挎杞﹀彲鍙栦俊鍙� + private String shuttleTakeEnable = "-"; + } diff --git a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java b/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java index 44bca88..d1d78b6 100644 --- a/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java +++ b/src/main/java/com/zy/asrs/mapper/BasDevpMapper.java @@ -20,5 +20,5 @@ BasDevp queryByLocNo(String locNo); - BasDevp queryByQrCode(String qrCodeValue); + BasDevp queryByQrCode(Integer qrCodeValue); } diff --git a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java index aaa3adc..b474982 100644 --- a/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java +++ b/src/main/java/com/zy/asrs/mapper/WrkMastMapper.java @@ -96,7 +96,7 @@ WrkMast selectAllC(); - WrkMast selectRackInStep48(Short workNo,Integer sourceStaNo); + WrkMast selectRackInStep48(Short workNo,Integer staNo); WrkMast selectByWorkNo(Integer workNo); diff --git a/src/main/java/com/zy/asrs/service/BasDevpService.java b/src/main/java/com/zy/asrs/service/BasDevpService.java index 2057c6a..d2f4d38 100644 --- a/src/main/java/com/zy/asrs/service/BasDevpService.java +++ b/src/main/java/com/zy/asrs/service/BasDevpService.java @@ -48,6 +48,6 @@ BasDevp queryByLocNo(String locNo); - BasDevp queryByQrCode(String qrCodeValue); + BasDevp queryByQrCode(Integer qrCodeValue); } diff --git a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java index f382395..f3c5e17 100644 --- a/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/BasDevpServiceImpl.java @@ -76,7 +76,7 @@ } @Override - public BasDevp queryByQrCode(String qrCodeValue) { + public BasDevp queryByQrCode(Integer qrCodeValue) { return this.baseMapper.queryByQrCode(qrCodeValue); } } 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 e462e8a..bbca4a3 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; -import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.*; @@ -60,13 +59,13 @@ @Autowired private StaDescService staDescService; @Autowired - private BasCrnpService basCrnpService; - @Autowired private BasDevpService basDevpService; @Autowired private BasErrLogService basErrLogService; @Autowired private BasSteErrLogService basSteErrLogService; + @Autowired + private BasShuttleService basShuttleService; @Autowired private BasShuttleErrLogService basShuttleErrLogService; @Autowired @@ -152,11 +151,12 @@ } continue; } + // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && (workNo == 0 || (workNo >= 9990 && workNo <= 9999)) - && staProtocol.isPakMk()) { + ) { // 鑾峰彇鏉$爜鎵弿浠俊鎭� BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); @@ -167,10 +167,10 @@ if(!Cools.isEmpty(barcode)) { // News.info("{}鍙锋潯鐮佹壂鎻忓櫒妫�娴嬫潯鐮佷俊鎭細{}", inSta.getBarcode(), barcode); if("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)|| "00000000".equals(barcode)) { - staProtocol.setWorkNo((short) 32002); - staProtocol.setStaNo(inSta.getBackSta().shortValue()); - devpThread.setPakMk(staProtocol.getSiteId(), false); - MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); +// staProtocol.setWorkNo((short) 32002); +// staProtocol.setStaNo(inSta.getBackSta().shortValue()); +// devpThread.setPakMk(staProtocol.getSiteId(), false); +// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // led 寮傚父鏄剧ず LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); @@ -181,10 +181,10 @@ continue; } } else { - staProtocol.setWorkNo((short) 32002); - staProtocol.setStaNo(inSta.getBackSta().shortValue()); - devpThread.setPakMk(staProtocol.getSiteId(), false); - MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); +// staProtocol.setWorkNo((short) 32002); +// staProtocol.setStaNo(inSta.getBackSta().shortValue()); +// devpThread.setPakMk(staProtocol.getSiteId(), false); +// MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // led 寮傚父鏄剧ず LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); @@ -235,6 +235,18 @@ if (!result) { throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); } + + // 鍒ゆ柇閲嶅宸ヤ綔妗� + WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo()); + if (wrkMast == null) { continue; } + + // 鏇存柊宸ヤ綔涓绘。 + wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋 + wrkMast.setModiTime(new Date()); + if (wrkMastMapper.updateById(wrkMast) == 0) { + News.error("鏇存柊宸ヤ綔妗eけ璐ワ紒锛侊紒 [宸ヤ綔鍙凤細{}]", wrkMast.getWrkNo()); + } + } else if (code == 500){ if (ledThread != null) { String errorMsg = jsonObject.getString("msg"); @@ -595,6 +607,9 @@ continue; } LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + continue; + } if (!liftProtocol.isIdle()) { continue; } @@ -602,7 +617,6 @@ //鎻愬崌鏈哄浜庣┖闂茬姸鎬侊紝杩涜浠诲姟鐨勬仮澶� liftProtocol.setTaskNo(redisCommand.getWrkNo());//灏嗘彁鍗囨満绾跨▼鍒嗛厤浠诲姟鍙� liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//宸ヤ綔鐘舵�� - liftProtocol.setLiftLock(true);//鎻愬崌鏈洪攣瀹� }else if(key.toString().contains("shuttle_wrk_no_")){//鍥涘悜绌挎杞︿换鍔� ShuttleRedisCommand redisCommand = JSON.parseObject(map.get(key).toString(), ShuttleRedisCommand.class); @@ -616,6 +630,9 @@ continue; } ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + continue; + } if (!shuttleProtocol.isIdle()) { continue; } @@ -635,19 +652,10 @@ // 鏍规嵁杈撻�佺嚎plc閬嶅巻 for (DevpSlave devp : slaveProperties.getDevp()) { // 閬嶅巻鍏ュ簱绔� - for (DevpSlave.StaRack rackInStn : devp.getRackInStn()) { + for (DevpSlave.StaRack staRack : devp.getRackInStn()) { // 鑾峰彇鍏ュ簱绔欎俊鎭� DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); - - StaProtocol staProtocol = devpThread.getStation().get(rackInStn.getStaNo()); -// StaProtocol staProtocol105 = devpThread.getStation().get(105); -// staProtocol105.setWorkNo((short) 752); -// staProtocol105.setStaNo((short) 100); -// -// StaProtocol staProtocol106 = devpThread.getStation().get(106); -// staProtocol106.setWorkNo((short) 753); -// staProtocol106.setStaNo((short) 100); - + StaProtocol staProtocol = devpThread.getStation().get(staRack.getStaNo()); if (staProtocol == null) { continue; } else { @@ -655,8 +663,8 @@ } Short workNo = staProtocol.getWorkNo(); - // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 - if (true || staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) { + // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢锛岃嚜鍔ㄣ�佹湁鐗┿�佸洓鍚戠┛姊溅鍙彇淇″彿 + if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isShuttleTakeEnable()) { WrkMast wrkMast = wrkMastMapper.selectRackInStep48(workNo, staProtocol.getSiteId()); if (wrkMast != null) { if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 8) { @@ -697,18 +705,15 @@ assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆) String locNo = wrkMast.getLocNo();//褰撳墠宸ヤ綔妗e簱浣嶅彿 - Integer lev = Integer.parseInt(locNo.substring(locNo.length() - 2, locNo.length()));//褰撳墠宸ヤ綔妗e簱浣嶅眰楂� - Integer currentLev = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length()));//灏忚溅褰撳墠灞傞珮 + Integer currentLev = Utils.getLev(currentLocNo);//灏忚溅褰撳墠灞傞珮 - //鑾峰彇鎻愬崌鏈� - LiftSlave liftSlave = slaveProperties.getLift().get(0); - //鎻愬崌鏈哄簱浣嶅彿 - String liftLocNo = liftSlave.getLiftLocNo(currentLev); + //鎻愬崌鏈哄彛绔欑偣搴撲綅鍙� + String liftSiteLocNo = Utils.levToOutInStaLocNo(currentLev); if (wrkMast.getWrkSts() == 8 || Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) { //鍚屼竴灞傜洿鎺ュ彇璐ф棤闇�缁忚繃鎻愬崌鏈� //鐩存帴璁$畻杞﹀埌鎻愬崌鏈哄彇璐у啀鍒板簱浣嶈矾寰勬寚浠� - List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, locNo, assignCommand,shuttleThread); + List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, locNo, assignCommand,shuttleThread); if (wrkMast.getWrkSts() == 8) { //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛 BasDevp basDevp = basDevpService.selectById(109);//鑾峰彇鎻愬崌鏈轰俊鎭� @@ -716,7 +721,7 @@ Short distCode = commands.get(0).getStartCodeNum();//鎻愬崌鏈哄彛浜岀淮鐮� Short runDirection = commands.get(0).getRunDirection();//杩愯鏂瑰悜 //鑾峰彇鍛戒护 - ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1300, runDirection); + ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1300, runDirection, (short) 1, 0); commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶� } assignCommand.setCommands(commands); @@ -729,11 +734,11 @@ //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿 //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞 - List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand, shuttleThread); + List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand, shuttleThread); //鍒嗛厤鐩爣搴撲綅 - shuttleProtocol.setLocNo(liftLocNo); + shuttleProtocol.setLocNo(liftSiteLocNo); //鐩爣搴撲綅 - assignCommand.setLocNo(liftLocNo); + assignCommand.setLocNo(liftSiteLocNo); assignCommand.setCommands(commands); wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵�� } @@ -752,8 +757,18 @@ } - //鑾峰彇璧风偣-缁堢偣鎸囦护銆俶apType锛�1=銆嬫棤璐у湴鍥撅紝2=銆嬫湁璐у湴鍥� + //鑾峰彇璧风偣-缁堢偣鎸囦护銆俶apType锛�0=>鏃犺揣鐗╁湴鍥撅紝1=銆嬫惡甯﹁揣鐗╁嚭鍏ュ簱鍦板浘 public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String locNo, Integer mapType, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) { + //鑾峰彇灏忚溅绉诲姩閫熷害 + BasShuttle basShuttle = basShuttleService.selectById(assignCommand.getShuttleNo()); + Integer runSpeed = 1000; + if (basShuttle != null) { + Integer runSpeed1 = basShuttle.getRunSpeed(); + if (runSpeed1 != null) { + runSpeed = runSpeed1; + } + } + //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 List<NavigateNode> calc = NavigateUtils.calc(startLocNo, locNo, mapType); List<ShuttleCommand> commands = new ArrayList<>(); @@ -770,15 +785,20 @@ for (ArrayList<NavigateNode> nodes : data) { //寮�濮嬭矾寰� NavigateNode startPath = nodes.get(0); + //涓棿璺緞 + NavigateNode middlePath = nodes.get(nodes.size() - 2); //鐩爣璺緞 NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); //鑾峰彇绉诲姩鍛戒护 - ShuttleCommand command = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id); + ShuttleCommand command = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCodeNum, middleToDistDistance, runSpeed); commands.add(command); } @@ -792,33 +812,47 @@ //鑾峰彇璧风偣-涓偣-缁堢偣鎸囦护 public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String middleLocNo, String locNo, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) { - //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 - List<NavigateNode> calc = NavigateUtils.calc(startLocNo, middleLocNo, 1);//灏忚溅鏃犺揣锛岃蛋鍏ュ簱鍦板浘 - List<ShuttleCommand> commands = new ArrayList<>(); - if (calc == null) { - return null; + //鑾峰彇灏忚溅绉诲姩閫熷害 + BasShuttle basShuttle = basShuttleService.selectById(assignCommand.getShuttleNo()); + Integer runSpeed = 1000; + if (basShuttle != null) { + Integer runSpeed1 = basShuttle.getRunSpeed(); + if (runSpeed1 != null) { + runSpeed = runSpeed1; + } } List<NavigateNode> allNode = new ArrayList<>(); - allNode.addAll(calc); - //鑾峰彇鍒嗘璺緞 - ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); - //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 - for (ArrayList<NavigateNode> nodes : data) { - //寮�濮嬭矾寰� - NavigateNode startPath = nodes.get(0); - //鐩爣璺緞 - NavigateNode endPath = nodes.get(nodes.size() - 1); - Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 + List<NavigateNode> calc = NavigateUtils.calc(startLocNo, middleLocNo, 1);//灏忚溅鏃犺揣锛岃蛋鍏ュ簱鍦板浘 + List<ShuttleCommand> commands = new ArrayList<>(); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); - //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� - Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); - //鑾峰彇绉诲姩鍛戒护 - ShuttleCommand command = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id); - commands.add(command); + if (calc != null) { + allNode.addAll(calc); + //鑾峰彇鍒嗘璺緞 + ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); + //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 + for (ArrayList<NavigateNode> nodes : data) { + //寮�濮嬭矾寰� + NavigateNode startPath = nodes.get(0); + //涓棿璺緞 + NavigateNode middlePath = nodes.get(nodes.size() - 2); + //鐩爣璺緞 + NavigateNode endPath = nodes.get(nodes.size() - 1); + Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); + //鑾峰彇绉诲姩鍛戒护 + ShuttleCommand command = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCodeNum, middleToDistDistance, runSpeed); + commands.add(command); + } } //灏忚溅鎸囦护鍒拌揪鐩爣浣嶇疆鍚庯紝鍐嶅彂鍑轰竴鏉¢《鍗囨寚浠� @@ -837,15 +871,20 @@ for (ArrayList<NavigateNode> nodes : data2) { //寮�濮嬭矾寰� NavigateNode startPath = nodes.get(0); + //涓棿璺緞 + NavigateNode middlePath = nodes.get(nodes.size() - 2); //鐩爣璺緞 NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ()); + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); - ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id); + ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCodeNum, middleToDistDistance, runSpeed); commands.add(moveCommand); } @@ -915,11 +954,11 @@ String currentLocNo = shuttleProtocol.getCurrentLocNo(); //灏忚溅褰撳墠灞傞珮 - Integer currentLev = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length())); + Integer currentLev = Utils.getLev(currentLocNo); //鑾峰彇鎻愬崌鏈� LiftSlave liftSlave = slaveProperties.getLift().get(0); - //鎻愬崌鏈哄簱浣嶅彿 - String liftLocNo = liftSlave.getLiftLocNo(currentLev); + //褰撳墠妤煎眰鎻愬崌鏈鸿緭閫佺珯鐐瑰簱浣嶅彿 + String liftSiteLocNo = Utils.levToOutInStaLocNo(currentLev); //鍒嗛厤浠诲姟鍙� shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue()); @@ -939,8 +978,11 @@ //鍒ゆ柇灏忚溅鍜屽簱浣嶆槸鍚﹀湪鍚屼竴灞� if (Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) { //鍚屼竴灞�(灏嗗皬杞︾Щ鍔ㄥ埌璐х墿浣嶇疆) - - List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftLocNo, assignCommand, shuttleThread); + List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftSiteLocNo, assignCommand, shuttleThread); + if (commands == null) { + //鏈壘鍒拌矾寰勶紝绛夊緟涓嬩竴娆� + continue; + } //鍒嗛厤鐩爣搴撲綅 shuttleProtocol.setLocNo(wrkMast.getSourceLocNo()); //鐩爣搴撲綅 @@ -951,21 +993,21 @@ //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿(灏嗗皬杞︾Щ鍔ㄥ埌鎻愬崌鏈轰綅缃�) //灏忚溅鍒版彁鍗囨満鍙f寚浠� - List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand, shuttleThread); - shuttleProtocol.setLocNo(liftLocNo); + List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand, shuttleThread); + shuttleProtocol.setLocNo(liftSiteLocNo); //鐩爣搴撲綅 - assignCommand.setLocNo(liftLocNo); + assignCommand.setLocNo(liftSiteLocNo); assignCommand.setCommands(commands); wrkMast.setWrkSts(22L);//灏忚溅杩佺Щ鐘舵�� } } else if (wrkMast.getWrkSts() == 25) { - List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftLocNo, assignCommand, shuttleThread); + List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftSiteLocNo, assignCommand, shuttleThread); //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛 BasDevp basDevp = basDevpService.selectById(109);//鑾峰彇鎻愬崌鏈轰俊鎭� short startCode = Short.parseShort(basDevp.getQrCodeValue());//鎻愬崌鏈轰簩缁寸爜 Short distCode = commands.get(0).getStartCodeNum();//鐩爣浜岀淮鐮� //鑾峰彇绉诲姩鍛戒护 - ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1300, commands.get(0).getRunDirection()); + ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1300, commands.get(0).getRunDirection(), (short) 1, 0); commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶� //鍒嗛厤鐩爣搴撲綅 @@ -992,7 +1034,7 @@ HashMap<String, Object> map = new HashMap<>(); String locNo = wrkMast.getWrkSts() < 10 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo();//搴撲綅鍙� LocMast locMast = locMastService.queryByLoc(locNo);//鎵惧埌搴撲綅璁板綍 - String lay = locNo.substring(locNo.length() - 2, locNo.length());//褰撳墠宸ヤ綔妗e簱浣嶅眰楂� + int lev = Utils.getLev(locNo);//褰撳墠宸ヤ綔妗e簱浣嶅眰楂� ShuttleThread recentShuttle = null;//褰撳墠璺濈鏈�杩戠殑鍥涘悜绌挎杞︾嚎绋� for (ShuttleSlave shuttle : slaveProperties.getShuttle()) { @@ -1007,8 +1049,8 @@ } String shuttleLocNo = shuttleProtocol.getCurrentLocNo();//浜岀淮鐮佸搴斿簱浣嶅彿 - String shuttleLocNoLay = shuttleLocNo.substring(shuttleLocNo.length() - 2, shuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂� - if (lay.equals(shuttleLocNoLay)) { + int shuttleLocNoLey = Utils.getLev(shuttleLocNo);//搴撲綅鍙峰搴斿眰楂� + if (lev == shuttleLocNoLey) { //褰撳墠鍥涘悜绌挎杞﹀拰宸ヤ綔妗d换鍔″湪鍚屼竴灞傦紝鍒欒皟閰嶈杞﹁締 map.put("sameLay", true);//鍚屼竴灞� map.put("result", shuttleThread); @@ -1024,10 +1066,8 @@ String recentShuttleLocNoLay = recentShuttleLocNo.substring(recentShuttleLocNo.length() - 2, recentShuttleLocNo.length());//搴撲綅鍙峰搴斿眰楂� int recentShuttleLocNoLayInt = Integer.parseInt(recentShuttleLocNoLay); - int layInt = Integer.parseInt(lay); - int shuttleLocNoLayInt = Integer.parseInt(shuttleLocNoLay); - int i = Math.abs(layInt - recentShuttleLocNoLayInt);//宸ヤ綔妗fゼ灞傚噺鏈�杩戠┛姊溅妤煎眰锛屽彇缁濆鍊� - int j = Math.abs(layInt - shuttleLocNoLayInt);//宸ヤ綔妗fゼ灞傚噺褰撳墠绌挎杞︽ゼ灞傦紝鍙栫粷瀵瑰�� + int i = Math.abs(lev - recentShuttleLocNoLayInt);//宸ヤ綔妗fゼ灞傚噺鏈�杩戠┛姊溅妤煎眰锛屽彇缁濆鍊� + int j = Math.abs(lev - shuttleLocNoLey);//宸ヤ綔妗fゼ灞傚噺褰撳墠绌挎杞︽ゼ灞傦紝鍙栫粷瀵瑰�� if (i < j) { //鏇存柊鏈�杩戠┛姊溅 recentShuttle = shuttleThread; @@ -1046,7 +1086,7 @@ LiftSlave liftSlave = slaveProperties.getLift().get(0); //鎻愬崌鏈哄簱浣嶅彿 String recentLiftLocNo = liftSlave.getLiftLocNo(recentShuttleLocNoLayInt); - String shuttleLiftLocNo = liftSlave.getLiftLocNo(shuttleLocNoLayInt); + String shuttleLiftLocNo = liftSlave.getLiftLocNo(shuttleLocNoLey); //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒版彁鍗囨満璺緞 List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentShuttleLocNo, recentLiftLocNo, ShuttleTaskModeType.PAK_IN.id); @@ -1078,9 +1118,11 @@ continue; } - //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭 + //鍥涘悜绌挎杞︾姸鎬佷负绛夊緟纭銆佸皬杞﹀浜庣┖闂茬姸鎬� if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.WAITING.id //浠诲姟瀹屾垚绛夊緟纭 - && shuttleProtocol.getTaskNo() != 0) { + && shuttleProtocol.getTaskNo() != 0 + && shuttleProtocol.getBusyStatus() == 0 + ) { //灏嗕换鍔℃。鏍囪涓哄畬鎴� WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); if (wrkMast != null) { @@ -1198,33 +1240,60 @@ //鍛戒护list ArrayList<LiftCommand> commands = new ArrayList<>(); - if (wrkMast.getWrkSts() == 2) { + DevpThread devpThread = null; + Integer devpId = null; + for (DevpSlave devp : slaveProperties.getDevp()){ + // 鑾峰彇鍏ュ簱绔欎俊鎭� + devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + devpId = devp.getId(); + } + + if (wrkMast.getWrkSts() == 2) {//2.璁惧涓婅蛋 //宸ヤ綔妗g洰鏍囧簱浣嶅彿 - String wrkMastLocNo = wrkMast.getIoType() == 101 ? wrkMast.getSourceLocNo() : wrkMast.getLocNo(); + String wrkMastLocNo = wrkMast.getLocNo(); //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞� - int wrkMastLocNoLey = Integer.parseInt(wrkMastLocNo.substring(wrkMastLocNo.length() - 2, wrkMastLocNo.length())); + int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo); //鎻愬崌鏈哄綋鍓嶆ゼ灞� int liftLev = liftProtocol.getLev().intValue(); - if (liftLev != 1) { - //鎻愬崌鏈轰笉鍦�1灞傦紝鑾峰彇鍒�1灞傜殑鎻愬崌鏈哄懡浠� - LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), (short) 1); + if (liftLev == 0) {//鎻愬崌鏈哄綋鍓嶆ゼ灞備负0锛屾彁鍗囨満澶卞幓浣嶇疆淇℃伅锛岃鎻愬崌鏈哄墠寰�涓�妤� + LiftCommand command = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.ONE.lev); + commands.add(command);//灏嗗懡浠ゆ坊鍔犺繘list + } + + if (liftLev != LiftLevType.TWO.realLev) { + //鎻愬崌鏈轰笉鍦ㄨ緭閫佺嚎妤煎眰锛岃幏鍙栧埌杈撻�佺嚎灞傜殑鎻愬崌鏈哄懡浠� + LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.TWO.lev); commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list } - //杈撻�佺嚎灏嗚揣鐗╄繍杩涙潵(姝h浆) - LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 1); + //杈撻�佺嚎灏嗚揣鐗╄繍杩涙潵(鏃犺揣姝h浆) + LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 3); + command2.setOperaStaNo((short) 102);//鎿嶄綔102绔� + command2.setRotationDire(1);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屾杞� + command2.setDevpId(devpId); commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list + Integer levTmp = wrkMastLocNoLey; + if (wrkMastLocNoLey >= 2) { + levTmp += 1; + } + //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�) - LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), (short) wrkMastLocNoLey); + LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), levTmp); commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list - //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓(鍙嶈浆) + //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓(姝h浆) //杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓 - LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 2); + LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 1); + Integer distStaNo = Utils.levToOutInStaNo(levTmp); + command4.setOperaStaNo(distStaNo.shortValue());//鎿嶄綔鐩爣妤煎眰绔欑偣 + command4.setRotationDire(1);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屾杞� + command4.setDevpId(devpId); commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list - }else { + + wrkMast.setWrkSts(3L);//3.鎻愬崌鏈烘惉杩愪腑 + }else if(wrkMast.getWrkSts() == 6 || wrkMast.getWrkSts() == 23) {//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 || 23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑 liftProtocol.setShuttleNo(wrkMast.getShuttleNo().shortValue());//璁剧疆鍥涘悜绌挎杞﹀彿 //鎵惧埌鍥涘悜绌挎杞︾殑绾跨▼ @@ -1240,51 +1309,93 @@ //褰撳墠绌挎杞﹀簱浣嶅彿 String currentLocNo = shuttleProtocol.getCurrentLocNo(); //褰撳墠绌挎杞︽ゼ灞� - int currentLocNoLey = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length())); + int currentLocNoLey = Utils.getLev(currentLocNo); //宸ヤ綔妗g洰鏍囧簱浣嶅彿 String wrkMastLocNo = wrkMast.getIoType() == 101 ? wrkMast.getSourceLocNo() : wrkMast.getLocNo(); //宸ヤ綔妗g洰鏍囧簱浣嶆ゼ灞� - int wrkMastLocNoLey = Integer.parseInt(wrkMastLocNo.substring(wrkMastLocNo.length() - 2, wrkMastLocNo.length())); + int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo); //鎻愬崌鏈哄綋鍓嶆ゼ灞� int liftLev = liftProtocol.getLev().intValue(); + if (liftLev == 0) {//鎻愬崌鏈哄綋鍓嶆ゼ灞備负0锛屾彁鍗囨満澶卞幓浣嶇疆淇℃伅锛岃鎻愬崌鏈哄墠寰�涓�妤� + LiftCommand command = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.ONE.lev); + commands.add(command);//灏嗗懡浠ゆ坊鍔犺繘list + } + if (liftLev != currentLocNoLey) { //涓嶅悓妤煎眰 //鑾峰彇鐩爣妤煎眰(绌挎杞︽墍鍦ㄦゼ灞�)鍛戒护 - LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), (short) currentLocNoLey); + LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), currentLocNoLey); commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list } - //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩杩涙潵(姝h浆) - LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 1); + //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩杩涙潵(鍙嶈浆) + LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 4); commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list if (liftLev != currentLocNoLey) { //鎻愬崌鏈哄墠寰�鐩爣妤煎眰(宸ヤ綔妗g洰鏍囨ゼ灞�) - LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), (short) wrkMastLocNoLey); + LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey); commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list } //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲嚭鍘� - //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩鍑哄幓(鍙嶈浆) - LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 2); + //杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲姩鍑哄幓(姝h浆) + LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 1); commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list - } - switch (wrkMast.getWrkSts().intValue()) { - case 2://2.璁惧涓婅蛋 - wrkMast.setWrkSts(3L);//3.鎻愬崌鏈烘惉杩愪腑 - break;//3.鎻愬崌鏈烘惉杩愪腑 - case 6://6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� - wrkMast.setWrkSts(7L);//7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 - break; - case 23://23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� - wrkMast.setWrkSts(24L);//24.鎻愬崌鏈鸿縼绉诲皬杞︿腑 - break; - case 27://27.灏忚溅鍑哄簱鎼繍瀹屾垚 - wrkMast.setWrkSts(28L);//28.鎻愬崌鏈烘惉杩愪腑 - break; + wrkMast.setWrkSts(wrkMast.getWrkSts() == 6 ? 7L : 24L);//6.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 || 23.杩佺Щ灏忚溅鑷虫彁鍗囨満鍙e畬鎴� => 24.鎻愬崌鏈鸿縼绉诲皬杞︿腑 + } else if (wrkMast.getWrkSts() == 27) {//27.灏忚溅鍑哄簱鎼繍瀹屾垚 + //宸ヤ綔妗f簮搴撲綅鍙� + String wrkMastLocNo = wrkMast.getSourceLocNo(); + //宸ヤ綔妗f簮搴撲綅妤煎眰 + int wrkMastLocNoLey = Utils.getLev(wrkMastLocNo); + + //鎻愬崌鏈哄綋鍓嶆ゼ灞� + int liftLev = liftProtocol.getLev().intValue(); + if (liftLev == 0) {//鎻愬崌鏈哄綋鍓嶆ゼ灞備负0锛屾彁鍗囨満澶卞幓浣嶇疆淇℃伅锛岃鎻愬崌鏈哄墠寰�涓�妤� + LiftCommand command = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.ONE.lev); + commands.add(command);//灏嗗懡浠ゆ坊鍔犺繘list + } + + //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀埌浣� + StaProtocol staProtocol = devpThread.getStation().get(Utils.levToOutInStaNo(wrkMastLocNoLey));//璧峰绔欑偣 + if (liftLev != wrkMastLocNoLey && wrkMastLocNoLey != 1 || !staProtocol.isLiftArrival()) { + //鎻愬崌鏈轰笉鍦ㄥ伐浣滄。婧愬簱浣嶆ゼ灞傦紝璋冨害鎻愬崌鏈� + LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), wrkMastLocNoLey); + commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list + } + + //杈撻�佺嚎灏嗚揣鐗╄繍杩涙潵(鏃犺揣鍙嶈浆) + LiftCommand command2 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 4); + command2.setOperaStaNo(staProtocol.getSiteId().shortValue());//杈撻�佺嚎鎿嶄綔绔欑偣鍙� + command2.setRotationDire(2);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屽弽杞� + command2.setDevpId(devpId);//杈撻�佺嚎iD + command2.setStaNo((short) 104);//鍐欏叆鍑哄簱鐩爣绔�104 + commands.add(command2);//灏嗗懡浠ゆ坊鍔犺繘list + + //鎻愬崌鏈哄墠寰�鍑哄簱鍙o紝杈撻�佺嚎妤煎眰 + LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), LiftLevType.TWO.lev); + commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list + + //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓(鍙嶈浆) + //杈撻�佺嚎灏嗚揣鐗╃Щ鍑哄幓 + LiftCommand command4 = liftThread.getLiftTurnCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), 2); + command4.setOperaStaNo((short) 102);//鎿嶄綔102绔� + command4.setRotationDire(2);//缁欒緭閫佺嚎涓嬪彂閾炬潯杞姩淇″彿锛屽弽杞� + command4.setDevpId(devpId); + commands.add(command4);//灏嗗懡浠ゆ坊鍔犺繘list + + //鎻愬崌鏈洪摼鏉℃墽琛屽畬姣曞悗锛岀粰102绔欏啓鍏ヨ祫鏂� + LiftCommand command5 = liftThread.getResetCommand(); + command5.setDevpId(devpId);//杈撻�佺嚎iD + command5.setOperaStaNo((short) 102);//鎿嶄綔102绔� + command5.setStaNo((short) 104);//鍐欏叆鍑哄簱鐩爣绔�104 + command5.setRotationDire(0);//閾炬潯杞姩鍋滄 + commands.add(command5); + + wrkMast.setWrkSts(28L);//28.鎻愬崌鏈烘惉杩愪腑 } //鎵�闇�鍛戒护缁勫悎瀹屾瘯锛屾洿鏂版暟鎹簱锛屾彁浜ゅ埌绾跨▼鍘诲伐浣� @@ -1311,13 +1422,58 @@ continue; } - //鎻愬崌鏈轰负绛夊緟纭 - if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id && liftProtocol.getTaskNo() != 0) { +// //褰撴彁鍗囨満鐘舵�佸浜庡伐浣滀腑锛屼絾鎻愬崌鏈哄疄闄呬负绌洪棽鐘舵�侊紝涓旀椂闀胯秴杩�30绉掞紝鑷姩澶嶄綅 +// if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WORKING.id +// && liftProtocol.getTaskNo() != 0 +// && !liftProtocol.getRunning() +// ) { +// if (liftProtocol.getWrkTime() == null) { +// continue; +// } +// +// Date wrkTime = liftProtocol.getWrkTime(); +// Date now = new Date(); +// long interval = (now.getTime() - wrkTime.getTime()) / 1000;//璁$畻鏃堕棿宸� +// if (interval >= 30) {//瓒呰繃30绉掕嚜鍔ㄥ浣� +// //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� +// liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); +// //浠诲姟鍙锋竻闆� +// liftProtocol.setTaskNo((short) 0); +// //鏍囪澶嶄綅 +// liftProtocol.setPakMk(true); +// //浠诲姟鎸囦护娓呴浂 +// liftProtocol.setAssignCommand(null); +// News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); +// } +// } + + //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂� + if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id + && liftProtocol.getTaskNo() != 0 + && !liftProtocol.getRunning() + ) { + + DevpThread devpThread = null; + Integer devpId = null; + for (DevpSlave devp : slaveProperties.getDevp()){ + // 鑾峰彇鍏ュ簱绔欎俊鎭� + devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + devpId = devp.getId(); + } + //灏嗕换鍔℃。鏍囪涓哄畬鎴� WrkMast wrkMast = wrkMastMapper.selectByWorkNo372428(liftProtocol.getTaskNo().intValue()); if (wrkMast != null) { switch (wrkMast.getWrkSts().intValue()) { case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴� + //缁欑洰鏍囩珯璁剧疆宸ヤ綔鍙� + StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo());//鐩爣绔� + staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); + staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); + boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocol)); + if (!result) { + throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); + } wrkMast.setWrkSts(4L); break; case 7://7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 ==> 8.鎻愬崌鏈鸿縼绉诲皬杞﹀畬鎴� @@ -1342,40 +1498,30 @@ liftProtocol.setPakMk(true); //浠诲姟鎸囦护娓呴浂 liftProtocol.setAssignCommand(null); - //鎻愬崌鏈鸿В閿� - liftProtocol.setLiftLock(false); News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); } else { News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); } } - //鏌ヨ鏄惁鏈夊厖鐢典换鍔� - WrkCharge wrkCharge = wrkChargeMapper.selectByWorkNo(liftProtocol.getTaskNo().intValue()); - if (wrkCharge != null) { - switch (wrkCharge.getWrkSts().intValue()) { - case 54://鎻愬崌鏈烘惉杩愪腑 - wrkCharge.setWrkSts(55L);//鎻愬崌鏈烘惉杩愬畬鎴� - break; - default: - } - - if (wrkChargeMapper.updateById(wrkCharge) > 0) { - //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� - liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); - //浠诲姟鍙锋竻闆� - liftProtocol.setTaskNo((short) 0); - //鏍囪澶嶄綅 - liftProtocol.setPakMk(true); - //浠诲姟鎸囦护娓呴浂 - liftProtocol.setAssignCommand(null); - //鎻愬崌鏈鸿В閿� - liftProtocol.setLiftLock(false); - News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); - } else { - News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); - } + //涓嶆槸鍏ュ嚭搴撹皟搴︿换鍔°�佸伐浣滄。浠诲姟锛岃繘琛屾彁鍗囨満鐨勫浣� + if (liftProtocol.getAssignCommand() != null) { + //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� + liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); + //浠诲姟鍙锋竻闆� + liftProtocol.setTaskNo((short) 0); + //鏍囪澶嶄綅 + liftProtocol.setPakMk(true); + //浠诲姟鎸囦护娓呴浂 + liftProtocol.setAssignCommand(null); + News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo()); +// LiftAssignCommand assignCommand = liftProtocol.getAssignCommand(); +// if (!assignCommand.getAuto()) { +// //鎵嬪姩鍛戒护 +// +// } } + } } } @@ -2135,7 +2281,7 @@ //褰撳墠绌挎杞﹀簱浣嶅彿 String currentLocNo = shuttleProtocol.getCurrentLocNo(); //灏忚溅褰撳墠灞傞珮 - Integer currentLev = Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length())); + Integer currentLev = currentLocNo == null ? 0 : Integer.parseInt(currentLocNo.substring(currentLocNo.length() - 2, currentLocNo.length())); //鑾峰彇鎻愬崌鏈� LiftSlave liftSlave = slaveProperties.getLift().get(0); //鎻愬崌鏈哄簱浣嶅彿 @@ -2231,7 +2377,7 @@ if (liftLev != currentLev) { //绌挎杞﹀拰鎻愬崌鏈哄浜庝笉鍚屾ゼ灞� //鑾峰彇鐩爣妤煎眰(绌挎杞︽墍鍦ㄦゼ灞�)鍛戒护 - LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), currentLev.shortValue()); + LiftCommand command1 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), currentLev); commands.add(command1);//灏嗗懡浠ゆ坊鍔犺繘list } @@ -2241,7 +2387,7 @@ //鎻愬崌鏈哄墠寰�鐩爣妤煎眰 //鑾峰彇鍏呯數搴撲綅鐩爣妤煎眰鍛戒护 - LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), chargeLocNoLev.shortValue()); + LiftCommand command3 = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), chargeLocNoLev); commands.add(command3);//灏嗗懡浠ゆ坊鍔犺繘list //鎻愬崌鏈哄埌杈炬寚瀹氭ゼ灞傦紝杈撻�佺嚎灏嗗洓鍚戠┛姊溅绉诲嚭鍘� diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java index d9068cc..a08c7d4 100644 --- a/src/main/java/com/zy/asrs/utils/Utils.java +++ b/src/main/java/com/zy/asrs/utils/Utils.java @@ -268,6 +268,70 @@ return zerofill(String.valueOf(row), 2) + zerofill(String.valueOf(bay), 3) + zerofill(String.valueOf(lev), 2); } + //鍑哄叆搴撶珯鐐瑰彿杞崲瀵瑰簲妤煎眰 + public static Integer outInStaNoToLev(Integer distSta) { + Integer distLev = 1;//鐩爣妤煎眰 + switch (distSta) { + case 102: + distLev = 2;//杈撻�佺嚎妤煎眰 + case 105: + distLev = 1;//涓�妤� + case 106: + distLev = 3;//浜屾ゼ + case 107: + distLev = 4;//涓夋ゼ + case 108: + distLev = 5;//鍥涙ゼ + } + return distLev; + } + + //妤煎眰杞崲瀵瑰簲鍑哄叆搴撶珯鐐瑰彿 + public static Integer levToOutInStaNo(Integer lev) { + Integer staNo = null;//绔欑偣鍙� + switch (lev) { + case 1: + staNo = 105; + break; + case 2://杈撻�佺嚎灞� + staNo = 105; + break; + case 3: + staNo = 106; + break; + case 4: + staNo = 107; + break; + case 5: + staNo = 108; + break; + } + return staNo; + } + + //妤煎眰杞崲瀵瑰簲鍑哄叆搴撶珯鐐瑰簱浣嶅彿 + public static String levToOutInStaLocNo(Integer lev) { + String locNo = null; + if (lev >= 2) { + lev++; + } + switch (lev) { + case 1: + locNo = "1800201"; + break; + case 3: + locNo = "1800202"; + break; + case 4: + locNo = "1800203"; + break; + case 5: + locNo = "1800204"; + break; + } + return locNo; + } + public static void main(String[] args) { System.out.println(JSON.toJSONString(getGroupOutsideLoc("0200101"))); } diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java index 536cad9..ae94d5c 100644 --- a/src/main/java/com/zy/core/MainProcess.java +++ b/src/main/java/com/zy/core/MainProcess.java @@ -74,21 +74,18 @@ // 鍏朵粬 ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅 mainService.ledReset(); // 绌挎杞� ===>> 灏忚溅鐢甸噺妫�娴嬪厖鐢� - mainService.loopShuttleCharge(); - mainService.executeShuttleCharge(); - //鍑哄叆搴撴ā寮� - i++; - if (i > 1) { - mainService.outAndIn(); - i = 0; - } +// mainService.loopShuttleCharge(); +// mainService.executeShuttleCharge(); + +// //鍑哄叆搴撴ā寮� +// i++; +// if (i > 1) { +// mainService.outAndIn(); +// i = 0; +// } // 闂撮殧 Thread.sleep(200); - // 绌挎杞� ===>> 灏忚溅澶嶄綅鑷冲緟鏈哄簱浣� -// mainService.queryChargeLocOfComplete(); -// mainService.steFromChargeToIdleLoc(); - } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/com/zy/core/enums/LiftLevType.java b/src/main/java/com/zy/core/enums/LiftLevType.java new file mode 100644 index 0000000..488398f --- /dev/null +++ b/src/main/java/com/zy/core/enums/LiftLevType.java @@ -0,0 +1,71 @@ +package com.zy.core.enums; + +/** + * 鎻愬崌鏈烘ゼ灞備笌瀹為檯妤煎眰鏁板�艰浆鎹� + */ +public enum LiftLevType { + + ONE(1, (short) 1), + TWO(2, (short) 2), + THREE(3, (short) 4), + FOUR(4, (short) 8), + FIVE(5, (short) 16), + ; + + public Integer lev; + public Short realLev; + + LiftLevType(Integer lev, Short realLev) { + this.lev = lev; + this.realLev = realLev; + } + + public static LiftLevType get(Integer lev) { + if (null == lev) { + return null; + } + for (LiftLevType type : LiftLevType.values()) { + if (type.lev.equals(lev)) { + return type; + } + } + return null; + } + + public static LiftLevType get(LiftLevType type) { + if (null == type) { + return null; + } + for (LiftLevType type2 : LiftLevType.values()) { + if (type2 == type) { + return type2; + } + } + return null; + } + + public static Short getRealLev(Integer lev) { + if (null == lev) { + return null; + } + for (LiftLevType type : LiftLevType.values()) { + if (type.lev.equals(lev)) { + return type.realLev; + } + } + return null; + } + + public static Integer getLev(Short realLev) { + if (null == realLev) { + return null; + } + for (LiftLevType type : LiftLevType.values()) { + if (type.realLev.equals(realLev)) { + return type.lev; + } + } + return null; + } + +} diff --git a/src/main/java/com/zy/core/enums/ShuttleRunDirection.java b/src/main/java/com/zy/core/enums/ShuttleRunDirection.java index 94524d6..ac8b1d7 100644 --- a/src/main/java/com/zy/core/enums/ShuttleRunDirection.java +++ b/src/main/java/com/zy/core/enums/ShuttleRunDirection.java @@ -5,8 +5,8 @@ */ public enum ShuttleRunDirection { - TOP((short)2, "璐х墿鏂瑰悜+"), - BOTTOM((short)1, "璐х墿鏂瑰悜-"), + TOP((short)2, "璐х墿鏂瑰悜-"), + BOTTOM((short)1, "璐х墿鏂瑰悜+"), LEFT((short)3, "杩囬亾鏂瑰悜-"), RIGHT((short)4, "杩囬亾鏂瑰悜+"), ; diff --git a/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java b/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java index 13ca473..0ffce57 100644 --- a/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java +++ b/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java @@ -18,6 +18,7 @@ SEARCH_BOTTOM(13, "璐熸柟鍚�(鍚�)瀵诲簱浣�"), MOVE_LOC_NO(14, "绉诲姩鍒扮洰鏍囧簱浣�"), CHARGE(15, "鍏呯數"), + MOVE_LIFT(16, "绉诲姩鍒版彁鍗囨満"), ; public Integer id; diff --git a/src/main/java/com/zy/core/model/command/LiftCommand.java b/src/main/java/com/zy/core/model/command/LiftCommand.java index fa97400..51235b4 100644 --- a/src/main/java/com/zy/core/model/command/LiftCommand.java +++ b/src/main/java/com/zy/core/model/command/LiftCommand.java @@ -1,5 +1,6 @@ package com.zy.core.model.command; +import com.zy.core.model.protocol.StaProtocol; import lombok.Data; @@ -59,6 +60,26 @@ */ private Boolean liftLock; + /** + * 鎿嶄綔杈撻�佺珯鐐瑰彿 + */ + private Short operaStaNo; + + /** + * 杈撻�佺嚎鑱斿姩杞姩鏂瑰悜锛�0锛氬仠姝㈣浆鍔紝1锛氭鍚戣浆鍔紝2锛氬弽鍚戣浆鍔� + */ + private Integer rotationDire; + + /** + * 杈撻�佺嚎ID + */ + private Integer devpId; + + /** + * 鐩爣绔� + */ + private Short staNo; + public Short getLiftLockShortValue() { if (liftLock == null) { return (short) 0; diff --git a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java index c471351..391a366 100644 --- a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java @@ -1,15 +1,11 @@ package com.zy.core.model.protocol; -import com.core.common.SpringUtils; -import com.zy.asrs.service.BasShuttleService; -import com.zy.core.News; import com.zy.core.enums.LiftProtocolStatusType; -import com.zy.core.enums.ShuttleErrorCodeType; -import com.zy.core.enums.ShuttleProtocolStatusType; -import com.zy.core.enums.ShuttleStatusType; import com.zy.core.model.command.LiftAssignCommand; import lombok.Data; import lombok.extern.slf4j.Slf4j; + +import java.util.Date; /** * 鎻愬崌鏈� @@ -22,6 +18,11 @@ * 鎻愬崌鏈哄彿 */ private Short liftNo; + + /** + * 鎻愬崌鏈哄唴閮ㄤ簩缁寸爜 + */ + private Short barcode = 1699; /** * 浠诲姟鍙� @@ -199,6 +200,31 @@ */ private LiftAssignCommand assignCommand; + /** + * 鍑哄叆搴撴ā寮忥紝1锛氬叆搴擄紝2锛氬嚭搴� + */ + private Integer outInModel; + + /** + * 鍑哄叆搴撴ā寮忚捣濮嬬珯鐐� + */ + private Integer startSta; + + /** + * 鍑哄叆搴撴ā寮忕洰鏍囩珯鐐� + */ + private Integer distSta; + + /** + * 鍑哄叆搴撴ā寮忔鏁� + */ + private Integer outInModelStep; + + /** + * 宸ヤ綔鏃堕棿 + */ + private Date wrkTime; + public Short getLiftLockShortValue() { return liftLock ? (short) 1 : (short) 0; } @@ -233,7 +259,7 @@ boolean res = this.taskNo == 0 && !this.liftLock - && this.ready +// && this.ready && !this.running && this.mode && this.pakMk.equals(true) 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 b264d65..99b40c0 100644 --- a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java @@ -54,7 +54,7 @@ private String sourceLocNo; /** - * 鐩爣搴撲綅f + * 鐩爣搴撲綅 */ private String locNo; @@ -246,6 +246,9 @@ // 鐢甸噺 try { Integer chargeLine = SpringUtils.getBean(BasShuttleService.class).selectById(this.shuttleNo).getChargeLine(); + if (chargeLine == null) { + return false; + } return this.getBatteryPower$() > chargeLine; } catch (Exception e) { News.error("fail", e); diff --git a/src/main/java/com/zy/core/model/protocol/StaProtocol.java b/src/main/java/com/zy/core/model/protocol/StaProtocol.java index 467ebc1..98b57f0 100644 --- a/src/main/java/com/zy/core/model/protocol/StaProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/StaProtocol.java @@ -40,6 +40,12 @@ // 婊℃墭鐩� private boolean fullPlt; + //鎻愬崌鏈哄埌浣嶄俊鍙� + private boolean liftArrival; + + //鍥涘悜绌挎杞﹀彲鍙栦俊鍙� + private boolean shuttleTakeEnable; + // 楂� private boolean high; @@ -75,6 +81,9 @@ //鍑哄叆搴撴ā寮� private Short outInModel; + //杈撻�佺嚎鑱斿姩杞姩鏂瑰悜锛�0锛氬仠姝㈣浆鍔紝1锛氭鍚戣浆鍔紝2锛氬弽鍚戣浆鍔� + private Integer rotationDire; + public BasDevp toSqlModel(){ BasDevp basDevp = new BasDevp(); basDevp.setDevNo(siteId); diff --git a/src/main/java/com/zy/core/thread/LiftThread.java b/src/main/java/com/zy/core/thread/LiftThread.java index d5d2986..70151e9 100644 --- a/src/main/java/com/zy/core/thread/LiftThread.java +++ b/src/main/java/com/zy/core/thread/LiftThread.java @@ -14,15 +14,19 @@ import com.zy.asrs.service.BasLiftService; import com.zy.common.utils.CommonUtils; import com.zy.common.utils.RedisUtil; +import com.zy.core.DevpThread; 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.cache.SlaveConnection; import com.zy.core.enums.*; +import com.zy.core.model.DevpSlave; import com.zy.core.model.LiftSlave; import com.zy.core.model.Task; import com.zy.core.model.command.*; import com.zy.core.model.protocol.LiftProtocol; +import com.zy.core.model.protocol.StaProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -169,15 +173,13 @@ ///璇诲彇鎻愬崌鏈虹姸鎬�-end - //灏忚溅澶勪簬杩愯鐘舵�侊紝灏嗘爣璁扮疆涓簍rue + //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓簍rue if (liftProtocol.getRunning()) { liftProtocol.setPakMk(true); } - //鎻愬崌鏈哄浜庨攣瀹氥�佹湭杩愯銆佸氨缁�佹爣璁皌rue銆佹湁浠诲姟鍙� - if (liftProtocol.getLiftLock() - && !liftProtocol.getRunning() - && liftProtocol.getReady() + //鎻愬崌鏈哄浜庢湭杩愯銆佸氨缁�佹爣璁皌rue銆佹湁浠诲姟鍙� + if (!liftProtocol.getRunning() && liftProtocol.getPakMk() && liftProtocol.getTaskNo() != 0) { //杩樻湁鏈畬鎴愮殑鍛戒护 @@ -362,12 +364,33 @@ //鍙栧嚭鍛戒护 LiftCommand command = commands.get(commandStep); + if (command.getOperaStaNo() != null && command.getDevpId() != null) { + //绔欑偣鍜岃緭閫佺嚎ID涓嶄负null锛岄渶瑕佷笅鍙戠珯鐐规寚浠よ皟搴︽寚瀹氱珯鐐硅繘琛岄摼鏉¤浆鍔� + DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, command.getDevpId()); + StaProtocol staProtocol = devpThread.getStation().get(command.getOperaStaNo().intValue()); + if (!staProtocol.isLiftArrival()) {//閾炬潯杞姩鏉′欢锛岄渶瑕佹湁鎻愬崌鏈哄埌浣嶄俊鍙� + liftProtocol.setPakMk(true); + return false; + } + staProtocol.setWorkNo(wrkNo);//璁剧疆浠诲姟鍙� + if (command.getStaNo() != null) { + staProtocol.setStaNo(command.getStaNo());//璁剧疆鐩爣绔� + } + + if (command.getRotationDire() != null) { + staProtocol.setRotationDire(command.getRotationDire());//绔欑偣閾炬潯杞姩淇″彿 + } + Integer devpId = command.getDevpId(); + boolean result1 = MessageQueue.offer(SlaveType.Devp, devpId, new Task(3, staProtocol));//涓嬪彂鍛戒护浣胯緭閫佺嚎閾炬潯杩愯浆 + } + //涓嬪彂鍛戒护 if (!write(command)) { News.error("鎻愬崌鏈哄懡浠や笅鍙戝け璐ワ紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); return false; }else { News.info("鎻愬崌鏈哄懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); + liftProtocol.setWrkTime(new Date());//鏇存柊宸ヤ綔鏃堕棿 //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 if (commandStep < size - 1) { @@ -396,19 +419,9 @@ //鍒犻櫎redis redisUtil.del("lift_wrk_no_" + redisCommand.getWrkNo()); - if (assignCommand.getAuto()) { - //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting - liftProtocol.setProtocolStatus(LiftProtocolStatusType.WAITING); - News.info("鎻愬崌鏈轰换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛屾彁鍗囨満鍙�={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); - }else { - //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬� - liftProtocol.setTaskNo((short) 0); - liftProtocol.setShuttleNo((short) 0); - liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); - liftProtocol.setPakMk(true); - liftProtocol.setSecurityMk(false); - News.info("鎻愬崌鏈烘墜鍔ㄤ换鍔℃墽琛屽畬鎴愶紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); - } + //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting + liftProtocol.setProtocolStatus(LiftProtocolStatusType.WAITING); + News.info("鎻愬崌鏈轰换鍔℃墽琛屽畬鎴愮瓑寰呯‘璁や腑锛屾彁鍗囨満鍙�={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); } } @@ -443,26 +456,7 @@ public LiftCommand getLiftUpDownCommand(Integer lev) { LiftCommand command = new LiftCommand(); command.setRun((short) 1);//鍗囬檷 - Short position = 1; - switch (lev) { - case 1: - position = 1; - break; - case 2: - position = 2; - break; - case 3: - position = 4; - break; - case 4: - position = 8; - break; - case 5: - position = 16; - break; - default: - position = 1; - } + Short position = LiftLevType.getRealLev(lev);//鑾峰彇鎻愬崌鏈哄疄闄呮ゼ灞傛暟鍊� command.setDistPosition(position); command.setSpeed((short) 200); command.setHeight2((short) 180); @@ -475,12 +469,18 @@ /** * 鑾峰彇鎻愬崌鏈轰笂鍗囦笅闄嶅懡浠� */ - public LiftCommand getLiftUpDownCommand(Short liftNo, Short taskNo, Short lev) { + public LiftCommand getLiftUpDownCommand(Short liftNo, Short taskNo, Integer lev) { LiftCommand command = new LiftCommand(); + Short position = LiftLevType.getRealLev(lev);//鑾峰彇鎻愬崌鏈哄疄闄呮ゼ灞傛暟鍊� command.setRun((short) 1);//鍗囬檷 command.setLiftNo(liftNo);//鎻愬崌鏈哄彿 command.setTaskNo(taskNo);//浠诲姟鍙� - command.setDistPosition(lev);//鐩爣妤煎眰1灞� + command.setDistPosition(position);//鐩爣妤煎眰 + command.setSpeed((short) 200); + command.setHeight2((short) 180); + command.setHeight3((short) 1645); + command.setHeight4((short) 3290); + command.setHeight5((short) 4945); return command; } diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index 025d0e9..d6e8c04 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -8,14 +8,8 @@ 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.entity.*; +import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.common.model.NavigateNode; import com.zy.common.utils.*; @@ -30,6 +24,7 @@ import com.zy.core.model.command.*; import com.zy.core.model.protocol.LiftProtocol; import com.zy.core.model.protocol.ShuttleProtocol; +import com.zy.core.model.protocol.StaProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -174,18 +169,18 @@ shuttleProtocol.setPakMk(true); } - 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.getTaskNo()); - } +// 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.getTaskNo()); +// } //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠� if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE @@ -195,18 +190,18 @@ 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()); - } - } - } +// //妫�娴嬫槸鍚︽湁鎻愬崌鏈洪攣瀹氭爣璁帮紝鏈夊垯妫�娴嬫彁鍗囨満鏄惁鍒颁綅锛屾槸鍚﹁兘璧颁笅涓�姝ュ懡浠� +// 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); @@ -391,11 +386,28 @@ //鍒嗛厤浠诲姟 private void assignWork(ShuttleAssignCommand assignCommand) { + ShuttleRedisCommand redisCommand = new ShuttleRedisCommand(); + if (!assignCommand.getAuto()) { List<NavigateNode> allNode = new ArrayList<>(); List<ShuttleCommand> commands = new ArrayList<>(); LocMastService locMastService = SpringUtils.getBean(LocMastService.class); + BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); NavigateMapData navigateMapData; + + //鑾峰彇灏忚溅绉诲姩閫熷害 + BasShuttle basShuttle = shuttleService.selectById(slave.getId()); + Integer runSpeed = 1000; + if (basShuttle != null) { + Integer runSpeed1 = basShuttle.getRunSpeed(); + if (runSpeed1 != null) { + runSpeed = runSpeed1; + } + } + + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + switch (assignCommand.getTaskMode()) { case 1://鍏ュ簱 case 2://鍑哄簱 @@ -403,9 +415,6 @@ //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护 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);//灏嗚妭鐐硅繘琛屼繚瀛� @@ -415,14 +424,18 @@ for (ArrayList<NavigateNode> nodes : data) { //寮�濮嬭矾寰� NavigateNode startPath = nodes.get(0); + //涓棿璺緞 + NavigateNode middlePath = nodes.get(nodes.size() - 2); //鐩爣璺緞 NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(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)); + Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 + Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//鐩爣浜岀淮鐮� + Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� + commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); } //鎵樼洏椤跺崌 @@ -438,7 +451,6 @@ //璁$畻涓偣鍒扮粓鐐硅矾寰� List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), ShuttleTaskModeType.PAK_IN.id); - navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� if (secMastResult != null) { allNode.addAll(secMastResult);//灏嗚妭鐐硅繘琛屼繚瀛� @@ -448,18 +460,32 @@ for (ArrayList<NavigateNode> nodes : data) { //寮�濮嬭矾寰� NavigateNode startPath = nodes.get(0); + //涓棿璺緞 + NavigateNode middlePath = nodes.get(nodes.size() - 2); //鐩爣璺緞 NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(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)); + Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 + Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� + Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� + commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); } //鎵樼洏涓嬮檷 commands.add(getPalletCommand((short) 2)); + } + + navigateMapData = new NavigateMapData(Utils.getLev(currentLocMast.getLocNo())); + if (firstMastResult != null) { + //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + navigateMapData.writeNavigateNodeToRedisMap(firstMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + } + + if (secMastResult != null) { + navigateMapData.writeNavigateNodeToRedisMap(secMastResult, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� } break; case 3://鎵樼洏椤跺崌 @@ -482,10 +508,10 @@ ShuttleCommand reset = getResetCommand(); commands.add(reset); break; - case 10://鍚戞鏂瑰悜(宸�)瀵诲簱浣� + case 10://姝f柟鍚�(鍙�)瀵诲簱浣� commands.add(getFindLocCommand((short) 1)); break; - case 11://鍚戣礋鏂瑰悜(鍙�)瀵诲簱浣� + case 11://璐熸柟鍚�(宸�)瀵诲簱浣� commands.add(getFindLocCommand((short) 2)); break; case 12://鍚戞鏂瑰悜(鍓�)瀵诲簱浣� @@ -495,13 +521,28 @@ commands.add(getFindLocCommand((short) 3)); break; case 14://绉诲姩鍒扮洰鏍囧簱浣� - LocMast locMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); + String startQr = shuttleProtocol.getCurrentCode().toString();//璧峰浣嶇疆 + //濡傛灉绌挎杞﹀湪鎻愬崌鏈哄唴锛岀Щ鍔ㄦ椂闇�瑕佸厛涓嬪彂鍑烘彁鍗囨満鍛戒护 + if (liftProtocol.getBarcode().intValue() == shuttleProtocol.getCurrentCode().intValue()) { + //绌挎杞﹀嚭鎻愬崌鏈� + Short liftLev = liftProtocol.getPositionArrivalFeedback();//鎻愬崌鏈轰綅缃� + String liftSiteLocNo = Utils.levToOutInStaLocNo(liftLev.intValue()); + LocMast locMast1 = locMastService.selectById(liftSiteLocNo); + ShuttleCommand moveCommand = getMoveCommand(liftProtocol.getBarcode(), Short.parseShort(locMast1.getQrCodeValue()), 1400, ShuttleRunDirection.BOTTOM.id, liftProtocol.getBarcode(), 1400, runSpeed); + commands.add(moveCommand); + + //璧峰浣嶇疆淇敼涓烘彁鍗囨満鍙g珯鐐逛綅缃� + startQr = locMast1.getQrCodeValue(); + } + + LocMast locMast = locMastService.queryByQrCode(startQr); 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) { + //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + navigateMapData = new NavigateMapData(Utils.getLev(locMast.getLocNo())); + navigateMapData.writeNavigateNodeToRedisMap(result, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + allNode.addAll(result);//灏嗚妭鐐硅繘琛屼繚瀛� //鑾峰彇鍒嗘璺緞 ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result); @@ -509,20 +550,66 @@ for (ArrayList<NavigateNode> nodes : data) { //寮�濮嬭矾寰� NavigateNode startPath = nodes.get(0); + //涓棿璺緞 + NavigateNode middlePath = nodes.get(nodes.size() - 2); //鐩爣璺緞 NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - - LocMast distLocMast = locMastService.queryByLoc(assignCommand.getLocNo()); - String qrCodeValue = distLocMast.getQrCodeValue(); - + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 + Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� + Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� //姝e父绉诲姩鍛戒护 - commands.add(getMoveCommand(shuttleProtocol.getCurrentCode(),(short) Integer.parseInt(qrCodeValue),allDistance,ShuttleRunDirection.get(startPath.getDirection()).id)); + commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); } } break; case 15://鍏呯數寮�鍏� commands.add(getChargeSwitchCommand()); + break; + case 16://绉诲姩鍒版彁鍗囨満 + LocMast locMast1 = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString()); + int lev = Utils.getLev(locMast1.getLocNo());//绌挎杞﹀綋鍓嶉珮搴� + String liftSiteLocNo = Utils.levToOutInStaLocNo(lev);//褰撳墠妤煎眰绔欑偣搴撲綅鍙� + LocMast liftSitelocMast = locMastService.selectById(liftSiteLocNo); + List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, ShuttleTaskModeType.PAK_IN.id); + + Short endStartCode = null; + if (result1 != null) { + //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + navigateMapData = new NavigateMapData(Utils.getLev(locMast1.getLocNo())); + navigateMapData.writeNavigateNodeToRedisMap(result1, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢� + + allNode.addAll(result1);//灏嗚妭鐐硅繘琛屼繚瀛� + //鑾峰彇鍒嗘璺緞 + ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result1); + //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 + for (ArrayList<NavigateNode> nodes : data) { + //寮�濮嬭矾寰� + NavigateNode startPath = nodes.get(0); + //涓棿璺緞 + NavigateNode middlePath = nodes.get(nodes.size() - 2); + //鐩爣璺緞 + NavigateNode endPath = nodes.get(nodes.size() - 1); + Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 + Short middleCode = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());//涓棿浜岀淮鐮� + Short distCode = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());//鐩爣浜岀淮鐮� + endStartCode = distCode; + //姝e父绉诲姩鍛戒护 + commands.add(getMoveCommand(startCode, distCode, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id, middleCode, middleToDistDistance, runSpeed)); + } + } + + if (endStartCode == null && shuttleProtocol.getCurrentCode() == Short.parseShort(liftSitelocMast.getQrCodeValue())) { + //绌挎杞﹀凡缁忓湪鎻愬崌鏈虹珯鐐瑰彛 + endStartCode = shuttleProtocol.getCurrentCode(); + } + + //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护 + ShuttleCommand moveCommand = getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1400, ShuttleRunDirection.TOP.id, endStartCode, 1400, runSpeed); + commands.add(moveCommand); break; default: } @@ -530,7 +617,6 @@ assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist } - ShuttleRedisCommand redisCommand = new ShuttleRedisCommand(); redisCommand.setShuttleNo(assignCommand.getShuttleNo());//鍥涘悜绌挎杞﹀彿 redisCommand.setWrkNo(assignCommand.getTaskNo());//宸ヤ綔鍙� redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭 @@ -657,6 +743,9 @@ } } + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + //涓嬪彂鍛戒护 if (!write(command)) { News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); @@ -694,17 +783,17 @@ 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); + if (locNo != null) { + //瑙i櫎閿佸畾鐨勫簱浣嶈矾寰� + NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(locNo)); + navigateMapData.writeNavigateNodeToRedisMap(redisCommand.getAssignCommand().getNodes(), false); + } //鍒犻櫎redis redisUtil.del("shuttle_wrk_no_" + redisCommand.getWrkNo()); @@ -743,6 +832,16 @@ return false; } + //鎷垮埌鎻愬崌鏈虹嚎绋� + LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1); + if (liftThread == null) { + return false; + } + LiftProtocol liftProtocol = liftThread.getLiftProtocol(); + if (liftProtocol == null) { + return false; + } + Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo); if (o == null) { return false; @@ -753,6 +852,21 @@ //妫�娴嬫槸鍚﹀瓨鍦ㄦ彁鍗囨満鍙g殑鎸囦护 List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands(); + if (commands.size() > 0) { + if (commands.get(commandStep).getCommandWord() != 1) { + //涓嶆槸琛岃蛋鍛戒护锛岀洿鎺ユ斁琛� + return true; + } + + if (commands.get(0).getStartCodeNum() == null) { + return false; + } + //鍛戒护璧峰浣嶇疆灏辨槸鎻愬崌鏈轰簩缁寸爜锛屽垯涓嶈繘琛屾牎楠� + if (commands.get(0).getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()) { + return true; + } + } + BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); ArrayList<Short> qrCodeValues = new ArrayList<>(); for (BasDevp basDevp : basDevpService.selectList(null)) { @@ -762,13 +876,18 @@ //閬嶅巻鎵�鏈夋寚浠わ紝鍒ゆ柇鏄惁鏈夊埌鎻愬崌鏈哄彛鐨勬寚浠わ紝骞惰幏鍙栧埌杈捐鎻愬崌鏈哄彛鎵�闇�姝ュ簭 int step = 0; + Integer siteNo = null;//绔欑偣鍙� ShuttleCommand command = null; - for (int i = 1; i < commands.size(); i++) { + for (int i = 0; i < commands.size(); i++) { command = commands.get(i); - if (qrCodeValues.contains(command.getDistCodeNum())) { - //瀛樺湪 - step = i + 1; - break; + for (Short qrCodeValue : qrCodeValues) { + if (qrCodeValue.intValue() == command.getDistCodeNum().intValue()) { + //瀛樺湪 + step = i + 1; + BasDevp basDevp = basDevpService.queryByQrCode(qrCodeValue.intValue()); + siteNo = basDevp.getDevNo(); + break; + } } } @@ -783,49 +902,37 @@ 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); - } + Integer shuttleLocNoLev = shuttleLocNo == null ? 0 : Utils.getLev(shuttleLocNo);//搴撲綅鍙峰搴斿眰楂� //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀湪鐩爣妤煎眰 - if (liftProtocol.getLev().intValue() == shuttleLocNoLev) { - //鍚屼竴灞傦紝鐩存帴鏀捐 - return true; + if (shuttleLocNoLev >= 2) { + shuttleLocNoLev++; } - //鎻愬崌鏈哄拰绌挎杞﹀浜庝笉鍚屾ゼ灞傦紝闇�瑕佽繘琛岃皟搴� - if (!liftProtocol.isIdle()) { - //鎻愬崌鏈轰笉鏄┖闂� + //鍒ゆ柇杈撻�佺嚎绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙� + if (siteNo != null) { + SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); + StaProtocol staProtocol = siemensDevpThread.getStation().get(siteNo); + if (staProtocol.isLiftArrival() + && liftProtocol.getPositionArrivalFeedback().intValue() == shuttleLocNoLev) { + //杈撻�佺嚎鍙嶉鎻愬崌鏈哄埌浣嶄笖鎻愬崌鏈烘ゼ灞傚弽棣堜负鍚屼竴灞傦紝鐩存帴鏀捐 + return true; + } + } + + if (liftProtocol.getRunning()) { + //鎻愬崌鏈鸿繍琛屼腑锛岀姝笅鍙� + return false; + } + + if (redisCommand.getLiftSecurityMk()) { + //宸茬粡鎵ц杩囨彁鍗囨満鍛戒护锛岀姝笅鍙� return false; } //缁欐彁鍗囨満鍒嗛厤浠诲姟 - liftProtocol.setLiftLock(true);//閿佸畾鎻愬崌鏈� liftProtocol.setTaskNo(shuttleProtocol.getTaskNo());//璁剧疆浠诲姟鍙� liftProtocol.setShuttleNo(shuttleProtocol.getShuttleNo());//璁剧疆鍥涘悜绌挎杞﹀彿 liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//璁剧疆鎻愬崌鏈虹姸鎬佷负宸ヤ綔涓� @@ -836,12 +943,7 @@ //鍛戒护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);//閿佸畾鎻愬崌鏈� + LiftCommand liftCommand = liftThread.getLiftUpDownCommand(liftProtocol.getLiftNo(), liftProtocol.getTaskNo(), shuttleLocNoLev); liftCommands.add(liftCommand);//灏嗗懡浠ゆ坊鍔犺繘list LiftAssignCommand liftAssignCommand = new LiftAssignCommand(); @@ -941,20 +1043,27 @@ } /** - * 姝e父绉诲姩鍛戒护 - * @return + * 姝e父绉诲姩鍛戒护,榛樿绉诲姩閫熷害1000 */ - public ShuttleCommand getMoveCommand(Short startCodeNum, Short distCodeNum, Integer startToDistDistance, Short runDirection) { + public ShuttleCommand getMoveCommand(Short startCodeNum, Short distCodeNum, Integer startToDistDistance, Short runDirection, Short middleCodeNum, Integer middleToDistDistance) { + return getMoveCommand(startCodeNum, distCodeNum, startToDistDistance, runDirection, middleCodeNum, middleToDistDistance, 1000); + } + + /** + * 姝e父绉诲姩鍛戒护 + */ + public ShuttleCommand getMoveCommand(Short startCodeNum, Short distCodeNum, Integer startToDistDistance, Short runDirection, Short middleCodeNum, Integer middleToDistDistance, Integer runSpeed) { ShuttleCommand command = new ShuttleCommand(); command.setCommandWord((short) 1); command.setStartCodeNum(startCodeNum); - command.setMiddleCodeNum((short) 1); + command.setMiddleCodeNum(middleCodeNum); command.setDistCodeNum(distCodeNum); command.setStartToDistDistance(startToDistDistance); + command.setMiddleToDistDistance(middleToDistDistance); command.setRunDirection(runDirection); command.setForceMoveDistance(0); command.setIOControl((short) 0); - command.setRunSpeed((short) 1000); + command.setRunSpeed(runSpeed.shortValue()); command.setCommandEnd((short) 1); return command; } @@ -1027,8 +1136,8 @@ */ public ShuttleCommand getChargeSwitchCommand() { ShuttleCommand command = new ShuttleCommand(); - command.setCommandWord((short) 8); - command.setIOControl((short) 4); + command.setCommandWord((short) 5); + command.setChargeSwitch((short) 1); command.setCommandEnd((short) 1); return command; } diff --git a/src/main/java/com/zy/core/thread/SiemensDevpThread.java b/src/main/java/com/zy/core/thread/SiemensDevpThread.java index 8b093b6..f46b360 100644 --- a/src/main/java/com/zy/core/thread/SiemensDevpThread.java +++ b/src/main/java/com/zy/core/thread/SiemensDevpThread.java @@ -10,7 +10,6 @@ import com.core.common.SpringUtils; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.service.BasDevpService; -import com.zy.common.utils.CommonUtils; import com.zy.core.DevpThread; import com.zy.core.News; import com.zy.core.cache.MessageQueue; @@ -47,6 +46,11 @@ add(100);add(101);add(102); add(103);add(104);add(105); add(106);add(107);add(108); + }}; + + public static final ArrayList<Integer> outInStaNos = new ArrayList<Integer>() {{ + add(102);add(105);add(106); + add(107);add(108); }}; public boolean charge0; @@ -144,8 +148,8 @@ staProtocol.setOutEnable(status[3]);// 鍙嚭 staProtocol.setEmptyMk(status[4]); // 绌烘澘淇″彿 staProtocol.setFullPlt(status[5]); // 婊℃墭鐩� - staProtocol.setHigh(status[6]); // 楂樺簱浣� - staProtocol.setLow(status[7]); // 浣庡簱浣� + staProtocol.setLiftArrival(status[6]); // 鎻愬崌鏈哄埌浣嶄俊鍙� + staProtocol.setShuttleTakeEnable(status[7]); // 鎻愬崌鏈哄彲鍙栦俊鍙� if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { staProtocol.setPakMk(true); @@ -158,9 +162,9 @@ OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.200",(short)24); if (result2.IsSuccess) { for (int i = 0; i <= barcodeSize; i++) { - byte[] bytes = siemensS7Net.getByteTransform().TransByte(result2.Content, i * 8, 8); - String barcode = CommonUtils.bytesToBarcode(bytes); -// String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8"); +// byte[] bytes = siemensS7Net.getByteTransform().TransByte(result2.Content, i * 8, 8); +// String barcode = CommonUtils.bytesToBarcode(bytes); + String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8"); BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { barcodeThread.setBarcode(barcode); @@ -192,35 +196,39 @@ StaProtocol staProtocol = station.get(102); staProtocol.setOutInModel(outInModel); } -// // 澶栧舰妫�娴� - 201 -// Thread.sleep(50); -// OperateResultExOne<byte[]> result201 = siemensS7Net.Read("DB102.112", (short)1); -// if (result201.IsSuccess) { -// boolean[] status = siemensS7Net.getByteTransform().TransBool(result201.Content, 0, 1); -// StaProtocol staProtocol = station.get(201); -// staProtocol.setFrontErr(status[0]); -// staProtocol.setBackErr(status[1]); -// staProtocol.setHighErr(status[2]); -// staProtocol.setLeftErr(status[3]); -// staProtocol.setRightErr(status[4]); -// staProtocol.setWeightErr(status[5]); -// staProtocol.setBarcodeErr(status[6]); -// } -// // 澶栧舰妫�娴� - 301 -// Thread.sleep(50); -// OperateResultExOne<byte[]> result301 = siemensS7Net.Read("DB102.114", (short)1); -// if (result301.IsSuccess) { -// boolean[] status = siemensS7Net.getByteTransform().TransBool(result301.Content, 0, 1); -// StaProtocol staProtocol = station.get(301); -// staProtocol.setFrontErr(status[0]); -// staProtocol.setBackErr(status[1]); -// staProtocol.setHighErr(status[2]); -// staProtocol.setLeftErr(status[3]); -// staProtocol.setRightErr(status[4]); -// staProtocol.setWeightErr(status[5]); -// staProtocol.setBarcodeErr(status[6]); -// } + Thread.sleep(50); + for (Integer siteId : outInStaNos) { + String dbAddress = "DB100.300"; + switch (siteId) { + case 102: + dbAddress = "DB100.300"; + break; + case 105: + dbAddress = "DB100.302"; + break; + case 106: + dbAddress = "DB100.304"; + break; + case 107: + dbAddress = "DB100.306"; + break; + case 108: + dbAddress = "DB100.308"; + break; + } + + OperateResultExOne<byte[]> resultRead = siemensS7Net.Read(dbAddress, (short) 2); + if (resultRead.IsSuccess) { + //閾炬潯杞姩鎯呭喌 + short direction = siemensS7Net.getByteTransform().TransInt16(resultRead.Content, 0); + StaProtocol staProtocol = station.get(siteId); + if (direction != 0 && !staProtocol.isLoading()) { + //鐘舵�佷负姝h浆鎴栧弽杞笖鏃犵墿鏃讹紝灏嗛摼鏉¤浆鍔ㄤ俊鍙蜂綅澶嶄綅 + write4(siteId, 0); + } + } + } if (result.IsSuccess && result1.IsSuccess) { OutputQueue.DEVP.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); @@ -282,11 +290,9 @@ } Short outAndIn = staProtocol.getOutInModel(); Integer siteId = staProtocol.getSiteId(); - Short run = 1;//姝h浆 - if (outAndIn == 1) {//鍏ュ簱 - run = 1;//姝h浆 - } else { - run = 2;//鍙嶈浆 + Short run = 0;//鍋滄杞姩 + if (staProtocol.getRotationDire() != null) { + run = staProtocol.getRotationDire().shortValue();//杞姩鏂瑰悜 } switch (siteId) { case 102: @@ -306,6 +312,10 @@ break; } + if (staProtocol.getStaNo() != null && staProtocol.getWorkNo() != null) { + write(staProtocol);//鍐欏叆宸ヤ綔鍙峰拰鐩爣绔� + } + } /** diff --git a/src/main/resources/mapper/WrkMastMapper.xml b/src/main/resources/mapper/WrkMastMapper.xml index 243d307..10794cc 100644 --- a/src/main/resources/mapper/WrkMastMapper.xml +++ b/src/main/resources/mapper/WrkMastMapper.xml @@ -241,7 +241,7 @@ from dbo.asr_wrk_mast where 1=1 and ((wrk_sts = 4 and shuttle_no is null) or (wrk_sts = 8 and shuttle_no is not null)) - and source_sta_no = #{sourceStaNo} + and sta_no = #{staNo} and wrk_no=#{workNo} order by io_pri desc,wrk_sts desc </select> diff --git a/src/main/webapp/views/pipeline.html b/src/main/webapp/views/pipeline.html index cd67a6d..d8b85a2 100644 --- a/src/main/webapp/views/pipeline.html +++ b/src/main/webapp/views/pipeline.html @@ -102,6 +102,8 @@ <th>鍏ュ簱鏍囪</th> <th>绌烘澘淇″彿</th> <th>鐩爣绔�</th> + <th>鎻愬崌鏈哄埌浣嶄俊鍙�</th> + <th>绌挎杞﹀彲鍙栦俊鍙�</th> </tr> </thead> <!-- 琛ㄦ牸鍐呭 --> @@ -287,6 +289,8 @@ setVal(tr.children("td").eq(6), table[i-1].pakMk); setVal(tr.children("td").eq(7), table[i-1].emptyMk); setVal(tr.children("td").eq(8), table[i-1].staNo); + setVal(tr.children("td").eq(9), table[i-1].liftArrival); + setVal(tr.children("td").eq(10), table[i-1].shuttleTakeEnable); } } else if (res.code === 403){ window.location.href = baseUrl+"/login"; @@ -372,6 +376,8 @@ " <td></td>\n" + " <td></td>\n" + " <td></td>\n" + + " <td></td>\n" + + " <td></td>\n" + " </tr>\n"; } $('#site-table tbody').after(html); diff --git a/src/main/webapp/views/shuttle.html b/src/main/webapp/views/shuttle.html index f76e3fa..4cd0f62 100644 --- a/src/main/webapp/views/shuttle.html +++ b/src/main/webapp/views/shuttle.html @@ -121,6 +121,7 @@ <button class="item" onclick="shuttleOperator(1)">鍏ュ簱</button> <button class="item" onclick="shuttleOperator(2)">鍑哄簱</button> <button class="item" onclick="shuttleOperator(14)">绉诲姩鍒扮洰鏍囧簱浣�</button> + <button class="item" onclick="shuttleOperator(16)">绉诲姩鍒版彁鍗囨満</button> </div> </div> </div> -- Gitblit v1.9.1