| | |
| | | //执行 |
| | | issuedPut.setTaskNo(Long.valueOf(taskNo)); |
| | | issuedPut.setTaskStatus(3); |
| | | issuedPut.setTargetPositionStaNo(basDevpPosition.getDevNo()); |
| | | issuedPut.setTargetPositionStaNoPlcId(basDevpPosition.getPlcId()); |
| | | issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); |
| | | issuedPut.setTargetPosition(basDevpPosition.getPlcPosition()); |
| | | issuedPut.setIsRunning(1); |
| | |
| | | //执行 |
| | | issuedTake.setTaskNo(Long.valueOf(taskNo)); |
| | | issuedTake.setTaskStatus(2); |
| | | issuedTake.setTargetPositionStaNo(basDevpPositionTake.getDevNo()); |
| | | issuedTake.setTargetPositionStaNoPlcId(basDevpPositionTake.getPlcId()); |
| | | issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus())); |
| | | issuedTake.setTargetPosition(basDevpPositionTake.getPlcPosition()); |
| | | issuedTake.setIsRunning(1); |
| | |
| | | //执行 |
| | | issuedPut.setTaskNo(Long.valueOf(taskNo)); |
| | | issuedPut.setTaskStatus(3); |
| | | issuedPut.setTargetPositionStaNo(basDevpPositionPut.getDevNo()); |
| | | issuedPut.setTargetPositionStaNoPlcId(basDevpPositionPut.getPlcId()); |
| | | issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); |
| | | issuedPut.setTargetPosition(basDevpPositionPut.getPlcPosition()); |
| | | issuedPut.setIsRunning(1); |
| | |
| | | |
| | | return R.ok("任务生成成功"); |
| | | } |
| | | |
| | | @PostMapping("/run/delRgvTask")//Take Put Walk |
| | | @ManagerAuth(memo = "小车取货") |
| | | public R rgvDelRgvTask(@RequestParam(defaultValue = "0") Integer rgvNo |
| | | ) { |
| | | if (rgvNo==null || rgvNo==0){ |
| | | return R.error("请选择小车"); |
| | | } |
| | | |
| | | try { |
| | | RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); |
| | | rgvThread.setDelRgvTask(); |
| | | } catch (Exception e) { |
| | | return R.error("任务生成失败"+e.getMessage()); |
| | | } |
| | | |
| | | return R.ok("任务生成成功"); |
| | | } |
| | | } |
| | |
| | | import com.core.common.DateUtils; |
| | | import com.zy.asrs.domain.enums.TaskStatusType; |
| | | import com.zy.asrs.entity.LocMast; |
| | | import com.zy.asrs.entity.StaDesc; |
| | | import com.zy.asrs.entity.TaskWrk; |
| | | import com.zy.asrs.service.ApiLogService; |
| | | import com.zy.asrs.service.LocMastService; |
| | | import com.zy.asrs.service.TaskWrkService; |
| | | import com.zy.asrs.entity.param.CarryParam; |
| | | import com.zy.asrs.entity.param.TaskCreateParam; |
| | | import com.zy.asrs.service.*; |
| | | import com.core.annotations.ManagerAuth; |
| | | import com.core.common.BaseRes; |
| | | import com.core.common.Cools; |
| | |
| | | |
| | | @Autowired |
| | | private LocMastService locMastService; |
| | | |
| | | @Autowired |
| | | private OpenService openService; |
| | | |
| | | @Autowired |
| | | private StaDescService staDescService; |
| | | |
| | | @Value("${wms.taskStatusFeedbackPath}") |
| | | private String taskStatusFeedbackPath; |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/taskWrk/addTask/auth") |
| | | @ManagerAuth |
| | | public R addTaskPoint(CarryParam param){ |
| | | try{ |
| | | param.updateIoTyoe(param.getIoType());//中航下发 1:出库,2:移库 3:入库 ====转换为====> 1:入库,2:出库,3:移库 |
| | | param.updateLocNo(); |
| | | if (Cools.isEmpty(param)){ |
| | | return R.error("参数为空!"); |
| | | } else if (Cools.isEmpty(param.getTaskNo())){ |
| | | return R.error("任务号为空!"); |
| | | } else if (Cools.isEmpty(param.getIoType())){ |
| | | return R.error("任务类型为空!"); |
| | | } |
| | | if (Cools.isEmpty(param.getStartPoint()) || Cools.isEmpty(param.getTargetPoint())){ |
| | | return R.error("初始目标或者目标位为空"); |
| | | } |
| | | |
| | | |
| | | String locNo=null; |
| | | if(param.getIoType()==1){ |
| | | locNo=param.getTargetPoint(); |
| | | }else{ |
| | | locNo=param.getStartPoint(); |
| | | } |
| | | LocMast locMast = locMastService.selectByLocNo(locNo); |
| | | if(Cools.isEmpty(locMast)){ |
| | | return R.error("初始库位无法找到"); |
| | | } |
| | | |
| | | R r = null; |
| | | |
| | | if(param.getIoType() == 1){ |
| | | //入库任务创建 |
| | | StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() |
| | | .eq("type_no",1) |
| | | .eq("crn_no",locMast.getCrnNo()) |
| | | .eq("stn_no",param.getStartPoint())); |
| | | if(Cools.isEmpty(staDesc)){ |
| | | return R.error("入库路劲不存在"); |
| | | } |
| | | r = openService.taskCreate(new TaskCreateParam(param,staDesc.getCrnNo(),staDesc.getCrnStn())); |
| | | |
| | | }else if(param.getIoType() == 2){ |
| | | //出库任务创建 |
| | | StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() |
| | | .eq("type_no",2) |
| | | .eq("crn_no",locMast.getCrnNo()) |
| | | .eq("stn_no",param.getTargetPoint())); |
| | | if(Cools.isEmpty(staDesc)){ |
| | | return R.error("出库路劲不存在"); |
| | | } |
| | | 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)){ |
| | | return R.error("目标库位无法找到"); |
| | | } |
| | | if (!locMast2.getCrnNo().equals(locMast.getCrnNo())){ |
| | | return R.error("起始库位与目标库位不再同一巷道"); |
| | | } |
| | | //移库任务创建 |
| | | r = openService.taskCreate(new TaskCreateParam(param,locMast.getCrnNo())); |
| | | } |
| | | |
| | | apiLogService.save("wcs手动生成Wms任务" |
| | | ,request.getRemoteAddr()+request.getRequestURI() |
| | | ,null |
| | | ,request.getRemoteAddr() |
| | | ,JSON.toJSONString(param) |
| | | ,r.toString() |
| | | ,true |
| | | ); |
| | | } catch (Exception e){ |
| | | |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | @RequestMapping(value = "/taskWrk/delete/auth") |
| | | @ManagerAuth |
| | | public R delete(@RequestParam String taskNo){ |
| | |
| | | @ManagerAuth(memo = "手动完成任务") |
| | | public R complete(@RequestParam String taskNo) { |
| | | TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); |
| | | if (Cools.isEmpty(taskWrk) || taskWrk.getStatus()>=3){ |
| | | if ((Cools.isEmpty(taskWrk) || taskWrk.getStatus()>=3) && !taskWrk.getStatus().equals(TaskStatusType.OVER3.id)){ |
| | | return R.error("已完结或已取消") ; |
| | | } |
| | | LocMast locMast=new LocMast(); |
| | |
| | | |
| | | Date now = new Date(); |
| | | locMast.setModiTime(now); |
| | | taskWrk.setStatus(7);//手动完成任务 |
| | | taskWrk.setStatus(TaskStatusType.OVER2.id);//手动完成任务 |
| | | taskWrk.setModiTime(now); |
| | | taskWrk.setCompleteTime(now); |
| | | // try{ |
| | |
| | | } |
| | | |
| | | } |
| | | @PostMapping(value = "/taskWrk/assign/auth") |
| | | @ManagerAuth(memo = "输送线下发完成") |
| | | public R returnAssign(@RequestParam String taskNo) { |
| | | TaskWrk taskWrk = taskWrkService.selectByTaskNo(taskNo); |
| | | if (!Cools.isEmpty(taskWrk) && taskWrk.getWrkSts()==1){ |
| | | taskWrk.setStatus(TaskStatusType.RECEIVE.id);//派发状态 |
| | | taskWrk.setWrkSts(2); |
| | | if(!taskWrkService.updateById(taskWrk)){ |
| | | return R.error("更新任务状态失败"); |
| | | } |
| | | return R.ok(); |
| | | }else{ |
| | | return R.error("任务状态不对无法跳转"); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | DISTRIBUTE(2,"派发"), |
| | | COMPLETE(3,"命令完成"), |
| | | CANCEL(4,"取消"), |
| | | OVER(5,"完结") |
| | | OVER(5,"完结"), |
| | | OVER2(7,"手动完结"), |
| | | OVER3(9,"出库到输送线") |
| | | ; |
| | | |
| | | public Integer id; |
| | |
| | | case 2: |
| | | return "派发"; |
| | | case 3: |
| | | return "步序完成"; |
| | | return "命令完成"; |
| | | case 4: |
| | | return "取消"; |
| | | case 5: |
| | | return "完结"; |
| | | case 7: |
| | | return "手动完结"; |
| | | case 9: |
| | | return "出库到输送线"; |
| | | default: |
| | | return String.valueOf(this.status); |
| | | } |
| | |
| | | import com.zy.core.thread.RgvThread; |
| | | import com.zy.core.thread.SiemensDevpThread; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.poi.ss.formula.functions.T; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | } |
| | | // News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); |
| | | staProtocol.setWorkNo(workNo); |
| | | staProtocol.setStaNo(inSta.getStaNo()); |
| | | staProtocol.setStaNo(inSta.getBackSta()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); |
| | |
| | | return; |
| | | } else { |
| | | staProtocol.setWorkNo(taskWrk1.getWrkNo()); |
| | | staProtocol.setStaNo(staDesc.getCrnStn()); |
| | | staProtocol.setStaNo(staProtocol.getSiteId()); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | } |
| | | } |
| | |
| | | log.error("扫码检测程序异常" + inSta.getStaNo() + "异常信息" + e1); |
| | | } |
| | | staProtocol.setWorkNo(9999); |
| | | staProtocol.setStaNo(inSta.getStaNo()); |
| | | staProtocol.setStaNo(inSta.getBackSta()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | continue; |
| | |
| | | log.error("扫码检测程序异常,异常信息" + e); |
| | | |
| | | staProtocol.setWorkNo(9999); |
| | | staProtocol.setStaNo(inSta.getStaNo()); |
| | | staProtocol.setStaNo(inSta.getBackSta()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | } |
| | |
| | | log.error("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); |
| | | |
| | | staProtocol.setWorkNo(9999); |
| | | staProtocol.setStaNo(inSta.getStaNo()); |
| | | staProtocol.setStaNo(inSta.getBackSta()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); |
| | |
| | | log.error("扫码检测程序异常" + inSta.getStaNo() + "异常信息" + e1); |
| | | } |
| | | staProtocol.setWorkNo(9999); |
| | | staProtocol.setStaNo(inSta.getStaNo()); |
| | | staProtocol.setStaNo(inSta.getBackSta()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | continue; |
| | |
| | | log.error("扫码检测程序异常,异常信息" + e); |
| | | |
| | | staProtocol.setWorkNo(9999); |
| | | staProtocol.setStaNo(inSta.getStaNo()); |
| | | staProtocol.setStaNo(inSta.getBackSta()); |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); |
| | | } |
| | |
| | | if (offer) { |
| | | log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk)); |
| | | Date now = new Date(); |
| | | taskWrk.setStatus(9); |
| | | taskWrk.setStatus(TaskStatusType.OVER3.id); |
| | | taskWrk.setWrkSts(14); |
| | | taskWrk.setModiTime(now); |
| | | taskWrk.setCompleteTime(now); |
| | |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | | taskWrk.setWrkSts(12); |
| | | taskWrk.setStatus(2); |
| | | taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id); |
| | | taskWrk.setModiTime(now); |
| | | taskWrk.setExecuteTime(now); |
| | | if (taskWrkMapper.updateById(taskWrk) == 0) { |
| | |
| | | // 修改工作档状态 11.生成出库ID => 12.吊车出库中 |
| | | Date now = new Date(); |
| | | taskWrk.setWrkSts(12); |
| | | taskWrk.setStatus(2); |
| | | taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id); |
| | | taskWrk.setModiTime(now); |
| | | taskWrk.setExecuteTime(now); |
| | | if (taskWrkMapper.updateById(taskWrk) == 0) { |
| | |
| | | if (!Cools.isEmpty(taskWrk)) { |
| | | if (taskWrk.getIoType() == 1 && taskWrk.getWrkSts() == 3) { |
| | | taskWrk.setWrkSts(4);//入库完成 |
| | | taskWrk.setStatus(5);//完结 |
| | | taskWrk.setStatus(TaskStatusType.OVER.id);//完结 |
| | | //更新库位状态 |
| | | LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint()); |
| | | locMast.setLocSts("F");//F.在库 |
| | |
| | | locMastService.updateById(locMast); |
| | | } else if (taskWrk.getIoType() == 2 && taskWrk.getWrkSts() == 12) { |
| | | taskWrk.setWrkSts(13);//出库完成 |
| | | taskWrk.setStatus(5);//完结 |
| | | taskWrk.setStatus(TaskStatusType.OVER.id);//完结 |
| | | //更新库位状态 |
| | | LocMast locMast = locMastService.selectByLocNo(taskWrk.getStartPoint()); |
| | | locMast.setLocSts("O");//O.空库位 |
| | |
| | | locMastService.updateById(locMast); |
| | | } else if (taskWrk.getIoType() == 3 && taskWrk.getWrkSts() == 12) { |
| | | taskWrk.setWrkSts(4);//入库完成 |
| | | taskWrk.setStatus(5);//完结 |
| | | taskWrk.setStatus(TaskStatusType.OVER.id);//完结 |
| | | //更新库位状态 |
| | | LocMast locMast = locMastService.selectByLocNo(taskWrk.getTargetPoint()); |
| | | locMast.setLocSts("F");//F.在库 |
| | |
| | | //执行 |
| | | issuedTake.setTaskNo(Long.valueOf(taskWrk.getWrkNo())); |
| | | issuedTake.setTaskStatus(2); |
| | | issuedTake.setTargetPositionStaNo(basDevpPositionSou.getDevNo()); |
| | | issuedTake.setTargetPositionStaNoPlcId(basDevpPositionSou.getPlcId()); |
| | | issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus())); |
| | | issuedTake.setTargetPosition(basDevpPositionSou.getPlcPosition()); |
| | | issuedTake.setIsRunning(1); |
| | |
| | | |
| | | issuedPut.setTaskNo(Long.valueOf(taskWrk.getWrkNo())); |
| | | issuedPut.setTaskStatus(3); |
| | | issuedPut.setTargetPositionStaNo(basDevpPositionEnd.getDevNo()); |
| | | issuedPut.setTargetPositionStaNoPlcId(basDevpPositionEnd.getPlcId()); |
| | | issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); |
| | | issuedPut.setTargetPosition(basDevpPositionEnd.getPlcPosition()); |
| | | issuedPut.setIsRunning(1); |
| | | issuedPut.setDirection(basDevpPositionEnd.getRgvSign()==1); |
| | | |
| | | try{ |
| | | if (taskWrk.getIoType()==2 && basDevpPositionEnd.getRgvSign()==1){ |
| | | Date now = new Date(); |
| | | taskWrk.setStatus(TaskStatusType.OVER.id); |
| | | taskWrk.setModiTime(now);//更新时间 |
| | | taskWrk.setCompleteTime(now);//完结时间 |
| | | taskWrkService.updateById(taskWrk); |
| | | } |
| | | } catch (Exception e){ |
| | | |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("任务生成失败issued1===》异常信息:{}", e.getMessage()); |
| | | return false; |
| | |
| | | public void execute() throws IOException { |
| | | List<TaskWrk> taskWrkList = taskWrkService.selectToBeHistoryData(); |
| | | for (TaskWrk taskWrk : taskWrkList) { |
| | | if (taskWrkService.saveToHistory(taskWrk.getTaskNo()) == 0) { |
| | | log.error("任务档转任务历史档失败" + taskWrk); |
| | | return ; |
| | | } |
| | | JSONObject jsonObject = null; |
| | | String response = null; |
| | | boolean success = false; |
| | |
| | | private volatile String taskNoDirection; // 任务号(主属性) |
| | | private volatile Long taskNo; // 任务号(主属性) |
| | | private volatile Long targetPosition = 0L; // 目标位置 |
| | | private volatile Integer targetPositionStaNo = 0; // 目标位置 |
| | | private volatile Integer targetPositionStaNoPlcId = 1; // 目标位置 |
| | | |
| | | private volatile int isRunning = 0; // 运行状态 0:初始 1:等待执行 2:执行中 3:执行中断 4:完结 |
| | | |
| | |
| | | import com.zy.asrs.service.BasRgvService; |
| | | import com.zy.asrs.utils.RouteUtils; |
| | | import com.zy.asrs.utils.TrackRangeUtils; |
| | | import com.zy.core.DevpThread; |
| | | import com.zy.core.ThreadHandler; |
| | | import com.zy.core.cache.*; |
| | | import com.zy.core.enums.RgvModeType; |
| | |
| | | import com.zy.core.model.command.RgvCommand; |
| | | import com.zy.core.model.protocol.RgvProtocol; |
| | | import com.zy.core.model.protocol.RgvTaskProtocol; |
| | | import com.zy.core.model.protocol.StaProtocol; |
| | | import com.zy.core.model.protocol.TaskProtocol; |
| | | import lombok.Data; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | */ |
| | | private boolean resetFlag2 = false; |
| | | |
| | | private boolean connectRgv = false; |
| | | private boolean delRgvTask = false; |
| | | |
| | | public RgvThread(RgvSlave slave) { |
| | | this.slave = slave; |
| | | } |
| | |
| | | @Override |
| | | @SuppressWarnings("InfiniteLoopStatement") |
| | | public void run() { |
| | | boolean connect = this.connect(); |
| | | if (connect) { |
| | | connectRgv = this.connect(); |
| | | while(!connectRgv){ |
| | | try { |
| | | connectRgv = this.connect(); |
| | | Thread.sleep(100); |
| | | } catch (Exception e){ |
| | | |
| | | // 启动读数据线程 |
| | | new Thread(this::readStatusRgv).start(); |
| | | } |
| | | } |
| | | |
| | | // 启动任务下发线程 |
| | | new Thread(this::taskIssued).start(); |
| | | // 启动读数据线程 |
| | | new Thread(this::rgvConnect).start(); |
| | | |
| | | // 启动漫游线程 |
| | | new Thread(this::taskWalkIssued).start(); |
| | | new Thread(this::taskWalkIssued2).start(); |
| | | new Thread(this::readStatusRgv).start(); |
| | | |
| | | // 启动任务完成线程 |
| | | new Thread(this::taskComplete).start(); |
| | | // 启动任务下发线程 |
| | | new Thread(this::taskIssued).start(); |
| | | |
| | | // 启动漫游线程 |
| | | new Thread(this::taskWalkIssued).start(); |
| | | new Thread(this::taskWalkIssued2).start(); |
| | | |
| | | // 启动任务完成线程 |
| | | new Thread(this::taskComplete).start(); |
| | | } |
| | | |
| | | private void rgvConnect() { |
| | | while (true) { |
| | | try { |
| | | if(!connectRgv){ |
| | | try { |
| | | connectRgv = this.connect(); |
| | | Thread.sleep(100); |
| | | } catch (Exception e){ |
| | | |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("RGV数据读取线程异常!!!" + e.getMessage()); |
| | | initRgv(); |
| | | // e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | private void taskComplete() { |
| | | while (true) { |
| | | try { |
| | | if (delRgvTask){ |
| | | writeDelRgvTask(); |
| | | delRgvTask = false; |
| | | continue; |
| | | } |
| | | Thread.sleep(100); |
| | | OperateResultExOne<byte[]> result = siemensNet.Read("DB100.12", (short) 1); |
| | | boolean[] status = siemensNet.getByteTransform().TransBool(result.Content, 0, 1); |
| | |
| | | taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); |
| | | break; |
| | | } else { |
| | | Thread.sleep(100); |
| | | TaskProtocol issued = new TaskProtocol(taskProtocol,true); |
| | | write(issued); |
| | | taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); |
| | |
| | | for (TaskProtocol taskProtocol : allTakeTaskProtocol) { |
| | | if (taskProtocol.getIsRunning() == 1) {//准备下发 |
| | | // RgvProtocol rgvProtocolOther = RgvStatusCache.getRgvStatus(slave.getOtherId()); |
| | | if (taskProtocol.getTaskStatus()==3){ |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo()); |
| | | if (staProtocol == null ) { |
| | | continue; |
| | | } |
| | | // 判断是否满足入库条件 |
| | | if (!staProtocol.isAutoing() || staProtocol.isLoading() |
| | | || staProtocol.getWorkNo() != 0 |
| | | ){ |
| | | Thread.sleep(500); |
| | | // System.out.println("<放货目标站>" + taskProtocol.getTargetPositionStaNo() + "<非自动或者有物或者存在工作号!!!>"); |
| | | // continue; |
| | | } |
| | | } |
| | | //双车 |
| | | if (rgvOtherStatusEnable()) { |
| | | //另一台车是否允许此台车执行 |
| | |
| | | } |
| | | if (taskProtocol.getTargetPosition()<=rgvProtocol.getRgvPos()+50 |
| | | && taskProtocol.getTargetPosition()>=rgvProtocol.getRgvPos()-50){ |
| | | Thread.sleep(100); |
| | | if (taskProtocol.getTaskStatus()==3){ |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, taskProtocol.getTargetPositionStaNoPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(taskProtocol.getTargetPositionStaNo()); |
| | | if (staProtocol == null ) { |
| | | continue; |
| | | } |
| | | // 判断是否满足入库条件 |
| | | if (!staProtocol.isAutoing() || staProtocol.isLoading() |
| | | || staProtocol.getWorkNo() != 0 |
| | | ){ |
| | | Thread.sleep(500); |
| | | // System.out.println("<放货目标站>" + taskProtocol.getTargetPositionStaNo() + "<非自动或者有物或者存在工作号!!!>"); |
| | | continue; |
| | | } |
| | | } |
| | | TaskProtocol issued = new TaskProtocol(taskProtocol); |
| | | write(issued); |
| | | taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); |
| | | break; |
| | | } else { |
| | | Thread.sleep(100); |
| | | TaskProtocol issued = new TaskProtocol(taskProtocol,true); |
| | | write(issued); |
| | | break; |
| | |
| | | |
| | | } else { |
| | | initRgv(); |
| | | connectRgv = false; |
| | | // OutputQueue.RGV.offer(MessageFormat.format("【{0}】读取RGV 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("读取RGV plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | private boolean writeDelRgvTask() throws InterruptedException { |
| | | // |
| | | OperateResult result = siemensNet.Write("DB100.12.0", false); |
| | | OperateResult result0 = siemensNet.Write("DB100.0", (int) 0); |
| | | OperateResult result1 = siemensNet.Write("DB100.4", (short) 0); |
| | | OperateResult result2 = siemensNet.Write("DB100.6", (int) 0); |
| | | OperateResult result3 = siemensNet.Write("DB100.10", (short) 0); // 执行方向(面朝轨道 定位值左小右大) true:左 false:右 |
| | | |
| | | try { |
| | | // 日志记录 |
| | | BasRgvOptService bean = SpringUtils.getBean(BasRgvOptService.class); |
| | | BasRgvOpt basRgvOpt = new BasRgvOpt( |
| | | 0, |
| | | 0, |
| | | slave.getId(), |
| | | new Date(), |
| | | String.valueOf(0), |
| | | null, |
| | | null, |
| | | null, |
| | | result.IsSuccess ? 1 : 0, |
| | | null, |
| | | new Date(), |
| | | null |
| | | ); |
| | | bean.insert(basRgvOpt); |
| | | } catch (Exception ignore) { |
| | | } |
| | | |
| | | if (result != null && result.IsSuccess) { |
| | | Thread.sleep(200); |
| | | this.readStatus(); |
| | | log.info("RGV 命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON("null")); |
| | | OutputQueue.RGV.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON("null"))); |
| | | return true; |
| | | } else { |
| | | OutputQueue.RGV.offer(MessageFormat.format("【{0}】写入RGV plc数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); |
| | | log.error("写入RGV plc数据失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | public void setDelRgvTask() { |
| | | delRgvTask = true; |
| | | } |
| | | |
| | | @Override |
| | | public void close() { |
| | | siemensNet.ConnectClose(); |
| | |
| | | # password: sa@123 |
| | | driver-class-name: dm.jdbc.driver.DmDriver |
| | | # url: jdbc:dm://27.172.2.101:5236/SOURCE |
| | | url: jdbc:dm://127.0.0.1:5236/SOURCE |
| | | url: jdbc:dm://27.172.2.102:5236/SOURCE |
| | | # url: jdbc:dm://127.0.0.1:5236/SOURCE |
| | | username: SYSDBA |
| | | password: Zy@12345 |
| | | mvc: |
| | |
| | | #url: 10.32.53.195:8080 |
| | | # WMS系统ip |
| | | # url: 10.210.157.109:8090 |
| | | url: 27.172.2.107:9027 |
| | | url: 27.172.2.132:9027 |
| | | # 入库任务申请接口 |
| | | #inboundTaskApplyPath: api/InterFace/inboundTaskApply |
| | | inboundTaskApplyPath: sugood/inboundTaskApply |
| | | inboundTaskApplyPath: api/external/wcs/taskCancel |
| | | # inboundTaskApplyPath: open/asrs/inboundTaskApply |
| | | # 任务状态反馈接口 |
| | | taskStatusFeedbackPath: external/wcs/taskStatusFeedback |
| | | taskStatusFeedbackPath: api/external/wcs/taskStatusFeedback |
| | | # 货位状态更新接口 |
| | | # locationUpdatePath: api/InterFace/get_InterFace_TestStorage |
| | | # 移库申请接口 |
| | | # movePath: api/InterFace/get_InterFace_TestStorage |
| | | wmsHeartBeat: external/wcs/wmsHeartBeat |
| | | wmsHeartBeat: api/external/wcs/wmsHeartBeat |
| | |
| | | select * from "SOURCE"."wcs_task_wrk" |
| | | where 1=1 |
| | | and (("WRK_STS"=14 and "STATUS"=5) or "STATUS"=7 or "STATUS"=4 |
| | | or ("WRK_STS"=4 and "STATUS"=5) or ("WRK_STS"=14 and "STATUS"=9)) |
| | | or ("WRK_STS"=4 and "STATUS"=5)) |
| | | order by "IO_PRI" desc,"CREATE_TIME","WRK_NO" ASC |
| | | </select> |
| | | |
| | |
| | | insert into "SOURCE"."wcs_task_wrk_log" |
| | | select * from "SOURCE"."wcs_task_wrk" |
| | | where "TASK_NO" = #{taskNo} |
| | | and ("STATUS"=5 or "STATUS"=4 or "STATUS"=6 or "STATUS"=7 or "STATUS"=9) |
| | | and ("STATUS"=5 or "STATUS"=4 or "STATUS"=7) |
| | | and ("WRK_NO" not in (select "WRK_NO" from "SOURCE"."asr_bas_devp")) |
| | | </insert> |
| | | |
| | |
| | | } |
| | | this.getTableData() |
| | | }, |
| | | addTask() { |
| | | this.addTaskFormVisible = true |
| | | }, |
| | | exportTable() { |
| | | this.tableSearchParam = { |
| | | task_no: null, |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | <div> |
| | | <el-button @click="requestOperate('put')" type="primary">入库</el-button> |
| | | <el-button @click="requestOperate('take')" type="primary">出库</el-button> |
| | | <el-button @click="requestOperate('stockMove')" type="primary">库位转移</el-button> |
| | | <el-button @click="requestOperate('siteMove')" type="primary">站到站</el-button> |
| | | <el-button @click="requestOperate('taskComplete')" type="primary">任务完成</el-button> |
| | | <el-button @click="requestOperate('clearCommand')" type="primary">清除命令</el-button> |
| | | <el-button @click="requestOperate('reset')" type="primary">复位</el-button> |
| | | <!-- <el-button @click="requestOperate('put')" type="primary">入库</el-button>--> |
| | | <!-- <el-button @click="requestOperate('take')" type="primary">出库</el-button>--> |
| | | <!-- <el-button @click="requestOperate('stockMove')" type="primary">库位转移</el-button>--> |
| | | <!-- <el-button @click="requestOperate('siteMove')" type="primary">站到站</el-button>--> |
| | | <!-- <el-button @click="requestOperate('taskComplete')" type="primary">任务完成</el-button>--> |
| | | <!-- <el-button @click="requestOperate('clearCommand')" type="primary">清除命令</el-button>--> |
| | | <!-- <el-button @click="requestOperate('reset')" type="primary">复位</el-button>--> |
| | | <br/> |
| | | <br/> |
| | | <el-button @click="requestOperate('auto')" type="warning">联机</el-button> |
| | | <el-button @click="requestOperate('semiAutomatic')" type="warning">半自动</el-button> |
| | | <el-button @click="requestOperate('hand')" type="warning">手动</el-button> |
| | | <el-button @click="requestOperate('onlineWrk4')" type="warning">恢复联机任务</el-button> |
| | | <el-button @click="requestOperate('onlineWrk3')" type="warning">清除联机任务</el-button> |
| | | <el-button @click="requestOperate('onlineWrk1')" type="warning">申请完成任务</el-button> |
| | | <!-- <el-button @click="requestOperate('auto')" type="warning">联机</el-button>--> |
| | | <!-- <el-button @click="requestOperate('semiAutomatic')" type="warning">半自动</el-button>--> |
| | | <!-- <el-button @click="requestOperate('hand')" type="warning">手动</el-button>--> |
| | | <!-- <el-button @click="requestOperate('onlineWrk4')" type="warning">恢复联机任务</el-button>--> |
| | | <!-- <el-button @click="requestOperate('onlineWrk3')" type="warning">清除联机任务</el-button>--> |
| | | <!-- <el-button @click="requestOperate('onlineWrk1')" type="warning">申请完成任务</el-button>--> |
| | | <br/> |
| | | <br/> |
| | | <el-button @click="requestOperate('onlineWrk2')" type="warning">申请取消任务</el-button> |
| | | <!-- <el-button @click="requestOperate('onlineWrk2')" type="warning">申请取消任务</el-button>--> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | |
| | | </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('out')" type="warning">取货完成</el-button>--> |
| | | <!-- <el-button @click="requestOperate('in')" type="warning">放货完成</el-button>--> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | |
| | | <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> |
| | | <el-button @click="requestOperate('delRgvTask')" type="warning">小车强制复位(有任务或者运行时不要操作)</el-button> |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | |
| | | <el-form-item> |
| | | <el-button type="primary" @click="getTableData">查询</el-button> |
| | | <el-button type="primary" @click="resetParam">重置</el-button> |
| | | <el-button type="primary" @click="addTask">手动添加任务</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <el-table ref="singleTable" :data="tableData" style="width: 100%;"> |
| | |
| | | <!-- <el-dropdown-item command="showCommand">查看指令</el-dropdown-item>--> |
| | | <el-dropdown-item command="returnWorkingCondition">重新给堆垛机下发任务</el-dropdown-item> |
| | | <el-dropdown-item command="changeCommand">修改</el-dropdown-item> |
| | | <el-dropdown-item command="assign">派发</el-dropdown-item> |
| | | <el-dropdown-item command="assign">跳转到输送线下发完成</el-dropdown-item> |
| | | <el-dropdown-item command="complete">完结</el-dropdown-item> |
| | | <el-dropdown-item command="cancel">取消</el-dropdown-item> |
| | | <el-dropdown-item command="delete">删除无需上报</el-dropdown-item> |
| | |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | <el-dialog :title="addTaskFormTitle" :visible.sync="addTaskFormVisible"> |
| | | <el-form :model="addTaskForm"> |
| | | <el-form-item label="任务号" :label-width="addTaskFormLabelWidth"> |
| | | <el-input v-model="addTaskForm.taskNo" autocomplete="off"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="任务类型=》1:出库、2:移库、3:入库" :label-width="200"> |
| | | <el-input v-model="addTaskForm.ioType" autocomplete="off"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="优先级" :label-width="addTaskFormLabelWidth"> |
| | | <el-input v-model="addTaskForm.taskPriority" autocomplete="off"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="容器编码" :label-width="addTaskFormLabelWidth"> |
| | | <el-input v-model="addTaskForm.barcode" autocomplete="off"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="起点位置" :label-width="addTaskFormLabelWidth"> |
| | | <el-input v-model="addTaskForm.startPoint" autocomplete="off"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="终点位置" :label-width="addTaskFormLabelWidth"> |
| | | <el-input v-model="addTaskForm.targetPoint" autocomplete="off"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="备注" :label-width="addTaskFormLabelWidth"> |
| | | <el-input v-model="addTaskForm.memo" autocomplete="off"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button @click="addTaskFormVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="addTaskFormConfirm">确 定</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | <script> |
| | | var $layui = layui.config({ |
| | |
| | | datetime: null, |
| | | }, |
| | | taskWrkFormVisible: false, |
| | | addTaskFormVisible: false, |
| | | taskWrkForm: {}, |
| | | addTaskForm: { |
| | | taskNo:"9001", |
| | | ioType:"0", |
| | | taskPriority:1, |
| | | barcode:"10000001", |
| | | startPoint:"1000", |
| | | targetPoint:"F-F01-01-01-01", |
| | | memo:"cs" |
| | | }, |
| | | taskWrkFormLabelWidth: '80px', |
| | | taskWrkFormTitle: '' |
| | | addTaskFormLabelWidth: '80px', |
| | | taskWrkFormTitle: '', |
| | | addTaskFormTitle: '手动添加任务' |
| | | }, |
| | | created() { |
| | | this.init() |
| | |
| | | } |
| | | this.getTableData() |
| | | }, |
| | | addTask() { |
| | | this.addTaskFormVisible = true |
| | | }, |
| | | handleCommand(command, row) { |
| | | switch (command) { |
| | | case "returnWorkingCondition": |
| | |
| | | //派发任务 |
| | | let that = this |
| | | $.ajax({ |
| | | url: baseUrl + "/taskWrk/distribute/auth", |
| | | url: baseUrl + "/taskWrk/assign/auth", |
| | | headers: { |
| | | 'token': localStorage.getItem('token') |
| | | }, |
| | |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | addTaskFormConfirm() { |
| | | //修改指定任务数据 |
| | | let that = this |
| | | $.ajax({ |
| | | url: baseUrl + "/taskWrk/addTask/auth", |
| | | headers: { |
| | | 'token': localStorage.getItem('token') |
| | | }, |
| | | data: this.addTaskForm, |
| | | method: 'POST', |
| | | success: function (res) { |
| | | if (res.code == 200) { |
| | | that.addTaskFormVisible = false |
| | | that.$message({ |
| | | message: "更新成功", |
| | | type: 'success' |
| | | }); |
| | | that.getTableData() |
| | | } else if (res.code === 403) { |
| | | top.location.href = baseUrl + "/"; |
| | | } else { |
| | | that.$message({ |
| | | message: res.msg, |
| | | type: 'error' |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | }) |