| src/main/java/com/zy/common/model/LocTypeDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/common/model/MatDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/controller/OpenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/model/command/LedCommand.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/core/model/protocol/StaProtocol.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/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/webapp/views/console.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/common/model/LocTypeDto.java
@@ -1,6 +1,5 @@ package com.zy.common.model; import com.core.exception.CoolException; import com.zy.core.model.protocol.StaProtocol; import lombok.Data; @@ -31,14 +30,7 @@ } public LocTypeDto(StaProtocol staProtocol) { // if (staProtocol.isHigh() == staProtocol.isLow()) { // throw new CoolException("plc高低检测异常"); // } if (staProtocol.getSiteId() == 106 || staProtocol.getSiteId() == 159){ this.locType1 = 2; // 高库位 }else { this.locType1 = 1; // 低库位 } this.locType1 = staProtocol.getGoodsHeight(); } /** src/main/java/com/zy/common/model/MatDto.java
@@ -8,6 +8,8 @@ @Data public class MatDto { private String orderNo; // 物料编号 private String matnr; @@ -19,6 +21,8 @@ private String specs; private String model; private Double anfme; private String manuDate; @@ -51,15 +55,15 @@ this.count = count; this.total = total; } public MatDto(String matnr,String batch,String specs,String manuDate,String model,double weight, double length,double volume) { public MatDto(String orderNo,String matnr,String maknx, String batch,String specs,String manuDate,String model,Double anfme) { this.orderNo = orderNo; this.matnr = matnr; this.maknx = maknx; this.batch = batch; this.specs = specs; this.manuDate = manuDate; this.model = model; this.weight = weight; this.length = length; this.volume = volume; this.anfme = anfme; } public MatDto(String matNo, String maknx, Double count) { src/main/java/com/zy/controller/OpenController.java
File was deleted src/main/java/com/zy/core/MainProcess.java
@@ -65,7 +65,7 @@ mainService.storeEmptyPlt(8); // 出库 ===>> 工作档信息写入led显示器 mainService.ledExecute(9); mainService.ledExecute(); // 其他 ===>> LED显示器复位,显示默认信息 mainService.ledReset(); src/main/java/com/zy/core/model/command/LedCommand.java
@@ -56,7 +56,7 @@ ledCommand.setStaNo(100); ledCommand.setWorkNo(7001); List<MatDto> matDtos = new ArrayList<>(); MatDto matDto = new MatDto("0205040001","K44132-09-0724","PE","20240724",",HD-233L",70,2816,53908.56626); MatDto matDto = new MatDto(); matDtos.add(matDto); ledCommand.setMatDtos(matDtos); System.out.println(ledCommand); src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -43,6 +43,9 @@ // 高 private boolean high; // 中 private boolean center; // 低 private boolean low; @@ -75,11 +78,17 @@ // 右超限 private boolean rightErr = false; // 未组托报警 private boolean groupSupportErr = false; // 超重 private boolean weightErr = false; // 扫码失败 private boolean barcodeErr = false; // 货物高度 1.低 2.中 3.高 private short goodsHeight; //故障----------------------------------------------------------------------- private Boolean breakerErr = false; //断路器故障 @@ -98,18 +107,10 @@ private Boolean upcontactErr = false; //顶升电机接触器故障 private Boolean ifOpenDoor = false; // 是否打开 private Boolean ifCloseDoor = false; // 是否关闭 private Boolean openAskDoor = false; // 请求开门 private Boolean closeAskDoor = false; // 请求关门 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"); basDevp.setInEnable(inEnable?"Y":"N"); src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -111,14 +111,14 @@ } crnProtocol.setMode((short) -1); // crnProtocol.setTaskNo((short)0); crnProtocol.setStatus((short)-1); crnProtocol.setBay((short)0); crnProtocol.setLevel((short)0); crnProtocol.setStatus((short) -1); crnProtocol.setBay((short) 0); crnProtocol.setLevel((short) 0); crnProtocol.setForkPos((short) -1); crnProtocol.setLiftPos((short) -1); crnProtocol.setWalkPos((short)0); crnProtocol.setLoaded((short)0); crnProtocol.setAlarm((short)0); crnProtocol.setWalkPos((short) 0); crnProtocol.setLoaded((short) 0); crnProtocol.setAlarm((short) 0); crnProtocol.setxSpeed((short) 0); crnProtocol.setySpeed((short) 0); crnProtocol.setzSpeed((short) 0); @@ -126,17 +126,17 @@ crnProtocol.setyDistance((short) 0); crnProtocol.setxDuration((short) 0); crnProtocol.setyDuration((short) 0); try{ try { // 根据实时信息更新数据库 BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); BasCrnp basCrnp = new BasCrnp(); basCrnp.setCrnErr(crnProtocol.getAlarm()==null?0:crnProtocol.getAlarm().longValue()); basCrnp.setCrnErr(crnProtocol.getAlarm() == null ? 0 : crnProtocol.getAlarm().longValue()); basCrnp.setCrnNo(slave.getId()); basCrnp.setCrnSts((int)crnProtocol.getMode()); if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){ News.error("MelsecCrn"+" - 4"+" - 堆垛机plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); basCrnp.setCrnSts((int) crnProtocol.getMode()); if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))) { News.error("MelsecCrn" + " - 4" + " - 堆垛机plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } } catch (Exception e){ } catch (Exception e) { } } @@ -198,6 +198,7 @@ // 复位信号 if (!Cools.isEmpty(crnProtocol.getStatusType()) && crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) { News.info("{}号堆垛机,收到任务{}完成信号",crnProtocol.getCrnNo(),crnProtocol.getTaskNo()); if (resetFlag) { if(crnProtocol.getTaskNo()==9999){ backHpFlag = false; @@ -231,15 +232,6 @@ OutputQueue.CRN.offer(MessageFormat.format("【{0}】读取堆垛机plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); News.error("SiemensCrn"+" - 5"+" - 读取堆垛机plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); initCrn(); } } private void convertRow(CrnCommand crnCommand) { if (crnCommand.getSourcePosX() != null && crnCommand.getSourcePosX() != 0) { crnCommand.setSourcePosX((short) (crnCommand.getSourcePosX() - ((slave.getId() - 1) * 4))); } if (crnCommand.getDestinationPosX() != null && crnCommand.getDestinationPosX() != 0) { crnCommand.setDestinationPosX((short) (crnCommand.getDestinationPosX() - ((slave.getId() - 1) * 4))); } } @@ -277,9 +269,9 @@ }catch (Exception e){ News.error("堆垛机命令地址写入后回读出错"); } // convertRow(command); command.setCrnNo(slave.getId()); // short[] array = new short[10]; short[] array = new short[10]; array[0] = command.getAckFinish(); // 任务完成确认位 array[1] = command.getTaskNo(); // 任务号 @@ -293,14 +285,10 @@ array[9] = command.getCommand(); // array[10] = 0; //备用1 // boolean[] array2 = new boolean[1]; // array2[0] = command.isTraySize(); OperateResult result = siemensNet.Write("DB100.0", array); // OperateResult result2 = siemensNet.Write("DB100.22", array2); News.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), array); // if(!result.IsSuccess || !result2.IsSuccess){ if(!result.IsSuccess){ if (!result.IsSuccess) { News.error("写入堆垛机plc数据失败,重新添加任务到队列 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(command)); MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, command)); Thread.sleep(100); @@ -383,6 +371,11 @@ } }while (writeCount2<5); } } else { BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); BasCrnp basCrnp = basCrnpService.selectById(slave.getId()); basCrnp.setModiTime(new Date()); basCrnpService.updateById(basCrnp); } try { @@ -408,7 +401,7 @@ bean.insert(basCrnOpt); } catch (Exception ignore) {} if (result != null && result.IsSuccess) { if (result.IsSuccess) { this.readStatus(); News.info("堆垛机命令下发[id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] >>>>> 命令下发: {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); @@ -419,11 +412,6 @@ return false; } } public void requestStop() { isRunning = false; } @Override public void close() { src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -8,7 +8,6 @@ import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.core.DevpThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; @@ -53,7 +52,7 @@ add(1); add(2); }}; public static final ArrayList<Integer> staNosErrList = new ArrayList<Integer>() {{ add(101); add(103); add(104); add(106); }}; /** @@ -183,10 +182,10 @@ */ private void read() { // 读一楼连续8个站点 // 站点信息 OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) (8*8)); if (result.IsSuccess) { for (int i = 0; i < 8; i++) { for (int i = 0; i < staNos.size(); i++) { Integer siteId = staNos.get(i); // 站点编号 StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { @@ -206,19 +205,25 @@ staProtocol.setEmptyMk(status[4]); // 空板信号 staProtocol.setFullPlt(status[5]); // 满托盘 staProtocol.setHigh(status[6]); // 高库位 staProtocol.setLow(status[7]); // 低库位 staProtocol.setLow(status[7]); // 中库位 staProtocol.setCenter(status[8]); // 低库位 if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { staProtocol.setPakMk(true); } } } else { initSite(); OutputQueue.CRN.offer(MessageFormat.format("【{0}】读取输送线plc状态信息失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); News.error("SiemensCrn"+" - 4"+" - 读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); return; } // 条码扫描器 OperateResultExOne<byte[]> barcodeResult = siemensS7Net.Read("DB101.1672", (short) ((BarcodeList.size()+1) * 8)); // 不连续 OperateResultExOne<byte[]> barcodeResult = siemensS7Net.Read("DB101.400", (short) (BarcodeList.size() * 10)); if (barcodeResult.IsSuccess) { for (int i = 0; i < BarcodeList.size(); i++) { String barcode = siemensS7Net.getByteTransform().TransString(barcodeResult.Content,i*16,8, "UTF-8"); String barcode = siemensS7Net.getByteTransform().TransString(barcodeResult.Content,i*10 + 2,8, "UTF-8"); BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, BarcodeList.get(i)); if(!Cools.isEmpty(barcodeThread) && !barcodeThread.getBarcode().equals(barcode)) { barcodeThread.setBarcode(barcode); @@ -227,26 +232,29 @@ } // 外形检测 OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.1652", (short) ((staNosErrList.size()+1)*4)); // 不连续,多读中间一个 OperateResultExOne<byte[]> resultErr = siemensS7Net.Read("DB101.430", (short) (staNosErrList.size() *4)); // 不连续,多读中间一个 if (resultErr.IsSuccess){ for (int i = 0;i<staNosErrList.size();i++){ boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i*8+2, 1); boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr.Content, i*4, 1); StaProtocol staProtocol = station.get(staNosErrList.get(i)); staProtocol.setFrontErr(status[0]); staProtocol.setBackErr(status[1]); staProtocol.setHighErr(status[2]); staProtocol.setLeftErr(status[3]); staProtocol.setRightErr(status[4]); staProtocol.setWeightErr(status[5]); staProtocol.setGroupSupportErr(status[5]); staProtocol.setBarcodeErr(status[6]); staProtocol.setWeightErr(status[7]); short goodsHeight = siemensS7Net.getByteTransform().TransInt16(resultErr.Content, i * 4 + 2); staProtocol.setGoodsHeight(goodsHeight); } } // 读一楼连续8个站点,故障信息反馈 OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.3312", (short) (8*2)); // 故障信息反馈 OperateResultExOne<byte[]> resultErr2 = siemensS7Net.Read("DB101.442", (short) (staNos.size() * 4)); if (resultErr2.IsSuccess) { for (int i = 0; i < 8; i++) { boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i*2 + 1, 1); for (int i = 0; i < staNos.size(); i++) { boolean[] status = siemensS7Net.getByteTransform().TransBool(resultErr2.Content, i*4 + 2, 1); StaProtocol staProtocol = station.get(staNos.get(i)); // 站点编号 staProtocol.setBreakerErr(status[0]); staProtocol.setInfraredErr(status[1]); @@ -297,35 +305,22 @@ return; } int address = -1; switch (staProtocol.getSiteId()) { case 100: address = 0; break; case 101: address = 4; break; case 102: address = 8; break; case 103: address = 12; break; case 104: address = 16; break; case 105: address = 20; break; case 106: address = 24; break; case 107: address = 28; break; default: } if(address == -1) { throw new CoolException("写入站点异常:" + staProtocol.getSiteId()); } int address = staNos.indexOf(staProtocol.getSiteId()) * 4; OperateResult write; OperateResult write1; //任务下发次数 int writeCount = 0; do { write1 = siemensS7Net.Write("DB100." + (address+2), staProtocol.getStaNo()); // 目标站 write = siemensS7Net.Write("DB100." + address, staProtocol.getWorkNo().shortValue()); // 工作号 write1 = siemensS7Net.Write("DB100." + (address + 2), staProtocol.getStaNo()); // 目标站 Thread.sleep(200); if(write.IsSuccess && write1.IsSuccess){ break; } else { writeCount++; log.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); News.error("写入输送线命令失败。输送线plc编号={},站点数据={},写入次数={}", slave.getId(), JSON.toJSON(staProtocol), writeCount); } }while (writeCount<5); @@ -340,6 +335,7 @@ OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 输送线命令下发 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(staProtocol))); News.info("SiemensDevp"+" - 5"+" - 输送线命令下发 [id:{}] >>>>> 命令下发: {}", slave.getId(), JSON.toJSON(staProtocol)); } read(); } /** src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -93,7 +93,7 @@ @Value("${wms.url}") private String wmsUrl; public Integer wrkNo = 9901; public Integer wrkNo = 9997; /** * 组托 @@ -147,20 +147,13 @@ errMsg = "超重"; back = true; } if (!back && staProtocol.isBarcodeErr()) { if (!back && (staProtocol.isBarcodeErr()||Cools.isEmpty(barcode))) { errMsg = "扫码失败"; back = true; } // 退回 if (back) { if (back && staProtocol.getWorkNo() == 9999 && staProtocol.isInEnable() && staProtocol.isLoading() && staProtocol.isPakMk()) { MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, errMsg)); if (!staProtocol.isLoading()){ continue; } if (!staProtocol.isPakMk()) { continue; } staProtocol.setWorkNo(wrkNo); News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo); staProtocol.setStaNo(inSta.getBackSta().shortValue()); @@ -175,8 +168,9 @@ && staProtocol.isLoading() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && staProtocol.isPakMk()) { && staProtocol.isPakMk() && staProtocol.getWorkNo() == 9999) { if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode)) { News.info("{}条码扫描错误:{}",barcodeThread.getSlave().getId(),barcode); continue; } // 判断重复工作档 @@ -209,14 +203,12 @@ StartupDto dto = jsonObject.getObject("data", StartupDto.class); barcodeThread.setBarcode(""); staProtocol.setWorkNo(dto.getWorkNo()); staProtocol.setStaNo(RouteUtils.SouStaEnd(dto.getStaNo(),dto.getSourceStaNo())); staProtocol.setStaNo(dto.getStaNo().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); log.error("输送线下发2:"+dto.getWorkNo()+","+dto.getStaNo()); if (!result) { News.error(methodName + ":更新plc站点信息失败"); throw new CoolException("更新plc站点信息失败"); }else { ledThread.errorReset(); } @@ -237,7 +229,6 @@ } } } } @@ -274,7 +265,7 @@ staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) { if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk() && staProtocol.getWorkNo() == 9999) { News.warnNoLog(""+mark+" - 0"+" - 开始执行"); WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); if (wrkMast == null) { @@ -298,7 +289,7 @@ staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue()-(short)1)); devpThread.setPakMk(staProtocol.getSiteId(), false); MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); log.error("输送线下发4:"+9989+","+(pickSta.getStaNo().shortValue()-(short)1)); log.error("输送线下发4:"+wrkNo+","+(pickSta.getStaNo().shortValue()-(short)1)); //LED LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); // led 异常显示 @@ -351,7 +342,7 @@ // 更新站点信息 且 下发plc命令 staProtocol.setWorkNo(wrkMast.getWrkNo()); staProtocol.setStaNo((short) 161); staProtocol.setStaNo(staProtocol.getSiteId().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); log.error("输送线下发5:"+wrkMast.getWrkNo()+","+wrkMast.getStaNo()); @@ -419,7 +410,7 @@ wrkMast.setCrnEndTime(new Date()); if (wrkMastMapper.updateById(wrkMast) != 0) { // 复位堆垛机 log.info("出库任务完成下发堆垛机复位,任务号:{}",wrkMast.getWrkNo()); News.info("出库任务完成下发堆垛机复位,任务号:{}",wrkMast.getWrkNo()); crnThread.setResetFlag(true); } else { News.error(""+mark+" - 1"+" - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo()); @@ -429,7 +420,7 @@ News.errorNoLog(""+mark+" - 6"+" - 堆垛机信息不符合入库条件!!!" +" 堆垛机状态:"+crnProtocol.modeType+"==自动AUTO:" + CrnModeType.AUTO +"、堆垛机任务号:"+crnProtocol.getTaskNo()+"==工作档任务号:" + wrkMast.getWrkNo().shortValue() +"、状态枚举:"+crnProtocol.statusType+"==WAITING:90 //任务完成等待WCS确认):" + CrnStatusType.WAITING +"、状态枚举:"+crnProtocol.statusType+"==WAITING:10 //任务完成等待WCS确认):" + CrnStatusType.WAITING +"、货叉位置:"+crnProtocol.forkPosType+"==HOME:0 // 货叉原位:" + CrnForkPosType.HOME); } @@ -672,7 +663,7 @@ } // 判断堆垛机出库站状态 if (staProtocol.isAutoing() && staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { // 堆垛机控制过滤 if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { @@ -797,7 +788,7 @@ News.error(""+mark+" - 3"+" - 2"+" - 工作档库位移转失败,原因:检索目标库位失败!工作号={},源库位={}", wrkMast.getWrkNo(), wrkMast.getLocNo()); return; } if(sta.getLocType1() != sourceSta.getLocType1()){ if(!Objects.equals(sta.getLocType1(), sourceSta.getLocType1())){ News.error("移库目标库位类型与源库位类型不符"); return; } @@ -973,7 +964,7 @@ String errName = crnError == null ? String.valueOf(crnProtocol.getAlarm()) : crnError.getErrName(); BasErrLog basErrLog = new BasErrLog( null, // 编号 null, // 工作号 crnProtocol.getTaskNo().intValue(), // 工作号 now, // 发生时间 null, // 结束时间 null, // 工作状态 @@ -1047,7 +1038,7 @@ && staProtocol.isInEnable() && staProtocol.isEmptyMk() && staProtocol.isPakMk() && (staProtocol.getWorkNo() !=0 && staProtocol.getWorkNo() > 9700) && staProtocol.getWorkNo() == 9998 // 9997 回退 9998 空 9999 满 ) { News.warnNoLog(""+mark+" - 0"+" - 开始执行:空栈板初始化入库,叉车入库站放货"); @@ -1094,7 +1085,7 @@ // ledThread.errorReset(); } } else { staProtocol.setWorkNo(wrkNo++); staProtocol.setWorkNo(wrkNo); staProtocol.setStaNo(emptyInSta.getBackSta().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); @@ -1179,7 +1170,7 @@ "任务中异常" // 备注 ); if (!basDevpErrLogService.insert(basErrLog)) { log.error("输送线异常信息插入表asr_bas_devp_err_log异常:{}", basErrLog); News.error("输送线异常信息插入表asr_bas_devp_err_log异常:{}", basErrLog); } } } else { @@ -1189,7 +1180,7 @@ latestByTaskNo.setUpdateTime(now); latestByTaskNo.setStatus(2); if (!basDevpErrLogService.updateById(latestByTaskNo)) { log.error("输送线异常记录修复失败asr_bas_devp_err_log异常:{}", latestByTaskNo); News.error("输送线异常记录修复失败asr_bas_devp_err_log异常:{}", latestByTaskNo); } } } @@ -1202,7 +1193,7 @@ if (latest == null || !latest.getError().equals(plcErr) || latest.getStatus() == 2 ) { BasDevpErrLog basErrLog = new BasDevpErrLog( null, // 编号 null, // 工作号 staProtocol.getWorkNo(), // 工作号 now, // 发生时间 null, // 结束时间 null, // 工作状态 @@ -1224,7 +1215,7 @@ "无任务异常" // 备注 ); if (!basDevpErrLogService.insert(basErrLog)) { log.error("输送线异常记录asr_bas_devp_err_log异常:{}", basErrLog); News.error("输送线异常记录asr_bas_devp_err_log异常:{}", basErrLog); } } // 无异常 @@ -1235,7 +1226,7 @@ latest.setUpdateTime(now); latest.setStatus(2); if (!basDevpErrLogService.updateById(latest)) { log.error("输送线异常记录修复失败asr_bas_devp_err_log异常:{}", latest); News.error("输送线异常记录修复失败asr_bas_devp_err_log异常:{}", latest); } } } @@ -1296,7 +1287,7 @@ /** * 出库 ===>> 工作档信息写入led显示器 */ public synchronized void ledExecute(Integer mark) { public synchronized void ledExecute() { for (LedSlave led : slaveProperties.getLed()) { // 获取输送线plc线程 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); @@ -1348,32 +1339,16 @@ News.error("任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType()); break; } ledCommand.setLocNo(wrkMast.getLocNo()); ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); ledCommand.setStaNo(wrkMast.getStaNo()); ledCommand.setBarcode(wrkMast.getBarcode()); if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); // List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getSpecs(),wrkDetl.getManuDate(),wrkDetl.getModel(),wrkDetl.getWeight(),wrkDetl.getLength(),wrkDetl.getVolume()))); // wrkDetls.forEach(wrkDetl -> { // Double total = 0.0; // EntityWrapper<LocDetl> wrapper = new EntityWrapper<>(); // LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr())); // if (Cools.isEmpty(locDetl)) { // total = wrkDetl.getAnfme(); // } else { // total = locDetl.getAnfme(); // } // if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) { // ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); // } // if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) { // ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); // } // if (wrkMast.getIoType() == 107) { // ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); // } // }); wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getOrderNo(),wrkDetl.getMatnr(),wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(),wrkDetl.getManuDate(),wrkDetl.getModel(),wrkDetl.getAnfme()))); } else { ledCommand.getMatDtos().add(new MatDto("","","","","","","",1.0)); } commands.add(ledCommand); } @@ -1440,7 +1415,7 @@ } ledThread.errorReset(); if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) { News.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); News.error("显示默认内容{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); } } } @@ -1477,7 +1452,7 @@ if (null == loc) { for (Integer row : rows) { if (Utils.isShallowLoc(slaveProperties, row)) { loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType2()); loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1()); if (null != loc) {//对应深库位非在库状态,不能移库 String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo()); @@ -1609,7 +1584,7 @@ if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) { // 判断是不是已在原点 if(crnProtocol.getBay() == 0 && crnProtocol.getLevel() == 1) { if(crnProtocol.getBay() == 1 && crnProtocol.getLevel() == 1) { continue; } // 判断是不是空闲三分钟 @@ -1623,7 +1598,7 @@ if(diffInMillis < 10 * 1000) { // 空闲小于10秒则跳过 continue; } else { // 有入库任务或大于2分钟,回原点 int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 1).eq("crn_no", crn.getId()).in("wrk_sts", 2, 9, 10)); int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("io_type", 1).eq("crn_no", crn.getId()).in("wrk_sts", 2)); if(count == 0 && diffInMillis < 2 * 60 * 1000) { continue; } @@ -1639,8 +1614,8 @@ crnCommand.setCrnNo(crn.getId()); // 堆垛机编号 crnCommand.setTaskNo((short) 9999); // 工作号 crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式: 回原点 crnCommand.setSourcePosX((short) (crn.getId() == 1 ? 4 : crn.getId() == 2 ? 6 : crn.getId() == 3 ? 7 : 11)); // 源库位排 crnCommand.setSourcePosY((short) 0); // 源库位列 crnCommand.setSourcePosX((short) (crn.getId() == 1 ? 3 : 6)); // 源库位排 crnCommand.setSourcePosY((short) 1); // 源库位列 crnCommand.setSourcePosZ((short) 1); // 源库位层 crnCommand.setDestinationPosX((short) 0); // 目标库位排 crnCommand.setDestinationPosY((short) 0); // 目标库位列 src/main/resources/application.yml
@@ -48,7 +48,7 @@ # 堆垛机1 crn[0]: id: 1 ip: 10.10.10.1 ip: 192.168.5.10 port: 102 rack: 0 slot: 0 @@ -72,7 +72,7 @@ # 堆垛机2 crn[1]: id: 2 ip: 10.10.10.10 ip: 192.168.5.20 port: 102 rack: 0 slot: 0 @@ -97,7 +97,7 @@ # 输送线1 devp[0]: id: 1 ip: 10.10.10.18 ip: 192.168.5.40 port: 102 rack: 0 slot: 0 @@ -149,18 +149,18 @@ # 条码扫描仪1 barcode[0]: id: 1 ip: 10.10.10.121 ip: 192.168.5.42 port: 51236 # 条码扫描仪2 barcode[1]: id: 2 ip: 10.10.10.122 ip: 192.168.5.43 port: 51236 # LED1 led[0]: id: 1 ip: 10.10.10.190 ip: 192.168.5.104 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 101 @@ -168,7 +168,7 @@ # LED2 led[1]: id: 2 ip: 10.10.10.191 ip: 192.168.5.105 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 104 @@ -176,7 +176,7 @@ # LED3 led[2]: id: 3 ip: 10.10.10.192 ip: 192.168.5.106 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 106 @@ -184,7 +184,7 @@ # LED4 led[3]: id: 4 ip: 10.10.10.192 ip: 192.168.5.107 port: 5005 devpPlcId: ${wcs-slave.devp[0].id} staArr: 107 src/main/webapp/views/console.html
@@ -595,37 +595,17 @@ for (var i = 0; i < crns.length; i++) { var crnEl = $("#crn-" + crns[i].crnId); crnEl.attr("class", "machine " + crns[i].crnStatus); var unit = 31;//($('.item').eq(0).width() + 13) / 2; if (crns[i].bay < 0 || crns[i].bay === -2) { if (crns[i].bay < 0) { crns[i].bay = 1 } // crnEl.animate({left: (crns[i].bay * unit) + 'px'}, 1000); // crns[i].bay = 15; var offSet = 1450; // switch (i) 5 // case 0: // case 1: // case 2: // case 3: // unit = 35; // offSet = 500; // break; // case 5: // unit = 124; // offSet = 550; // break; // case 4: // case 6: // unit = 62; // offSet = 550; // break; // } console.log(offSet) var offSet = 350; if(crns[i].bay === 1){ crnEl.animate({left: offSet + 'px'}, 1000); } else { let lf = (offSet - crns[i].bay * 42); let lf = (offSet + (crns[i].bay - 1 )* 50); crnEl.animate({left: lf + 'px'}, 1000); }