src/main/java/com/zy/asrs/controller/SiteController.java
@@ -171,7 +171,7 @@ vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N"); // 空板信号 vo.setStaNo(staProtocol.getStaNo()); // 目标站 vo.setLocType1(staProtocol.isHigh() != staProtocol.isLow() && staProtocol.isLow() ? "低" : "高"); //高低库位 vo.setCar(staProtocol.isCar() ? "有": "无"); // vo.setCar(staProtocol.isCar() ? "有": "无"); return R.ok().add(vo); } } @@ -182,8 +182,8 @@ @PostMapping("/detl/update") @ManagerAuth(memo = "修改站点数据") public R siteDetlUpdate(@RequestParam Integer devNo, @RequestParam Short workNo, @RequestParam Short staNo, @RequestParam Integer workNo, @RequestParam Integer staNo, @RequestParam(required = false) String pakMk, @RequestParam(required = false) Boolean inEnable, @RequestParam(required = false) Boolean outEnable @@ -267,8 +267,8 @@ staProtocol.setOutEnable(outEnable); basDevp.setOutEnable(outEnable ? "Y" : "N"); } staProtocol.setWorkNo((short) 0); staProtocol.setStaNo((short) 0); staProtocol.setWorkNo(0); staProtocol.setStaNo(0); basDevpService.updateById(basDevp); boolean result = CommandUtils.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol), false); if (result) { @@ -308,8 +308,8 @@ } else { staProtocol = staProtocol.clone(); } staProtocol.setWorkNo((short) 9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); staProtocol.setWorkNo( 9999); staProtocol.setStaNo(inSta.getStaNo()); boolean result = CommandUtils.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol), false); if (result) { return R.ok(); @@ -324,68 +324,6 @@ public List<PlcErrorTableVo> staPlcErr(Map.Entry<Integer, StaProtocol> entry){ List<PlcErrorTableVo> list = new ArrayList<>(); StaProtocol staProtocol = entry.getValue(); if (staProtocol.getBreakerErr()){ PlcErrorTableVo vo = new PlcErrorTableVo(); vo.setNo(entry.getKey()); // 序号 vo.setPlcDesc("断路器故障"); vo.setError("断路器故障"); list.add(vo); } if (staProtocol.getInfraredErr()){ PlcErrorTableVo vo = new PlcErrorTableVo(); vo.setNo(entry.getKey()); // 序号 vo.setPlcDesc("光电异常"); vo.setError("光电异常"); list.add(vo); } if (staProtocol.getOutTimeErr()){ PlcErrorTableVo vo = new PlcErrorTableVo(); vo.setNo(entry.getKey()); // 序号 vo.setPlcDesc("运行超时"); vo.setError("运行超时"); list.add(vo); } if (staProtocol.getSeizeSeatErr()){ PlcErrorTableVo vo = new PlcErrorTableVo(); vo.setNo(entry.getKey()); // 序号 vo.setPlcDesc("占位超时"); vo.setError("占位超时"); list.add(vo); } if (staProtocol.getWrkYgoodsN()){ PlcErrorTableVo vo = new PlcErrorTableVo(); vo.setNo(entry.getKey()); // 序号 vo.setPlcDesc("有任务无货故障"); vo.setError("有任务无货故障"); list.add(vo); } if (staProtocol.getInverterErr()){ PlcErrorTableVo vo = new PlcErrorTableVo(); vo.setNo(entry.getKey()); // 序号 vo.setPlcDesc("变频器故障"); vo.setError("变频器故障"); list.add(vo); } if (staProtocol.getContactErr()){ PlcErrorTableVo vo = new PlcErrorTableVo(); vo.setNo(entry.getKey()); // 序号 vo.setPlcDesc("电机接触器故障"); vo.setError("电机接触器故障"); list.add(vo); } if (staProtocol.getUpcontactErr()){ PlcErrorTableVo vo = new PlcErrorTableVo(); vo.setNo(entry.getKey()); // 序号 vo.setPlcDesc("顶升电机接触器故障"); vo.setError("顶升电机接触器故障"); list.add(vo); } if (staProtocol.isFrontErr()){ PlcErrorTableVo vo = new PlcErrorTableVo(); vo.setNo(entry.getKey()); // 序号 src/main/java/com/zy/asrs/domain/vo/SiteDetailVo.java
@@ -13,7 +13,7 @@ private Integer siteId; // 工作号 private Short workNo; private Integer workNo; // 工作状态 private String wrkSts = ""; src/main/java/com/zy/asrs/domain/vo/SiteLatestDataVo.java
@@ -14,7 +14,7 @@ private String siteId; // 工作号 private Short workNo; private Integer workNo; // 站点状态 private SiteStatusType siteStatus; src/main/java/com/zy/asrs/domain/vo/SiteTableVo.java
@@ -12,7 +12,7 @@ private Integer devNo; // 工作号 private Short workNo = 0; private Integer workNo = 0; // 自动 private String autoing = "-"; @@ -33,7 +33,7 @@ private String emptyMk = "-"; // 目标站 private Short staNo = 0; private Integer staNo = 0; //高低库位 private String locType1 = "-"; src/main/java/com/zy/asrs/entity/BasRgv.java
@@ -14,7 +14,7 @@ import java.util.Date; @Data @TableName("asr_bas_rgv") @TableName("\"SOURCE\".\"asr_bas_rgv\"") public class BasRgv implements Serializable { private static final long serialVersionUID = 1L; src/main/java/com/zy/asrs/entity/BasRgvMap.java
@@ -10,7 +10,7 @@ import java.io.Serializable; @Data @TableName("asr_bas_rgv_map") @TableName("\"SOURCE\".\"asr_bas_rgv_map\"") public class BasRgvMap implements Serializable { private static final long serialVersionUID = 1L; src/main/java/com/zy/asrs/entity/BasRgvOpt.java
@@ -14,7 +14,7 @@ import java.util.Date; @Data @TableName("asr_bas_rgv_opt") @TableName("\"SOURCE\".\"asr_bas_rgv_opt\"") public class BasRgvOpt implements Serializable { private static final long serialVersionUID = 1L; src/main/java/com/zy/asrs/entity/WrkMastSta.java
@@ -14,7 +14,7 @@ import java.util.Date; @Data @TableName("asr_wrk_mast_sta") @TableName("\"SOURCE\".\"asr_wrk_mast_sta\"") public class WrkMastSta implements Serializable { private static final long serialVersionUID = 1L; src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -24,12 +24,16 @@ import com.zy.core.enums.*; import com.zy.core.model.CrnSlave; import com.zy.core.model.DevpSlave; import com.zy.core.model.RgvSlave; import com.zy.core.model.Task; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.command.RgvCommand; import com.zy.core.model.protocol.CrnProtocol; import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; import com.zy.core.thread.RgvThread; import com.zy.core.thread.SiemensDevpThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -78,6 +82,12 @@ private ApiLogService apiLogService; @Autowired private CommonService commonService; @Autowired private BasRgvService basRgvService; @Autowired private WrkMastStaMapper wrkMastStaMapper; @Autowired private BasRgvMapMapper basRgvMapMapper; @Value("${wms.url}") private String wmsUrl; @@ -90,6 +100,8 @@ @Autowired private CrnController crnController; @Value("${wms.rgvOpen}") private boolean rgvOpen; public void generateStoreWrkFile() throws IOException, InterruptedException { try { @@ -107,8 +119,8 @@ } else { staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); Short stano = staProtocol.getStaNo(); Integer workNo = staProtocol.getWorkNo(); Integer stano = staProtocol.getStaNo(); // 尺寸检测异常 boolean back = false; @@ -154,7 +166,7 @@ } // News.warn("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); staProtocol.setWorkNo(workNo); staProtocol.setStaNo(inSta.getStaNo().shortValue()); staProtocol.setStaNo(inSta.getStaNo()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); @@ -189,8 +201,8 @@ log.info("托盘码:"+barcode+"任务档存在"); return; }else { staProtocol.setWorkNo(taskWrk1.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getCrnStn().shortValue()); staProtocol.setWorkNo(taskWrk1.getWrkNo()); staProtocol.setStaNo(staDesc.getCrnStn()); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } } @@ -222,8 +234,8 @@ // 退回 log.error("扫码检测程序异常"+inSta.getStaNo()+"异常信息"+e1); } staProtocol.setWorkNo((short)9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); staProtocol.setWorkNo(9999); staProtocol.setStaNo(inSta.getStaNo()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); @@ -276,8 +288,8 @@ log.error("扫码检测程序异常"+inSta.getStaNo()+errMsg); log.error("扫码检测程序异常,异常信息"+e); staProtocol.setWorkNo((short)9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); staProtocol.setWorkNo(9999); staProtocol.setStaNo(inSta.getStaNo()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); // TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); @@ -331,8 +343,8 @@ taskWrkService.insert(taskWrk); StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>() .eq("crn_no", taskWrk.getCrnNo()).eq("type_no",1).eq("stn_no",staProtocol.getSiteId())); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getCrnStn().shortValue()); staProtocol.setWorkNo(taskWrk.getWrkNo()); staProtocol.setStaNo(staDesc.getCrnStn()); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } } @@ -345,8 +357,8 @@ // 退回 log.error("扫码入库失败,{}入库站因{}异常,托盘已被退回", inSta.getStaNo(), errMsg); staProtocol.setWorkNo((short)9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); staProtocol.setWorkNo(9999); staProtocol.setStaNo(inSta.getStaNo()); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); TaskWrk taskWrk = taskWrkMapper.selectByWrkNo(Integer.valueOf(workNo)); @@ -394,8 +406,8 @@ } log.info("下发输送线任务:taskWrk:"+JSON.toJSONString(taskWrk)); // R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo(staDesc.getCrnStn().shortValue()); staProtocol.setWorkNo(taskWrk.getWrkNo()); staProtocol.setStaNo(staDesc.getCrnStn()); boolean offer = false; try{ offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); @@ -1112,7 +1124,160 @@ } return taskWrk; } /** * 完成小车任务 */ public synchronized void rgvCompleteWrkMastSta() { try{ for (RgvSlave rgvSlave:slaveProperties.getRgv()) { RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (rgvProtocol == null) { continue; } BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); if (basRgv == null) { log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); continue; } // 只有当RGV等待WCS确认、自动 if (rgvProtocol.getStatusType() == RgvStatusType.WORKING && rgvProtocol.getModeType() == RgvModeType.AUTO && ((rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.WAITING ) || (rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING )) ) { log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); if (rgvProtocol.getTaskNo1()!=0 && (rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING)){ if (rgvProtocol.getTaskNo1()==(short)32222){ boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); if (!rgvComplete){ log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); } BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); break; } WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().longValue()); if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1 || wrkMastSta.getWrkSts()!=1){ log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); continue; } /* WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType()!=5){ Thread.sleep(200); SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ continue; } // 下发站点信息 staProtocol.setWorkNo(wrkMast.getWrkNo()); staProtocol.setStaNo(wrkMast.getStaNo()); if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { continue; } log.error("小车任务完成下发输送线任务:"+staProtocol); // try{ // Thread.sleep(1000); // DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); // StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); // log.error("小车任务完成读取输送线任务:"+staProtocolEnd); // if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) // staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); // staProtocolEnd.setStaNo(wrkMast.getStaNo()); // if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { // continue; // } // log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); // } // }catch (Exception e){ // // } }*/ boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); if (!rgvComplete){ log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); break; } wrkMastSta.setWrkSts(3); wrkMastStaMapper.updateById(wrkMastSta); BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); }else if (rgvProtocol.getTaskNo2()!=0 && (rgvProtocol.getStatusType2()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING)){ if (rgvProtocol.getTaskNo2()==(short)32222){ boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); if (!rgvComplete){ log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); } BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); break; } WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().longValue()); if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){ log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); continue; } /*WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType()!=5){ Thread.sleep(200); DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); if (!staProtocol.isAutoing() || !staProtocol.isLoading()){ continue; } // 下发站点信息 staProtocol.setWorkNo(wrkMast.getWrkNo()); staProtocol.setStaNo(wrkMast.getStaNo()); if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { continue; } log.error("小车任务完成下发输送线任务:"+staProtocol); // try{ // Thread.sleep(1000); // DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); // StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); // log.error("小车任务完成读取输送线任务:"+staProtocolEnd); // if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) // staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); // staProtocolEnd.setStaNo(wrkMast.getStaNo()); // if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { // continue; // } // log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); // } // }catch (Exception e){ // // } }*/ boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); if (!rgvComplete){ log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); break; } wrkMastSta.setWrkSts(3); wrkMastStaMapper.updateById(wrkMastSta); BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); }else { log.error("小车复位失败,小车号{},等待wcs确认但是没有工作号!",rgvProtocol.getRgvNo()); } } } }catch (Exception e){ log.error("小车复位线程报错!"+e); } } /** * 入出库 ===>> 小车作业下发 */ @@ -1156,9 +1321,6 @@ case 4://取叠盘 signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); break; case 5:////满取 signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); break; case 6:////提升 // signWork = qwe(); break; @@ -1178,9 +1340,6 @@ break; case 4://取叠盘 signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); break; case 5:////满取 signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); break; case 6:////提升 // signWork = rgvRunWrkMastEmptyStaPut(); @@ -1247,16 +1406,6 @@ BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){ continue; } if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){ if (basDevp.getLoadingSuper().equals("Y")){ continue; } } if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ if (!basDevp.getEmptyMk().equals("Y")){ continue; } } Date date = new Date(); @@ -1365,16 +1514,6 @@ if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){ continue; } if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){ if (basDevp.getLoadingSuper().equals("Y")){ continue; } } if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ if (!basDevp.getEmptyMk().equals("Y")){ continue; } } Date date = new Date(); SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId()); @@ -1473,16 +1612,6 @@ if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo()!=0){ continue; } if (basDevp.getDevNo()>117 && basDevp.getDevNo()<124){ if (basDevp.getLoadingSuper().equals("Y")){ continue; } } if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ if (!basDevp.getEmptyMk().equals("Y")){ continue; } } Date date = new Date(); SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId()); @@ -1578,11 +1707,6 @@ if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ continue; } if (basDevp.getDevNo()>=118 && basDevp.getDevNo()<=123){ if (!basDevp.getEmptyMk().equals("Y")){ continue; } } Date date = new Date(); SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId()); @@ -1603,98 +1727,6 @@ log.info(date+"叠盘任务下发:小车工作档:"+wrkMastSta); log.info(date+"叠盘任务下发:目标站状态:"+basDevp); sign = rgvTakeEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//叠盘 }else { continue; } if (sign){ boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); if (signMap){ wrkMastSta.setWrkSts(1); try{ wrkMastStaMapper.updateById(wrkMastSta); }catch (Exception e){ log.error("更新小车任务失败"); } return true; }else { log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); } }else { log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); } break; } } // } }catch (Exception e){ log.error("3989行执行小车取空板任务下发失败"); log.error("3989行"+e); } return false; } public synchronized boolean rgvRunWrkMastEmptyStaTakeFull(RgvSlave rgvSlave) {//满取 try{ // for (RgvSlave rgvSlave:slaveProperties.getRgv()) { RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); if (rgvProtocol == null) { return false; } BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); if (basRgv == null) { log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); return false; } // 只有当RGV空闲、自动,工位二无物//rgv可用 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getStatusType2() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 && rgvProtocol.getLoaded2()==0 //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠) ;2一层有物二层无物 (只能满放);3 1、2层都有物 4:()只允许拆盘 ) { BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); if (basRgvMap == null) { log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); return false; } List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); WrkMast wrkMast = wrkMastMapper.selectBy122ManQu(122,110,15L); if (!Cools.isEmpty(wrkMast)){ WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(wrkMast.getWrkNo().longValue()); if (!Cools.isEmpty(wrkMastSta) && wrkMastSta.getType()==2 && wrkMastSta.getWrkType()==5 ){ wrkMastStaList.add(wrkMastSta); } } for (WrkMastSta wrkMastSta : wrkMastStaList){ if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=5){// 2:空板 || 工作类型 1:取(叠盘) 2:拆盘 5:满取 6:满放 continue; } boolean sign = false; if (wrkMastSta.getStaStart()!=0){//满取 BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ continue; } Date date = new Date(); SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, rgvSlave.getDevpPlcId()); StaProtocol staProtocol = devpThread.getStation().get(basDevp.getDevNo()); if (staProtocol == null) { log.info(date+"满取任务下发:未查询到站点信息:"+wrkMastSta); continue; } if (!staProtocol.isAutoing() || staProtocol.isLoading()){ continue; } log.info(date+"满取任务下发:小车工作档:"+wrkMastSta); log.info(date+"满取任务下发:目标站状态:"+basDevp); sign = rgvTakeEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta); }else { continue; } src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -229,12 +229,12 @@ } else { staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); Integer workNo = staProtocol.getWorkNo(); if (wharfCode1.contains(param.getWharfCode())){ if (!staProtocol.isLoading() && !staProtocol.isCar() && staProtocol.getWorkNo() >0){ if (!staProtocol.isLoading() && staProtocol.getWorkNo() >0){ //AGV出库完成以后 staProtocol.setWorkNo((short) 0); staProtocol.setStaNo((short)0); staProtocol.setWorkNo( 0); staProtocol.setStaNo(0); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); if (result) { @@ -246,10 +246,10 @@ for (DevpSlave.Sta inSta : devp.getInSta()) { if (inSta.getBackSta().equals(staDesc.getStnNo())){ if (staProtocol.isLoading() && !staProtocol.isCar() && workNo == 0){ if (staProtocol.isLoading() && workNo == 0){ //AGV入库完成以后 staProtocol.setWorkNo((short) 9999); staProtocol.setStaNo(inSta.getStaNo().shortValue()); staProtocol.setWorkNo(9999); staProtocol.setStaNo(inSta.getStaNo()); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); if (result) { @@ -322,7 +322,7 @@ } else { staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); Integer workNo = staProtocol.getWorkNo(); if (workNo == 0 && !staProtocol.isLoading()){ if (Cools.isEmpty( map.get(inSta.getStaNo()))){ continue; @@ -358,7 +358,7 @@ } else { staProtocol = staProtocol.clone(); } Short workNo = staProtocol.getWorkNo(); Integer workNo = staProtocol.getWorkNo(); if (workNo == 0 && !staProtocol.isLoading()){ if (Cools.isEmpty( map.get(inSta.getStaNo()))){ continue; src/main/java/com/zy/asrs/service/impl/TaskWrkServiceImpl.java
@@ -213,8 +213,8 @@ //生成输送线命令 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()).clone(); staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue()); staProtocol.setStaNo((short) Integer.parseInt(taskWrk.getTargetPoint())); staProtocol.setWorkNo(taskWrk.getWrkNo()); staProtocol.setStaNo(Integer.parseInt(taskWrk.getTargetPoint())); if (!CommandUtils.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(3, staProtocol))) { log.error("输送线命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand)); throw new CoolException("输送线命令生成失败"); src/main/java/com/zy/asrs/utils/CommandUtils.java
@@ -90,7 +90,7 @@ commandInfoService.insert(commandInfo);//插入指令 staProtocol.setCommandId(commandInfo.getId()); // staProtocol.setCommandId(commandInfo.getId()); commandPackage.setCommand(staProtocol); commandPackage.setWrkNo(wrkNo); commandPackage.setDevice("输送线"); src/main/java/com/zy/core/enums/RouteCollectCountType.java
New file @@ -0,0 +1,42 @@ package com.zy.core.enums; public enum RouteCollectCountType { INTERSECTION(0, "交集"), // 交集 DIFFERENCESET(1, "差集"), // 差集 UNION(2, "并集"), //并集 DEDUPLICATIONUNION(3, "去重并集"), //去重并集 ; public Integer id; public String desc; RouteCollectCountType(Integer id, String desc) { this.id = id; this.desc = desc; } public static RouteCollectCountType get(Short id) { if (null == id) { return null; } for (RouteCollectCountType type : RouteCollectCountType.values()) { if (type.id.equals(id.intValue())) { return type; } } return null; } public static RouteCollectCountType get(RouteCollectCountType type) { if (null == type) { return null; } for (RouteCollectCountType crnLiftPosType : RouteCollectCountType.values()) { if (crnLiftPosType == type) { return crnLiftPosType; } } return null; } } src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -1,11 +1,7 @@ package com.zy.core.model.protocol; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.CommandInfo; import lombok.Data; import java.util.ArrayList; import java.util.List; /** * 输送线plc单个站点详细信息 @@ -19,11 +15,11 @@ // ---------------------------------------------------------------- // 工作号 private Short workNo = 0; private Integer workNo = 0; // ---------------------------------------------------------------- // 目标站 private Short staNo; private Integer staNo; // ---------------------------------------------------------------- // 自动 @@ -45,13 +41,10 @@ private boolean fullPlt; // 高 private boolean high = false; private boolean high; // 低 private boolean low; //agv private boolean car; // 锁定标记 private boolean pakMk = true; @@ -62,134 +55,38 @@ // 隔壁站点(台车位置) private String nearbySta; //指令ID private Integer commandId; // 外形检测 ------------------------------------------------------------------------ // 前超限 private boolean frontErr = false; private boolean frontErr; // 后超限 private boolean backErr = false; private boolean backErr; // 高超限 private boolean highErr = false; private boolean highErr; // 左超限 private boolean leftErr = false; private boolean leftErr; // 右超限 private boolean rightErr = false; private boolean rightErr; // 超重 private boolean weightErr = false; private boolean weightErr; // 扫码失败 private boolean barcodeErr = false; private boolean barcodeErr; //故障----------------------------------------------------------------------- private Boolean breakerErr = false; //断路器故障 private Boolean infraredErr = false; //光电异常 private Boolean outTimeErr = false; //运行超时 private Boolean seizeSeatErr = false; //占位超时 private Boolean wrkYgoodsN = false;//有任务无货故障 private Boolean inverterErr = false; //变频器故障 private Boolean contactErr = false; //电机接触器故障 private Boolean upcontactErr = false; //顶升电机接触器故障 private Short agvStartPick; //允许取货 private Short agvStartPlace; //允许放货 private Short agvTypeSign; //允许放货 private Short agvTargetPick; //取货完成 private Short agvTargetPlace; //放货完成 private Short agvTypeSignEnd; //放货完成 private List<Integer> alarm; public List<Integer> getAlarm(){ List<Integer> alarm = new ArrayList<>(); if (breakerErr){ alarm.add(1); } if (infraredErr){ alarm.add(2); } if (outTimeErr){ alarm.add(3); } if (seizeSeatErr){ alarm.add(4); } if (wrkYgoodsN){ alarm.add(5); } if (inverterErr){ alarm.add(6); } if (contactErr){ alarm.add(7); } if (upcontactErr){ alarm.add(8); } return alarm; } // Super有无信息 private boolean loadingSuper = true; public BasDevp toSqlModel(){ BasDevp basDevp = new BasDevp(); basDevp.setDevNo(siteId); basDevp.setWrkNo(workNo.intValue()); basDevp.setWrkNo(workNo); basDevp.setAutoing(autoing?"Y":"N"); basDevp.setLoading(loading?"Y":"N"); if (frontErr){ basDevp.setStaErr(11); }else if (backErr){ basDevp.setStaErr(12); }else if (highErr){ basDevp.setStaErr(13); }else if (leftErr){ basDevp.setStaErr(14); }else if (rightErr){ basDevp.setStaErr(15); }else if (weightErr){ basDevp.setStaErr(16); }else if (barcodeErr){ basDevp.setStaErr(17); }else if (breakerErr){ basDevp.setStaErr(18); }else if (infraredErr){ basDevp.setStaErr(19); }else if (outTimeErr){ basDevp.setStaErr(110); }else if (seizeSeatErr){ basDevp.setStaErr(111); }else if (wrkYgoodsN){ basDevp.setStaErr(112); }else if (inverterErr){ basDevp.setStaErr(113); }else if (contactErr){ basDevp.setStaErr(114); }else if (upcontactErr){ basDevp.setStaErr(115); }else { if (!loading){ basDevp.setStaErr(0); } } basDevp.setInEnable(inEnable?"Y":"N"); basDevp.setOutEnable(outEnable?"Y":"N"); basDevp.setLocType1((short) 0); // 高低类型{0:未知,1:低库位,2:高库位} src/main/java/com/zy/core/properties/SlaveProperties.java
@@ -4,6 +4,7 @@ import com.zy.core.model.CrnSlave; import com.zy.core.model.DevpSlave; import com.zy.core.model.LedSlave; import com.zy.core.model.RgvSlave; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; @@ -32,6 +33,8 @@ private List<CrnSlave> crn = new ArrayList<>(); private List<RgvSlave> rgv = new ArrayList<>(); private List<DevpSlave> devp = new ArrayList<>(); private List<Slave> barcode = new ArrayList<>(); src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -125,15 +125,6 @@ write((StaProtocol)task.getData()); read(); break; // 写数据 ID+目标站 case 4: writeAgvOk((StaProtocol)task.getData()); read(); break; /* case 3: write2((StaProtocol)task.getData()); read(); break;*/ default: break; } @@ -160,13 +151,13 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setWorkNo((short) 0); // ID staProtocol.setWorkNo(0); // ID staProtocol.setAutoing(false); // 自动 staProtocol.setLoading(false); // 有物 staProtocol.setInEnable(false); // 可入 staProtocol.setOutEnable(false); // 可出 staProtocol.setEmptyMk(false); // 空板信号 staProtocol.setStaNo((short) 0); // 目标站 staProtocol.setStaNo(0); // 目标站 if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { staProtocol.setPakMk(true); @@ -214,9 +205,9 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setWorkNo((short)siemensS7Net.getByteTransform().TransInt32(result.Content, i*8)); // 工作号 staProtocol.setWorkNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i*8)); // 工作号 staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt16(result.Content, i*8 + 4)); // 目标站 staProtocol.setStaNo(siemensS7Net.getByteTransform().TransInt32(result.Content, i*8 + 4)); // 目标站 boolean[] status = siemensS7Net.getByteTransform().TransBool(result.Content, i*8 + 6, 2); staProtocol.setAutoing(status[0]); // 自动 @@ -246,8 +237,8 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6+4)); // 允许取货 staProtocol.setAgvStartPlace((short)0); // 允许放货 // staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6+4)); // 允许取货 // staProtocol.setAgvStartPlace((short)0); // 允许放货 continue; } Integer siteId = staNos.get(i); // 站点编号 @@ -257,8 +248,8 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6)); // 允许取货 staProtocol.setAgvStartPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6 + 2)); // 允许放货 // staProtocol.setAgvStartPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6)); // 允许取货 // staProtocol.setAgvStartPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlc.Content, sign*6 + 2)); // 允许放货 } } @@ -274,8 +265,8 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6+4)); // 允许取货 staProtocol.setAgvTargetPlace((short)0); // 允许放货 // staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6+4)); // 允许取货 // staProtocol.setAgvTargetPlace((short)0); // 允许放货 continue; } Integer siteId = staNos.get(i); // 站点编号 @@ -285,18 +276,18 @@ staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } try{ staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6)); // 取货完成 if (staProtocol.getAgvTargetPick()!=0){ System.out.println(staProtocol.getAgvTargetPick()); } staProtocol.setAgvTargetPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6 + 2)); // 放货完成 if (staProtocol.getAgvTargetPlace()!=0){ System.out.println(staProtocol.getAgvTargetPlace()); } }catch (Exception e){ log.error(""+e); } // try{ // staProtocol.setAgvTargetPick(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6)); // 取货完成 // if (staProtocol.getAgvTargetPick()!=0){ // System.out.println(staProtocol.getAgvTargetPick()); // } // staProtocol.setAgvTargetPlace(siemensS7Net.getByteTransform().TransInt16(resultAgvAndPlcOk.Content, sign*6 + 2)); // 放货完成 // if (staProtocol.getAgvTargetPlace()!=0){ // System.out.println(staProtocol.getAgvTargetPlace()); // } // }catch (Exception e){ // log.error(""+e); // } } } @@ -322,14 +313,14 @@ Integer siteId = staNos.get(i); // 站点编号 boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i * 4, 1); StaProtocol staProtocol = station.get(siteId); staProtocol.setBreakerErr(status[0]); staProtocol.setInfraredErr(status[1]); staProtocol.setOutTimeErr(status[2]); staProtocol.setSeizeSeatErr(status[3]); staProtocol.setWrkYgoodsN(status[4]); staProtocol.setInverterErr(status[5]); staProtocol.setContactErr(status[6]); staProtocol.setUpcontactErr(status[7]); // staProtocol.setBreakerErr(status[0]); // staProtocol.setInfraredErr(status[1]); // staProtocol.setOutTimeErr(status[2]); // staProtocol.setSeizeSeatErr(status[3]); // staProtocol.setWrkYgoodsN(status[4]); // staProtocol.setInverterErr(status[5]); // staProtocol.setContactErr(status[6]); // staProtocol.setUpcontactErr(status[7]); } } @@ -392,90 +383,6 @@ } } /** * 写入 ID+目标站 =====> 单站点写入 */ private void writeAgvOk(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; } ArrayList<Integer> staNos = getStaNo(); int index = staNos.indexOf(staProtocol.getSiteId()); if (staProtocol.getAgvTypeSign()==0 || staProtocol.getAgvTypeSign()==2 ){ //0取货 switch (staProtocol.getSiteId()){ case 100: index=32; break; case 101: index=34; break; case 102: index=38; break; case 103: index=40; break; case 104: index=44; break; case 105: index=46; break; case 106: index=50; break; case 107: index=52; break; default: return; } }else { switch (staProtocol.getSiteId()){ case 100: index=30; break; case 102: index=36; break; case 104: index=42; break; case 106: index=48; break; default: return; } } OperateResult write = null; //任务下发次数 int writeCount = 0; do { short textWrite = 1;// 任务完成 if (staProtocol.getAgvTypeSign()>1){ textWrite = 0;// 任务复位 } write = siemensS7Net.Write("DB102." + index, textWrite); if(write.IsSuccess){ writeCount=6; }else { writeCount++; log.error("写入输送线取放货完成命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); } }while (writeCount<5); if (!write.IsSuccess) { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线站点数据失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); log.error("写入输送线取放货完成站点数据失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); } else { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); log.info("输送线取放货完成命令下发码垛完成 给输送线写任务完成 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol)); } } private void write(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; @@ -547,88 +454,6 @@ // } } } private void write2(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; } ArrayList<Integer> staNos = getStaNo(); int index = staNos.indexOf(staProtocol.getSiteId()); short[] array = new short[2]; array[0] = staProtocol.getWorkNo(); array[1] = staProtocol.getStaNo(); OperateResult writeResult; //任务下发次数 int writeCount = 0; //任务下发成功标识 boolean writeFlag = false; while(writeCount < 5){ writeResult = siemensS7Net.Write("DB100." + index*4, array); // 工作号、目标站 if(writeResult.IsSuccess){ Thread.sleep(200); OperateResultExOne<byte[]> readResult = siemensS7Net.Read("DB100." + index*4, (short)4); if(readResult.IsSuccess){ short workNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 0); short staNo = siemensS7Net.getByteTransform().TransInt16(readResult.Content, 2); if(staProtocol.getWorkNo().equals(workNo) && staProtocol.getStaNo().equals(staNo)){ //任务命令写入成功 writeFlag = true; log.info("写入输送线命令后返回成功,并且回读成功。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); Date now = new Date(); break; } else {//返回结果是成功了,但是真实值不相同 writeCount++; OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={1},站点数据={2},写入次数={3}", slave.getId(), JSON.toJSON(staProtocol),writeCount)); log.error("写入输送线命令后返回成功,但是读取任务值不一致。输送线plc编号={},{},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); } } else { writeCount++; OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令后读取失败。输送线plc编号={1},站点数据={2},写入次数={3}", slave.getId(), JSON.toJSON(staProtocol), writeCount)); log.error("写入输送线命令后读取失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); } } else { writeCount++; OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令失败。输送线plc编号={1},站点数据={2},写入次数={3}", slave.getId(), JSON.toJSON(staProtocol),writeCount)); log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); } Thread.sleep(200); } //写命令尝试了5次还是失败了 if(!writeFlag){ staProtocol = station.get(staProtocol.getSiteId()); if (staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0) { staProtocol.setPakMk(true); } OutputQueue.DEVP.offer(MessageFormat.format("【{0}】写入输送线命令尝试5次失败。输送线plc编号={1},站点数据={2}", slave.getId(), JSON.toJSON(staProtocol))); log.error("写入输送线命令尝试5次失败。输送线plc编号={},站点数据={}", slave.getId(), JSON.toJSON(staProtocol)); //重新添加数据到任务队列 boolean result = MessageQueue.offer(SlaveType.Devp, slave.getId(), new Task(3, staProtocol)); read();//读取1次设备状态 return; } else { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发成功 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); //log.info("输送线命令下发 [id:{}] >>>>> 命令下发成功: {}", slave.getId(), JSON.toJSON(staProtocol)); Integer siteId = staProtocol.getSiteId(); staProtocol = station.get(siteId); if ((siteId == 101 || siteId == 201)&&(staProtocol.getWorkNo() == 0 && staProtocol.getStaNo() ==0)) { staProtocol.setPakMk(true); } } } src/main/resources/application-prod.yml
@@ -22,121 +22,12 @@ id: 1 slot: 0 demo: false crn[1]: #堆垛机2 rack: 0 offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 port: 102 crnOutStn[0]: #堆垛机出库站点 staNo: 103 row: 5 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} ip: 192.168.4.250 crnInStn[0]: #堆垛机入库站点1 staNo: 102 row: 4 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} id: 2 slot: 0 demo: false crn[2]: #堆垛机3 rack: 0 offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 port: 102 crnOutStn[0]: #堆垛机出库站点 staNo: 105 row: 9 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} ip: 192.168.4.250 crnInStn[0]: #堆垛机入库站点1 staNo: 104 row: 8 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} id: 3 slot: 0 demo: false crn[3]: #堆垛机4 rack: 0 offset: 2 #偏移量,当堆垛机站点列号=1时,偏移量=2 port: 102 crnOutStn[0]: #堆垛机出库站点 staNo: 107 row: 12 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} ip: 192.168.4.250 crnInStn[0]: #堆垛机入库站点1 staNo: 106 row: 11 bay: 1 lev: 1 devpPlcId: ${wcs-slave.devp[0].id} id: 4 slot: 0 demo: false barcode[0]: #条码扫描仪1 port: 51236 ip: 10.10.10.52 id: 1 barcode[1]: #条码扫描仪2 port: 51236 ip: 192.168.4.250 id: 2 barcode[2]: #条码扫描仪3 port: 51236 ip: 192.168.4.250 id: 3 barcode[3]: #条码扫描仪4 port: 51236 ip: 192.168.4.250 id: 4 devp[0]: #输送线 emptyInSta[2]: #空板入库口3 staNo: 104 emptyInSta[1]: #空板入库口2 staNo: 102 rack: 0 emptyInSta[0]: #空板入库口1 staNo: 100 ip: 192.168.4.250 outSta[4]: #出库口5 staNo: 104 outSta[3]: #出库口4 staNo: 103 outSta[6]: #出库口7 staNo: 106 slot: 0 outSta[5]: #出库口6 staNo: 105 outSta[0]: #出库口1 staNo: 100 outSta[2]: #出库口3 staNo: 102 emptyInSta[3]: #空板入库口4 staNo: 106 outSta[1]: #出库口2 staNo: 101 inSta[2]: staNo: 104 barcode: ${wcs-slave.barcode[2].id} inSta[3]: staNo: 106 barcode: ${wcs-slave.barcode[3].id} port: 102 outSta[7]: #出库口8 staNo: 107 inSta[0]: #入库口1 staNo: 100 barcode: ${wcs-slave.barcode[0].id} inSta[1]: #入库口2 staNo: 102 barcode: ${wcs-slave.barcode[1].id} id: 1 src/main/resources/application.yml
@@ -50,6 +50,7 @@ wms: # 是否开启上报 start: true rgvOpen: true # WMS系统ip #url: 10.32.53.195:8080 # WMS系统ip src/main/resources/mapper/WrkMastStaMapper.xml
@@ -22,102 +22,102 @@ </resultMap> <select id="selectAllWrkMastStaList" resultMap="BaseResultMap"> select * from asr_wrk_mast_sta select * from "SOURCE"."asr_wrk_mast_sta" where 1=1 and wrk_sts=0 and WRK_STS=0 <if test="type!=null"> and type = #{type} and TYPE = #{type} </if> order by line_number,id order by LINE_NUMBER,ID </select> <select id="selectByWrkNo" resultMap="BaseResultMap"> select top 1 * from asr_wrk_mast_sta select top 1 * from "SOURCE"."asr_wrk_mast_sta" where 1=1 and wrk_no = #{workNo} and WRK_NO = #{workNo} </select> <select id="selectNoInterfere" resultMap="BaseResultMap"> select top 1 * from asr_wrk_mast_sta select top 1 * from "SOURCE"."asr_wrk_mast_sta" where 1=1 and (sta_start in and (STA_START in <foreach item="item" collection="staStarts" index="index" separator="," open="(" close=")"> #{item} </foreach> or sta_start = 0 or STA_START = 0 ) and (sta_end in and (STA_END in <foreach item="item" collection="staEnds" index="index" separator="," open="(" close=")"> #{item} </foreach> or sta_end = 0 or STA_END = 0 ) and wrk_sts=0 order by line_number,id and WRK_STS=0 order by LINE_NUMBER,ID </select> <select id="selectNoInterfereList" resultMap="BaseResultMap"> select * from asr_wrk_mast_sta select * from "SOURCE"."asr_wrk_mast_sta" where 1=1 and (sta_start in and (STA_START in <foreach item="item" collection="staStarts" index="index" separator="," open="(" close=")"> #{item} </foreach> or sta_start = 0 or STA_START = 0 ) and (sta_end in and (STA_END in <foreach item="item" collection="staEnds" index="index" separator="," open="(" close=")"> #{item} </foreach> or sta_end = 0 or STA_END = 0 ) and wrk_sts=0 order by line_number,id and WRK_STS=0 order by LINE_NUMBER,ID </select> <select id="selectAllWrkCount" resultType="Integer"> select count(1) from asr_wrk_mast_sta select count(1) from "SOURCE"."asr_wrk_mast_sta" where 1=1 <if test="type!=null"> and type = #{type} and TYPE = #{type} </if> </select> <select id="selectAllWrkCount108" resultType="Integer"> select count(1) from asr_wrk_mast_sta select count(1) from "SOURCE"."asr_wrk_mast_sta" where 1=1 and type = 1 and (sta_end = 108 or sta_start = 108) and TYPE = 1 and (STA_END = 108 or STA_START = 108) </select> <select id="selectAllWrkCount108Y" resultType="Integer"> select count(1) from asr_wrk_mast_sta select count(1) from "SOURCE"."asr_wrk_mast_sta" where 1=1 -- and type = 1 and ((sta_end <= 108 or sta_start <= 108) or (sta_end = 118 or sta_start = 118) or (sta_end = 122 or sta_start = 122)) and ((STA_END <= 108 or STA_START <= 108) or (STA_END = 118 or STA_START = 118) or (STA_END = 122 or STA_START = 122)) </select> <select id="selectAllWrkStsCount" resultType="Integer"> select count(1) from asr_wrk_mast_sta select count(1) from "SOURCE"."asr_wrk_mast_sta" where 1=1 <if test="type!=null"> and type = #{type} and TYPE = #{type} </if> <if test="wrkSts!=null"> and wrk_sts = #{wrkSts} and WRK_STS = #{wrkSts} </if> </select> <select id="selectAllWrkStsCountWrkMastSta" resultMap="BaseResultMap"> select top 1 * from asr_wrk_mast_sta select top 1 * from "SOURCE"."asr_wrk_mast_sta" where 1=1 <if test="type!=null"> and type = #{type} and TYPE = #{type} </if> <if test="wrkSts!=null"> and wrk_sts = #{wrkSts} and WRK_STS = #{wrkSts} </if> </select>