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/SteThread.java | 122 ++++++++++++++++++++++++---------------- 1 files changed, 73 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SteThread.java b/src/main/java/com/zy/core/thread/SteThread.java index 41a37c8..5bf46d7 100644 --- a/src/main/java/com/zy/core/thread/SteThread.java +++ b/src/main/java/com/zy/core/thread/SteThread.java @@ -13,6 +13,7 @@ import com.zy.asrs.entity.BasSteOpt; import com.zy.asrs.service.BasSteOptService; import com.zy.asrs.service.BasSteService; +import com.zy.common.utils.News; import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; @@ -42,6 +43,8 @@ private SteProtocol steProtocol; private short heartBeatVal = 1; private boolean resetFlag = false; + private int value = 0; + public SteThread(SteSlave slave) { this.slave = slave; @@ -66,6 +69,8 @@ // 鍐欏叆鏁版嵁 case 2: write((SteCommand) task.getData()); +// Thread.sleep(200); +// readStatus(); break; default: break; @@ -88,7 +93,7 @@ steProtocol = new SteProtocol(); } steProtocol.setSteNo(slave.getId().shortValue()); - steProtocol.setMode((short) 0); + steProtocol.setMode((short) -1); steProtocol.setStatus(SteStatusType.OFF_LINE); steProtocol.setTaskNo((short) 0); steProtocol.setExecute(false); @@ -103,13 +108,13 @@ // siemensS7Net.setRack(slave.getRack().byteValue()); // siemensS7Net.setSlot(slave.getSlot().byteValue()); OperateResult connect = siemensS7Net.ConnectServer(); - if(connect.IsSuccess){ + if (connect.IsSuccess) { result = true; - OutputQueue.STE.offer(MessageFormat.format( "銆恵0}銆戠┛姊溅plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); - log.info("绌挎杞lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + OutputQueue.STE.offer(MessageFormat.format("銆恵0}銆戠┛姊溅plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + News.info("绌挎杞lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } else { OutputQueue.STE.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()); initSte(); } // melsecMcNet.ConnectClose(); @@ -119,7 +124,7 @@ /** * 璇诲彇鐘舵�� */ - private void readStatus(){ + private synchronized void readStatus() { try { OperateResultExOne<byte[]> result = siemensS7Net.Read("V800", (short) 70); if (result.IsSuccess) { @@ -128,7 +133,17 @@ steProtocol.setSteNo(slave.getId().shortValue()); } // steProtocol.setSteNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 0)); - steProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result.Content, 2)); + short i = siemensS7Net.getByteTransform().TransInt16(result.Content, 2); + if (i == 0) { + value++; + } else { + value = 0; + } + if (value > 20 && i == 0) { + steProtocol.setMode((short) 0); + } else { + steProtocol.setMode(i); + } steProtocol.setStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 4)); OperateResultExOne<Boolean> executeRes = siemensS7Net.ReadBool("V2001.0"); if (executeRes.IsSuccess) { @@ -176,17 +191,19 @@ steProtocol.setCrnAllowRun(siemensS7Net.getByteTransform().TransInt16(result.Content, 42)); steProtocol.setChargeStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 44)); - OutputQueue.STE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + OutputQueue.STE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛", DateUtils.convert(new Date()), slave.getId())); // 澶嶄綅淇″彿 if (steProtocol.getWaiting()) { - log.error("-------------------------------------------绗竴姝ャ�乕绌挎杞﹀彿锛歿}, 宸ヤ綔鍙凤細{}]==>> 鐘舵�佷负3锛岀瓑寰匴CS纭锛侊紒", - slave.getId(),steProtocol.getTaskNo()); + News.info("-------------绗竴姝ャ�乕绌挎杞﹀彿锛歿}, 宸ヤ綔鍙凤細{}]==>> 鐘舵�佷负{}锛岀瓑寰匴CS纭锛侊紒{}", + slave.getId(), steProtocol.getTaskNo(), steProtocol.getStatus(), resetFlag); if (resetFlag) { SteCommand steCommand = new SteCommand(); steCommand.setComplete(true); if (write(steCommand) && confirmPos()) { resetFlag = false; + News.info("绗簩姝ャ�佸彂閫佸浣嶅懡浠ゆ垚鍔� resetFlag = false,[绌挎杞﹀彿锛歿}, 宸ヤ綔鍙凤細{}]==>> 鐘舵�佷负{}锛岀瓑寰匴CS纭锛侊紒{}", + slave.getId(), steProtocol.getTaskNo(), steProtocol.getStatus(), resetFlag); } } } @@ -203,19 +220,19 @@ BasSte basSte = new BasSte(); basSte.setSteNo(slave.getId()); - if (!service.updateById(steProtocol.toSqlModel(basSte))){ - log.error("绌挎杞lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + if (!service.updateById(steProtocol.toSqlModel(basSte))) { + News.error("绌挎杞lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } } } else { - OutputQueue.STE.offer(MessageFormat.format("銆恵0}銆憑1}绌挎杞lc鐘舵�佷俊鎭け璐�",DateUtils.convert(new Date()), slave.getId())); - throw new CoolException(MessageFormat.format( "绌挎杞lc鐘舵�佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort())); + OutputQueue.STE.offer(MessageFormat.format("銆恵0}銆憑1}绌挎杞lc鐘舵�佷俊鎭け璐�", DateUtils.convert(new Date()), slave.getId())); + throw new CoolException(MessageFormat.format("绌挎杞lc鐘舵�佷俊鎭け璐� ===>> [id:{0}] [ip:{1}] [port:{2}]", slave.getId(), slave.getIp(), slave.getPort())); } } catch (Exception e) { // e.printStackTrace(); OutputQueue.STE.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()); initSte(); } @@ -224,9 +241,9 @@ /** * 鍐欏叆鏁版嵁 */ - private boolean write(SteCommand command){ + private synchronized boolean write(SteCommand command) { if (null == command) { - log.error("绌挎杞﹀啓鍏ュ懡浠や负绌�"); + News.error("绌挎杞﹀啓鍏ュ懡浠や负绌�"); return false; } command.setSteNo(slave.getId()); @@ -234,8 +251,8 @@ // 寮�濮嬩换鍔� if (!command.getComplete()) { //缁勭粐浠诲姟鍓嶏紝鍏堟竻绌哄啓浠诲姟纭浣嶏紝浠ュ強浠诲姟瀹屾垚纭浣� - siemensS7Net.Write("V2000.0", false); - siemensS7Net.Write("V2000.1", false); + OperateResult result01 = siemensS7Net.Write("V2000.0", false); + OperateResult result02 = siemensS7Net.Write("V2000.1", false); // 1.浠诲姟鍙� OperateResult result0 = siemensS7Net.Write("V998", command.getTaskNo().shortValue()); try { @@ -252,29 +269,29 @@ result = siemensS7Net.Write("V2000.0", true); } - // 鍏朵粬鎸囦护 + // 鍏朵粬鎸囦护 } else { // 鎺у埗妯″紡 if (command.getControlMode() != null) { - result = siemensS7Net.Write("V1010", command.getControlMode()); - // 澶嶄綅淇″彿 + result = siemensS7Net.Write("V1010", command.getControlMode()); + // 澶嶄綅淇″彿 } else if (command.getReset() != null) { - result = siemensS7Net.Write("V2000.2", command.getReset()); - // 鍒犻櫎鎸囦护 + result = siemensS7Net.Write("V2000.2", command.getReset()); + // 鍒犻櫎鎸囦护 } else if (command.getDelete() != null) { - result = siemensS7Net.Write("V2000.3", command.getDelete()); - // 鏃犳晥鎸囦护 - } else if (command.getRun() != null) { - result = siemensS7Net.Write("V1016", command.getRun()); + result = siemensS7Net.Write("V2000.3", command.getDelete()); // 鏃犳晥鎸囦护 - }else { + } else if (command.getRun() != null) { + result = siemensS7Net.Write("V1016", command.getRun()); + // 鏃犳晥鎸囦护 + } else { return false; } } - // 浠诲姟瀹屾垚 + // 浠诲姟瀹屾垚 } else { - log.info("鏀跺埌绌挎鏉跨‘璁や俊鍙峰悗鍑嗗缁欏浣嶆爣璁帮紝绌挎鏉縄D={}, 浠诲姟鍙�={}, 绌挎鏉跨姸鎬�={}",slave.getId(), steProtocol.getTaskNo(),steProtocol.getStatus()); + News.info("鏀跺埌绌挎鏉跨‘璁や俊鍙峰悗鍑嗗缁欏浣嶆爣璁帮紝绌挎鏉縄D={}, 浠诲姟鍙�={}, 绌挎鏉跨姸鎬�={}", slave.getId(), steProtocol.getTaskNo(), steProtocol.getStatus()); siemensS7Net.Write("V998", (short) 0); siemensS7Net.Write("V1000", (short) 0); siemensS7Net.Write("V2000.0", false); @@ -308,7 +325,8 @@ } } - } catch (Exception ignore) {} + } catch (Exception ignore) { + } if (result != null && result.IsSuccess) { // 缁存姢鏁版嵁搴撴帓鍒楀眰 @@ -318,27 +336,33 @@ } } - log.info("绌挎杞﹀懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); + News.info("绌挎杞﹀懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); OutputQueue.STE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); try { Thread.sleep(500); - } catch (Exception e){ + } catch (Exception e) { } OperateResultExOne<byte[]> result1 = siemensS7Net.Read("V998", (short) 4); if (result1.IsSuccess) { short taskNo = siemensS7Net.getByteTransform().TransInt16(result1.Content, 0); short taskType = siemensS7Net.getByteTransform().TransInt16(result1.Content, 2); - readStatus(); - log.info("绌挎鏉夸换鍔′笅鍙戞垚鍔熷悗浼戠湢200ms绔嬪嵆鍥炶鍐欏叆鏁版嵁锛岀┛姊澘ID={}, 浠诲姟鍙�={}, 浣滀笟绫诲瀷={}",slave.getId(), taskNo, taskType); - log.info("绌挎鏉夸换鍔′笅鍙戞垚鍔熷悗浼戠湢200ms绔嬪嵆鍥炶绌挎鏉跨姸鎬侊紝绌挎鏉縄D={}, 浠诲姟鍙�={}, 绌挎鏉跨姸鎬�={}",slave.getId(), steProtocol.getTaskNo(),steProtocol.getStatus()); +// readStatus(); + News.info("绌挎鏉夸换鍔′笅鍙戞垚鍔熷悗浼戠湢200ms绔嬪嵆鍥炶鍐欏叆鏁版嵁锛岀┛姊澘ID={}, 浠诲姟鍙�={}, 浣滀笟绫诲瀷={}", slave.getId(), taskNo, taskType); + News.info("绌挎鏉夸换鍔′笅鍙戞垚鍔熷悗浼戠湢200ms绔嬪嵆鍥炶绌挎鏉跨姸鎬侊紝绌挎鏉縄D={}, 浠诲姟鍙�={}, 绌挎鏉跨姸鎬�={}", slave.getId(), steProtocol.getTaskNo(), steProtocol.getStatus()); } - + resetFlag = false; return true; } else { OutputQueue.STE.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()); + + //鍐欏叆澶辫触鍚庯紝閲嶆柊娣诲姞commanddao 浠诲姟闃熷垪涓�,骞剁珛鍗冲洖璇讳竴娆¤澶囩姸鎬� +// MessageQueue.offer(SlaveType.Ste, slave.getId(), new Task(2, command)); +// readStatus(); + + initSte(); return false; } } @@ -346,7 +370,7 @@ public void modifyPos(Integer row, Integer bay, Integer lev) { BasSteService service = SpringUtils.getBean(BasSteService.class); if (!service.updatePos(this.slave.getId(), row, bay, lev)) { - log.error("鏇存柊{}鍙风┛姊溅瀹氫綅澶辫触 ===>> 鎺掞細銆恵}銆�, 鍒楋細銆恵}銆戯紝灞傦細銆恵}銆�", this.slave.getId(), row, bay, lev); + News.error("鏇存柊{}鍙风┛姊溅瀹氫綅澶辫触 ===>> 鎺掞細銆恵}銆�, 鍒楋細銆恵}銆戯紝灞傦細銆恵}銆�", this.slave.getId(), row, bay, lev); } } @@ -355,14 +379,14 @@ BasSte basSte = service.selectById(slave.getId()); if (basSte != null) { // 鏇存柊plc鏁版嵁鍧� - short[] arr = new short[] {basSte.getRow().shortValue(), basSte.getBay().shortValue(), basSte.getLev().shortValue()}; + short[] arr = new short[]{basSte.getRow().shortValue(), basSte.getBay().shortValue(), basSte.getLev().shortValue()}; OperateResult result = siemensS7Net.Write("V1002", arr); if (result.IsSuccess) { // 鏇存柊鏁版嵁搴� if (service.updatePakMk(this.slave.getId(), "N")) { return true; } else { - log.error("{}鍙风┛姊溅淇敼鏁版嵁搴撳畾浣嶅け璐ワ紒锛侊紒", slave.getId()); + News.error("{}鍙风┛姊溅淇敼鏁版嵁搴撳畾浣嶅け璐ワ紒锛侊紒", slave.getId()); } } } @@ -370,15 +394,15 @@ } public boolean modifyPosHandle(Integer row, Integer bay, Integer lev) { - short[] arr = new short[] {row.shortValue(), bay.shortValue(), lev.shortValue()}; + short[] arr = new short[]{row.shortValue(), bay.shortValue(), lev.shortValue()}; OperateResult result = siemensS7Net.Write("V1002", arr); if (!result.IsSuccess) { - log.error("鏇存柊{}鍙风┛姊溅瀹氫綅澶辫触 ===>> 鎺掞細銆恵}銆�, 鍒楋細銆恵}銆戯紝灞傦細銆恵}銆�", this.slave.getId(), row, bay, lev); + News.error("鏇存柊{}鍙风┛姊溅瀹氫綅澶辫触 ===>> 鎺掞細銆恵}銆�, 鍒楋細銆恵}銆戯紝灞傦細銆恵}銆�", this.slave.getId(), row, bay, lev); return false; } BasSteService service = SpringUtils.getBean(BasSteService.class); if (!service.updatePos(this.slave.getId(), row, bay, lev)) { - log.error("鏇存柊{}鍙风┛姊溅瀹氫綅澶辫触 ===>> 鎺掞細銆恵}銆�, 鍒楋細銆恵}銆戯紝灞傦細銆恵}銆�", this.slave.getId(), row, bay, lev); + News.error("鏇存柊{}鍙风┛姊溅瀹氫綅澶辫触 ===>> 鎺掞細銆恵}銆�, 鍒楋細銆恵}銆戯紝灞傦細銆恵}銆�", this.slave.getId(), row, bay, lev); return false; } return true; @@ -392,7 +416,7 @@ /** * 蹇冭烦 */ - private void heartbeat(){ + private void heartbeat() { if (heartBeatVal == 1) { heartBeatVal = 2; } else { @@ -400,14 +424,14 @@ } OperateResult write = siemensS7Net.Write("D10", heartBeatVal); if (!write.IsSuccess) { - log.error("杈撻�佺嚎plc缂栧彿={} 蹇冭烦澶辫触", slave.getId()); + News.error("杈撻�佺嚎plc缂栧彿={} 蹇冭烦澶辫触", slave.getId()); } } // public void modifyPos(int wrkNo, int row, int bay, int lev) { // BasSteService service = SpringUtils.getBean(BasSteService.class); // if (!service.updatePos(wrkNo,this.slave.getId(), row, bay, lev)) { -// log.error("鏇存柊{}鍙风┛姊溅瀹氫綅澶辫触 ===>> 鎺掞細銆恵}銆�, 鍒楋細銆恵}銆戯紝灞傦細銆恵}銆�", this.slave.getId(), row, bay, lev); +// News.error("鏇存柊{}鍙风┛姊溅瀹氫綅澶辫触 ===>> 鎺掞細銆恵}銆�, 鍒楋細銆恵}銆戯紝灞傦細銆恵}銆�", this.slave.getId(), row, bay, lev); // } // } @@ -456,7 +480,7 @@ // 绌挎杞﹁繍琛岀姝� SteCommand command = new SteCommand(); - command.setRun((short)0); + command.setRun((short) 0); thread.write(command); } -- Gitblit v1.9.1