From 352b3946e1afb9a27c96f58bb138e2ba5a010ec0 Mon Sep 17 00:00:00 2001 From: lsh <lsh@163.com> Date: 星期五, 21 六月 2024 19:52:07 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/JarThread.java | 125 ++++++++++++++++++++++++++++++++++++++++- 1 files changed, 120 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/zy/core/thread/JarThread.java b/src/main/java/com/zy/core/thread/JarThread.java index d32862d..7a2f354 100644 --- a/src/main/java/com/zy/core/thread/JarThread.java +++ b/src/main/java/com/zy/core/thread/JarThread.java @@ -4,11 +4,14 @@ import HslCommunication.Core.Types.OperateResultExOne; import HslCommunication.Profinet.Siemens.SiemensPLCS; import HslCommunication.Profinet.Siemens.SiemensS7Net; +import com.alibaba.fastjson.JSON; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.BasJar; +import com.zy.asrs.entity.BasSteOpt; import com.zy.asrs.service.BasJarService; +import com.zy.asrs.service.BasSteOptService; import com.zy.core.News; import com.zy.core.ThreadHandler; import com.zy.core.cache.MessageQueue; @@ -17,6 +20,7 @@ import com.zy.core.enums.SlaveType; import com.zy.core.model.JarSlave; import com.zy.core.model.Task; +import com.zy.core.model.command.JarCommand; import com.zy.core.model.protocol.JarProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -26,8 +30,7 @@ /** * shuttle 纭寲缃愮嚎绋� - * Created by vincent on 2020/8/4 - * 涓嶈兘鏈� 妲藉彿 鍜� 鏈烘灦鍙� + * Created by vincent on 2024/3/01 */ @Data @Slf4j @@ -57,6 +60,10 @@ // 璇绘暟鎹� case 1: readStatus(); + break; + // 鍐欐暟鎹� ID+鐩爣绔� + case 2: + write(null); break; default: break; @@ -110,15 +117,35 @@ */ private void readStatus(){ try { - OperateResultExOne<byte[]> result = siemensS7Net.Read("DB101.0", (short) 10); + OperateResultExOne<byte[]> result = siemensS7Net.Read("V300", (short) 26); if (result.IsSuccess) { if (null == jarProtocol) { jarProtocol = new JarProtocol(); jarProtocol.setJarNo(slave.getId()); } - jarProtocol.setMode(siemensS7Net.getByteTransform().TransInt32(result.Content, 2)); - jarProtocol.setStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 4)); + jarProtocol.setLeftDoor(siemensS7Net.getByteTransform().TransInt16(result.Content, 0) != 0);//宸﹂棬鐘舵�� + jarProtocol.setRightDoor(siemensS7Net.getByteTransform().TransInt16(result.Content, 2) != 0);//鍙抽棬鐘舵�� + jarProtocol.setLeftInEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, 4) != 0);//宸﹂棬鍙紑 + jarProtocol.setLeftOutEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, 5) != 0);//宸﹂棬鍙叧 + jarProtocol.setRightInEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, 8) != 0);//鍙抽棬鍙紑 + jarProtocol.setRightOutEnable(siemensS7Net.getByteTransform().TransInt16(result.Content, 10) != 0);//鍙抽棬鍙叧 + jarProtocol.setMode((int)siemensS7Net.getByteTransform().TransInt16(result.Content, 12));//妯″紡 + + jarProtocol.setJarErr((int)siemensS7Net.getByteTransform().TransInt16(result.Content, 14));//寮傚父鐮� + + jarProtocol.setStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 16));//鐘舵�� + + jarProtocol.setLeftDoorOpen((int)siemensS7Net.getByteTransform().TransInt16(result.Content, 18));//open the left door + + jarProtocol.setLeftDoorClose((int)siemensS7Net.getByteTransform().TransInt16(result.Content, 20));//close the left door + + jarProtocol.setRightDoorOpen((int)siemensS7Net.getByteTransform().TransInt16(result.Content, 22));//open the right door + + jarProtocol.setRightDoorClose((int)siemensS7Net.getByteTransform().TransInt16(result.Content, 24));//close the right door + + + jarProtocol.setAutoing(siemensS7Net.getByteTransform().TransInt16(result.Content, 12) != 2);//鑷姩 // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� BasJarService service = SpringUtils.getBean(BasJarService.class); if (null != service) { @@ -143,6 +170,94 @@ } + /** + * 鍐欏叆鏁版嵁 + */ + private synchronized boolean write(JarCommand command){ + if (null == command) { + News.error("绌挎杞﹀啓鍏ュ懡浠や负绌�"); + return false; + } + command.setJarNo(slave.getId()); + OperateResult result = null; + // 寮�濮嬩换鍔� + if (!command.getComplete()) { + //缁勭粐浠诲姟鍓嶏紝鍏堟竻绌哄啓浠诲姟纭浣嶏紝浠ュ強浠诲姟瀹屾垚纭浣� + OperateResult result01 = siemensS7Net.Write("V2000.0", false); + OperateResult result02 = siemensS7Net.Write("V2000.1", false); + // 1.浠诲姟鍙� + OperateResult result0 = siemensS7Net.Write("V998", command.getTaskNo().shortValue()); + try { + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + // 浣滀笟 + if (command.getTaskMode() != 0) { + // 2.浣滀笟 + OperateResult result1 = siemensS7Net.Write("V1000", command.getTaskMode()); + // 3.纭寮�濮嬩换鍔� + if (result0.IsSuccess && result1.IsSuccess) { + result = siemensS7Net.Write("V2000.0", true); + } + } + + // 浠诲姟瀹屾垚 + } else { + siemensS7Net.Write("V998", (short) 0); + siemensS7Net.Write("V1000", (short) 0); + siemensS7Net.Write("V2000.0", false); + result = siemensS7Net.Write("V2000.1", true); + } + + try { + // 鏃ュ織璁板綍 + if (!command.getComplete() && command.getTaskMode() != 0) { + BasSteOptService bean = SpringUtils.getBean(BasSteOptService.class); + if (null != bean) { + BasSteOpt basSteOpt = new BasSteOpt( + command.getTaskNo(), // 浠诲姟鍙� + command.getJarNo(), // 纭寲缃� + new Date(), // 涓嬪彂鏃堕棿 + command.getTaskModeType().desc, // 浣滀笟 + null, // 婧愭帓 + null, // 婧愬垪 + null, // 婧愬眰 + null, // 婧愮珯 + null, // 鐩爣鎺� + null, // 鐩爣鍒� + null, // 鐩爣灞� + null, // 鐩爣绔� + null, // 鍝嶅簲缁撴灉 + null, // 淇敼鏃堕棿 + null, // 淇敼浜哄憳 + null // 澶囨敞 + ); + bean.insert(basSteOpt); + } + } + + } catch (Exception ignore) {} + + if (result != null && result.IsSuccess) { + + News.info("纭寲缃愬懡浠や笅鍙慬id:{}] >>>>> {}", slave.getId(), JSON.toJSONString(command)); + OutputQueue.STE.offer(MessageFormat.format("銆恵0}銆慬id:{1}] >>>>> 纭寲缃愬懡浠や笅鍙戯細 {2}", DateUtils.convert(new Date()), slave.getId(), JSON.toJSONString(command))); + + try { + Thread.sleep(500); + } catch (Exception e){ + + } + 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())); + News.error("鍐欏叆纭寲缃恜lc鏁版嵁澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + initSte(); + return false; + } + } + @Override public void close() { // siemensS7Net.ConnectClose(); -- Gitblit v1.9.1