| | |
| | | } |
| | | |
| | | private void processAction(Agv agv, Action action) throws InterruptedException { |
| | | AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId()); |
| | | if (agvDetail == null) { |
| | | return; |
| | | } |
| | | |
| | | switch (Objects.requireNonNull(ActionTypeType.get(action.getActionTypeEl()))) { |
| | | case TurnCorner: |
| | | simulateWalking(agv, agvDetail, action); |
| | | simulateRotating(agv, agvDetail, action); |
| | | simulateWalking(agv, action); |
| | | simulateRotating(agv, action); |
| | | break; |
| | | case StraightBackUnturnable: |
| | | case StraightBackTurnable: |
| | |
| | | case StraightAheadTurnable: |
| | | case FinishPath: |
| | | case DockingCharge: |
| | | simulateWalking(agv, agvDetail, action); |
| | | simulateWalking(agv, action); |
| | | break; |
| | | case ReadyTakeFromShelvesLoc: |
| | | case ReadyReleaseToShelvesLoc: |
| | |
| | | } |
| | | |
| | | |
| | | private void simulateWalking(Agv agv, AgvDetail agvDetail, Action action) throws InterruptedException { |
| | | private void simulateWalking(Agv agv, Action action) throws InterruptedException { |
| | | Code code = codeService.selectByData(action.getCode()); |
| | | agvDetail.setPos(1); |
| | | agvDetail.setCode(code.getId()); |
| | | // agvDetail.setPos(1); |
| | | // agvDetail.setCode(code.getId()); |
| | | // 模拟电量消耗 |
| | | // agvDetail.setVol(agvDetail.getVol() - 0.1 * distanceToMove); // 根据距离消耗电量 |
| | | |
| | | Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL); |
| | | |
| | | agvDetailService.updateById(agvDetail); |
| | | agvDetailService.updatePosCodeByAgvId(agv.getId(), code.getId()); |
| | | // agvDetailService.updateById(agvDetail); |
| | | |
| | | mapService.unlockPath(agv.getUuid(), code.getData()); |
| | | jamService.checkIfFinish(agv.getId(), code.getData()); |
| | |
| | | * 模拟AGV旋转 |
| | | * |
| | | * @param agv 当前AGV |
| | | * @param agvDetail AGV详细信息 |
| | | * @param action 当前动作 |
| | | */ |
| | | private void simulateRotating(Agv agv, AgvDetail agvDetail, Action action) throws InterruptedException { |
| | | private void simulateRotating(Agv agv, Action action) throws InterruptedException { |
| | | double actionAngle = Double.parseDouble(action.getParams()); |
| | | agvDetail.setAgvAngle(actionAngle); |
| | | // agvDetail.setAgvAngle(actionAngle); |
| | | // 模拟电量消耗? |
| | | // agvDetail.setVol(agvDetail.getVol() - 0.05 * (angleToRotate / 15.0)); // 根据角度消耗电量 |
| | | |
| | | Thread.sleep(MapDataWsScheduler.WEBSOCKET_BROADCAST_INTERVAL); |
| | | agvDetailService.updateById(agvDetail); |
| | | agvDetailService.updateAngleByAgvId(agv.getId(), actionAngle); |
| | | action.setActionSts(ActionStsType.FINISH.val()); |
| | | actionService.updateById(action); |
| | | } |