| src/main/java/com/zy/asrs/controller/CrnController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/controller/OpenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/controller/RgvController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/controller/TaskWrkController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/entity/param/WcsStatusResponseModel.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/model/protocol/RgvProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/thread/RgvThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application-prod.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/views/deviceOperate/rgvOperate.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/CrnController.java
@@ -54,10 +54,10 @@ @RestController public class CrnController { @Value("${wms.url}") private String wmsUrl; @Value("${wms.movePath}") private String movePath; // @Value("${wms.url}") // private String wmsUrl; // @Value("${wms.movePath}") // private String movePath; src/main/java/com/zy/asrs/controller/OpenController.java
@@ -491,6 +491,7 @@ auth(appkey, "设备状态查询接口", request); List<BasDevp> basDevps = basDevpService.selectList(new EntityWrapper<>()); List<Object> list = new ArrayList<>(); WcsStatusResponseModel wcsStatusResponseModel = new WcsStatusResponseModel(); for (BasDevp basDevp:basDevps){ BasDevpWmsParam basDevpWmsParam = new BasDevpWmsParam(); basDevpWmsParam.setDevNo(basDevp.getDevNo()); @@ -501,7 +502,8 @@ basDevpWmsParam.setOutEnable(basDevp.getOutEnable()); basDevpWmsParam.setDevErr(basDevp.getStaErr().longValue()); basDevpWmsParam.setDevErrM(basDevpWmsParam.getDevErr$()); list.add(basDevpWmsParam); // list.add(basDevpWmsParam); wcsStatusResponseModel.getChainList().add(basDevpWmsParam); } List<BasCrnpWmsParam> basCrnpWmsParamList = new ArrayList<>(); for (CrnSlave crn : slaveProperties.getCrn()) { @@ -518,7 +520,6 @@ basCrnpWmsParam.sync(basCrnp); basCrnpWmsParam.setCrnNoH(crnProtocol.getLaneNo()); basCrnpWmsParamList.add(basCrnpWmsParam); try{ BasCrnError basCrnError = basCrnErrorService.selectById(basCrnp.getCrnErr()); @@ -526,9 +527,11 @@ } catch (Exception e){ basCrnpWmsParam.setCrnErrM("未知异常"); } basCrnpWmsParamList.add(basCrnpWmsParam); list.add(basCrnpWmsParam); // list.add(basCrnpWmsParam); } wcsStatusResponseModel.setPilingCarList(basCrnpWmsParamList); for (RgvSlave rgvSlave : slaveProperties.getRgv()) { RgvProtocol rgvStatus = RgvStatusCache.getRgvStatus(rgvSlave.getId()); if (Cools.isEmpty(rgvStatus)){ @@ -547,13 +550,15 @@ } catch (Exception e){ basRgvWmsParam.setSteErrM("未知异常"); } list.add(basRgvWmsParam); // list.add(basRgvWmsParam); wcsStatusResponseModel.getRgvList().add(basRgvWmsParam); } // List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<>()); // for (BasCrnp basCrnp:basCrnps){ // list.add(basCrnp); // } return R.ok(list); return R.ok(wcsStatusResponseModel); } src/main/java/com/zy/asrs/controller/RgvController.java
@@ -102,7 +102,7 @@ @ManagerAuth(memo = "小车行走") public R rgvRunWalk(@RequestParam(defaultValue = "0") Integer rgvNo, @RequestParam(defaultValue = "0") Integer taskNo, @RequestParam(defaultValue = "0") Integer rgvStaNo, @RequestParam(defaultValue = "0") Integer rgvStaNoPut, @RequestParam(defaultValue = "0") Long rgvPosDestination ) { if (rgvNo==null || rgvNo==0){ @@ -111,11 +111,11 @@ if (taskNo==null || taskNo==0){ return R.error("作业号请填写"); } if ((rgvStaNo == null || rgvStaNo == 0) && (rgvPosDestination==null || rgvPosDestination==0L)){ if ((rgvStaNoPut == null || rgvStaNoPut == 0) && (rgvPosDestination==null || rgvPosDestination==0L)){ return R.error("目标站点请填写"); } if (rgvPosDestination == null || rgvPosDestination == 0){ BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNo)); BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoPut)); rgvPosDestination = basDevpPosition.getPlcPosition(); } RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); @@ -150,7 +150,7 @@ @ManagerAuth(memo = "小车放货") public R rgvPutWalk(@RequestParam(defaultValue = "0") Integer rgvNo, @RequestParam(defaultValue = "0") Integer taskNo, @RequestParam(defaultValue = "0") Integer rgvStaNo, @RequestParam(defaultValue = "0") Integer rgvStaNoPut, @RequestParam(defaultValue = "0") Long rgvPosDestination ) { if (rgvNo==null || rgvNo==0){ @@ -159,7 +159,7 @@ if (taskNo==null || taskNo==0){ return R.error("作业号请填写"); } if (rgvStaNo == null || rgvStaNo == 0){ if (rgvStaNoPut == null || rgvStaNoPut == 0){ return R.error("目标站点请填写"); } RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); @@ -173,7 +173,7 @@ return R.error("存在执行中任务,请先处理!!!"); } BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNo)); BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoPut)); //执行 issuedPut.setTaskNo(Long.valueOf(taskNo)); issuedPut.setTaskStatus(3); @@ -194,7 +194,7 @@ @ManagerAuth(memo = "小车取货") public R rgvTakeWalk(@RequestParam(defaultValue = "0") Integer rgvNo, @RequestParam(defaultValue = "0") Integer taskNo, @RequestParam(defaultValue = "0") Integer rgvStaNo, @RequestParam(defaultValue = "0") Integer rgvStaNoTake, @RequestParam(defaultValue = "0") Long rgvPosDestination ) { if (rgvNo==null || rgvNo==0){ @@ -203,8 +203,8 @@ if (taskNo==null || taskNo==0){ return R.error("作业号请填写"); } if (rgvStaNo == null || rgvStaNo == 0){ return R.error("目标站点请填写"); if (rgvStaNoTake == null || rgvStaNoTake == 0){ return R.error("取货站点请填写"); } RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); @@ -216,7 +216,7 @@ return R.error("存在执行中任务,请先处理!!!"); } BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNo)); BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoTake)); //执行 issuedTake.setTaskNo(Long.valueOf(taskNo)); issuedTake.setTaskStatus(2); @@ -232,4 +232,63 @@ return R.ok("任务生成成功"); } @PostMapping("/run/TakeAndPut")//Take Put Walk @ManagerAuth(memo = "小车取货") public R rgvTakeAndPut(@RequestParam(defaultValue = "0") Integer rgvNo, @RequestParam(defaultValue = "0") Integer taskNo, @RequestParam(defaultValue = "0") Integer rgvStaNoTake, @RequestParam(defaultValue = "0") Integer rgvStaNoPut, @RequestParam(defaultValue = "0") Long rgvPosDestination ) { if (rgvNo==null || rgvNo==0){ return R.error("请选择小车"); } if (taskNo==null || taskNo==0){ return R.error("作业号请填写"); } if (rgvStaNoTake == null || rgvStaNoTake == 0){ return R.error("取货站点请填写"); } if (rgvStaNoPut == null || rgvStaNoPut == 0){ return R.error("放货站点请填写"); } RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); TaskProtocol issuedTake = new TaskProtocol(); TaskProtocol issuedPut = new TaskProtocol(); try { ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); if (allTaskProtocol.size() > 0) { return R.error("存在执行中任务,请先处理!!!"); } BasDevpPosition basDevpPositionTake = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoTake)); //执行 issuedTake.setTaskNo(Long.valueOf(taskNo)); issuedTake.setTaskStatus(2); issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus())); issuedTake.setTargetPosition(basDevpPositionTake.getPlcPosition()); issuedTake.setIsRunning(1); issuedTake.setDirection(basDevpPositionTake.getRgvSign()==1); BasDevpPosition basDevpPositionPut = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoPut)); //执行 issuedPut.setTaskNo(Long.valueOf(taskNo)); issuedPut.setTaskStatus(3); issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); issuedPut.setTargetPosition(basDevpPositionPut.getPlcPosition()); issuedPut.setIsRunning(1); issuedPut.setDirection(basDevpPositionPut.getRgvSign()==1); taskProtocolCache.updateTaskProtocol(issuedTake); taskProtocolCache.updateTaskProtocol(issuedPut); } catch (Exception e) { return R.error("任务生成失败"+e.getMessage()); } return R.ok("任务生成成功"); } } src/main/java/com/zy/asrs/controller/TaskWrkController.java
@@ -377,6 +377,7 @@ return R.ok(); } else if (!Cools.isEmpty(taskWrk) && taskWrk.getWrkSts()==3) { taskWrk.setWrkSts(2); taskWrk.setStatus(TaskStatusType.RECEIVE.id);//派发状态 taskWrkService.updateById(taskWrk); if(!taskWrkService.updateById(taskWrk)){ return R.error("更新任务状态失败"); src/main/java/com/zy/asrs/entity/param/WcsStatusResponseModel.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.ArrayList; import java.util.List; @Data public class WcsStatusResponseModel { private List<BasDevpWmsParam> chainList = new ArrayList<>(); private List<BasCrnpWmsParam> pilingCarList = new ArrayList<>(); private List<BasRgvWmsParam> rgvList = new ArrayList<>(); } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -463,7 +463,7 @@ // 判断是否满足入库条件 if (staProtocol.isAutoing() && staProtocol.isLoading() // && staProtocol.isInEnable() && (workNo == 0 || (workNo>9000 && workNo<10000)) // && (workNo == 0 || (workNo>9000 && workNo<10000)) && staProtocol.isPakMkWalk() ) { if (inSta.isBarcodeSign()){ @@ -1372,6 +1372,32 @@ } return true; } public boolean rgvOtherIDLE(RgvSlave slave) { RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); if (rgvProtocol == null || rgvTaskProtocol == null) { return false; } if (!rgvProtocol.getModeType().equals(RgvModeType.AUTO) || rgvProtocol.getRgvPos().equals(0L) || rgvTaskProtocol.getAvoid() == -1 || (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM))) { return false; } RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); RgvTaskProtocol rgvTaskProtocolOther = RgvTaskCache.getRgvStatus(slave.getOtherId()); if (rgvProtocolOther == null) { return true; } if (rgvProtocolOther.statusEnable) { if (rgvProtocolOther.getModeType().equals(RgvModeType.AUTO) && rgvProtocolOther.getStatusType().equals(RgvStatusType.IDLE) && rgvProtocolOther.getLoaded()==0) { return false; } } return true; } public TaskWrk deviceDetection(RgvSlave.RgvStn inSta) { @@ -1482,6 +1508,12 @@ } } if (!sign){ if (!rgvOtherIDLE(rgvSlave)){ sign=true; } } if (!sign) { for (Integer staNoNow : rangeList) { for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { src/main/java/com/zy/core/model/protocol/RgvProtocol.java
@@ -125,6 +125,14 @@ return basRgv; } public long getRgvPosDestinationOrPos(boolean sign){ if (!sign){ return RgvPosDestination>RgvPos? RgvPosDestination:RgvPos; } else { return RgvPosDestination<RgvPos? RgvPosDestination:RgvPos; } } public void setxSpeed(Short xSpeed) { this.xSpeed = Float.valueOf(xSpeed); } src/main/java/com/zy/core/thread/RgvThread.java
@@ -52,7 +52,7 @@ //# 轨道基准点 private Long trackBenchmark = 1L; // # 避让距离 private Long avoidDistance = 4000L; private Long avoidDistance = 5000L; /** * 工位1复位信号 @@ -343,6 +343,10 @@ log.error("行走超出范围!!!任务异常 联系管理员!!!"); return false; } long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); if (avoidAbs<51){ return true; } rgvTaskProtocolOther.setAvoid(1); rgvTaskProtocolOther.setAvoidingTheDestination(avoid); RgvTaskCache.updateRgvStatus(rgvTaskProtocolOther); @@ -358,6 +362,10 @@ if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[0])) { log.error("行走超出范围!!!任务异常 联系管理员!!!"); return false; } long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); if (avoidAbs<51){ return true; } rgvTaskProtocolOther.setAvoid(1); rgvTaskProtocolOther.setAvoidingTheDestination(avoid); @@ -376,12 +384,22 @@ log.error("行走超出范围!!!任务异常 联系管理员!!!"); return false; } long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); if (avoidAbs<51){ return false; } rgvTaskProtocol.setAvoid(1); rgvTaskProtocol.setAvoidingTheDestination(avoid); RgvTaskCache.updateRgvStatus(rgvTaskProtocol); return false; } return false; } } else { if ((rgvProtocolOther.getRgvPosDestinationOrPos(true) - rgvProtocolOther.getCarBodyJiaoMing()) - (targetPosition + rgvProtocol.getCarBodyKunPeng()) > avoidDistance) {//无需避让 return true; } } } else { @@ -395,6 +413,10 @@ if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { log.error("行走超出范围!!!任务异常 联系管理员!!!"); return false; } long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); if (avoidAbs<51){ return true; } rgvTaskProtocolOther.setAvoid(1); rgvTaskProtocolOther.setAvoidingTheDestination(avoid); @@ -411,6 +433,10 @@ if (!new TrackRangeUtils().avoidRange(avoid, avoidRange[1])) { log.error("行走超出范围!!!任务异常 联系管理员!!!"); return false; } long avoidAbs = Math.abs(avoid - rgvProtocolOther.getRgvPos()); if (avoidAbs<51){ return true; } rgvTaskProtocolOther.setAvoid(1); rgvTaskProtocolOther.setAvoidingTheDestination(avoid); @@ -430,6 +456,10 @@ log.error("行走超出范围!!!任务异常 联系管理员!!!"); return false; } long avoidAbs = Math.abs(avoid - rgvProtocol.getRgvPos()); if (avoidAbs<51){ return false; } rgvTaskProtocol.setAvoid(1); rgvTaskProtocol.setAvoidingTheDestination(avoid); RgvTaskCache.updateRgvStatus(rgvTaskProtocol); @@ -437,6 +467,12 @@ } return false; } } else { if ((rgvProtocolOther.getRgvPosDestinationOrPos(false) - rgvProtocolOther.getCarBodyJiaoMing()) - (targetPosition + rgvProtocol.getCarBodyKunPeng()) > avoidDistance) {//无需避让 return true; } } } return false; src/main/resources/application-prod.yml
@@ -83,8 +83,8 @@ rack: 0 slot: 0 otherId: 2 carBodyJiaoMing: 2000 carBodyKunPeng: 15000 carBodyJiaoMing: 2800 carBodyKunPeng: 13500 #RGV源站点 rgvInSta[0]: devpPlcId: ${wcs-slave.devp[0].id} @@ -159,8 +159,8 @@ rack: 0 slot: 0 otherId: 1 carBodyJiaoMing: 2000 carBodyKunPeng: 15000 carBodyJiaoMing: 2800 carBodyKunPeng: 13500 #RGV源站点 rgvInSta[0]: devpPlcId: ${wcs-slave.devp[0].id} src/main/resources/application.yml
@@ -12,7 +12,8 @@ # username: sa # password: sa@123 driver-class-name: dm.jdbc.driver.DmDriver url: jdbc:dm://10.10.10.201:5236/SOURCE # url: jdbc:dm://10.10.10.201:5236/SOURCE url: jdbc:dm://127.0.0.1:5236/SOURCE username: SYSDBA password: Zy@12345 mvc: @@ -55,7 +56,7 @@ # 轨道转换为米比例 trackProportion: 10000 # 避让距离 avoidDistance: 5100 avoidDistance: 4000 wms: # 是否开启上报 @@ -73,6 +74,7 @@ # 任务状态反馈接口 taskStatusFeedbackPath: external/wcs/taskStatusFeedback # 货位状态更新接口 locationUpdatePath: api/InterFace/get_InterFace_TestStorage # locationUpdatePath: api/InterFace/get_InterFace_TestStorage # 移库申请接口 movePath: api/InterFace/get_InterFace_TestStorage # movePath: api/InterFace/get_InterFace_TestStorage wmsHeartBeat: external/wcs/wmsHeartBeat src/main/webapp/views/deviceOperate/rgvOperate.html
@@ -47,13 +47,17 @@ <el-form-item label="目标定位置"> <el-input v-model="formParam.rgvPosDestination" placeholder="目标定位置"></el-input> </el-form-item> <el-form-item label="取货站点"> <el-input v-model="formParam.rgvStaNoTake" placeholder="目标站点"></el-input> </el-form-item> <el-form-item label="目标站点"> <el-input v-model="formParam.rgvStaNo" placeholder="目标站点"></el-input> <el-input v-model="formParam.rgvStaNoPut" placeholder="目标站点"></el-input> </el-form-item> </el-form> <div> <el-button @click="requestOperate('take')" type="primary">取货</el-button> <el-button @click="requestOperate('put')" type="primary">放货</el-button> <el-button @click="requestOperate('TakeAndPut')" type="primary">取放货</el-button> <el-button @click="requestOperate('walk')" type="warning">行走</el-button> <el-button @click="requestOperate('del')" type="warning">任务清空</el-button> </div> @@ -103,7 +107,8 @@ formParam: { rgvNo: 0, taskNo: 0, rgvStaNo: 0, rgvStaNoTake: 0, rgvStaNoPut: 0, rgvPosDestination: 0 } }, @@ -129,7 +134,8 @@ this.formParam.rgvNo = row.rgvNo this.formParam.taskNo = row.taskNo this.formParam.rgvStaNo = row.rgvStaNo this.formParam.rgvStaNoTake = row.rgvStaNoTake this.formParam.rgvStaNoPut = row.rgvStaNoPut this.formParam.rgvPosDestination = row.rgvPosDestination this.getTaskAllData(index+1)