src/main/java/com/zy/common/model/SearchLocParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/controller/SiteController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/protocol/StaProtocol.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensDevpThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/pipeline.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/common/model/SearchLocParam.java
@@ -41,6 +41,8 @@ public static class WantBucket{ private int site; private int bucketType; // 罐装线罐装数量(拖) private int wantBucketCount; } public static void main(String[] args) { src/main/java/com/zy/controller/SiteController.java
@@ -78,8 +78,8 @@ vo.setLoading(staProtocol.isLoading()?"Y":"N"); // 有物 vo.setInEnable(staProtocol.isInEnable()?"Y":"N"); // 可入 vo.setOutEnable(staProtocol.isOutEnable()?"Y":"N"); // 可出 vo.setPakMk(staProtocol.isPakMk()?"Y":"N"); // 入库标记 vo.setEmptyMk(staProtocol.isEmptyMk()?"Y":"N"); // 空板信号 vo.setPakMk(String.valueOf(staProtocol.getWantBucketFlag())); // 入库标记 -> 要桶信号 vo.setEmptyMk(String.valueOf(staProtocol.getWantBucketCount())); // 空板信号 -> 要桶数 vo.setStaNo(staProtocol.getStaNo()); // 目标站 vo.setWorkNo(staProtocol.getWorkNo()); // vo.setLocType1(staProtocol.isHigh() != staProtocol.isLow() && staProtocol.isLow() ? "低" : "高"); //高低库位 src/main/java/com/zy/core/model/protocol/StaProtocol.java
@@ -85,6 +85,9 @@ // 要桶型------------------------------------------------------------------------- private int wantBucketFlag = 0; // 罐装线罐装数量(拖) private int wantBucketCount = 0; // 出罐装线 罐装线反馈给wcs---------------------------------------------------------- // 任务号 src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -156,6 +156,10 @@ case 5: writeGzxkc((StaProtocol)task.getData()); break; // 给罐装线写罐装数量 case 6: writeGzsl((StaProtocol)task.getData()); break; default: break; } @@ -227,19 +231,26 @@ OperateResultExOne<byte[]> read = siemensS7Net.Read("DB101.0", (short) 64); if (read.IsSuccess) { // 15秒打印一下日志 if (System.currentTimeMillis() - lastLogTime >= 15000) { OperateResultExOne<byte[]> readKc = siemensS7Net.Read("DB100.6", (short) 2); if(readKc.IsSuccess){ short i = siemensS7Net.getByteTransform().TransInt16(readKc.Content, 0); log.info("读{}号罐装线可出信号成功,值:{}", slave.getId() -3, i); } lastLogTime = System.currentTimeMillis(); } // if (System.currentTimeMillis() - lastLogTime >= 30000) { // OperateResultExOne<byte[]> readKc = siemensS7Net.Read("DB100.6", (short) 4); // if(readKc.IsSuccess){ // short i = siemensS7Net.getByteTransform().TransInt16(readKc.Content, 0); // short wantBucketCount = siemensS7Net.getByteTransform().TransInt16(readKc.Content, 2); // log.info("读{}号罐装线可出信号成功,值:{},剩余要桶数量:{}", slave.getId() -3, i, wantBucketCount); // } // lastLogTime = System.currentTimeMillis(); // } // 成品信息反馈到罐装线出口站点 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2); StaProtocol staProtocol = devpThread.getStation().get(gzxResultSite.get(slave.getId()-4)); if (staProtocol != null) { staProtocol.setWantBucketFlag(siemensS7Net.getByteTransform().TransInt16(read.Content, 0));// 罐装线要桶型信号 OperateResultExOne<byte[]> read2 = siemensS7Net.Read("DB100.8", (short) 2); // 罐装线罐装数量(拖) if(read2.IsSuccess){ staProtocol.setWantBucketCount(siemensS7Net.getByteTransform().TransInt16(read2.Content, 0)); } else { log.error("读{}号罐装线要拖数量失败", slave.getId() -3); } staProtocol.setWrkNo(siemensS7Net.getByteTransform().TransInt16(read.Content, 2)); double weight208l1 = siemensS7Net.getByteTransform().TransSingle(read.Content, 4); // 200L桶1净重 double weight208l2 = siemensS7Net.getByteTransform().TransSingle(read.Content, 8); // 200L桶2净重 @@ -575,6 +586,47 @@ } /** * 给罐装线写罐装数量 */ private void writeGzsl(StaProtocol staProtocol) throws InterruptedException { if (null == staProtocol) { return; } short[] common = new short[1]; common[0] = (short) staProtocol.getWantBucketCount(); OperateResult write; //任务下发次数 int writeCount = 0; do { write = siemensS7Net.Write("DB100.8", common); Thread.sleep(200); OperateResultExOne<byte[]> read = siemensS7Net.Read("DB100.8", (short) 2); if(write.IsSuccess && read.IsSuccess){ short i = siemensS7Net.getByteTransform().TransInt16(read.Content, 0); if ( i != common[0]) { writeCount++; log.error("给罐装线写罐装数量成功,但回读失败:读取值:{},输送线plc编号={},写入次数={}", i, slave.getId(), writeCount); continue; } break; } else { writeCount++; log.error("给罐装线写罐装数量:{}失败。输送线plc编号={},写入次数={}", common[0], slave.getId(), writeCount); } }while (writeCount<5); if (!write.IsSuccess) { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】给给罐装线写罐装数量失败。输送线plc编号={1},站点数据={2}", slave.getId(), staProtocol.getWantBucketCount())); News.error("给罐装线写罐装数量失败。输送线plc编号={},站点数据={}", slave.getId(), staProtocol.getWantBucketCount()); } else { OutputQueue.DEVP.offer(MessageFormat.format("【{0}】 给罐装线写罐装数量命令下发成功 [id:{1}] >>>>> {2}", DateUtils.convert(new Date()), slave.getId(), staProtocol.getWantBucketCount())); News.info("给罐装线写罐装数量号命令下发成功 [id:{}] >>>>> 命令下发: {}", slave.getId(), staProtocol.getWantBucketCount()); } } /** * 心跳 */ private void heartbeat(){ src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -265,6 +265,9 @@ barcodeThread.setBarcode(""); staProtocol.setWorkNo(dto.getWorkNo()); staProtocol.setStaNo(dto.getStaNo().shortValue()); if (dto.getStaNo() == 1071 || dto.getStaNo() == 1064 || dto.getStaNo() == 1078) { decreaseWantBucketCount(dto.getStaNo(),1); } devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); log.info("输送线下发2:"+dto.getWorkNo()+","+dto.getStaNo()); @@ -302,10 +305,47 @@ StaProtocol staProtocol1084 = devpThread.getStation().get(1084); StaProtocol staProtocol1087 = devpThread.getStation().get(1087); List<SearchLocParam.WantBucket> wantBucketList = new ArrayList<>(); wantBucketList.add(new SearchLocParam.WantBucket(1064,staProtocol1084.getWantBucketFlag())); wantBucketList.add(new SearchLocParam.WantBucket(1071,staProtocol1081.getWantBucketFlag())); wantBucketList.add(new SearchLocParam.WantBucket(1078,staProtocol1087.getWantBucketFlag())); wantBucketList.add(new SearchLocParam.WantBucket(1064,staProtocol1084.getWantBucketFlag(),staProtocol1084.getWantBucketCount())); wantBucketList.add(new SearchLocParam.WantBucket(1071,staProtocol1081.getWantBucketFlag(),staProtocol1081.getWantBucketCount())); wantBucketList.add(new SearchLocParam.WantBucket(1078,staProtocol1087.getWantBucketFlag(),staProtocol1087.getWantBucketCount())); return wantBucketList; } /** * 罐装线要桶数量减少 */ private void decreaseWantBucketCount(int site, int decrease) { int siteNew; switch (site) { case 1071: siteNew = 1081;break; case 1064: siteNew = 1084;break; case 1078: siteNew = 1087;break; default: return; } SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2); StaProtocol staProtocol = devpThread.getStation().get(siteNew); int count = staProtocol.getWantBucketCount(); int remaining = count - decrease; if ( remaining < 0) { log.error("自动出空桶减少罐装线要桶数异常,站点:{},减少前:{},减少数:{},剩余要桶数:{}", site, count, decrease, remaining); return; } staProtocol.setWantBucketCount(remaining); // 设置剩余要桶数 boolean offer = MessageQueue.offer(SlaveType.Devp, inGzxSiteList.indexOf(site) + 4, new Task(6, staProtocol)); if (offer) { log.info("自动出空桶减少罐装线要桶数命令推送队列成功:站点:{},剩余要桶数:{}" ,site, remaining); } else { log.error("自动出空桶减少罐装线要桶数命令推送队列失败:站点:{},剩余要桶数:{}" ,site, remaining); } log.info("自动出空桶减少罐装线要桶数成功,站点:{},减少前:{},减少数:{},剩余要桶数:{}", site, count, decrease, remaining); } /** @@ -1144,9 +1184,6 @@ // 获取堆垛机信息 CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); CrnProtocol crnProtocol = crnThread.getCrnProtocol(); if (crnProtocol == null) { continue; } if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) { // 判断是不是已在原点 @@ -1178,6 +1215,8 @@ if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) { News.error("回原点任务下发失败", crn.getId(), JSON.toJSON(crnCommand)); } else { basCrnp.setModiTime(new Date()); basCrnpService.updateById(basCrnp); // 设置更新时间,避免重复下发回原点 log.info("{}号堆垛机回原点任务下发成功:{}", crn.getId(), JSON.toJSON(crnCommand)); } } @@ -1962,7 +2001,7 @@ String[] split = config.getValue().split("="); for (SearchLocParam.WantBucket wantBucket : getWantBucketFlag()) { if (wantBucket.getBucketType() != 0) { // 罐装线有要桶信号 if (wantBucket.getBucketType() != 0 && wantBucket.getWantBucketCount() >= 2) { // 罐装线有要桶信号 boolean flag = true; // 是否需要自动补,true不需要,false需要 for(String item: split) { if(String.valueOf(wantBucket.getSite()).equals(item)) { @@ -2038,10 +2077,11 @@ log.info("自动出空桶请求wms原始返回:" + response); JSONObject jsonObject = JSON.parseObject(response); if (jsonObject.getInteger("code").equals(200)) { decreaseWantBucketCount(wantBucket.getSite(),2); log.info("自动出空桶成功:{}",wantBucket.getSite()); return; } else { News.error("自动空桶出库" + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); News.error("自动空桶出库" + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/autoOutEmptyBucket", JSON.toJSONString(param), response); } } catch (Exception e) { e.printStackTrace(); src/main/webapp/views/pipeline.html
@@ -112,8 +112,8 @@ <th>有物</th> <th>可入</th> <th>可出</th> <th>入库标记</th> <th>空板信号</th> <th>要桶信号</th> <th>要桶数</th> <th>目标站</th> <th>高低库位</th> </tr>