From 3a641d32f53e378e5cfa1bd4b1ae5590f4883bda Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 25 七月 2023 10:42:54 +0800 Subject: [PATCH] 捡料 --- src/main/java/com/zy/core/thread/ShuttleThread.java | 137 +++++++++++++++++++++++++-------------------- 1 files changed, 75 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java index 844aa2d..6171b4d 100644 --- a/src/main/java/com/zy/core/thread/ShuttleThread.java +++ b/src/main/java/com/zy/core/thread/ShuttleThread.java @@ -64,7 +64,7 @@ switch (step) { // 璇绘暟鎹� case 1: - readStatus(); + read(); break; // 鍐欏叆鏁版嵁 case 2: @@ -108,6 +108,23 @@ @Override public void close() { modbusTcpNet.ConnectClose(); + } + + private void read() { + try { + readStatus(); + //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠� + if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE + && shuttleProtocol.getTaskNo() != 0 + && shuttleProtocol.getPakMk()) { + //鎵ц涓嬩竴姝ユ寚浠� + executeWork(shuttleProtocol.getTaskNo()); + } + } catch (Exception e) { + e.printStackTrace(); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + initShuttle(); + } } private void readStatus() { @@ -172,40 +189,6 @@ if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.BUSY) { 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()); -// } - - //鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负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); @@ -279,7 +262,6 @@ News.error("鍥涘悜绌挎杞﹀啓鍏ュ懡浠や负绌�"); return false; } - BasShuttleService shuttleService = SpringUtils.getBean(BasShuttleService.class); if (shuttleService == null) { News.error("绯荤粺閿欒"); @@ -291,8 +273,49 @@ News.error("鍥涘悜绌挎杞︿笉瀛樺湪"); return false; } - command.setShuttleNo(slave.getId().shortValue()); + short[] array = getCommandArr(command);//鑾峰彇鍛戒护鎶ユ枃 + OperateResult result = modbusTcpNet.Write("0", array); + if (result != null && result.IsSuccess) { + News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); + + try { + Thread.sleep(3000);//鍛戒护涓嬪彂鍚庝紤鐪� + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + for (int i = 0; i < 5; i++) { + if (command.getCommandWord().intValue() == 5 || command.getCommandWord().intValue() == 6) { + break;//鍏呯數寮�鍏冲拰绯荤粺澶嶄綅涓嶉渶瑕侀噸鍙戞満鍒� + } + readStatus();//閲嶆柊璇诲彇鐘舵�� + if (shuttleProtocol.getBusyStatusType().equals(ShuttleStatusType.BUSY)) { + break; + } + + //鍒ゆ柇鏄惁杩愯涓紝濡備笉杩愯锛岄噸鏂颁笅鍙戝懡浠� + result = modbusTcpNet.Write("0", array); + News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙慬id:{}] >>>>> {},娆℃暟锛歿}", slave.getId(), JSON.toJSON(command), i); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2},娆℃暟锛歿}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command), i)); + try { + Thread.sleep(300);//鍛戒护涓嬪彂鍚庝紤鐪� + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + return true; + } else { + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ洓鍚戠┛姊溅plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}],娆℃暟锛歿}", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + News.error("鍐欏叆鍥涘悜绌挎杞lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + return false; + } + } + + //鑾峰彇鍛戒护鎶ユ枃 + private short[] getCommandArr(ShuttleCommand command) { // 寮�濮嬩换鍔� short[] array = new short[17]; //鎺у埗鎸囦护瀛� @@ -326,7 +349,6 @@ array[7] = middleToDistDistances[1]; } - array[8] = basShuttle.getRunSpeed().shortValue();//鍥涘悜绌挎杞﹁繍琛岄�熷害锛屼粠绯荤粺鏁版嵁搴撹鍑� if (command.getRunDirection() != null) { //灏忚溅杩愯鏂瑰悜 array[8] = command.getRunDirection(); @@ -363,31 +385,16 @@ //灏忚溅闆疯揪澶囩敤 array[15] = command.getRadarTmp(); } - //鎸囦护缁撴潫浣� array[16] = command.getCommandEnd(); - - OperateResult result = modbusTcpNet.Write("0", array);; - if (result != null && result.IsSuccess) { - try { - Thread.sleep(3000);//鍛戒护涓嬪彂鍚庝紤鐪�1s - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); - return true; - } else { - OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ洓鍚戠┛姊溅plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - News.error("鍐欏叆鍥涘悜绌挎杞lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); - return false; - } + return array; } /** * 鍒濆鍖栧洓鍚戠┛姊溅 */ private void initShuttle() { + this.connect(); if (null == shuttleProtocol) { shuttleProtocol = new ShuttleProtocol(); } @@ -438,7 +445,7 @@ //鐩爣璺緞 NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� //姝e父绉诲姩鍛戒护 Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 @@ -474,7 +481,7 @@ //鐩爣璺緞 NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� //姝e父绉诲姩鍛戒护 Short startCode = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());//寮�濮嬩簩缁寸爜 @@ -536,7 +543,7 @@ Short liftArrival = liftProtocol.getPositionArrivalFeedback();//鎻愬崌鏈轰綅缃弽棣� String liftSiteLocNo = Utils.liftArrivalToOutInStaLocNo(liftArrival); LocMast locMast1 = locMastService.selectById(liftSiteLocNo); - ShuttleCommand moveCommand = getMoveCommand(liftProtocol.getBarcode(), Short.parseShort(locMast1.getQrCodeValue()), 1400, ShuttleRunDirection.BOTTOM.id, liftProtocol.getBarcode(), 1400, runSpeed); + ShuttleCommand moveCommand = getMoveCommand(liftProtocol.getBarcode(), Short.parseShort(locMast1.getQrCodeValue()), 1600, ShuttleRunDirection.BOTTOM.id, null, null, runSpeed); commands.add(moveCommand); //璧峰浣嶇疆淇敼涓烘彁鍗囨満鍙g珯鐐逛綅缃� @@ -563,7 +570,7 @@ //鐩爣璺緞 NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� 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());//鐩爣浜岀淮鐮� @@ -600,7 +607,7 @@ //鐩爣璺緞 NavigateNode endPath = nodes.get(nodes.size() - 1); Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂� - Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� + Integer middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂� 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());//鐩爣浜岀淮鐮� @@ -616,7 +623,7 @@ } //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护 - ShuttleCommand moveCommand = getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1400, ShuttleRunDirection.TOP.id, endStartCode, 1400, runSpeed); + ShuttleCommand moveCommand = getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, null, null, runSpeed); commands.add(moveCommand); break; default: @@ -834,6 +841,7 @@ //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� BasShuttleOptService shuttleOptService = SpringUtils.getBean(BasShuttleOptService.class); if (shuttleOptService != null) { + short[] commandArr = getCommandArr(command);//鑾峰彇鍛戒护鎶ユ枃 BasShuttleOpt opt = new BasShuttleOpt( assignCommand.getTaskNo().intValue(), assignCommand.getShuttleNo().intValue(), @@ -844,7 +852,8 @@ null, null, null, - JSON.toJSONString(command) + JSON.toJSONString(command), + JSON.toJSONString(commandArr) ); shuttleOptService.insert(opt); } @@ -942,6 +951,10 @@ } } + if (commands.size() == 0) { + return false; + } + //褰撳墠绛夊緟鎵ц鐨勬寚浠� ShuttleCommand command = commands.get(commandStep); -- Gitblit v1.9.1