From f57741a11f0cce1f7ac0f2c8ab0627c046cb855b Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期五, 14 四月 2023 11:11:53 +0800 Subject: [PATCH] 穿梭车到达提升机口前,优先调度提升机优化 --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 208 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 191 insertions(+), 17 deletions(-) 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 aad864d..3b92522 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -68,6 +68,10 @@ @Autowired private BasSteErrLogService basSteErrLogService; @Autowired + private BasShuttleErrLogService basShuttleErrLogService; + @Autowired + private BasShuttleErrService basShuttleErrService; + @Autowired private BasCrnErrorMapper basCrnErrorMapper; @Autowired private BasSteService basSteService; @@ -793,6 +797,20 @@ //鍚屼竴灞傜洿鎺ュ彇璐ф棤闇�缁忚繃鎻愬崌鏈� //鐩存帴璁$畻杞﹀埌鎻愬崌鏈哄彇璐у啀鍒板簱浣嶈矾寰勬寚浠� List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, locNo); + if (wrkMast.getWrkSts() == 8) { + //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛 + BasDevp basDevp = basDevpService.selectById(109);//鑾峰彇鎻愬崌鏈轰俊鎭� + ShuttleCommand moveCommand = new ShuttleCommand(); + moveCommand.setCommandWord((short) 1); + moveCommand.setStartCodeNum(Short.parseShort(basDevp.getQrCodeValue()));//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜 + moveCommand.setDistCodeNum(commands.get(0).getStartCodeNum());//鎻愬崌鏈哄彛浜岀淮鐮� + moveCommand.setStartToDistDistance(1300); + moveCommand.setMiddleToDistDistance(0); + moveCommand.setRunDirection(commands.get(0).getRunDirection()); + moveCommand.setRunSpeed((short) 1000); + moveCommand.setCommandEnd((short) 1); + commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶� + } assignCommand.setCommands(commands); //鍒嗛厤鐩爣搴撲綅 shuttleProtocol.setLocNo(wrkMast.getLocNo()); @@ -847,14 +865,22 @@ ShuttleCommand command = new ShuttleCommand(); command.setCommandWord((short) 1); - command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY())); - command.setMiddleCodeNum((short) 0); - command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY())); + + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); + command.setStartCodeNum(startCodeNum); + + command.setMiddleCodeNum((short) 1); + + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); + command.setDistCodeNum(distCodeNum); + command.setStartToDistDistance(allDistance); - command.setMiddleToDistDistance(1000); + command.setMiddleToDistDistance(0); command.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); command.setPalletLift((short) 1); - command.setForceMoveDistance(1000); + command.setForceMoveDistance(0); command.setChargeSwitch((short) 2); command.setIOControl((short) 0); command.setRunSpeed((short) 1000); @@ -886,14 +912,22 @@ ShuttleCommand command = new ShuttleCommand(); command.setCommandWord((short) 1); - command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY())); - command.setMiddleCodeNum((short) 0); - command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY())); + + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); + command.setStartCodeNum(startCodeNum); + + command.setMiddleCodeNum((short) 1); + + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); + command.setDistCodeNum(distCodeNum); + command.setStartToDistDistance(allDistance); - command.setMiddleToDistDistance(1000); + command.setMiddleToDistDistance(0); command.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); command.setPalletLift((short) 1); - command.setForceMoveDistance(1000); + command.setForceMoveDistance(0); command.setChargeSwitch((short) 2); command.setIOControl((short) 0); command.setRunSpeed((short) 1000); @@ -926,14 +960,22 @@ command = new ShuttleCommand(); command.setCommandWord((short) 1); - command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY())); - command.setMiddleCodeNum((short) 0); - command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY())); + + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ()); + command.setStartCodeNum(startCodeNum); + + command.setMiddleCodeNum((short) 1); + + //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮� + Short distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ()); + command.setDistCodeNum(distCodeNum); + command.setStartToDistDistance(allDistance); - command.setMiddleToDistDistance(1000); + command.setMiddleToDistDistance(0); command.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id); command.setPalletLift((short) 1); - command.setForceMoveDistance(1000); + command.setForceMoveDistance(0); command.setChargeSwitch((short) 2); command.setIOControl((short) 0); command.setRunSpeed((short) 1000); @@ -1052,6 +1094,19 @@ } } else if (wrkMast.getWrkSts() == 25) { List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftLocNo); + //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛 + BasDevp basDevp = basDevpService.selectById(109);//鑾峰彇鎻愬崌鏈轰俊鎭� + ShuttleCommand moveCommand = new ShuttleCommand(); + moveCommand.setCommandWord((short) 1);//灏忚溅绉诲姩鎸囦护瀛� + moveCommand.setStartCodeNum(Short.parseShort(basDevp.getQrCodeValue()));//鎻愬崌鏈轰簩缁寸爜 + moveCommand.setDistCodeNum(commands.get(0).getStartCodeNum()); + moveCommand.setStartToDistDistance(1300); + moveCommand.setMiddleToDistDistance(0); + moveCommand.setRunDirection(commands.get(0).getRunDirection()); + moveCommand.setRunSpeed((short) 1000); + moveCommand.setCommandEnd((short) 1); + commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶� + //鍒嗛厤鐩爣搴撲綅 shuttleProtocol.setLocNo(wrkMast.getSourceLocNo()); //鐩爣搴撲綅 @@ -2918,10 +2973,129 @@ */ public void recErr() { try { + this.recShuttleErr(); this.recCrnErr(); this.recSteErr(); } catch (Exception e) { News.error("recErr fail", e); + } + } + + /** + * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰� + */ + private void recShuttleErr() { + Date now = new Date(); + for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) { + // 鑾峰彇鍫嗗灈鏈轰俊鎭� + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId()); + if (shuttleThread == null) { + continue; + } + ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol(); + if (shuttleProtocol == null) { + continue; + } + + if (shuttleProtocol.getTaskNo() != 0) { + //鏈変换鍔� + BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo().intValue()); + // 鏈夊紓甯� + if (latest == null) { + if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) { + WrkMast wrkMast = wrkMastMapper.selectById(shuttleProtocol.getTaskNo()); + if (wrkMast == null) { + continue; + } + BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue()); + String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); + BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( + null, // 缂栧彿 + wrkMast.getWrkNo(), // 宸ヤ綔鍙� + now, // 鍙戠敓鏃堕棿 + null, // 缁撴潫鏃堕棿 + wrkMast.getWrkSts(), // 宸ヤ綔鐘舵�� + wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨� + shuttleSlave.getId(), // 鍥涘悜绌挎杞� + null, // plc + wrkMast.getLocNo(), // 鐩爣搴撲綅 + wrkMast.getStaNo(), // 鐩爣绔� + wrkMast.getSourceStaNo(), // 婧愮珯 + wrkMast.getSourceLocNo(), // 婧愬簱浣� + wrkMast.getBarcode(), // 鏉$爜 + (int) shuttleProtocol.getStatusErrorCode(), // 寮傚父鐮� + errName, // 寮傚父 + 1, // 寮傚父鎯呭喌 + now, // 娣诲姞鏃堕棿 + null, // 娣诲姞浜哄憳 + now, // 淇敼鏃堕棿 + null, // 淇敼浜哄憳 + "浠诲姟涓紓甯�" // 澶囨敞 + ); + if (!basShuttleErrLogService.insert(basShuttleErrLog)) { + News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName); + } + } + } else { + // 寮傚父淇 + if (shuttleProtocol.getStatusErrorCode() == null || shuttleProtocol.getStatusErrorCode() == 0) { + latest.setEndTime(now); + latest.setUpdateTime(now); + latest.setStatus(2); + if (!basShuttleErrLogService.updateById(latest)) { + News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId()); + } + } + } + }else { + //鏃犱换鍔� + BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId()); + // 鏈夊紓甯� + if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) { + // 璁板綍鏂板紓甯� + if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) { + BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue()); + String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName(); + BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog( + null, // 缂栧彿 + null, // 宸ヤ綔鍙� + now, // 鍙戠敓鏃堕棿 + null, // 缁撴潫鏃堕棿 + null, // 宸ヤ綔鐘舵�� + null, // 鍏ュ嚭搴撶被鍨� + shuttleSlave.getId(), // 鍥涘悜绌挎杞� + null, // plc + null, // 鐩爣搴撲綅 + null, // 鐩爣绔� + null, // 婧愮珯 + null, // 婧愬簱浣� + null, // 鏉$爜 + (int)shuttleProtocol.getStatusErrorCode(), // 寮傚父鐮� + errName, // 寮傚父 + 1, // 寮傚父鎯呭喌 + now, // 娣诲姞鏃堕棿 + null, // 娣诲姞浜哄憳 + now, // 淇敼鏃堕棿 + null, // 淇敼浜哄憳 + "鏃犱换鍔″紓甯�" // 澶囨敞 + ); + if (!basShuttleErrLogService.insert(basShuttleErrLog)) { + News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName); + } + } + // 鏃犲紓甯� + } else { + // 寮傚父淇 + if (latest != null && latest.getStatus() == 1) { + latest.setEndTime(now); + latest.setUpdateTime(now); + latest.setStatus(2); + if (!basShuttleErrLogService.updateById(latest)) { + News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId()); + } + } + } + } } } @@ -3643,8 +3817,8 @@ } else if (wrkCharge.getWrkSts() == 56) { //鍏呯數涓� - //鍒ゆ柇灏忚溅鏄惁鍏呮弧鐢甸噺 - if (shuttleProtocol.getBatteryPower() == 1000) { + //鍒ゆ柇灏忚溅鏄惁鍏呮弧鐢甸噺锛屾弧鐢�1000鎴栫數鍘�54V浠ヤ笂 + if (shuttleProtocol.getBatteryPower() >= 1000 || shuttleProtocol.getCurrentVoltage() >= 540) { //鍏呮弧锛屾柇寮�鍏呯數 List<ShuttleCommand> commands = new ArrayList<>(); ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); -- Gitblit v1.9.1