| | |
| | | import com.zy.asrs.service.BasDevpService; |
| | | import com.zy.asrs.service.DeviceErrorService; |
| | | import com.zy.asrs.service.WrkMastService; |
| | | import com.zy.asrs.service.impl.TaskWrkServiceImpl; |
| | | import com.zy.common.CodeRes; |
| | | import com.zy.core.CrnThread; |
| | | import com.zy.core.DevpThread; |
| | |
| | | private DeviceErrorService deviceErrorService; |
| | | @Autowired |
| | | private BasCrnpService basCrnpService; |
| | | @Autowired |
| | | private TaskWrkServiceImpl taskWrkService; |
| | | |
| | | @PostMapping("/system/running/status") |
| | | @ManagerAuth(memo = "系统运行状态") |
| | |
| | | vo.setCrnStatus(CrnStatusType.MACHINE_ERROR); |
| | | } else { |
| | | if (crnProtocol.getTaskNo()>0) { |
| | | WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo()); |
| | | if (wrkMast != null) { |
| | | vo.setCrnStatus(CrnStatusType.process(wrkMast.getIoType())); |
| | | TaskWrk taskWrk = taskWrkService.selectByWrkNo(crnProtocol.getTaskNo().intValue()); |
| | | // WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo()); |
| | | if (taskWrk != null) { |
| | | vo.setCrnStatus(CrnStatusType.process(taskWrk.getIoType())); |
| | | } else { |
| | | vo.setCrnStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO: CrnStatusType.MACHINE_UN_AUTO); |
| | | } |
| | |
| | | vo.setWorkNo(staProtocol.getWorkNo()); // 工作号 |
| | | |
| | | if (staProtocol.getWorkNo() > 0) { |
| | | WrkMast wrkMast = wrkMastService.selectById(staProtocol.getWorkNo()); |
| | | if (wrkMast != null) { |
| | | vo.setWrkSts(wrkMast.getWrkSts$()); // 工作状态 |
| | | vo.setIoType(wrkMast.getIoType$()); // 入出库类型 |
| | | vo.setSourceStaNo(wrkMast.getSourceStaNo$()); |
| | | vo.setStaNo(wrkMast.getStaNo$()); |
| | | vo.setSourceLocNo(wrkMast.getSourceLocNo$()); |
| | | vo.setLocNo(wrkMast.getLocNo$()); |
| | | TaskWrk taskWrk = taskWrkService.selectByWrkNo(staProtocol.getWorkNo()); |
| | | |
| | | // WrkMast wrkMast = wrkMastService.selectById(staProtocol.getWorkNo()); |
| | | if (taskWrk != null) { |
| | | vo.setWrkSts(taskWrk.getWrkSts$()); // 工作状态 |
| | | vo.setIoType(taskWrk.getIoType$()); // 入出库类型 |
| | | vo.setSourceStaNo(taskWrk.getStartPoint()); |
| | | vo.setStaNo(taskWrk.getTargetPoint()); |
| | | // vo.setSourceLocNo(wrkMast.getSourceLocNo$()); |
| | | // vo.setLocNo(wrkMast.getLocNo$()); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | if (crnProtocol.getTaskNo() > 0) { |
| | | WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo()); |
| | | if (wrkMast != null) { |
| | | vo.setSourceStaNo(wrkMast.getSourceStaNo$()); |
| | | vo.setStaNo(wrkMast.getStaNo$()); |
| | | vo.setWrkSts(wrkMast.getWrkSts$()); // 工作状态 |
| | | vo.setIoType(wrkMast.getIoType$()); // 入出库类型 |
| | | vo.setSourceLocNo(wrkMast.getSourceLocNo$()); |
| | | vo.setLocNo(wrkMast.getLocNo$()); |
| | | vo.setCrnStatus(crnProtocol.getStatusType().desc); |
| | | vo.setError(""); // todo |
| | | TaskWrk taskWrk = taskWrkService.selectByWrkNo(crnProtocol.getTaskNo().intValue()); |
| | | if (taskWrk != null) { |
| | | vo.setWrkSts(taskWrk.getWrkSts$()); // 工作状态 |
| | | vo.setIoType(taskWrk.getIoType$()); // 入出库类型 |
| | | vo.setSourceStaNo(taskWrk.getStartPoint()); |
| | | vo.setStaNo(taskWrk.getTargetPoint()); |
| | | } |
| | | } |
| | | vo.setInEnable(basCrnp.getInEnable());//可入 |
| | |
| | | import com.zy.asrs.service.LocMastService; |
| | | import com.zy.asrs.service.WrkMastService; |
| | | import com.zy.asrs.service.impl.MainServiceImpl; |
| | | import com.zy.asrs.service.impl.TaskWrkServiceImpl; |
| | | import com.zy.asrs.utils.CommandUtils; |
| | | import com.zy.asrs.utils.VersionUtils; |
| | | import com.zy.core.CrnThread; |
| | |
| | | private MainServiceImpl mainService; |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | @Autowired |
| | | private TaskWrkServiceImpl taskWrkService; |
| | | |
| | | |
| | | @ManagerAuth(memo = "进行中的命令") |
| | |
| | | |
| | | vo.setWorkNo(crnProtocol.getTaskNo()); // 任务号 |
| | | if (crnProtocol.getTaskNo()>0) { |
| | | WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo()); |
| | | if (wrkMast != null) { |
| | | vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc()); // 模式状态 |
| | | vo.setSourceStaNo(wrkMast.getSourceStaNo$()); // 源站 |
| | | vo.setStaNo(wrkMast.getStaNo$()); // 目标站 |
| | | vo.setSourceLocNo(wrkMast.getSourceLocNo()); // 源库位 |
| | | vo.setLocNo(wrkMast.getLocNo()); // 目标库位 |
| | | TaskWrk taskWrk = taskWrkService.selectByWrkNo(crnProtocol.getTaskNo().intValue()); |
| | | if (taskWrk != null) { |
| | | // vo.setWrkSts(taskWrk.getWrkSts$()); // 工作状态 |
| | | // vo.setIoType(taskWrk.getIoType$()); // 入出库类型 |
| | | vo.setSourceStaNo(taskWrk.getStartPoint()); |
| | | vo.setStaNo(taskWrk.getTargetPoint()); |
| | | } |
| | | } else { |
| | | vo.setStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc()); // 模式状态 |
| | |
| | | |
| | | vo.setWorkNo(crnProtocol.getTaskNo()); // 任务号 |
| | | if (crnProtocol.getTaskNo()>0) { |
| | | WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo()); |
| | | if (wrkMast != null) { |
| | | vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc()); // 模式状态 |
| | | vo.setSourceStaNo(wrkMast.getSourceStaNo$()); // 源站 |
| | | vo.setStaNo(wrkMast.getStaNo$()); // 目标站 |
| | | vo.setSourceLocNo(wrkMast.getSourceLocNo()); // 源库位 |
| | | vo.setLocNo(wrkMast.getLocNo()); // 目标库位 |
| | | TaskWrk taskWrk = taskWrkService.selectByWrkNo(crnProtocol.getTaskNo().intValue()); |
| | | if (taskWrk != null) { |
| | | // vo.setWrkSts(taskWrk.getWrkSts$()); // 工作状态 |
| | | // vo.setIoType(taskWrk.getIoType$()); // 入出库类型 |
| | | vo.setSourceStaNo(taskWrk.getStartPoint()); |
| | | vo.setStaNo(taskWrk.getTargetPoint()); |
| | | // if (wrkMast != null) { |
| | | // vo.setStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc()); // 模式状态 |
| | | // vo.setSourceStaNo(wrkMast.getSourceStaNo$()); // 源站 |
| | | // vo.setStaNo(wrkMast.getStaNo$()); // 目标站 |
| | | // vo.setSourceLocNo(wrkMast.getSourceLocNo()); // 源库位 |
| | | // vo.setLocNo(wrkMast.getLocNo()); // 目标库位 |
| | | } |
| | | } else { |
| | | vo.setStatus(crnProtocol.modeType.equals(CrnModeType.AUTO)? CrnStatusType.MACHINE_AUTO.getDesc(): CrnStatusType.MACHINE_UN_AUTO.getDesc()); // 模式状态 |
| | |
| | | |
| | | vo.setWorkNo(crnProtocol.getTaskNo()); // 任务号 |
| | | if (crnProtocol.getTaskNo()>0) { |
| | | WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo()); |
| | | if (wrkMast != null) { |
| | | vo.setDeviceStatus(CrnStatusType.process(wrkMast.getIoType()).getDesc()); // 模式状态 |
| | | vo.setSourceStaNo(wrkMast.getSourceStaNo$()); // 源站 |
| | | vo.setStaNo(wrkMast.getStaNo$()); // 目标站 |
| | | vo.setSourceLocNo(wrkMast.getSourceLocNo()); // 源库位 |
| | | vo.setLocNo(wrkMast.getLocNo()); // 目标库位 |
| | | TaskWrk taskWrk = taskWrkService.selectByWrkNo(crnProtocol.getTaskNo().intValue()); |
| | | // WrkMast wrkMast = wrkMastService.selectById(crnProtocol.getTaskNo()); |
| | | if (taskWrk != null) { |
| | | vo.setDeviceStatus(CrnStatusType.process(taskWrk.getIoType()).getDesc()); // 模式状态 |
| | | vo.setSourceStaNo(taskWrk.getStartPoint()); // 源站 |
| | | vo.setStaNo(taskWrk.getTargetPoint()); // 目标站 |
| | | // vo.setSourceLocNo(taskWrk.getTargetPoint()); // 源库位 |
| | | // vo.setLocNo(taskWrk.getLocNo()); // 目标库位 |
| | | } |
| | | } else { |
| | | if (Cools.isEmpty(crnProtocol.modeType)){ |
| | |
| | | crnCommand.setCommand((short) 0); // 任务完成确认位 |
| | | // 延时发送 |
| | | Thread.sleep(1000L); |
| | | if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(5, crnCommand), false)) { |
| | | if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(5, crnCommand))) { |
| | | return R.ok(); |
| | | } else { |
| | | throw new CoolException("命令下发失败"); |
| | |
| | | } |
| | | // 空闲判断 |
| | | // if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) { |
| | | if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(4, command), false)) { |
| | | if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(4, command))) { |
| | | return true; |
| | | } else { |
| | | throw new CoolException("命令下发失败"); |
| | |
| | | } |
| | | // 空闲判断 |
| | | // if (crnProtocol.getStatusType().equals(com.zy.core.enums.CrnStatusType.IDLE) && crnProtocol.getTaskNo() == 0) { |
| | | if (CommandUtils.offer(SlaveType.Crn, crn.getId(), new Task(2, command), false)) { |
| | | if (MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, command))) { |
| | | return true; |
| | | } else { |
| | | throw new CoolException("命令下发失败"); |
| | |
| | | if(Cools.isEmpty(staDesc)){ |
| | | return R.error("出库路劲不存在"); |
| | | } |
| | | r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo(),staDesc.getCrnStn())); |
| | | r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo(),staDesc.getStnNo())); |
| | | }else if (param.getIoType() == 3){ |
| | | LocMast locMast2 = locMastService.selectByLocNo(param.getTargetPoint()); |
| | | if(Cools.isEmpty(locMast2)){ |
| New file |
| | |
| | | package com.zy.asrs.controller; |
| | | |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.core.annotations.ManagerAuth; |
| | | import com.core.common.R; |
| | | import com.zy.asrs.entity.BasDevpPosition; |
| | | import com.zy.asrs.service.BasDevpPositionService; |
| | | import com.zy.core.cache.RgvStatusCache; |
| | | import com.zy.core.cache.SlaveConnection; |
| | | import com.zy.core.cache.TaskProtocolCache; |
| | | import com.zy.core.enums.SlaveType; |
| | | import com.zy.core.model.protocol.RgvProtocol; |
| | | import com.zy.core.model.protocol.TaskProtocol; |
| | | import com.zy.core.thread.RgvThread; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | |
| | | /** |
| | | * 输送设备接口 |
| | | * Created by vincent on 2020-06-01 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/rgv") |
| | | public class RgvController { |
| | | |
| | | @Autowired |
| | | private BasDevpPositionService basDevpPositionService; |
| | | |
| | | @GetMapping("/status/all") |
| | | @ManagerAuth(memo = "全部信息") |
| | | public R allStatus(){ |
| | | List<Map<String, Object>> res = new ArrayList<>(); |
| | | ConcurrentHashMap<Integer, RgvProtocol> allRgvStatus = RgvStatusCache.getAllRgvStatus(); |
| | | for (RgvProtocol rgvProtocol : allRgvStatus.values()){ |
| | | Map<String, Object> map2 = new HashMap<>(); |
| | | map2.put("rgvNo", rgvProtocol.getRgvNo()); |
| | | map2.put("taskNo", rgvProtocol.getTaskNo()); |
| | | map2.put("mode", rgvProtocol.getModeType().desc); |
| | | map2.put("status", rgvProtocol.getStatusType().desc); |
| | | map2.put("rgvPos", rgvProtocol.getRgvPos()); |
| | | map2.put("rgvPosDestination", rgvProtocol.getRgvPosDestination()); |
| | | map2.put("loaded", rgvProtocol.getLoaded().equals((short)-1)? "未知":rgvProtocol.getLoaded()==1? "有物":"无物"); |
| | | res.add(map2); |
| | | } |
| | | return R.ok().add(res); |
| | | } |
| | | |
| | | @PostMapping("/task/cache/all") |
| | | @ManagerAuth(memo = "全部信息") |
| | | public R allTaskCache(@RequestParam(defaultValue = "0") Integer rgvNo){ |
| | | List<Map<String, Object>> res = new ArrayList<>(); |
| | | try{ |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); |
| | | TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | for (TaskProtocol taskProtocol : allTaskProtocol.values()){ |
| | | Map<String, Object> map2 = new HashMap<>(); |
| | | map2.put("rgvNo", rgvNo); |
| | | map2.put("taskNo", taskProtocol.getTaskNo()); |
| | | map2.put("targetPosition", taskProtocol.getTargetPosition()); |
| | | map2.put("isRunning", taskProtocol.getIsRunning()); |
| | | map2.put("taskStatus", taskProtocol.getTaskStatus()); |
| | | map2.put("direction", taskProtocol.isDirection()); |
| | | res.add(map2); |
| | | } |
| | | } catch (Exception e){ |
| | | // return R.error("异常"+e.getMessage()); |
| | | } |
| | | return R.ok().add(res); |
| | | } |
| | | |
| | | @PostMapping("/run/walk")//Take Put Walk |
| | | @ManagerAuth(memo = "小车行走") |
| | | public R rgvRunWalk(@RequestParam(defaultValue = "0") Integer rgvNo, |
| | | @RequestParam(defaultValue = "0") Integer taskNo, |
| | | @RequestParam(defaultValue = "0") Integer rgvStaNo, |
| | | @RequestParam(defaultValue = "0") Long rgvPosDestination |
| | | ) { |
| | | if (rgvNo==null || rgvNo==0){ |
| | | return R.error("请选择小车"); |
| | | } |
| | | if (taskNo==null || taskNo==0){ |
| | | return R.error("作业号请填写"); |
| | | } |
| | | if ((rgvStaNo == null || rgvStaNo == 0) && (rgvPosDestination==null || rgvPosDestination==0L)){ |
| | | return R.error("目标站点请填写"); |
| | | } |
| | | if (rgvPosDestination == null || rgvPosDestination == 0){ |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNo)); |
| | | rgvPosDestination = basDevpPosition.getPlcPosition(); |
| | | } |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); |
| | | TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | |
| | | TaskProtocol issued = new TaskProtocol(); |
| | | |
| | | try { |
| | | ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | if (allTaskProtocol.size() > 0) { |
| | | return R.error("存在执行中任务,请先处理!!!"); |
| | | } |
| | | |
| | | //执行 |
| | | issued.setTaskNo(Long.valueOf(taskNo)); |
| | | issued.setTaskStatus(1); |
| | | issued.setTaskNoDirection(issued.gettaskNoDirection$(issued.getTaskNo(), issued.getTaskStatus())); |
| | | issued.setTargetPosition(rgvPosDestination); |
| | | issued.setIsRunning(1); |
| | | issued.setDirection(true); |
| | | |
| | | taskProtocolCache.updateTaskProtocol(issued); |
| | | |
| | | } catch (Exception e) { |
| | | return R.error("任务生成失败"+e.getMessage()); |
| | | } |
| | | |
| | | return R.ok("任务生成成功"); |
| | | } |
| | | |
| | | @PostMapping("/run/put")//Take Put Walk |
| | | @ManagerAuth(memo = "小车放货") |
| | | public R rgvPutWalk(@RequestParam(defaultValue = "0") Integer rgvNo, |
| | | @RequestParam(defaultValue = "0") Integer taskNo, |
| | | @RequestParam(defaultValue = "0") Integer rgvStaNo, |
| | | @RequestParam(defaultValue = "0") Long rgvPosDestination |
| | | ) { |
| | | if (rgvNo==null || rgvNo==0){ |
| | | return R.error("请选择小车"); |
| | | } |
| | | if (taskNo==null || taskNo==0){ |
| | | return R.error("作业号请填写"); |
| | | } |
| | | if (rgvStaNo == null || rgvStaNo == 0){ |
| | | return R.error("目标站点请填写"); |
| | | } |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); |
| | | TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | |
| | | TaskProtocol issuedPut = new TaskProtocol(); |
| | | |
| | | try { |
| | | ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | if (allTaskProtocol.size() > 0) { |
| | | return R.error("存在执行中任务,请先处理!!!"); |
| | | } |
| | | |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNo)); |
| | | //执行 |
| | | issuedPut.setTaskNo(Long.valueOf(taskNo)); |
| | | issuedPut.setTaskStatus(3); |
| | | issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); |
| | | issuedPut.setTargetPosition(basDevpPosition.getPlcPosition()); |
| | | issuedPut.setIsRunning(1); |
| | | issuedPut.setDirection(basDevpPosition.getRgvSign()==1); |
| | | |
| | | taskProtocolCache.updateTaskProtocol(issuedPut); |
| | | } catch (Exception e) { |
| | | return R.error("任务生成失败"+e.getMessage()); |
| | | } |
| | | |
| | | return R.ok("任务生成成功"); |
| | | } |
| | | |
| | | @PostMapping("/run/take")//Take Put Walk |
| | | @ManagerAuth(memo = "小车取货") |
| | | public R rgvTakeWalk(@RequestParam(defaultValue = "0") Integer rgvNo, |
| | | @RequestParam(defaultValue = "0") Integer taskNo, |
| | | @RequestParam(defaultValue = "0") Integer rgvStaNo, |
| | | @RequestParam(defaultValue = "0") Long rgvPosDestination |
| | | ) { |
| | | if (rgvNo==null || rgvNo==0){ |
| | | return R.error("请选择小车"); |
| | | } |
| | | if (taskNo==null || taskNo==0){ |
| | | return R.error("作业号请填写"); |
| | | } |
| | | if (rgvStaNo == null || rgvStaNo == 0){ |
| | | return R.error("目标站点请填写"); |
| | | } |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); |
| | | TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); |
| | | |
| | | TaskProtocol issuedTake = new TaskProtocol(); |
| | | try { |
| | | ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); |
| | | if (allTaskProtocol.size() > 0) { |
| | | return R.error("存在执行中任务,请先处理!!!"); |
| | | } |
| | | |
| | | BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNo)); |
| | | //执行 |
| | | issuedTake.setTaskNo(Long.valueOf(taskNo)); |
| | | issuedTake.setTaskStatus(2); |
| | | issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus())); |
| | | issuedTake.setTargetPosition(basDevpPosition.getPlcPosition()); |
| | | issuedTake.setIsRunning(1); |
| | | issuedTake.setDirection(basDevpPosition.getRgvSign()==1); |
| | | |
| | | taskProtocolCache.updateTaskProtocol(issuedTake); |
| | | } catch (Exception e) { |
| | | return R.error("任务生成失败"+e.getMessage()); |
| | | } |
| | | |
| | | return R.ok("任务生成成功"); |
| | | } |
| | | } |
| | |
| | | staProtocol.setWorkNo(0); |
| | | staProtocol.setStaNo(0); |
| | | basDevpService.updateById(basDevp); |
| | | boolean result = CommandUtils.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); |
| | | if (result) { |
| | | return R.ok(); |
| | | } else { |
| | |
| | | } |
| | | staProtocol.setWorkNo( 9999); |
| | | staProtocol.setStaNo(inSta.getStaNo()); |
| | | boolean result = CommandUtils.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol), false); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); |
| | | if (result) { |
| | | return R.ok(); |
| | | } else { |
| | |
| | | */ |
| | | public enum WorkNoType { |
| | | |
| | | PAKIN(0), |
| | | PICK(1), |
| | | PAKIN(1), |
| | | PICK(3), |
| | | PAKOUT(2), |
| | | OTHER(3), |
| | | OTHER(4), |
| | | ; |
| | | |
| | | public Integer type; |
| | |
| | | @TableField("PLC_POSITION") |
| | | private Long plcPosition; |
| | | |
| | | @ApiModelProperty(value= "") |
| | | @TableField("RGV_SIGN") |
| | | private Integer rgvSign; |
| | | |
| | | public BasDevpPosition() {} |
| | | |
| | | public BasDevpPosition(Integer devNo, Integer plcId, Long plcPosition) { |
| | |
| | | crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint())); // 目标库位层 |
| | | crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint())); // 目标库位排 |
| | | crnCommand.setCommand((short) 1); |
| | | if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand), false)) { |
| | | if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | throw new CoolException("堆垛机命令生成失败"); |
| | | } else { |
| | |
| | | command.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | | command.setDestinationPosZ(crnStn.getLev().shortValue()); // 目标库位层 |
| | | command.setCommand((short) 1); |
| | | if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, command), false)) { |
| | | if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, command))) { |
| | | log.error("堆垛机命令生成失败,堆垛机号={},巷道={},任务数据={}", slave.getId(), taskWrk.getCrnNo(), JSON.toJSON(command)); |
| | | throw new CoolException("堆垛机命令生成失败"); |
| | | } else { |
| | |
| | | crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint())); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint())); // 目标库位层 |
| | | crnCommand.setCommand((short) 1); |
| | | if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand), false)) { |
| | | if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) { |
| | | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | |
| | | } |
| | | |
| | | // 状态:等待确认 并且 任务完成位 = 1 |
| | | if (!Cools.isEmpty(crnProtocol.getTaskFinish()) && crnProtocol.getTaskFinish() == 0 && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { |
| | | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { |
| | | //获取入库待确认工作档 |
| | | TaskWrk taskWrk = taskWrkMapper.selectCrnNoInWorking(crnProtocol.getLaneNo(), crnProtocol.getTaskNo().intValue()); |
| | | if (Cools.isEmpty(taskWrk) && crnProtocol.getTaskNo() != 999) { |
| | | log.error("堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},巷道号={},工作号={}", crn.getId(), crnProtocol.getLaneNo(), crnProtocol.getTaskNo()); |
| | | continue; |
| | | } |
| | | Thread.sleep(300); |
| | | // Thread.sleep(300); |
| | | //确认完成信号 |
| | | CrnOperatorParam crnOperatorParam = new CrnOperatorParam(); |
| | | crnOperatorParam.setCrnNo(crn.getId()); |
| | |
| | | if (targetPointConvert == null) { |
| | | return false; |
| | | } |
| | | RgvSlave.RgvStn rgvStnEnd = getRgvStnNow(rgvSlave, targetPointConvert); |
| | | if (rgvStnEnd == null) { |
| | | return false; |
| | | } |
| | | |
| | | BasDevpPosition basDevpPositionSou = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStn.getStaNo())); |
| | | BasDevpPosition basDevpPositionEnd = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", targetPointConvert)); |
| | |
| | | issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus())); |
| | | issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition()); |
| | | issuedTake.setIsRunning(1); |
| | | issuedTake.setDirection(rgvStn.isDirection()); |
| | | issuedTake.setDirection(basDevpPositionSou.getRgvSign()==1); |
| | | |
| | | |
| | | issuedPut.setTaskNo(Long.valueOf(taskWrk.getTaskNo())); |
| | |
| | | issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); |
| | | issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition()); |
| | | issuedPut.setIsRunning(1); |
| | | issuedPut.setDirection(rgvStnEnd.isDirection()); |
| | | issuedPut.setDirection(basDevpPositionEnd.getRgvSign()==1); |
| | | } catch (Exception e) { |
| | | log.error("任务生成失败issued1===》异常信息:{}", e.getMessage()); |
| | | return false; |
| | |
| | | taskWrk = new TaskWrk(); |
| | | int workNo1 = 0;//获取入库工作号 |
| | | if (param.getIoType() .equals(1)){ |
| | | workNo1 = commonService.getWorkNo(WorkNoType.PAKIN.type); |
| | | } else if (param.getIoType() .equals(2)){ |
| | | workNo1 = commonService.getWorkNo(WorkNoType.PAKOUT.type); |
| | | } else { |
| | | workNo1 = commonService.getWorkNo(WorkNoType.PAKIN.type); |
| | | workNo1 = commonService.getWorkNo(WorkNoType.PICK.type); |
| | | } |
| | | taskWrk.setTaskNo(param.getTaskNo());//任务号 |
| | | taskWrk.setWrkNo(workNo1); |
| | |
| | | import com.zy.common.service.CommonService; |
| | | import com.zy.common.utils.HttpHandler; |
| | | import com.zy.core.DevpThread; |
| | | import com.zy.core.cache.MessageQueue; |
| | | import com.zy.core.cache.SlaveConnection; |
| | | import com.zy.core.enums.CrnTaskModeType; |
| | | import com.zy.core.enums.SlaveType; |
| | |
| | | crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint())); // 目标库位层 |
| | | crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint())); // 目标库位排 |
| | | crnCommand.setCommand((short)1); |
| | | if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand),false)) { |
| | | if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) { |
| | | log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | throw new CoolException("堆垛机命令生成失败"); |
| | | }else{ |
| | |
| | | crnCommand.setDestinationPosY(crnStn.getLev().shortValue()); // 目标库位列 |
| | | crnCommand.setDestinationPosZ(crnStn.getRow().shortValue()); // 目标库位层 |
| | | crnCommand.setCommand((short)1); |
| | | if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) { |
| | | if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(5, crnCommand))) { |
| | | log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | throw new CoolException("堆垛机命令生成失败"); |
| | | } |
| | |
| | | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()).clone(); |
| | | staProtocol.setWorkNo(taskWrk.getWrkNo()); |
| | | staProtocol.setStaNo(Integer.parseInt(taskWrk.getTargetPoint())); |
| | | if (!CommandUtils.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(3, staProtocol))) { |
| | | if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(3, staProtocol))) { |
| | | log.error("输送线命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); |
| | | throw new CoolException("输送线命令生成失败"); |
| | | } |
| | |
| | | // for (Slave led : slaveProperties.getLed()) { |
| | | // MessageQueue.init(SlaveType.Led, led); |
| | | // } |
| | | // // 初始化磅称mq |
| | | // for (Slave scale : slaveProperties.getScale()) { |
| | | // MessageQueue.init(SlaveType.Scale, scale); |
| | | // } |
| | | // 初始化磅称mq |
| | | for (Slave scale : slaveProperties.getScale()) { |
| | | MessageQueue.init(SlaveType.Scale, scale); |
| | | } |
| | | // // 初始化台车mq |
| | | // for (Slave car : slaveProperties.getCar()) { |
| | | // MessageQueue.init(SlaveType.Car, car); |
| | |
| | | // new Thread(ledThread).start(); |
| | | // SlaveConnection.put(SlaveType.Led, led.getId(), ledThread); |
| | | // } |
| | | // // 初始化磅秤线程 |
| | | // log.info("初始化磅秤线程..................................................."); |
| | | // for (Slave scale : slaveProperties.getScale()) { |
| | | // ScaleThread scaleThread = new ScaleThread(scale); |
| | | // new Thread(scaleThread).start(); |
| | | // SlaveConnection.put(SlaveType.Scale, scale.getId(), scaleThread); |
| | | // } |
| | | // 初始化磅秤线程 |
| | | log.info("初始化磅秤线程..................................................."); |
| | | for (Slave scale : slaveProperties.getScale()) { |
| | | ScaleThread scaleThread = new ScaleThread(scale); |
| | | new Thread(scaleThread).start(); |
| | | SlaveConnection.put(SlaveType.Scale, scale.getId(), scaleThread); |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | HALF_AUTO(2, "半自动"), |
| | | HAND(1, "手动"), |
| | | STOP(4, "维修"), |
| | | OTHER(100, "其他"), |
| | | ; |
| | | |
| | | public Integer id; |
| | |
| | | |
| | | public static CrnModeType get(Short id) { |
| | | if (null == id) { |
| | | return null; |
| | | return OTHER; |
| | | } |
| | | for (CrnModeType type : CrnModeType.values()) { |
| | | if (type.id.equals(id.intValue())) { |
| | | return type; |
| | | } |
| | | } |
| | | return null; |
| | | return OTHER; |
| | | } |
| | | |
| | | public static CrnModeType get(CrnModeType type) { |
| | | if (null == type) { |
| | | return null; |
| | | return OTHER; |
| | | } |
| | | for (CrnModeType crnModeType : CrnModeType.values()) { |
| | | if (crnModeType == type) { |
| | | return crnModeType; |
| | | } |
| | | } |
| | | return null; |
| | | return OTHER; |
| | | } |
| | | } |
| | |
| | | /** |
| | | * 有物 |
| | | */ |
| | | public Short loaded;//0 无物;1 有物 |
| | | public Short loaded = -1;//0 无物;1 有物 |
| | | |
| | | /** |
| | | * RGV当前位置 |
| | |
| | | public String gettaskNoDirection$(Long taskNo,int taskStatus){ |
| | | String taskStatusStr = "Walk"; |
| | | switch (taskStatus){ |
| | | case 1: |
| | | case 2: |
| | | taskStatusStr = "Tack"; |
| | | break; |
| | | case 2: |
| | | case 3: |
| | | taskStatusStr = "Put"; |
| | | break; |
| | | } |
| | |
| | | screen.turnOn(); |
| | | } catch (Exception ignore) { |
| | | } |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | if (connRes) { |
| | | log.info("led连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | deviceErrorService.deleteDeviceError("led", slave.getId()); |
| | | } else { |
| | | log.error("led连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | deviceErrorService.addDeviceError("led", slave.getId(), "led连接失败"); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | if (connRes) { |
| | | log.info("led连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | deviceErrorService.deleteDeviceError("led", slave.getId()); |
| | | } else { |
| | | log.error("led连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | deviceErrorService.addDeviceError("led", slave.getId(), "led连接失败"); |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("e:"+e.getMessage()); |
| | | } |
| | | |
| | | return connRes; |
| | | } |
| | | |
| | |
| | | |
| | | // 启动漫游线程 |
| | | new Thread(this::taskWalkIssued).start(); |
| | | new Thread(this::taskWalkIssued2).start(); |
| | | |
| | | // 启动任务完成线程 |
| | | new Thread(this::taskComplete).start(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 任务下发 |
| | | */ |
| | | private void taskWalkIssued2() { |
| | | while (true) { |
| | | try { |
| | | // 休眠 1 秒 |
| | | Thread.sleep(100); |
| | | if (!deviceDetection()) { |
| | | continue; |
| | | } |
| | | RgvProtocol rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); |
| | | RgvTaskProtocol rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); |
| | | if (rgvProtocol == null || rgvTaskProtocol == null) { |
| | | initRgv(); |
| | | rgvProtocol = RgvStatusCache.getRgvStatus(slave.getId()); |
| | | rgvTaskProtocol = RgvTaskCache.getRgvStatus(slave.getId()); |
| | | } |
| | | if (rgvTaskProtocol.getAvoid() != 0) { |
| | | continue; |
| | | } |
| | | if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){ |
| | | continue; |
| | | } |
| | | if (rgvProtocol.getLoaded() == -1){ |
| | | continue; |
| | | } |
| | | |
| | | List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getAllWalkTaskProtocol(); |
| | | for (TaskProtocol taskProtocol : allTakeTaskProtocol) { |
| | | if (taskProtocol.getIsRunning() == 1) {//准备下发 |
| | | // 双车 |
| | | if (rgvOtherStatusEnable()) { |
| | | //另一台车是否允许此台车执行 |
| | | if (!otherRgvAvoid(taskProtocol.getTargetPosition())) { |
| | | continue; |
| | | } |
| | | } |
| | | if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50 |
| | | && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){ |
| | | taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); |
| | | break; |
| | | } else { |
| | | Thread.sleep(100); |
| | | TaskProtocol issued = new TaskProtocol(taskProtocol,true); |
| | | write(issued); |
| | | taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("RGV取货任务下发线程异常!!!" + e.getMessage()); |
| | | // e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 漫游 |
| | | */ |
| | | private void taskWalkIssued() { |
| | |
| | | TaskProtocol issued = new TaskProtocol(); |
| | | issued.setTaskNo(32222L); |
| | | issued.setTargetPosition(rgvTaskProtocol.getAvoidingTheDestination()); |
| | | issued.setTaskStatus(1); |
| | | issued.setDirection(true); |
| | | write(issued); |
| | | rgvTaskProtocol.setAvoid(0); |
| | | |
| | |
| | | if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE)){ |
| | | continue; |
| | | } |
| | | if (rgvProtocol.getLoaded() == -1){ |
| | | continue; |
| | | } |
| | | |
| | | List<TaskProtocol> allTakeTaskProtocol = taskProtocolCache.getTakeOrPutTaskProtocol(rgvProtocol.getLoaded()); |
| | | for (TaskProtocol taskProtocol : allTakeTaskProtocol) { |
| | | if (taskProtocol.getIsRunning() == 1) {//准备下发 |
| | | RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | // RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | //双车 |
| | | if (rgvOtherStatusEnable()) { |
| | | //另一台车是否允许此台车执行 |
| | |
| | | Thread.sleep(100); |
| | | TaskProtocol issued = new TaskProtocol(taskProtocol); |
| | | write(issued); |
| | | taskProtocol.setIsRunning(4); |
| | | taskProtocolCache.updateTaskProtocol(taskProtocol); |
| | | taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); |
| | | break; |
| | | } else { |
| | | Thread.sleep(100); |
| | | TaskProtocol issued = new TaskProtocol(taskProtocol,true); |
| | | write(issued); |
| | | // taskProtocol.setIsRunning(4); |
| | | // taskProtocolCache.updateTaskProtocol(taskProtocol); |
| | | break; |
| | | } |
| | | } |
| | |
| | | byte[] read = read(8, 100); |
| | | if (null != read) { |
| | | String s = new String(read); |
| | | if (!Cools.isEmpty(s) && s.startsWith("=")) { |
| | | scale = Double.parseDouble(s.substring(1)); |
| | | if (!Cools.isEmpty(s) && s.startsWith("\u0002+")) { |
| | | // if (!Cools.isEmpty(s) && s.startsWith("=")) { |
| | | scale = Double.parseDouble(s.substring(1))/100; |
| | | |
| | | // System.out.println("scale:"+scale+ "ip:"+slave.getIp()); |
| | | // String substring = s.substring(1); |
| | | // String s1 = new StringBuilder(substring).reverse().toString();//逆序 |
| | | // scale = Double.parseDouble(s1); |
| | | //将称重重量写入设备基础数据中的gross_wt字段 |
| | | if(scale > 20) { |
| | | // if(scale > 20) { |
| | | try{ |
| | | // 获取站信息 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, slave.getDevpPlcId()); |
| | |
| | | OutputQueue.SCALE.offer(jsonObject); |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("称重模块异常"+e.getMessage()); |
| | | log.error("称重模块异常"+e .getMessage()); |
| | | } |
| | | // BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); |
| | | // BasDevp basDevp = basDevpService.selectById(slave.getStaNo()); |
| | |
| | | // OutputQueue.SCALE.offer(jsonObject); |
| | | // |
| | | // } |
| | | } |
| | | // } |
| | | } |
| | | } |
| | | Thread.sleep(100); |
| | |
| | | dataOutputStream = new DataOutputStream(socket.getOutputStream()); |
| | | dataInputStream = new DataInputStream(socket.getInputStream()); |
| | | // log.info("条码扫描仪连接成功 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.deleteDeviceError("scale", slave.getId()); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.deleteDeviceError("devp", slave.getId()); |
| | | } catch (Exception e){ |
| | | log.error("e:"+e.getMessage()); |
| | | } |
| | | } catch (Exception e) { |
| | | socket = null; |
| | | log.error("磅秤连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.addDeviceError("scale", slave.getId(), "磅秤连接失败"); |
| | | // DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | // deviceErrorService.addDeviceError("scale", slave.getId(), "磅秤连接失败"); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.deleteDeviceError("devp", slave.getId()); |
| | | } catch (Exception e1){ |
| | | log.error("e:"+e1.getMessage()); |
| | | } |
| | | return false; |
| | | } |
| | | return true; |
| | |
| | | StaProtocol staProtocol = station.get(siteId); |
| | | basDevps.add(staProtocol.toSqlModel()); |
| | | } |
| | | |
| | | BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); |
| | | if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { |
| | | throw new Exception("更新数据库数据失败"); |
| | | try{ |
| | | BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); |
| | | if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { |
| | | throw new Exception("更新数据库数据失败"); |
| | | } |
| | | } catch (Exception e){ |
| | | log.error("e:"+e.getMessage()); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】更新数据库数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); |
| | | log.error("更新数据库数据失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); |
| | | } |
| | | |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.deleteDeviceError("devp", slave.getId()); |
| | | try{ |
| | | DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); |
| | | deviceErrorService.deleteDeviceError("devp", slave.getId()); |
| | | } catch (Exception e){ |
| | | log.error("e:"+e.getMessage()); |
| | | } |
| | | } else { |
| | | OutputQueue.DEVP.offer(MessageFormat.format("【{0}】读取输送线plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); |
| | | // log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); |
| | |
| | | # 磅秤 |
| | | scale[0]: |
| | | id: 1 |
| | | ip: 10.10.10.207 |
| | | ip: 10.10.10.202 |
| | | port: 5005 |
| | | staNo: 281 |
| | | staNo: 1004 |
| | | devpPlcId: 1 |
| | | # 磅秤 |
| | | scale[1]: |
| | | id: 2 |
| | | ip: 10.10.10.203 |
| | | port: 5005 |
| | | staNo: 1022 |
| | | devpPlcId: 1 |
| | | crn[0]: #堆垛机1 |
| | | ip: 10.10.10.10 |
| | |
| | | offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 |
| | | port: 102 |
| | | crnOutStn[0]: #堆垛机出库站点 |
| | | staNo: 101 |
| | | staNo: 1003 |
| | | row: 2 |
| | | bay: 1 |
| | | lev: 1 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | crnInStn[0]: #堆垛机入库站点1 |
| | | staNo: 100 |
| | | staNo: 1001 |
| | | row: 1 |
| | | bay: 1 |
| | | lev: 1 |
| | |
| | | offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 |
| | | port: 102 |
| | | crnOutStn[0]: #堆垛机出库站点 |
| | | staNo: 101 |
| | | row: 2 |
| | | staNo: 1007 |
| | | row: 4 |
| | | bay: 1 |
| | | lev: 1 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | crnInStn[0]: #堆垛机入库站点1 |
| | | staNo: 100 |
| | | row: 1 |
| | | staNo: 1006 |
| | | row: 3 |
| | | bay: 1 |
| | | lev: 1 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | |
| | | offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 |
| | | port: 102 |
| | | crnOutStn[0]: #堆垛机出库站点 |
| | | staNo: 101 |
| | | row: 2 |
| | | staNo: 1013 |
| | | row: 6 |
| | | bay: 1 |
| | | lev: 1 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | crnInStn[0]: #堆垛机入库站点1 |
| | | staNo: 100 |
| | | row: 1 |
| | | staNo: 1008 |
| | | row: 5 |
| | | bay: 1 |
| | | lev: 1 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | |
| | | offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 |
| | | port: 102 |
| | | crnOutStn[0]: #堆垛机出库站点 |
| | | staNo: 101 |
| | | row: 2 |
| | | staNo: 1018 |
| | | row: 8 |
| | | bay: 1 |
| | | lev: 1 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | crnInStn[0]: #堆垛机入库站点1 |
| | | staNo: 100 |
| | | row: 1 |
| | | staNo: 1017 |
| | | row: 7 |
| | | bay: 1 |
| | | lev: 1 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | |
| | | offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 |
| | | port: 102 |
| | | crnOutStn[0]: #堆垛机出库站点 |
| | | staNo: 101 |
| | | row: 2 |
| | | staNo: 1019 |
| | | row: 9 |
| | | bay: 1 |
| | | lev: 1 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | | crnInStn[0]: #堆垛机入库站点1 |
| | | staNo: 100 |
| | | row: 1 |
| | | staNo: 1022 |
| | | row: 10 |
| | | bay: 1 |
| | | lev: 1 |
| | | devpPlcId: ${wcs-slave.devp[0].id} |
| | |
| | | <result column="DEV_NO" property="devNo" /> |
| | | <result column="PLC_ID" property="plcId" /> |
| | | <result column="PLC_POSITION" property="plcPosition" /> |
| | | <result column="RGV_SIGN" property="rgvSign" /> |
| | | |
| | | </resultMap> |
| | | |
| | |
| | | <div style="width: 100%;"> |
| | | <el-table ref="singleTable" :data="tableData" highlight-current-row @row-click="handleRowClick" |
| | | max-height="450" style="width: 100%"> |
| | | <el-table-column property="devNo" label="站号"> |
| | | <el-table-column property="rgvNo" label="小车号"> |
| | | </el-table-column> |
| | | <el-table-column property="workNo" label="工作号"> |
| | | <el-table-column property="taskNo" label="工作号"> |
| | | </el-table-column> |
| | | <el-table-column property="locType1" label="高低库位"> |
| | | <el-table-column property="mode" label="作业模式"> |
| | | </el-table-column> |
| | | <el-table-column property="pakMk" label="入库标记"> |
| | | <el-table-column property="status" label="状态"> |
| | | </el-table-column> |
| | | <el-table-column property="rgvPos" label="当前定位值"> |
| | | </el-table-column> |
| | | <el-table-column property="rgvPosDestination" label="目标定位置"> |
| | | </el-table-column> |
| | | <el-table-column property="loaded" label="有物"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | |
| | | <div> |
| | | <el-form :model="formParam" label-position="top" :inline="true" class="demo-form-inline"> |
| | | <el-form-item label="工作号"> |
| | | <el-input v-model="formParam.workNo" placeholder="工作号"></el-input> |
| | | <el-input v-model="formParam.taskNo" placeholder="工作号"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="目标站"> |
| | | <el-input v-model="formParam.staNo" placeholder="目标站"></el-input> |
| | | <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.pakMk" placeholder="入库标记"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <el-form label-position="top" :inline="true" class="demo-form-inline"> |
| | | <el-form-item label=""> |
| | | <el-checkbox v-model="formParam.inEnable">可入</el-checkbox> |
| | | </el-form-item> |
| | | <el-form-item label=""> |
| | | <el-checkbox v-model="formParam.outEnable">可出</el-checkbox> |
| | | <el-form-item label="目标站点"> |
| | | <el-input v-model="formParam.rgvStaNo" placeholder="目标站点"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div> |
| | | <el-button @click="requestOperate('update')" type="primary">更新</el-button> |
| | | <el-button @click="requestOperate('out')" type="warning">取货完成</el-button> |
| | | <el-button @click="requestOperate('in')" type="warning">放货完成</el-button> |
| | | <el-button @click="requestOperate('take')" type="primary">取货</el-button> |
| | | <el-button @click="requestOperate('put')" type="primary">放货</el-button> |
| | | <el-button @click="requestOperate('walk')" type="warning">行走</el-button> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | |
| | | <div style="width: 45%;"> |
| | | <el-card class="box-card"> |
| | | <div slot="header" class="clearfix"> |
| | | <span>设备状态</span> |
| | | <span>设备当前任务</span> |
| | | </div> |
| | | <div> |
| | | <div v-if="currentIndex == null"> |
| | | <el-empty description="请选择设备"></el-empty> |
| | | </div> |
| | | <div v-else> |
| | | <el-descriptions :title="currentTitle" direction="vertical" :column="4" border> |
| | | <el-descriptions-item label="站点">{{ tableData[currentIndex].devNo }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="工作号"> |
| | | {{ tableData[currentIndex].workNo }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="自动">{{ tableData[currentIndex].autoing }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="有物">{{ tableData[currentIndex].loading }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="可入">{{ tableData[currentIndex].inEnable }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="可出">{{ tableData[currentIndex].outEnable }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="入库标记">{{ tableData[currentIndex].pakMk }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="空板信号">{{ tableData[currentIndex].emptyMk }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="目标站">{{ tableData[currentIndex].staNo }} |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="高低库位">{{ tableData[currentIndex].locType1 }} |
| | | </el-descriptions-item> |
| | | </el-descriptions> |
| | | <el-table ref="singleTable" :data="taskAllData" highlight-current-row @row-click="handleRowClick" |
| | | max-height="450" style="width: 100%"> |
| | | <el-table-column property="rgvNo" label="小车号"> |
| | | </el-table-column> |
| | | <el-table-column property="taskNo" label="工作号"> |
| | | </el-table-column> |
| | | <el-table-column property="taskStatus" label="作业模式"> |
| | | </el-table-column> |
| | | <el-table-column property="isRunning" label="状态"> |
| | | </el-table-column> |
| | | <el-table-column property="targetPosition" label="目标定位置"> |
| | | </el-table-column> |
| | | <el-table-column property="direction" label="放向"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | |
| | | el: '#app', |
| | | data: { |
| | | tableData: [], |
| | | taskAllData: [], |
| | | currentRow: null, |
| | | currentTitle: "未选择设备", |
| | | currentIndex: null, |
| | | formParam: { |
| | | devNo: null, |
| | | workNo: null, |
| | | staNo: null, |
| | | pakMk: null, |
| | | inEnable: false, |
| | | outEnable: false |
| | | rgvNo: 0, |
| | | taskNo: 0, |
| | | rgvStaNo: 0, |
| | | rgvPosDestination: 0 |
| | | } |
| | | }, |
| | | created() { |
| | |
| | | const index = this.tableData.indexOf(row) |
| | | this.currentRow = row; |
| | | this.currentIndex = index |
| | | this.currentTitle = row.devNo + "站点" |
| | | this.currentTitle = row.rgvNo + "小车" |
| | | |
| | | this.formParam.devNo = row.devNo |
| | | this.formParam.workNo = row.workNo |
| | | this.formParam.staNo = row.staNo |
| | | this.formParam.pakMk = row.pakMk |
| | | this.formParam.inEnable = row.inEnable == "Y" ? true : false |
| | | this.formParam.outEnable = row.outEnable == "Y" ? true : false |
| | | this.formParam.rgvNo = row.rgvNo |
| | | this.formParam.taskNo = row.taskNo |
| | | this.formParam.rgvStaNo = row.rgvStaNo |
| | | this.formParam.rgvPosDestination = row.rgvPosDestination |
| | | |
| | | this.getTaskAllData(index+1) |
| | | }, |
| | | getTaskAllData(index) { |
| | | let that = this; |
| | | $.ajax({ |
| | | url: baseUrl + "/rgv/task/cache/all", |
| | | headers: { |
| | | 'token': localStorage.getItem('token') |
| | | }, |
| | | data: {rgvNo: index}, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | that.taskAllData = res.data |
| | | } |
| | | }); |
| | | }, |
| | | getTableData() { |
| | | let that = this; |
| | | $.ajax({ |
| | | url: baseUrl + "/site/list/auth", |
| | | url: baseUrl + "/rgv/status/all", |
| | | headers: { |
| | | 'token': localStorage.getItem('token') |
| | | }, |
| | |
| | | type: 'warning' |
| | | }).then(()=>{ |
| | | $.ajax({ |
| | | url: baseUrl + "/site/detl/"+method, |
| | | url: baseUrl + "/rgv/run/"+method, |
| | | headers: { |
| | | 'token': localStorage.getItem('token') |
| | | }, |