src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/thread/RgvThread.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/MainProcess.java
@@ -24,6 +24,7 @@ private MainServiceImpl mainService; // 所属线程 private Thread thread; private Thread thread2; // 频率 private int i = 0; private int j = 0; @@ -36,21 +37,12 @@ thread = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { try { // 间隔 Thread.sleep(1000); // 系统运行状态判断 if (!SystemProperties.WCS_RUNNING_STATUS.get()) { continue; } //初始化RGV地图 // mainService.initRgvMap(); // 演示 // mainService.crnDemoOfLocMove1(); // 入出库模式切换函数 // mainService.ioConvert(); // 入库 ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档 mainService.generateStoreWrkFile(); // 组托 // 入库 ===>> 码垛位获取空板条码信息 @@ -70,7 +62,40 @@ // mainService.crnIoWrkMast(); // 入库 ===>> 执行对工作档的完成操作 mainService.storeFinished(); /////////////////////////////////////RGV调度///////////////////////////////////// // 异常信息记录 mainService.recErr(); // 入库 ===>> 空栈板初始化入库,叉车入库站放货 2楼 mainService.storeEmptyPlt(); // 出库 ===>> 工作档信息写入led显示器 mainService.ledExecute(); // 其他 ===>> LED显示器复位,显示默认信息 mainService.ledReset(); //码垛完成驱动托盘下一步扫码入库 mainService.stackingCompletionDriveTray(); mainService.armNoStartTwoLo(); mainService.armNoCleanUpTwoLo(); } catch (Exception e) { e.printStackTrace(); } } }); thread2 = new Thread(() -> { while (!Thread.currentThread().isInterrupted()) { try { // 间隔 Thread.sleep(400); // 系统运行状态判断 if (!SystemProperties.WCS_RUNNING_STATUS.get()) { continue; } //刷新RGV地图 mainService.refreshRgvMap(); @@ -101,49 +126,18 @@ mainService.rgvCompleteWrkMastSta(); /////////////////////////////////////RGV调度///////////////////////////////////// // 异常信息记录 mainService.recErr(); // 入库 ===>> 空栈板初始化入库,叉车入库站放货 2楼 mainService.storeEmptyPlt(); // 入库 ===>> 空栈板初始化入库,1楼叠盘机空板入库 mainService.storeEmptyPlt3(); // 入库 ===>> 空栈板初始化入库,1楼叠盘机叠盘 mainService.storeEmptyPlt2(); // 拣料、并板、盘点再入库拆盘区 1楼拆垛位置 空板叠盘 mainService.storeEmptyPlt4(); // 出库 ===>> 工作档信息写入led显示器 mainService.ledExecute(); // 其他 ===>> LED显示器复位,显示默认信息 mainService.ledReset(); // // 其他 ===>> 入出库模式切换 // i++; // if (i > 1) { // mainService.ioConvert(); // i = 0; // } //码垛位自动补充空板:驱动拆盘机输出托盘 // mainService.dischargingMachineOutputTray(); // //拆盘机处空板扫码,驱动托盘向码垛位,不入库 // mainService.scanBarcodeEmptyBoard(); //码垛完成驱动托盘下一步扫码入库 mainService.stackingCompletionDriveTray(); //拆垛完成继续下一步 出库至月台出库口 mainService.stackingCompletionDriveTray2(); //贴标完成继续下一步 // mainService.stackingCompletionDriveTray3(); //拆垛完成继续下一步 运行途中自动避让空板 mainService.stackingCompletionDriveTray4(); //拆垛完成托盘继续下一步2==3废弃 // mainService.stackingCompletionDriveTrayOk2(); //退货码垛完成托盘继续下一步 mainService.stackingCompletionDriveTrayOk3(); mainService.armNoStartTwoLo(); mainService.armNoCleanUpTwoLo(); } catch (Exception e) { @@ -152,11 +146,13 @@ } }); thread.start(); thread2.start(); } @PreDestroy public void shutDown(){ if (thread != null) thread.interrupt(); if (thread2 != null) thread2.interrupt(); } } src/main/java/com/zy/core/thread/RgvThread.java
@@ -74,17 +74,6 @@ // 启动任务下发线程 new Thread(this::taskIssued).start(); while (true) { try { Thread.sleep(500); } catch (Exception e) { // e.printStackTrace(); } } } @@ -268,6 +257,17 @@ rgvProtocol.setxSpeed((short) 0); rgvProtocol.setxDistance((short) 0); rgvProtocol.setxDuration((short) 0); try { // 根据实时信息更新数据库 BasRgvService basRgvService = SpringUtils.getBean(BasRgvService.class); BasRgv basRgv = new BasRgv(); basRgv.setRgvNo(slave.getId()); basRgv.setRgvSts((int)rgvProtocol.getMode()); basRgv.setLoaded2(rgvProtocol.getLoaded2().intValue()); if (!basRgvService.updateById(rgvProtocol.toSqlModel(basRgv))){ log.error("RGV plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } catch (Exception ignore){} } @Override src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -126,6 +126,19 @@ crnProtocol.setyDistance((short) 0); crnProtocol.setxDuration((short) 0); crnProtocol.setyDuration((short) 0); try { // 根据实时信息更新数据库 BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); BasCrnp basCrnp = new BasCrnp(); basCrnp.setCrnNo(slave.getId()); basCrnp.setCrnSts((int)crnProtocol.getMode()); if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){ log.error("堆垛机plc数据库更新失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } catch (Exception ignore){} } @Override src/main/java/com/zy/core/thread/SiemensDevpThread.java
@@ -97,6 +97,9 @@ public IoModeType ioModeOf4F = IoModeType.NONE; // public IoModeType ioMode = IoModeType.NONE; private boolean connectDev = false; public SiemensDevpThread(DevpSlave slave) { this.slave = slave; } @@ -126,7 +129,107 @@ @Override @SuppressWarnings("InfiniteLoopStatement") public void run() { connect(); connectDev = this.connect(); while(!connectDev){ try { 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 initSite() { try{ ArrayList<Integer> staNos = getStaNo(); // 站点编号 for (Integer siteId : staNos) { StaProtocol staProtocol = station.get(siteId); if (null == staProtocol) { staProtocol = new StaProtocol(); staProtocol.setSiteId(siteId); station.put(siteId, staProtocol); } staProtocol.setSiteId(siteId); staProtocol.setWorkNo(0); // ID staProtocol.setAutoing(false); // 自动 staProtocol.setLoading(false); // 有物 staProtocol.setInEnable(false); // 可入 staProtocol.setOutEnable(false); // 可出 staProtocol.setEmptyMk(false); // 空板信号 staProtocol.setStaNo(0); // 目标站 if (!staProtocol.isPakMk() && !staProtocol.isLoading()) { staProtocol.setPakMk(true); } } // 根据实时信息更新数据库 try { List<BasDevp> basDevps = new ArrayList<>(); for (Integer siteId : staNos) { StaProtocol staProtocol = station.get(siteId); basDevps.add(staProtocol.toSqlModel()); } BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class); if (null != basDevpService && !basDevpService.updateBatchById(basDevps)) { throw new Exception("更新数据库数据失败"); } } catch (Exception e) { e.printStackTrace(); OutputQueue.DEVP.offer(MessageFormat.format("【{0}】更新数据库数据失败 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot())); log.error("更新数据库数据失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } catch (Exception e){ try{ log.error(e.getMessage()); } catch (Exception e1){ } log.error("初始化站点状态异常"); } } private void devConnect() { while (true) { try { Thread.sleep(1000L); if(!connectDev){ try { connectDev = this.connect(); Thread.sleep(100L); } catch (Exception e){ } } } catch (Exception e) { log.error("rgv连接失败!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); initSite(); // e.printStackTrace(); } } } private void writeStatusDev() { while (true) { try { int step = 1; @@ -137,14 +240,10 @@ switch (step) { // 读数据 case 1: read(); // read(); break; // 写数据 ID+目标站 case 2: // write3((StaProtocol)task.getData()); // Thread.sleep(400); // write4((StaProtocol)task.getData()); // Thread.sleep(400); write((StaProtocol)task.getData()); break; // 写数据 ID+目标站 码垛完成 给输送线写任务完成 @@ -169,10 +268,44 @@ // heartbeat(); Thread.sleep(400); } catch (Exception e) { e.printStackTrace(); // e.printStackTrace(); try{ log.error("dev写线程异常"+e.getMessage()); } catch (Exception e1){ } log.error("DEV数据写入线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } } } private void readStatusDev() { while (true) { try { if(!connectDev){ try { Thread.sleep(1000L); } catch (Exception e){ } continue; } Thread.sleep(200); read(); } catch (Exception e) { log.error("RGV读线程异常"+e.getMessage()); log.error("RGV数据读取线程异常!!! ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); initSite(); // e.printStackTrace(); } } } @Override @@ -383,6 +516,7 @@ } else { OutputQueue.DEVP.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())); // log.error("读取输送线plc状态信息失败 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); initSite(); } }