From dd91c85493463db1968e6e7a61c841d20f948cf6 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期二, 14 十一月 2023 16:37:48 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/LiftThread.java | 191 ++++++++++++++++++++++++++++++++++++----------- 1 files changed, 146 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/zy/core/thread/LiftThread.java b/src/main/java/com/zy/core/thread/LiftThread.java index 1fe3e6c..d14f4a4 100644 --- a/src/main/java/com/zy/core/thread/LiftThread.java +++ b/src/main/java/com/zy/core/thread/LiftThread.java @@ -1,9 +1,7 @@ package com.zy.core.thread; -import HslCommunication.Core.Transfer.DataFormat; import HslCommunication.Core.Types.OperateResult; import HslCommunication.Core.Types.OperateResultExOne; -import HslCommunication.ModBus.ModbusTcpNet; import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.alibaba.fastjson.JSON; @@ -12,23 +10,20 @@ import com.core.exception.CoolException; import com.zy.asrs.entity.BasLift; import com.zy.asrs.entity.BasLiftOpt; -import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.WrkMastMapper; import com.zy.asrs.service.BasLiftOptService; import com.zy.asrs.service.BasLiftService; import com.zy.asrs.utils.Utils; -import com.zy.common.utils.CommonUtils; import com.zy.common.utils.RedisUtil; -import com.zy.core.DevpThread; import com.zy.core.News; import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; -import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; import com.zy.core.model.LiftSlave; import com.zy.core.model.Task; import com.zy.core.model.command.*; +import com.zy.core.model.protocol.LiftStaProtocol; import com.zy.core.model.protocol.LiftProtocol; import com.zy.core.model.protocol.StaProtocol; import lombok.Data; @@ -37,6 +32,7 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; /** @@ -50,10 +46,23 @@ private LiftSlave slave; private LiftProtocol liftProtocol; private RedisUtil redisUtil; + private List<LiftStaProtocol> liftStaProtocols = new ArrayList<>(); public LiftThread(LiftSlave slave,RedisUtil redisUtil) { this.slave = slave; this.redisUtil = redisUtil; + + //鍒濆鍖栫珯鐐� + for (LiftSlave.Sta sta : this.slave.getSta()) { + LiftStaProtocol liftStaProtocol = new LiftStaProtocol(); + liftStaProtocol.setStaNo(sta.getStaNo());//绔欑偣鍙� + liftStaProtocol.setLev(sta.getLev());//绔欑偣妤煎眰 + String locNo = Utils.getLocNo(this.slave.getStaRow(), this.slave.getStaBay(), sta.getLev()); + liftStaProtocol.setLocNo(locNo);//绔欑偣搴撲綅鍙� + liftStaProtocol.setLiftNo(sta.getLiftNo());//鎻愬崌鏈哄彿 + liftStaProtocols.add(liftStaProtocol); + } + } @Override @@ -79,6 +88,8 @@ case 3: assignWork((LiftAssignCommand) task.getData()); break; + case 4: + write2((HashMap<String, Object>) task.getData()); default: break; } @@ -117,14 +128,14 @@ try { readStatus(); - //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓簍rue + //鎻愬崌鏈哄浜庤繍琛岀姸鎬侊紝灏嗘爣璁扮疆涓篺alse if (liftProtocol.getBusy()) { - liftProtocol.setPakMk(true); + liftProtocol.setPakMk(false); } //鎻愬崌鏈哄浜庢湭杩愯銆佸氨缁�佹爣璁皌rue銆佹湁浠诲姟鍙� if (!liftProtocol.getBusy() - && liftProtocol.getPakMk() + && !liftProtocol.getPakMk() && liftProtocol.getTaskNo() != 0) { //杩樻湁鏈畬鎴愮殑鍛戒护 executeWork(liftProtocol.getTaskNo()); @@ -136,50 +147,53 @@ private void readStatus() { try { - OperateResultExOne<byte[]> result = siemensS7Net.Read("M100.0", (short) 28); - if (result.IsSuccess) { + //鑾峰彇鎻愬崌鏈烘暟鎹� + OperateResultExOne<byte[]> result1 = siemensS7Net.Read("DB82.4.0", (short) 10); + if (result1.IsSuccess) { if (null == liftProtocol) { liftProtocol = new LiftProtocol(); liftProtocol.setLiftNo(slave.getId().shortValue()); } - - //----------璇诲彇鎻愬崌鏈虹姸鎬�----------- - //鑾峰彇鏁版嵁 - byte[] content = result.Content; + //璇诲彇4.0-4.7鏁版嵁 + boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result1.Content, 0, 1); + //璇诲彇5.0-5.7鏁版嵁 + boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result1.Content, 1, 1); //妯″紡 - liftProtocol.setModel(siemensS7Net.getByteTransform().TransBool(content, 0)); + liftProtocol.setModel(status1[0]); //蹇欓棽 - liftProtocol.setBusy(siemensS7Net.getByteTransform().TransBool(content, 1)); + liftProtocol.setBusy(!status1[1]); //鍓嶈秴闄� - liftProtocol.setFrontOverrun(siemensS7Net.getByteTransform().TransBool(content, 7)); + liftProtocol.setFrontOverrun(status1[4]); //鍚庤秴闄� - liftProtocol.setBackOverrun(siemensS7Net.getByteTransform().TransBool(content, 8)); + liftProtocol.setBackOverrun(status1[5]); //宸﹁秴闄� - liftProtocol.setLeftOverrun(siemensS7Net.getByteTransform().TransBool(content, 9)); + liftProtocol.setLeftOverrun(status1[6]); //鍙宠秴闄� - liftProtocol.setRightOverrun(siemensS7Net.getByteTransform().TransBool(content, 10)); + liftProtocol.setRightOverrun(status1[7]); //瓒呴珮 - liftProtocol.setOverHeight(siemensS7Net.getByteTransform().TransBool(content, 11)); + liftProtocol.setOverHeight(status2[0]); //瓒呴噸 - liftProtocol.setOverWeight(siemensS7Net.getByteTransform().TransBool(content, 12)); + liftProtocol.setOverWeight(status2[1]); //鏈夋墭鐩� - liftProtocol.setHasTray(siemensS7Net.getByteTransform().TransBool(content, 16)); + liftProtocol.setHasTray(status2[5]); //鏈夊皬杞� - liftProtocol.setHasCar(siemensS7Net.getByteTransform().TransBool(content, 17)); + liftProtocol.setHasCar(status2[6]); //璁惧鏁呴殰 - liftProtocol.setDeviceError(siemensS7Net.getByteTransform().TransBool(content, 18)); + liftProtocol.setDeviceError(status2[7]); //浠诲姟鍙� - liftProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(content, 19)); - //浠诲姟鍦板潃 - liftProtocol.setTaskAddress(siemensS7Net.getByteTransform().TransInt16(content, 21)); + liftProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(result1.Content, 2)); //鐩殑鍦板潃 - liftProtocol.setDistAddress(siemensS7Net.getByteTransform().TransInt16(content, 21)); + liftProtocol.setDistAddress(siemensS7Net.getByteTransform().TransInt16(result1.Content, 4)); //宸插畬鎴愪换鍔″彿 - liftProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(content, 23)); + liftProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(result1.Content, 6)); //褰撳墠妤煎眰 - liftProtocol.setLev(siemensS7Net.getByteTransform().TransInt16(content, 25)); - - ///璇诲彇鎻愬崌鏈虹姸鎬�-end + short lev = siemensS7Net.getByteTransform().TransInt16(result1.Content, 8); + if (lev >= 7 && lev <= 9) { + lev -= 2; + } else if (lev >= 12 && lev <= 14) { + lev -= 4; + } + liftProtocol.setLev(lev); //灏嗘彁鍗囨満鐘舵�佷繚瀛樿嚦鏁版嵁搴� BasLiftService liftService = SpringUtils.getBean(BasLiftService.class); @@ -205,7 +219,6 @@ basLift.setHasTray(liftProtocol.getHasTray()); basLift.setHasCar(liftProtocol.getHasCar()); basLift.setDeviceError(liftProtocol.getDeviceError()); - basLift.setTaskAddress(liftProtocol.getTaskAddress().intValue()); basLift.setDistAddress(liftProtocol.getDistAddress().intValue()); basLift.setCompleteTaskNo(liftProtocol.getCompleteTaskNo().intValue()); basLift.setLev(liftProtocol.getLev().intValue()); @@ -213,11 +226,52 @@ OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); // log.info(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); } - }else { OutputQueue.LIFT.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())); } + Thread.sleep(200); + + //鑾峰彇鎻愬崌鏈虹珯鐐规暟鎹� + OperateResultExOne<byte[]> result2 = siemensS7Net.Read("DB82.14.0", (short) (10 * liftStaProtocols.size())); + if (result1.IsSuccess) { + for (int i = 0; i < slave.getSta().size(); i++) { + LiftStaProtocol liftStaProtocol = liftStaProtocols.get(i); + int i1 = 0 + (i * 10); + int i2 = 1 + (i * 10); + //璇诲彇x4.0-x4.7鏁版嵁 + boolean[] status1 = siemensS7Net.getByteTransform().TransBool(result2.Content, i1, 1); + //璇诲彇x5.0-x5.7鏁版嵁 + boolean[] status2 = siemensS7Net.getByteTransform().TransBool(result2.Content, i2, 1); + //妯″紡 + liftStaProtocol.setModel(status1[0]); + //蹇欓棽 + liftStaProtocol.setBusy(!status1[1]); + //鏈夋墭鐩� + liftStaProtocol.setHasTray(status1[2]); + //鍓嶈秴闄� + liftStaProtocol.setFrontOverrun(status1[4]); + //鍚庤秴闄� + liftStaProtocol.setBackOverrun(status1[5]); + //宸﹁秴闄� + liftStaProtocol.setLeftOverrun(status1[6]); + //鍙宠秴闄� + liftStaProtocol.setRightOverrun(status1[7]); + //瓒呴珮 + liftStaProtocol.setOverHeight(status2[0]); + //瓒呴噸 + liftStaProtocol.setOverWeight(status2[1]); + //鏈夊皬杞� + liftStaProtocol.setHasCar(status2[6]); + //璁惧鏁呴殰 + liftStaProtocol.setDeviceError(status2[7]); + //浠诲姟鍙� + liftStaProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(result2.Content, 2)); + //宸插畬鎴愪换鍔″彿 + liftStaProtocol.setCompleteTaskNo(siemensS7Net.getByteTransform().TransInt16(result2.Content, 6)); + } + } + } catch (Exception e) { OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆戞彁鍗囨満plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); } @@ -232,7 +286,7 @@ command.setLiftNo(slave.getId().shortValue()); short[] array = getCommandArr(command);//鑾峰彇鍛戒护鎶ユ枃 - OperateResult result = siemensS7Net.Write("41088", array); + OperateResult result = siemensS7Net.Write("DB83.0", array); if (result != null && result.IsSuccess) { News.info("鎻愬崌鏈哄懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSON(command)); OutputQueue.LIFT.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 鍛戒护涓嬪彂锛� {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSON(command))); @@ -275,7 +329,7 @@ redisCommand.setCommandStep(0);//鍛戒护鎵ц姝ュ簭 redisCommand.setAssignCommand(assignCommand);//鍛戒护 //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("lift_wrk_no_" + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand)); + redisUtil.set(RedisKeyType.LIFT.key + assignCommand.getTaskNo(), JSON.toJSONString(redisCommand)); liftProtocol.setAssignCommand(assignCommand); liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING); //鎵ц涓嬪彂浠诲姟 @@ -290,7 +344,7 @@ } WrkMastMapper wrkMastMapper = SpringUtils.getBean(WrkMastMapper.class); - Object o = redisUtil.get("lift_wrk_no_" + wrkNo); + Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo); if (o == null) { return false; } @@ -304,16 +358,21 @@ //鍙栧嚭鍛戒护 NyLiftCommand command = commands.get(commandStep); + if (!redisCommand.getLiftNo().equals(liftProtocol.getLiftNo())) { + return false; + } + //涓嬪彂鍛戒护 if (!write(command)) { News.error("鎻愬崌鏈哄懡浠や笅鍙戝け璐ワ紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); return false; } + liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING); News.info("鎻愬崌鏈哄懡浠や笅鍙戞垚鍔燂紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); - //灏嗘爣璁扮疆涓篺alse(闃叉閲嶅彂) - liftProtocol.setPakMk(false); + //灏嗘爣璁扮疆涓簍rue(闃叉閲嶅彂) + liftProtocol.setPakMk(true); //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� BasLiftOptService liftOptService = SpringUtils.getBean(BasLiftOptService.class); @@ -321,14 +380,15 @@ short[] commandArr = getCommandArr(command);//鑾峰彇鍛戒护鎶ユ枃 BasLiftOpt opt = new BasLiftOpt( redisCommand.getWrkNo().intValue(), - redisCommand.getLiftNo().intValue(), + liftProtocol.getLiftNo().intValue(), new Date(), null, null, null, JSON.toJSONString(command), - JSON.toJSONString(commandArr) + JSON.toJSONString(liftProtocol) ); + opt.setDeviceWrk(command.getTaskNo().toString());//璁惧宸ヤ綔鍙� liftOptService.insert(opt); } @@ -339,20 +399,61 @@ commandStep++; redisCommand.setCommandStep(commandStep); //浠诲姟鏁版嵁淇濆瓨鍒皉edis - redisUtil.set("lift_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); + redisUtil.set(RedisKeyType.LIFT.key + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand)); }else { //宸叉墽琛屽畬鎴� //鍒犻櫎redis - redisUtil.del("lift_wrk_no_" + redisCommand.getWrkNo()); + redisUtil.del(RedisKeyType.LIFT.key + redisCommand.getWrkNo()); //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting liftProtocol.setProtocolStatus(LiftProtocolStatusType.WAITING); News.info("鎻愬崌鏈轰换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", command.getLiftNo(), JSON.toJSON(command)); } + if (redisCommand.getAssignCommand().getTaskMode() == NyLiftTaskModelType.RESET.id.shortValue()) { + //澶嶄綅鍛戒护 + //宸ヤ綔鍙锋竻闆� + liftProtocol.setTaskNo((short) 0); + //浠ょ墝娓呴浂 + liftProtocol.setToken(0); + //璁剧疆鎻愬崌鏈轰负绌洪棽鐘舵�� + liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); + //浠诲姟鎸囦护娓呴浂 + liftProtocol.setAssignCommand(null); + } + return true; } + //缁欐彁鍗囨満鍐欏叆杩涘嚭鐘舵�� + private void write2(HashMap<String,Object> data) { +// //鍑� +// status = true; +// //杩� +// status = false; + int lev = Integer.parseInt(data.get("lev").toString()); + boolean status = Boolean.parseBoolean(data.get("status").toString()); + + ArrayList<String> list = new ArrayList<String>(){{ + add("83.8.0"); + add("83.8.1"); + add("83.8.2"); + add("83.8.3"); + add("83.8.4"); + add("83.8.5"); + add("83.8.6"); + add("83.8.7"); + add("83.9.0"); + add("83.9.1"); + }}; + OperateResult result = siemensS7Net.Write("DB" + list.get(lev - 1), status); + if (result != null && result.IsSuccess) { + News.info("鎻愬崌鏈哄懡浠や笅鍙慬id:{}]", slave.getId()); + } else { + News.error("鍐欏叆鎻愬崌鏈簆lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + } + } + /******************************************************************************************/ /**************************************** 娴嬭瘯涓撶敤 *****************************************/ /*****************************************************************************************/ -- Gitblit v1.9.1