src/main/java/com/zy/asrs/controller/LiftController.java
@@ -121,6 +121,7 @@ vo.setLineEndHasStock(liftProtocol.getLineEndHasStock()); vo.setInConveyLineCardTrayAlarm(liftProtocol.getInConveyLineCardTrayAlarm()); vo.setOutConveyLineCardTrayAlarm(liftProtocol.getOutConveyLineCardTrayAlarm()); vo.setShuttleNo(liftProtocol.getShuttleNo().intValue()); } return R.ok().add(list); } src/main/java/com/zy/asrs/domain/vo/LiftMsgTableVo.java
@@ -56,6 +56,11 @@ */ private Boolean outConveyLineCardTrayAlarm; /** * 穿梭车号 */ private Integer shuttleNo; public String getLineFrontHasStock$() { if (this.lineFrontHasStock == null) { return "N"; src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -1,6 +1,7 @@ package com.zy.asrs.mapper; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.WrkMast; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; @@ -105,4 +106,7 @@ WrkMast selectByWorkNo372428(Integer workNo); List<WrkMast> selectBy2125(); //查询指定楼层待分配车辆的任务 List<LocMast> selectNoShuttleWrkByLev(String lev); } src/main/java/com/zy/asrs/service/WrkMastService.java
@@ -1,6 +1,7 @@ package com.zy.asrs.service; import com.baomidou.mybatisplus.service.IService; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.WrkMast; import java.util.List; @@ -13,4 +14,7 @@ List<WrkMast> selectToBeHistoryData(); //查询指定楼层待分配车辆的任务 List<LocMast> selectNoShuttleWrkByLev(Integer lev); } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -53,6 +53,8 @@ @Autowired private WrkMastMapper wrkMastMapper; @Autowired private WrkMastService wrkMastService; @Autowired private WrkDetlService wrkDetlService; @Autowired private LocMastService locMastService; @@ -1100,7 +1102,7 @@ if (wrkMastMapper.updateById(wrkMast) > 0) { //下发任务 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); // MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand)); } }else { //不同层,将目标库位分配成提升机库位号(将小车移动到提升机位置) @@ -1278,16 +1280,23 @@ //同一楼层,没有空闲穿梭车,只能从其他楼层调度 //寻找离任务最近的穿梭车 for (ShuttleThread shuttleThread : diffLev) { if (recentShuttle == null) {//最近穿梭车为空,则默认赋予为最近穿梭车 recentShuttle = shuttleThread; } //当前穿梭车库位号 String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo(); int currentLev = Utils.getLev(currentLocNo); List<LocMast> locMasts = wrkMastService.selectNoShuttleWrkByLev(currentLev);//判断当前穿梭车楼层是否有待分配车辆的任务,如果有则不分配这辆车 if (locMasts.size() > 0) { //存在其他任务,跳过这辆车 continue; } if (recentShuttle == null) {//最近穿梭车为空,则默认赋予为最近穿梭车 recentShuttle = shuttleThread; } //目前最近穿梭车库位号 String recentLocNo = recentShuttle.getShuttleProtocol().getCurrentLocNo(); int recentLev = Utils.getLev(recentLocNo); //当前最近四向穿梭车到当前车子所在楼层的提升机口距离 List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, Utils.levToOutInStaLocNo(recentLev), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), recentLev));//搜索空闲穿梭车,使用正常通道地图 @@ -1330,6 +1339,8 @@ ) { //标记复位 shuttleProtocol.setPakMk(true); ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand(); //将任务档标记为完成 WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); @@ -1383,6 +1394,23 @@ } else { News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); } } if (assignCommand != null) { if (assignCommand.getTaskMode().intValue() == ShuttleTaskModeType.AVOID.id) { //避让任务 //设置四向穿梭车为空闲状态 shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); //任务号清零 shuttleProtocol.setTaskNo((short) 0); //源库位清零 shuttleProtocol.setSourceLocNo(null); //目标库位清零 shuttleProtocol.setLocNo(null); //任务指令清零 shuttleProtocol.setAssignCommand(null); News.info("四向穿梭车避让任务已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); } } @@ -1744,6 +1772,8 @@ throw new CoolException("更新plc站点信息失败"); } wrkMast.setWrkSts(4L); //任务号清零 liftProtocol.setTaskNo((short) 0); break; case 7://7.提升机迁移小车中 ==> 8.提升机迁移小车完成 if (liftProtocol.getLev().intValue() != lev) { @@ -1763,6 +1793,8 @@ } wrkMast.setWrkSts(29L); wrkMast.setWrkSts(34L);//34.出库完成,暂时先直接完成出库工作档,后续需要根据输送线给出的状态来确定34.出库完成状态 //任务号清零 liftProtocol.setTaskNo((short) 0); break; default: } @@ -1772,8 +1804,6 @@ liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); //任务指令清零 liftProtocol.setAssignCommand(null); //任务号清零 liftProtocol.setTaskNo((short) 0); News.info("提升机已确认且任务完成状态。提升机号={}", liftProtocol.getLiftNo()); } else { News.error("提升机已确认且任务完成状态,复位失败,但未找到工作档。提升机号={},工作号={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); src/main/java/com/zy/asrs/service/impl/WrkMastServiceImpl.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.service.WrkMastService; @@ -27,4 +28,8 @@ return this.baseMapper.selectToBeHistoryData(); } @Override public List<LocMast> selectNoShuttleWrkByLev(Integer lev) { return this.baseMapper.selectNoShuttleWrkByLev("%" + lev); } } src/main/java/com/zy/asrs/utils/Utils.java
@@ -582,7 +582,7 @@ ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//四向穿梭车号 assignCommand.setTaskNo((short) commonService.getWorkNo(7));//任务号 assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id.shortValue());//移动到目标库位 assignCommand.setTaskMode(ShuttleTaskModeType.AVOID.id.shortValue());//避让任务 assignCommand.setSourceLocNo(startLocNo);//源库位 //分配目标库位 src/main/java/com/zy/core/enums/ShuttleTaskModeType.java
@@ -19,6 +19,7 @@ MOVE_LOC_NO(14, "移动到目标库位"), CHARGE(15, "充电"), MOVE_LIFT(16, "移动到提升机"), AVOID(17, "避让任务"), ; public Integer id; src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
@@ -251,7 +251,7 @@ if (chargeLine == null) { return false; } return this.getBatteryPower$() > chargeLine; return this.getBatteryPower$() >= chargeLine; } catch (Exception e) { News.error("fail", e); return false; src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -804,6 +804,10 @@ } } if (commands.size() == 0) { return false; } //取出命令 ShuttleCommand command = commands.get(commandStep); @@ -1069,8 +1073,13 @@ } private boolean executeLift(LiftThread liftThread, LiftProtocol liftProtocol, ShuttleRedisCommand redisCommand, Integer shuttleLocNoLev) {//调度提升机 if (liftProtocol.getRunning()) { //提升机运行中,禁止下发 if (!liftProtocol.isIdle()) { //提升机不空闲禁止下发 return false; } if (liftProtocol.getPlatShuttleCheck()) { //提升机内有车禁止下发 return false; } src/main/resources/mapper/WrkMastMapper.xml
@@ -272,4 +272,11 @@ where wrk_sts in (21,25) order by io_pri desc,wrk_sts desc </select> <select id="selectNoShuttleWrkByLev" resultMap="BaseResultMap"> select * from dbo.asr_wrk_mast where shuttle_no is null and (wrk_sts = 2 and loc_no like #{lev}) or (wrk_sts = 21 and source_loc_no like #{lev}) order by io_pri desc,wrk_sts desc </select> </mapper> src/main/webapp/views/lift.html
@@ -65,6 +65,7 @@ <th>进输送线卡托盘报警</th> <th>出输送线卡托盘报警</th> <th>作业标记</th> <th>穿梭车号</th> </tr> </thead> <tbody> @@ -369,6 +370,7 @@ setVal(tr.children("td").eq(7), table[i-1].inConveyLineCardTrayAlarm$); setVal(tr.children("td").eq(8), table[i-1].outConveyLineCardTrayAlarm$); setVal(tr.children("td").eq(9), table[i-1].pakMk); setVal(tr.children("td").eq(10), table[i-1].shuttleNo); } } else if (res.code === 403){ window.location.href = baseUrl+"/login";