pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/RgvThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/SiemensDevpThread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
pom.xml
@@ -61,12 +61,12 @@ <!-- </dependency>--> <!-- 显式排除slf4j-simple --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.30</version> <scope>provided</scope> <!-- 或直接删除该依赖 --> </dependency> <!-- <dependency>--> <!-- <groupId>org.slf4j</groupId>--> <!-- <artifactId>slf4j-simple</artifactId>--> <!-- <version>1.7.30</version>--> <!-- <scope>provided</scope> <!– 或直接删除该依赖 –>--> <!-- </dependency>--> <dependency> <groupId>com.dameng</groupId> <artifactId>DmJdbcDriver8</artifactId> src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -200,6 +200,25 @@ continue; } String barcode = barcodeThread.getBarcode(); int signI = 0; while (signI<6){ Thread.sleep(200); signI = signI +1; // 获取条码扫描仪信息 if (Cools.isEmpty(barcode) || barcode.equals("000000")) { devpThread.setErrorDev(staProtocol.getSiteId(), "循环次数:"+signI+";扫码值:"+barcode); BarcodeThread barcodeThreadO = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); if (barcodeThreadO == null) { continue; } barcode = barcodeThreadO.getBarcode(); } else { break; } } if (!Cools.isEmpty(barcode) && !barcode.equals("99999999") && !barcode.equals("000000")) { // 请求wms接口,获取工作号和目标库位 ToWmsDTO toWmsDTO = new ToWmsDTO(staProtocol.getSiteId(),staProtocol.getGrossWt(),barcode, workNo == 9998? 0 : 1); @@ -1664,6 +1683,8 @@ if (!sign && staList.size()==1){ if (rgvOtherIDLEOther(rgvSlave)){ if (!rgvOtherIDLE(rgvSlave,staList.get(0))){ System.out.println("空闲就近跳过==="+rgvSlave.getId()+"==="); sign=true; } } @@ -1675,6 +1696,8 @@ Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); for (RgvSlave.RgvStn rgvSuper : rgvSlave.getRgvSuperSta()){ if (rgvSuper.getStaNo().equals(outStaNo)){ System.out.println("空闲就近跳过后因最远再次执行==="+rgvSlave.getId()+"==="); sign=false; break; } @@ -1696,6 +1719,9 @@ if (taskWrk != null) { BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { System.out.println("全范围执行==="+rgvSlave.getId()+"==="+taskWrk); System.out.println("全范围执行==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); sign = taskGenerate(rgvSlave, rgvStn, 0); } } @@ -1717,6 +1743,9 @@ Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { if (rgvStnOut.getStaNo().equals(outStaNo)) { System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+taskWrk); System.out.println("筛选范围内取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); sign = taskGenerate(rgvSlave, rgvStn, 0); break; } @@ -1734,12 +1763,14 @@ if (!sign && staList.size()==1){ if (rgvOtherIDLEOther2(rgvSlave)){ if (!rgvOtherIDLE2(rgvSlave,staList.get(0))){ System.out.println("运行就近跳过==="+rgvSlave.getId()+"==="); sign=true; } } } if (!sign) { if (!sign && staList.size()>1) { for (Integer staNoNow : rangeList) { for (RgvSlave.RgvStn rgvStn : rgvSlave.getRgvInSta()) { if (rgvStn.getStaNo().equals(staNoNow)) { @@ -1747,6 +1778,9 @@ if (taskWrk != null) { BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()))); if (RouteUtils.CheckIfItIsWithinTheRange(rangeList, basDevpPosition.getPlcPosition(), basDevpPositions, itSmall)) { System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+taskWrk); System.out.println("筛选半边范围内任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); sign = taskGenerate(rgvSlave, rgvStn, 0); } } @@ -1768,6 +1802,9 @@ Integer outStaNo = BarcodeUtils.getOutStaNo(taskWrk.getOriginTargetPoint()); for (RgvSlave.RgvStn rgvStnOut : rgvSlave.getRgvOutSta()) { if (rgvStnOut.getStaNo().equals(outStaNo)) { System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+taskWrk); System.out.println("筛选半边范围取货任务==="+rgvSlave.getId()+"==="+JSON.toJSONString(belongToRange)); sign = taskGenerate(rgvSlave, rgvStn, 0); break; } src/main/java/com/zy/core/thread/RgvThread.java
@@ -104,6 +104,7 @@ private void rgvConnect() { while (true) { try { Thread.sleep(1000); if(!connectRgv){ try { connectRgv = this.connect(); @@ -308,7 +309,9 @@ rgvRun.currentTimeMilliOld = System.currentTimeMillis()+50; rgvRun.setRgvNo(slave.getOtherId()); RgvRunCache.updateRgvStatus(rgvRun); RgvErrCache.updateRgvErr(slave.getId(),errorRgv); if (!errorRgv.equals("无")){ RgvErrCache.updateRgvErr(slave.getId(),errorRgv); } continue; } @@ -494,7 +497,7 @@ return false; } if (!rgvProtocol.getStatusType().equals(RgvStatusType.IDLE) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) { errorRgv = slave.getId()+"号小车非空闲"; errorRgv = "无"; return false; } if ( (Math.abs(rgvProtocol.getRgvPos() - rgvProtocol.getRgvPosDestination())>100) && !rgvProtocol.getStatusType().equals(RgvStatusType.ROAM)) { src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -50,6 +50,8 @@ add(1008);add(1009);add(1010);add(1011);add(1012);add(1013);add(1014);add(1015); add(1016);add(1017);add(1018);add(1019);add(1020);add(1021);add(1022);add(1023); }}; private boolean connectDev = false; /** * 条码数量 @@ -82,36 +84,53 @@ @Override @SuppressWarnings("InfiniteLoopStatement") public void run() { connect(); while (true) { connectDev = connect(); while(!connectDev){ try { int step = 1; Task task = MessageQueue.poll(SlaveType.Devp, slave.getId()); if (task != null) { step = task.getStep(); } switch (step) { // 读数据 case 1: read(); break; // 写数据 ID+目标站 case 2: write((StaProtocol)task.getData()); break; default: break; } // 心跳 // heartbeat(); Thread.sleep(400); } catch (Exception e) { e.printStackTrace(); } connectDev = this.connect(); Thread.sleep(100); } catch (Exception e){ } } // 启动线程自动重连 new Thread(this::devConnect).start(); new Thread(this::readStatusDev).start(); new Thread(this::writeStatusDev).start(); } private void devConnect() { while (true) { try { Thread.sleep(1000); if(!connectDev){ try { connectDev = this.connect(); Thread.sleep(100); } catch (Exception e){ } } } catch (Exception e) { log.info("dev连接失败 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); // log.error("rgv连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); try{ DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); deviceErrorService.addDeviceError("dev", slave.getId(), "rgv连接失败"+e.getMessage()); } catch (Exception e2){ // log.error("e2:"+e2.getMessage()); } initSite(); // e.printStackTrace(); } } } /** * 初始化站点状态 */ @@ -161,6 +180,61 @@ return result; } private void writeStatusDev() { while (true) { try { int step = 1; Task task = MessageQueue.poll(SlaveType.Devp, slave.getId()); if (task != null) { step = task.getStep(); } switch (step) { // 读数据 case 1: // read(); break; // 写数据 ID+目标站 case 2: write((StaProtocol)task.getData()); break; default: break; } // 心跳 // heartbeat(); Thread.sleep(200); } catch (Exception e) { // e.printStackTrace(); } } } private void readStatusDev() { while (true) { try { Thread.sleep(50); // System.out.println("读线程"+ slave.getId()); read(); } catch (Exception e) { log.error("RGV数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); try{ DeviceErrorService deviceErrorService = SpringUtils.getBean(DeviceErrorService.class); deviceErrorService.addDeviceError("rgv", slave.getId(), "RGV数据读取线程异常"+e.getMessage()); } catch (Exception e2){ // log.error("e2:"+e2.getMessage()); } initSite(); // e.printStackTrace(); } } } /** * 读取状态 ====> 整块plc */ @@ -191,7 +265,7 @@ staProtocol.setInEnable(status[2]); // 可入 // staProtocol.setInEnable(true); // 可入 staProtocol.setOutEnable(status[3]);// 可出 staProtocol.setOutEnable(true);// 可出 // staProtocol.setOutEnable(true);// 可出 staProtocol.setEmptyMk(status[4]); // 空板信号 staProtocol.setFullPlt(status[5]); // 满托盘 staProtocol.setHigh(status[6]); // 高库位 @@ -212,7 +286,7 @@ } //条码 Thread.sleep(200); // Thread.sleep(50); OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB400.100.0",(short) (barcodeSize*8)); if (result2.IsSuccess) { for (int i = 0; i < barcodeSize; i++) { @@ -225,7 +299,7 @@ } //条码 Thread.sleep(200); // Thread.sleep(50); int[] staW = new int[]{1004,1014,1020}; OperateResultExOne<byte[]> result3 = siemensS7Net.Read("DB400.148.0",(short) (staW.length*4));