src/main/java/com/zy/asrs/entity/WrkMast.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/Utils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensDevpThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -380,6 +380,29 @@ } return null; } public Integer getStaNoConvert(Integer crnNo){ switch (this.staNo){ case 114: switch (crnNo){ case 1: return 114; case 2: return 107; case 3: return 211; } case 214: switch (crnNo){ case 1: return 111; case 2: return 207; case 3: return 214; } } return this.staNo; } public String getSourceStaNo$(){ BasDevpService service = SpringUtils.getBean(BasDevpService.class); src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -844,6 +844,29 @@ // 查询工作档 WrkMast wrkMast = wrkMastMapper.selectPakOutStep16(staProtocol.getSiteId()); if (wrkMast == null) { // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档 CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crnSlave.getId()); CrnProtocol crnProtocol = crnThread.getCrnProtocol(); if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) { // 移动中 continue; } // 判断堆垛机状态等待确认 if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.forkPosType == CrnForkPosType.HOME && crnProtocol.getBay().equals(crnStn.getBay().shortValue()) && crnProtocol.getLevel().equals(crnStn.getLev().shortValue())) { News.info("堆垛机接驳任务完成,工作号:"+crnProtocol.getTaskNo()+";执行堆垛机号:"+crnSlave.getId()+";接驳放货位:"+crnStn.getStaNo()+";接驳行走目标站:"+Utils.getStaNoConvertCentreOther2(crnStn.getStaNo())); // 下发站点信息 staProtocol.setWorkNo(crnProtocol.getTaskNo()); staProtocol.setStaNo(Utils.getStaNoConvertCentreOther2(crnStn.getStaNo()).shortValue()); if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) { continue; } // 复位堆垛机 crnThread.setResetFlag(true); continue; } continue; } // 判断工作档条件 @@ -866,7 +889,7 @@ // 下发站点信息 staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); staProtocol.setStaNo(wrkMast.getStaNoConvert(crnProtocol.getCrnNo()).shortValue()); if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) { continue; } @@ -969,8 +992,35 @@ // 获取工作状态为 2,3,4,5,6 的入库工作档 WrkMast wrkMast = wrkMastMapper.selectPakInStep23456(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo()); if(null == wrkMast) { if(null == wrkMast || (wrkMast.getCrnNo()==2 && wrkMast.getWrkSts()==2 && crnProtocol.getCrnNo()!=2)) { // News.error("{}站点查询无待入库数据 工作号={}", crnStn.getStaNo(), staProtocol.getWorkNo()); // 已经存在吊车执行任务时,则过滤 if (wrkMastMapper.selectWorking(slave.getId()) != null) { continue; } // 判断堆垛机状态等待确认 if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.statusType == CrnStatusType.IDLE && crnProtocol.forkPosType == CrnForkPosType.HOME) { News.info("堆垛机接驳任务执行,工作号:"+staProtocol.getWorkNo()+";执行堆垛机号:"+slave.getId()+";接驳取货位:"+crnStn.getStaNo()+";接驳放货位:"+staProtocol.getSiteId()); // 堆垛机接驳任务命令下发区 -------------------------------------------------------------------------- CrnCommand crnCommand = new CrnCommand(); crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 crnCommand.setTaskNo(staProtocol.getWorkNo()); // 工作号 crnCommand.setAckFinish((short) 0); // 任务完成确认位 crnCommand.setCommand((short) 0); crnCommand.setTaskMode(CrnTaskModeType.XY_MOVE); // 任务模式: 站位转移 crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 源库位排 crnCommand.setSourcePosY(crnStn.getBay().shortValue()); // 源库位列 crnCommand.setSourcePosZ(crnStn.getLev().shortValue()); // 源库位层 crnCommand.setDestinationPosX(Utils.getRow(staProtocol.getSiteId())); // 目标库位排 crnCommand.setDestinationPosY(Utils.getBay(staProtocol.getSiteId())); // 目标库位列 crnCommand.setDestinationPosZ(Utils.getLev(staProtocol.getSiteId())); // 目标库位层 if (!MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand))) { News.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", slave.getId(), JSON.toJSONString(crnCommand)); } return true; } continue; } src/main/java/com/zy/asrs/utils/Utils.java
@@ -220,6 +220,61 @@ } /** * 通过库位号获取 排 */ public static short getRow(Integer staNo) { switch (staNo){ case 108: return 4; case 208: return 18; case 112: return 3; case 212: return 19; } throw new RuntimeException("站点解析异常"); } /** * 通过库位号获取 列 */ public static short getBay(Integer staNo) { switch (staNo){ case 108: return 5; case 208: return 5; case 112: return 2; case 212: return 6; } throw new RuntimeException("站点解析异常"); } /** * 通过库位号获取 层 */ public static short getLev(Integer staNo) { return 1; } public static Integer getStaNoConvertCentreOther2(Integer staNo){//放货为获取行走目标位 switch (staNo){ case 108: return 111; case 208: return 211; case 112: return 114; case 212: return 214; default: return staNo; } } /** * 通过排列层拼接出库位号 */ public static String append(int row, int bay, int lev) { src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -8,6 +8,7 @@ import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.mapper.BasDevpMapper; import com.zy.asrs.service.BasDevpService; @@ -44,12 +45,18 @@ private Map<Integer, StaProtocol> station = new ConcurrentHashMap<>(); private short heartBeatVal = 1; private int barcodeSize = 2; public static final ArrayList<Integer> staNos = new ArrayList<Integer>() {{ public static final ArrayList<Integer> staNos1 = new ArrayList<Integer>() {{ add(100);add(101);add(102);add(103);add(104);add(105);add(106);add(107);add(108);add(109); add(110);add(111); add(200);add(201);add(202);add(203);add(204);add(205);add(206);add(207);add(208);add(209); add(210);add(211); add(300); }}; public static final ArrayList<Integer> staNos2 = new ArrayList<Integer>() {{ add(112);add(113);add(114); }}; public static final ArrayList<Integer> staNos3 = new ArrayList<Integer>() {{ add(212);add(213);add(214); }}; public boolean charge0; @@ -70,6 +77,20 @@ */ public IoModeType ioModeOf1F = IoModeType.NONE; public IoModeType ioModeOf2F = IoModeType.NONE; private ArrayList<Integer> getStaNo() { switch (slave.getId()) { case 1: return staNos1; case 2: return staNos2; case 3: return staNos3; default: throw new CoolException("服务器异常"); } } @Override @SuppressWarnings("InfiniteLoopStatement") @@ -132,6 +153,7 @@ private void read() throws InterruptedException { // 更新入出库模式 updateIoMode(); ArrayList<Integer> staNos = getStaNo(); OperateResultExOne<byte[]> result = siemensS7Net.Read("DB100.0", (short) 50); if (result.IsSuccess) { for (int i = 0; i < 25; i++) { @@ -244,6 +266,7 @@ if (null == staProtocol) { return; } ArrayList<Integer> staNos = getStaNo(); int index = staNos.indexOf(staProtocol.getSiteId()); OperateResult writeId,writeDest; @@ -358,6 +381,7 @@ if (null == staProtocol || times > 3) { return; } ArrayList<Integer> staNos = getStaNo(); int index = staNos.indexOf(staProtocol.getSiteId()); OperateResult write = siemensS7Net.Write("DB100." + index*2, staProtocol.getWorkNo()); // 工作号 Thread.sleep(200); src/main/resources/application.yml
@@ -70,6 +70,13 @@ row: 4 bay: 5 lev: 1 # 堆垛机出库站点 crnOutStn[1]: devpPlcId: ${wcs-slave.devp[1].id} staNo: 112 row: 3 bay: 2 lev: 1 # 堆垛机2 crn[1]: id: 2 @@ -132,6 +139,13 @@ row: 18 bay: 5 lev: 1 # 堆垛机出库站点 crnOutStn[1]: devpPlcId: ${wcs-slave.devp[2].id} staNo: 212 row: 19 bay: 6 lev: 1 # 穿梭车1 ste[0]: id: 1 @@ -153,7 +167,7 @@ port: 502 rack: 0 slot: 0 # 输送线 # 输送线1 devp[0]: id: 1 ip: 10.10.10.61 @@ -201,6 +215,46 @@ barcode: ${wcs-slave.barcode[1].id} backSta: 200 led: ${wcs-slave.led[2].id} # 输送线2 devp[1]: id: 2 ip: 10.10.11.61 port: 102 rack: 0 slot: 0 # 入库口1 inSta[0]: staNo: 114 barcode: ${wcs-slave.barcode[2].id} backSta: 100 led: ${wcs-slave.led[2].id} # 空板入库口1 emptyInSta[0]: staNo: 114 barcode: ${wcs-slave.barcode[2].id} # 出库口1 outSta[0]: staNo: 114 # 输送线3 devp[2]: id: 3 ip: 10.10.12.61 port: 102 rack: 0 slot: 0 # 入库口1 inSta[0]: staNo: 214 barcode: ${wcs-slave.barcode[3].id} backSta: 100 led: ${wcs-slave.led[3].id} # 空板入库口1 emptyInSta[0]: staNo: 214 barcode: ${wcs-slave.barcode[3].id} # 出库口1 outSta[0]: staNo: 214 # 条码扫描仪 barcode[0]: id: 1 @@ -212,23 +266,49 @@ ip: 10.10.10.53 port: 51236 # LED1 # 条码扫描仪 barcode[2]: id: 3 ip: 10.10.11.53 port: 51236 # LED1 # 条码扫描仪 barcode[3]: id: 4 ip: 10.10.12.53 port: 51236 # LED1 led[0]: id: 1 ip: 10.10.10.205 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} devpPlcId: ${wcs-slave.devp[1].id} staArr: 100 # LED1 # LED2 led[1]: id: 2 ip: 10.10.10.206 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} devpPlcId: ${wcs-slave.devp[2].id} staArr: 300 # LED1 # LED3 led[2]: id: 3 ip: 10.10.10.207 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 200 # LED4 led[3]: id: 4 ip: 10.10.11.207 port: 5005 devpPlcId: ${wcs-slave.devp[1].id} staArr: 200 # LED5 led[4]: id: 5 ip: 10.10.12.207 port: 5005 devpPlcId: ${wcs-slave.devp[2].id} staArr: 200