src/main/java/com/zy/asrs/controller/SiteController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/WrkMastMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/enums/SteTaskModeType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/protocol/SteProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensCrnThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensDevpThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SteThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/SiteController.java
@@ -63,8 +63,8 @@ SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); Map<String, Object> map1 = new HashMap<>(); map1.put("floor", 1); map1.put("modeVal", devpThread.charge0); map1.put("modeDesc", devpThread.charge0?"充电中":"关闭"); map1.put("modeVal", !devpThread.charge0); map1.put("modeDesc", !devpThread.charge0?"充电中":"关闭"); res.add(map1); Map<String, Object> map2 = new HashMap<>(); map2.put("floor", 2); src/main/java/com/zy/asrs/mapper/WrkMastMapper.java
@@ -91,4 +91,6 @@ WrkMast selectPakoutWorkingByGroupLoc(@Param("locNos")List<String> locNos); List<WrkMast> selectAll(@Param("staNo")Integer staNo); } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.*; @@ -1835,6 +1836,22 @@ } } // 移库 ===>> 堆垛机搬至目标库位组 完成 } else if (wrkMast.getWrkSts() == 16) { // 16.吊车出库中 ==> 17.出库完成 wrkMast.setWrkSts(17L); Date now = new Date(); wrkMast.setCrnEndTime(now); wrkMast.setModiTime(now); LocMast locMast = locMastService.selectById(wrkMast.getSourceLocNo()); Integer outCrnNo = locMastService.getOutCrnNo(locMast); wrkMast.setCrnNo(outCrnNo); // 修改成功后复位堆垛机 if (wrkMastMapper.updateById(wrkMast) > 0) { // 堆垛机复位 crnThread.setResetFlag(true); } else { News.error("修改工作档状态 16.吊车出库中 ==> 17.出库完成 失败!!,工作号={}", wrkMast.getWrkNo()); } } } } @@ -1879,15 +1896,17 @@ } else { steThread.setResetFlag(true); } } else if (wrkCharge.getWrkSts() == 29) { // 29.开始充电 ===>> 30.完成充电 wrkCharge.setWrkSts(30L); if (!wrkChargeService.updateById(wrkCharge)) { News.error("修改充电任务状态 29.开始充电 ===>> 30.完成充电 失败!!,工作号={}", wrkCharge.getWrkNo()); } else { steThread.setResetFlag(true); } } else if (wrkCharge.getWrkSts() == 32) { } // else if (wrkCharge.getWrkSts() == 29) { // // 29.开始充电 ===>> 30.完成充电 // wrkCharge.setWrkSts(30L); // if (!wrkChargeService.updateById(wrkCharge)) { // News.error("修改充电任务状态 29.开始充电 ===>> 30.完成充电 失败!!,工作号={}", wrkCharge.getWrkNo()); // } else { // steThread.setResetFlag(true); // } // } else if (wrkCharge.getWrkSts() == 32) { // 32.小车走行 ===>> 33.小车待搬 wrkCharge.setWrkSts(33L); if (!wrkChargeService.updateById(wrkCharge)) { @@ -2486,7 +2505,7 @@ SteChargeType steCharge = null; do { String locNo; if (!devpThread.charge0) { if (devpThread.charge0) { SteChargeType first = SteChargeType.FIRST; locNo = first.locNo; if (basSteService.hasCarOfLocNo(locNo) == null @@ -2582,6 +2601,7 @@ return; } if (steProtocol.getCharge() > Float.parseFloat(basSte.getChargeLine())) { MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 999));//充电标记 wrkCharge.setWrkSts(30L); wrkChargeMapper.updateById(wrkCharge); return; @@ -2644,7 +2664,7 @@ SteCommand steCommand = new SteCommand(); steCommand.setSteNo(wrkCharge.getSteNo()); // 穿梭车编号 steCommand.setTaskNo(wrkCharge.getWrkNo()); // 工作号 steCommand.setTaskMode(SteTaskModeType.GO_ORIGIN); // 去右端 steCommand.setTaskMode(SteTaskModeType.BACK_ORIGIN); // 去右端 steCommand.setRow(Utils.getGroupRow(steProtocol.getRow().intValue(), false).shortValue()); steCommand.setBay(steProtocol.getBay()); @@ -2675,6 +2695,19 @@ wrkCharge.setWrkSts(29L); if (!wrkChargeService.updateById(wrkCharge)) { News.error("修改充电任务状态 28.充电就绪 ===>> 29.开始充电 失败!!,工作号={}", wrkCharge.getWrkNo()); } } } else if (wrkCharge.getWrkSts() == 29) { Float idle2 = steProtocol.isIdle2(); String chargeLine = SpringUtils.getBean(BasSteService.class).selectById(1).getChargeLine(); if (idle2<(Float.parseFloat(chargeLine)+2)){ MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 666));//充电标记 }else if (idle2 > 70f){ MessageQueue.offer(SlaveType.Devp, 1, new Task(3, 999));//充电标记 // 29.开始充电 ===>> 30.完成充电 wrkCharge.setWrkSts(30L); if (!wrkChargeService.updateById(wrkCharge)) { News.error("修改充电任务状态 29.开始充电 ===>> 30.完成充电 失败!!,工作号={}", wrkCharge.getWrkNo()); } } } @@ -3201,6 +3234,63 @@ } } /** * 出入库模式切换 */ public synchronized void outAndIn() { try { // 根据输送线plc遍历 for (DevpSlave devp : slaveProperties.getDevp()) { for (DevpSlave.Sta inSta : devp.getInSta()) { Thread.sleep(500); boolean a=true,b=true; List<WrkMast> wrkMasts = wrkMastMapper.selectAll(inSta.getStaNo()); if (Cools.isEmpty(wrkMasts)){ b=false; }else { for (WrkMast wrkMast:wrkMasts){ if (wrkMast.getSourceStaNo()!=wrkMast.getStaNo()){ a=false; break; } } } switch (inSta.getStaNo()) { case 102://1F if (a && b){ MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 11)); }else if (b){ MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 12)); }else { MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 10)); } break; case 202://2F if (a && b){ MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 21)); }else if (b){ MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 22)); }else { MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 20)); } break; case 302://3F if (a && b){ MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 31)); }else if (b){ MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 32)); }else { MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, 30)); } break; } } } } catch (Exception e) { e.printStackTrace(); } } } src/main/java/com/zy/core/MainProcess.java
@@ -22,6 +22,8 @@ private MainServiceImpl mainService; // 所属线程 private Thread thread; // 频率 private int i = 0; /** * =====>> 开始工作 @@ -70,6 +72,13 @@ // 穿梭车 ===>> 小车电量检测充电 mainService.loopSteCharge(); mainService.executeSteCharge(); //出入库模式 i++; if (i > 1) { mainService.outAndIn(); i = 0; } // 间隔 Thread.sleep(200); // 穿梭车 ===>> 小车复位至待机库位 src/main/java/com/zy/core/enums/SteTaskModeType.java
@@ -96,9 +96,9 @@ public static SteTaskModeType findOriginByLoc(Integer row) { if (Utils.FIRST_GROUP_ROW_LIST.contains(row)) { return SteTaskModeType.BACK_ORIGIN; } else if (Utils.SECOND_GROUP_ROW_LIST.contains(row)) { return SteTaskModeType.GO_ORIGIN; } else if (Utils.SECOND_GROUP_ROW_LIST.contains(row)) { return SteTaskModeType.BACK_ORIGIN; } else { throw new CoolException("解析穿梭车原点定位失败"); } src/main/java/com/zy/core/model/protocol/SteProtocol.java
@@ -536,6 +536,11 @@ } } // 小车电量 public Float isIdle2() { return this.charge; } // 是否处于报警状态 public Boolean isAlarm() { return this.alarm > 1; src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -226,7 +226,7 @@ News.error("堆垛机写入命令为空"); return false; } siemensNet.Write("DB100.18", (short) 0); // siemensNet.Write("DB100.18", (short) 0); // convertRow(command); command.setCrnNo(slave.getId()); short[] array = new short[10]; @@ -258,11 +258,9 @@ OperateResult result = siemensNet.Write("DB100.0", array); if (command.getAckFinish() == 0) { if (result.IsSuccess) { short commandFinish = 1; Thread.sleep(300); result = siemensNet.Write("DB100.18", commandFinish); } } try { 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.sun.org.apache.bcel.internal.generic.IF_ACMPEQ; import com.zy.asrs.entity.BasDevp; import com.zy.asrs.service.BasDevpService; import com.zy.core.DevpThread; @@ -75,6 +76,10 @@ // 写数据 ID+目标站 case 2: write((StaProtocol)task.getData()); break; // 出入库模式 case 3: write3((int)task.getData()); break; default: break; @@ -150,10 +155,10 @@ //读条码 Thread.sleep(100); OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.150",(short)31); OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB100.150",(short)24); if (result2.IsSuccess) { for (int i = 0; i < barcodeSize; i++) { String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*16,15, "UTF-8"); for (int i = 0; i <= barcodeSize; i++) { String barcode = siemensS7Net.getByteTransform().TransString(result2.Content,i*8,8, "UTF-8"); BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, i + 1); if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { barcodeThread.setBarcode(barcode); @@ -163,12 +168,17 @@ // 充电信号位 Thread.sleep(50); OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB102.128", (short)1); OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB102.109", (short)1); if (result3.IsSuccess) { boolean[] status = siemensS7Net.getByteTransform().TransBool(result3.Content, 0, 1); charge0 = status[0]; charge1 = status[1]; charge2 = status[2]; } // 充电信号位 Thread.sleep(50); OperateResultExOne<byte[]> result31 = siemensS7Net.Read("DB100.201", (short)1); if (result3.IsSuccess) { boolean[] status = siemensS7Net.getByteTransform().TransBool(result31.Content, 0, 1); charge1 = status[0]; } // 外形检测 - 102 @@ -225,6 +235,35 @@ // News.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } /** * 写入 ID+目标站 =====> 单站点写入 */ private void write3(int outAndIn) throws InterruptedException{ if (Cools.isEmpty(outAndIn)) { return; } if (outAndIn==666){ siemensS7Net.Write("DB100.200", (short) 1); }else if (outAndIn==999){ siemensS7Net.Write("DB100.200", (short) 0); }else { String Db=null; if (outAndIn<20){ Db="DB100.180"; }else if (outAndIn<30){ Db="DB100.182"; }else { Db="DB100.184"; } if (outAndIn == 11 || outAndIn == 21 || outAndIn == 31){ siemensS7Net.Write(Db, (byte) 1); // 入库 }else if (outAndIn == 12 || outAndIn == 22 || outAndIn == 32){ siemensS7Net.Write(Db, (byte) 2); // 出库 }else if (outAndIn == 10 || outAndIn == 20 || outAndIn == 30){ siemensS7Net.Write(Db, (byte) 0); // 出库 } } } /** * 写入 ID+目标站 =====> 单站点写入 src/main/java/com/zy/core/thread/SteThread.java
@@ -11,12 +11,16 @@ import com.core.exception.CoolException; import com.zy.asrs.entity.BasSte; import com.zy.asrs.entity.BasSteOpt; import com.zy.asrs.entity.WrkCharge; import com.zy.asrs.service.BasSteOptService; import com.zy.asrs.service.BasSteService; import com.zy.common.model.enums.WrkChargeType; import com.zy.core.DevpThread; import com.zy.core.News; import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.enums.SteStatusType; import com.zy.core.model.SteSlave; @@ -175,7 +179,13 @@ steProtocol.setCrnStopRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 38)); steProtocol.setCrnStopFork(siemensS7Net.getByteTransform().TransInt16(result.Content, 40)); steProtocol.setCrnAllowRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 42)); steProtocol.setChargeStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 44)); SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); if (!devpThread.charge0 || devpThread.charge1){ steProtocol.setChargeStatus((short)1); }else { steProtocol.setChargeStatus((short)0); } OutputQueue.STE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); @@ -286,6 +296,21 @@ News.error("穿梭车写入命令为空"); return false; } //判断小车是否在充电 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); if (!devpThread.charge0 || devpThread.charge1){ // led 异常显示 LedThread ledThread1 = (LedThread) SlaveConnection.get(SlaveType.Led, 1); LedThread ledThread2 = (LedThread) SlaveConnection.get(SlaveType.Led, 1); LedThread ledThread3 = (LedThread) SlaveConnection.get(SlaveType.Led, 1); if (ledThread1 != null && ledThread2 != null && ledThread3 != null) { MessageQueue.offer(SlaveType.Led, 1, new Task(3, "穿梭车正在充电")); MessageQueue.offer(SlaveType.Led, 2, new Task(3, "穿梭车正在充电")); MessageQueue.offer(SlaveType.Led, 3, new Task(3, "穿梭车正在充电")); } News.error("穿梭车正在充电"); return false; } command.setSteNo(slave.getId()); OperateResult result = null; // 开始任务 src/main/resources/application.yml
@@ -183,21 +183,21 @@ # LED1 led[0]: id: 1 ip: 10.10.10.205 ip: 10.10.10.231 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 102 # LED1 led[1]: id: 2 ip: 10.10.10.207 ip: 10.10.10.232 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 202 # LED1 led[2]: id: 3 ip: 10.10.10.206 ip: 10.10.10.233 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 302