From c48d0150aa9f6b297671f28adb6b9dc95b529cfc Mon Sep 17 00:00:00 2001 From: zhang <zc857179121@qq.com> Date: 星期四, 05 六月 2025 16:59:39 +0800 Subject: [PATCH] 1 --- src/main/java/com/zy/core/thread/SiemensCrnThread.java | 131 ++++++++++++++++++++++++++++++++++++++----- 1 files changed, 116 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SiemensCrnThread.java b/src/main/java/com/zy/core/thread/SiemensCrnThread.java index dd1a66d..fca86cb 100644 --- a/src/main/java/com/zy/core/thread/SiemensCrnThread.java +++ b/src/main/java/com/zy/core/thread/SiemensCrnThread.java @@ -5,16 +5,20 @@ import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.alibaba.fastjson.JSON; +import com.core.common.Cools; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.zy.asrs.entity.BasCrnOpt; import com.zy.asrs.entity.BasCrnp; import com.zy.asrs.service.BasCrnOptService; import com.zy.asrs.service.BasCrnpService; +import com.zy.common.utils.News; import com.zy.core.CrnThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; -import com.zy.core.enums.*; +import com.zy.core.enums.CrnStatusType; +import com.zy.core.enums.CrnTaskModeType; +import com.zy.core.enums.SlaveType; import com.zy.core.model.CrnSlave; import com.zy.core.model.Task; import com.zy.core.model.command.CrnCommand; @@ -127,10 +131,10 @@ if(connect.IsSuccess){ result = true; 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())); - log.info("鍫嗗灈鏈簆lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + News.info("鍫嗗灈鏈簆lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } else { 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())); - log.error("鍫嗗灈鏈簆lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + News.error("鍫嗗灈鏈簆lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); initCrn(); } // siemensNet.ConnectClose(); @@ -148,6 +152,7 @@ crnProtocol = new CrnProtocol(); crnProtocol.setCrnNo(this.getSlave().getId()); } + crnProtocol.setCrnNo(this.getSlave().getId()); crnProtocol.setMode(siemensNet.getByteTransform().TransInt16(result.Content, 0)); crnProtocol.setTaskNo(siemensNet.getByteTransform().TransInt16(result.Content, 2)); crnProtocol.setStatus(siemensNet.getByteTransform().TransInt16(result.Content, 4)); @@ -169,11 +174,38 @@ crnProtocol.setYDistance(siemensNet.getByteTransform().TransSingle(result.Content, 44)); crnProtocol.setXDuration(siemensNet.getByteTransform().TransSingle(result.Content, 48)); crnProtocol.setYDuration(siemensNet.getByteTransform().TransSingle(result.Content, 52)); + crnProtocol.setStatusEnd(false); + + try{ + OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20); + if (resultRead.IsSuccess) { + CrnCommand one = new CrnCommand(); + one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2)); + one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4)); + one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6)); + one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8)); + one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10)); + one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12)); + one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14)); + one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16)); + if (this.slave.getId() == 1){ + if (one.getDestinationPosX() == 3 && one.getDestinationPosY() == 2 && one.getDestinationPosZ() == 1){ + crnProtocol.setStatusEnd(true); + } + } else if (this.slave.getId() == 3){ + if (one.getDestinationPosX() == 19 && one.getDestinationPosY() == 6 && one.getDestinationPosZ() == 1){ + crnProtocol.setStatusEnd(true); + } + } + } + } catch (Exception e){ } OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); // 澶嶄綅淇″彿 - if (crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) { + if (!Cools.isEmpty(crnProtocol.getStatusType()) && crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) { + News.error("---绗竴姝ャ�乕鍫嗗灈鏈哄彿锛歿}, 宸ヤ綔鍙凤細{}, 杞借揣鍙颁俊鍙�:{}]==>> 鐘舵�佷负10锛岀瓑寰呯‘璁わ紒锛�", + slave.getId(),crnProtocol.getTaskNo(), crnProtocol.getLoaded()==1 ? "鏈夌墿" : "鏃犵墿"); if (resetFlag) { CrnCommand crnCommand = new CrnCommand(); crnCommand.setAckFinish((short)1); @@ -189,19 +221,19 @@ BasCrnp basCrnp = new BasCrnp(); basCrnp.setCrnNo(slave.getId()); if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){ - log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); + News.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } catch (Exception ignore){} } else { initCrn(); 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())); - log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); +// News.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}] [rack:{}] [slot:{}]", slave.getId(), slave.getIp(), slave.getPort(), slave.getRack(), slave.getSlot()); } } catch (Exception e) { - e.printStackTrace(); +// e.printStackTrace(); OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戣鍙栧爢鍨涙満plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - log.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); +// News.error("璇诲彇鍫嗗灈鏈簆lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); initCrn(); } } @@ -220,9 +252,26 @@ */ private boolean write(CrnCommand command) throws InterruptedException { if (null == command) { - log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); + News.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); return false; } + + //涓嬪彂鍓嶅厠闅嗕竴浠� + CrnCommand crnCommand = new CrnCommand(); + crnCommand.setCrnNo(command.getCrnNo()); + crnCommand.setAckFinish(command.getAckFinish()); + crnCommand.setTaskNo(command.getTaskNo()); + crnCommand.setTaskMode(command.getTaskMode()); + crnCommand.setSourcePosX(command.getSourcePosX()); + crnCommand.setSourcePosY(command.getSourcePosY()); + crnCommand.setSourcePosZ(command.getSourcePosZ()); + crnCommand.setDestinationPosX(command.getDestinationPosX()); + crnCommand.setDestinationPosY(command.getDestinationPosY()); + crnCommand.setDestinationPosZ(command.getDestinationPosZ()); + crnCommand.setSourceStaNo(command.getSourceStaNo()); + crnCommand.setDestinationStaNo(command.getDestinationStaNo()); + crnCommand.setCommand(command.getCommand()); + // convertRow(command); command.setCrnNo(slave.getId()); short[] array = new short[10]; @@ -238,10 +287,62 @@ array[9] = command.getCommand(); OperateResult result = siemensNet.Write("DB100.0", array); - if (command.getAckFinish() == 0) { - short commandFinish = 1; + if(!result.IsSuccess){ + log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(crnCommand)); + MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand)); Thread.sleep(100); - result = siemensNet.Write("DB100.18", commandFinish); + readStatus(); + return false; + } + + //鍫嗗灈鏈轰换鍔″啓鍏ュ悗锛屽洖璇讳竴娆★紝鐪嬫槸鍚︽垚鍔� + Thread.sleep(200); + OperateResultExOne<byte[]> resultRead = siemensNet.Read("DB100.0", (short) 20); + if (resultRead.IsSuccess) { + CrnCommand one = new CrnCommand(); + one.setTaskNo(siemensNet.getByteTransform().TransInt16(resultRead.Content, 2)); + one.setTaskMode(siemensNet.getByteTransform().TransInt16(resultRead.Content, 4)); + one.setSourcePosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 6)); + one.setSourcePosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 8)); + one.setSourcePosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 10)); + one.setDestinationPosX(siemensNet.getByteTransform().TransInt16(resultRead.Content, 12)); + one.setDestinationPosY(siemensNet.getByteTransform().TransInt16(resultRead.Content, 14)); + one.setDestinationPosZ(siemensNet.getByteTransform().TransInt16(resultRead.Content, 16)); + if (!command.getTaskNo().equals(one.getTaskNo()) || command.getTaskMode()!=one.getTaskMode() + || command.getSourcePosX()!=one.getSourcePosX() || command.getSourcePosY()!=one.getSourcePosY() + || command.getSourcePosZ()!=one.getSourcePosZ() || command.getDestinationPosX()!=one.getDestinationPosX() + || command.getDestinationPosY()!=one.getDestinationPosY() || command.getDestinationPosZ()!=one.getDestinationPosZ() + ){ + News.error("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇诲け璐id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); + News.error("鍫嗗灈鏈哄懡浠ゅ洖璇诲け璐ュ悗锛岄噸鏂版坊鍔犱换鍔″埌闃熷垪 ===>> [id:{}],{}", slave.getId(), JSON.toJSON(crnCommand)); +// MessageQueue.offer(SlaveType.Crn, slave.getId(), new Task(2, crnCommand)); + Thread.sleep(100); + readStatus(); + return false; + }else{ + News.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鍚庡洖璇绘垚鍔焄id:{}] >>>>> 鍐欏叆[{}],===>>鍥炶[{}]", slave.getId(), JSON.toJSON(command),JSON.toJSON(one)); + } + } + + if (command.getAckFinish() == 0) { + if (result.IsSuccess) { + short commandFinish = 1; + Thread.sleep(300); + News.info("鍫嗗灈鏈哄懡浠ゅ湴鍧�鍐欏叆鎴愬姛锛屽紑濮嬪啓纭浣峓id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); + Integer counts = 0; + while(true) { + result = siemensNet.Write("DB100.18", commandFinish); + if(result.IsSuccess){ + break; + } else { + counts++; + if(counts>5){ + break; + } + } + Thread.sleep(300); + } + } } try { @@ -269,13 +370,13 @@ if (result != null && result.IsSuccess) { Thread.sleep(200); - this.readStatus(); - log.info("鍫嗗灈鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); +// 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))); return true; } else { OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戝啓鍏ュ爢鍨涙満plc鏁版嵁澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - log.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + News.error("鍐欏叆鍫嗗灈鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); return false; } } -- Gitblit v1.9.1