From e4abcf00a4be207814968b8be9b92be33ce1b0c9 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@63.com> Date: 星期四, 10 三月 2022 17:14:39 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/thread/SteThread.java | 293 +++++++++++++++++++++++++++------------------------------- 1 files changed, 137 insertions(+), 156 deletions(-) diff --git a/src/main/java/com/zy/core/thread/SteThread.java b/src/main/java/com/zy/core/thread/SteThread.java index 049a874..169d8aa 100644 --- a/src/main/java/com/zy/core/thread/SteThread.java +++ b/src/main/java/com/zy/core/thread/SteThread.java @@ -2,26 +2,21 @@ import HslCommunication.Core.Types.OperateResult; import HslCommunication.Core.Types.OperateResultExOne; -import HslCommunication.Profinet.Melsec.MelsecMcNet; -import com.alibaba.fastjson.JSON; +import HslCommunication.Profinet.Siemens.SiemensPLCS; +import HslCommunication.Profinet.Siemens.SiemensS7Net; import com.core.common.DateUtils; import com.core.common.SpringUtils; import com.core.exception.CoolException; -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.core.ThreadHandler; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; -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.enums.SteStatusType; import com.zy.core.model.SteSlave; import com.zy.core.model.Task; -import com.zy.core.model.command.CrnCommand; -import com.zy.core.model.protocol.CrnProtocol; +import com.zy.core.model.command.SteCommand; import com.zy.core.model.protocol.SteProtocol; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -37,7 +32,7 @@ @Slf4j public class SteThread implements Runnable, ThreadHandler { - private MelsecMcNet melsecMcNet; + private SiemensS7Net siemensS7Net; private SteSlave slave; private SteProtocol steProtocol; private short heartBeatVal = 1; @@ -51,11 +46,6 @@ @SuppressWarnings("InfiniteLoopStatement") public void run() { this.connect(); -// try { -// Thread.sleep(2000); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } while (true) { try { int step = 1; @@ -70,24 +60,24 @@ break; // 鍐欏叆鏁版嵁 case 2: - write((CrnCommand) task.getData()); + write((SteCommand) task.getData()); break; // 澶嶄綅 case 3: - CrnCommand command = (CrnCommand) task.getData(); + SteCommand command = (SteCommand) task.getData(); if (null == command) { - command = new CrnCommand(); + command = new SteCommand(); } - command.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙� - command.setTaskNo((short) 0); // 宸ヤ綔鍙� - command.setAckFinish((short) 1); // 浠诲姟瀹屾垚纭浣� - command.setTaskMode(CrnTaskModeType.NONE); // 浠诲姟妯″紡 - command.setSourcePosX((short)0); // 婧愬簱浣嶆帓 - command.setSourcePosY((short)0); // 婧愬簱浣嶅垪 - command.setSourcePosZ((short)0); // 婧愬簱浣嶅眰 - command.setDestinationPosX((short)0); // 鐩爣搴撲綅鎺� - command.setDestinationPosY((short)0); // 鐩爣搴撲綅鍒� - command.setDestinationPosZ((short)0); // 鐩爣搴撲綅灞� +// command.setSteNo(slave.getId()); // 绌挎杞︾紪鍙� +// command.setTaskNo((short) 0); // 宸ヤ綔鍙� +// command.setAckFinish((short) 1); // 浠诲姟瀹屾垚纭浣� +// command.setTaskMode(CrnTaskModeType.NONE); // 浠诲姟妯″紡 +// command.setSourcePosX((short)0); // 婧愬簱浣嶆帓 +// command.setSourcePosY((short)0); // 婧愬簱浣嶅垪 +// command.setSourcePosZ((short)0); // 婧愬簱浣嶅眰 +// command.setDestinationPosX((short)0); // 鐩爣搴撲綅鎺� +// command.setDestinationPosY((short)0); // 鐩爣搴撲綅鍒� +// command.setDestinationPosZ((short)0); // 鐩爣搴撲綅灞� write(command); break; default: @@ -110,37 +100,39 @@ if (null == steProtocol) { steProtocol = new SteProtocol(); } - steProtocol.setMode((short) -1); -// crnProtocol.setTaskNo((short)0); - steProtocol.setStatus((short)-1); - steProtocol.setBay((short)0); - steProtocol.setLevel((short)0); - steProtocol.setForkPos((short) -1); - steProtocol.setLiftPos((short) -1); - steProtocol.setWalkPos((short)0); - steProtocol.setLoaded((short)0); - steProtocol.setAlarm((short)0); - steProtocol.setXSpeed(0F); - steProtocol.setYSpeed(0F); - steProtocol.setZSpeed(0F); - steProtocol.setXDistance(0F); - steProtocol.setYDistance(0F); - steProtocol.setXDuration(0F); - steProtocol.setYDuration(0F); +// steProtocol.setMode((short) -1); +// steProtocol.setTaskNo((short)0); +// steProtocol.setStatus((short)-1); +// steProtocol.setBay((short)0); +// steProtocol.setLevel((short)0); +// steProtocol.setForkPos((short) -1); +// steProtocol.setLiftPos((short) -1); +// steProtocol.setWalkPos((short)0); +// steProtocol.setLoaded((short)0); +// steProtocol.setAlarm((short)0); +// steProtocol.setXSpeed(0F); +// steProtocol.setYSpeed(0F); +// steProtocol.setZSpeed(0F); +// steProtocol.setXDistance(0F); +// steProtocol.setYDistance(0F); +// steProtocol.setXDuration(0F); +// steProtocol.setYDuration(0F); } @Override public boolean connect() { boolean result = false; - melsecMcNet = new MelsecMcNet(slave.getIp(), slave.getPort()); - OperateResult connect = melsecMcNet.ConnectServer(); + siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, slave.getIp()); + siemensS7Net.setRack(slave.getRack().byteValue()); + siemensS7Net.setSlot(slave.getSlot().byteValue()); + OperateResult connect = siemensS7Net.ConnectServer(); if(connect.IsSuccess){ result = true; - OutputQueue.CRN.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.CRN.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()); } 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()); + 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()); initSte(); } // melsecMcNet.ConnectClose(); @@ -157,42 +149,30 @@ // flag1=1; // System.out.println("==="); // } - OperateResultExOne<byte[]> result = melsecMcNet.Read("D20", (short) 70); + OperateResultExOne<byte[]> result = siemensS7Net.Read("D20", (short) 70); if (result.IsSuccess) { - if (null == crnProtocol) { - crnProtocol = new CrnProtocol(); + if (null == steProtocol) { + steProtocol = new SteProtocol(); } - crnProtocol.setMode(melsecMcNet.getByteTransform().TransInt16(result.Content, 0)); - crnProtocol.setTaskNo(melsecMcNet.getByteTransform().TransInt16(result.Content, 2)); - crnProtocol.setStatus(melsecMcNet.getByteTransform().TransInt16(result.Content, 4)); - crnProtocol.setBay(melsecMcNet.getByteTransform().TransInt16(result.Content, 6)); - crnProtocol.setLevel(melsecMcNet.getByteTransform().TransInt16(result.Content, 8)); - crnProtocol.setForkPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 10)); - crnProtocol.setLiftPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 12)); - crnProtocol.setWalkPos(melsecMcNet.getByteTransform().TransInt16(result.Content, 14)); - crnProtocol.setLoaded(melsecMcNet.getByteTransform().TransInt16(result.Content, 16)); - crnProtocol.setAlarm(melsecMcNet.getByteTransform().TransInt16(result.Content, 18)); - crnProtocol.setTemp1(melsecMcNet.getByteTransform().TransInt16(result.Content, 20)); - crnProtocol.setTemp2(melsecMcNet.getByteTransform().TransInt16(result.Content, 22)); - crnProtocol.setTemp3(melsecMcNet.getByteTransform().TransInt16(result.Content, 24)); - crnProtocol.setTemp4(melsecMcNet.getByteTransform().TransInt16(result.Content, 26)); - crnProtocol.setXSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 28)); - crnProtocol.setYSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 32)); - crnProtocol.setZSpeed(melsecMcNet.getByteTransform().TransSingle(result.Content, 36)); - crnProtocol.setXDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 40)); - crnProtocol.setYDistance(melsecMcNet.getByteTransform().TransSingle(result.Content, 44)); - crnProtocol.setXDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 48)); - crnProtocol.setYDuration(melsecMcNet.getByteTransform().TransSingle(result.Content, 52)); +// steProtocol.setMode(siemensS7Net.getByteTransform().TransInt16(result.Content, 0)); +// steProtocol.setTaskNo(siemensS7Net.getByteTransform().TransInt16(result.Content, 2)); +// steProtocol.setStatus(siemensS7Net.getByteTransform().TransInt16(result.Content, 4)); +// steProtocol.setBay(siemensS7Net.getByteTransform().TransInt16(result.Content, 6)); +// steProtocol.setLevel(siemensS7Net.getByteTransform().TransInt16(result.Content, 8)); +// steProtocol.setForkPos(siemensS7Net.getByteTransform().TransInt16(result.Content, 10)); +// steProtocol.setLiftPos(siemensS7Net.getByteTransform().TransInt16(result.Content, 12)); +// steProtocol.setWalkPos(siemensS7Net.getByteTransform().TransInt16(result.Content, 14)); +// steProtocol.setLoaded(siemensS7Net.getByteTransform().TransInt16(result.Content, 16)); +// steProtocol.setAlarm(siemensS7Net.getByteTransform().TransInt16(result.Content, 18)); OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); // 澶嶄綅淇″彿 - if (crnProtocol.getStatusType().equals(CrnStatusType.WAITING)) { - log.error("-------------------------------------------绗竴姝ャ�乕鍫嗗灈鏈哄彿锛歿}][宸ヤ綔鍙凤細{}]==>> 鐘舵�佷负90锛岀瓑寰呯‘璁わ紒锛�",slave.getId(),crnProtocol.getTaskNo()); + if (steProtocol.getStatusType().equals(SteStatusType.WAITING)) { if (resetFlag) { - CrnCommand crnCommand = new CrnCommand(); - crnCommand.setAckFinish((short)1); - if (write(crnCommand)) { + SteCommand steCommand = new SteCommand(); +// steCommand.setAckFinish((short)1); + if (write(steCommand)) { resetFlag = false; } } @@ -202,21 +182,21 @@ // 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class); BasCrnp basCrnp = new BasCrnp(); - basCrnp.setCrnErr(crnProtocol.getAlarm()==null?0:crnProtocol.getAlarm().longValue()); + basCrnp.setCrnErr(steProtocol.getAlarm()==null?0:steProtocol.getAlarm().longValue()); basCrnp.setCrnNo(slave.getId()); - if (!basCrnpService.updateById(crnProtocol.toSqlModel(basCrnp))){ - log.error("鍫嗗灈鏈簆lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + if (!basCrnpService.updateById(steProtocol.toSqlModel(basCrnp))){ + log.error("绌挎杞lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); } } else { - OutputQueue.CRN.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.CRN.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.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()); - initCrn(); + 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()); + initSte(); } } @@ -224,67 +204,68 @@ /** * 鍐欏叆鏁版嵁 */ - private boolean write(CrnCommand command){ - if (null == command) { - log.error("鍫嗗灈鏈哄啓鍏ュ懡浠や负绌�"); - return false; - } - command.setCrnNo(slave.getId()); - short[] array = new short[10]; - array[0] = command.getAckFinish(); - array[1] = command.getTaskNo(); - array[2] = command.getTaskMode(); - array[3] = command.getSourcePosX(); - array[4] = command.getSourcePosY(); - array[5] = command.getSourcePosZ(); - array[6] = command.getDestinationPosX(); - array[7] = command.getDestinationPosY(); - array[8] = command.getDestinationPosZ(); - array[9] = command.getCommand(); - OperateResult result = melsecMcNet.Write("D0", array); - - if (command.getAckFinish() == 0) { - short commandFinish = 1; - result = melsecMcNet.Write("D9", commandFinish); - } - - try { - // 鏃ュ織璁板綍 - BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class); - BasCrnOpt basCrnOpt = new BasCrnOpt( - command.getTaskNo().intValue(), // 浠诲姟鍙� - command.getCrnNo(), // 鍫嗗灈鏈篬闈炵┖] - new Date(), // 涓嬪彂鏃堕棿 - command.getTaskModeType().toString(), // 妯″紡 - command.getSourcePosX().intValue(), // 婧愭帓 - command.getSourcePosY().intValue(), // 婧愬垪 - command.getSourcePosZ().intValue(), // 婧愬眰 - null, // 婧愮珯 - command.getDestinationPosX().intValue(), // 鐩爣鎺� - command.getDestinationPosY().intValue(), // 鐩爣鍒� - command.getDestinationPosZ().intValue(), // 鐩爣灞� - null, // 鐩爣绔� - null, // 鍝嶅簲缁撴灉 - null, // 淇敼鏃堕棿 - null // 淇敼浜哄憳 - ); - bean.insert(basCrnOpt); - } catch (Exception ignore) {} - - if (result.IsSuccess) { - log.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()); - return false; - } + private boolean write(SteCommand command){ + return true; +// if (null == command) { +// log.error("绌挎杞﹀啓鍏ュ懡浠や负绌�"); +// return false; +// } +// command.setCrnNo(slave.getId()); +// short[] array = new short[10]; +// array[0] = command.getAckFinish(); +// array[1] = command.getTaskNo(); +// array[2] = command.getTaskMode(); +// array[3] = command.getSourcePosX(); +// array[4] = command.getSourcePosY(); +// array[5] = command.getSourcePosZ(); +// array[6] = command.getDestinationPosX(); +// array[7] = command.getDestinationPosY(); +// array[8] = command.getDestinationPosZ(); +// array[9] = command.getCommand(); +// OperateResult result = siemensS7Net.Write("D0", array); +// +// if (command.getAckFinish() == 0) { +// short commandFinish = 1; +// result = siemensS7Net.Write("D9", commandFinish); +// } +// +// try { +// // 鏃ュ織璁板綍 +// BasCrnOptService bean = SpringUtils.getBean(BasCrnOptService.class); +// BasCrnOpt basCrnOpt = new BasCrnOpt( +// command.getTaskNo().intValue(), // 浠诲姟鍙� +// command.getCrnNo(), // 绌挎杞闈炵┖] +// new Date(), // 涓嬪彂鏃堕棿 +// command.getTaskModeType().toString(), // 妯″紡 +// command.getSourcePosX().intValue(), // 婧愭帓 +// command.getSourcePosY().intValue(), // 婧愬垪 +// command.getSourcePosZ().intValue(), // 婧愬眰 +// null, // 婧愮珯 +// command.getDestinationPosX().intValue(), // 鐩爣鎺� +// command.getDestinationPosY().intValue(), // 鐩爣鍒� +// command.getDestinationPosZ().intValue(), // 鐩爣灞� +// null, // 鐩爣绔� +// null, // 鍝嶅簲缁撴灉 +// null, // 淇敼鏃堕棿 +// null // 淇敼浜哄憳 +// ); +// bean.insert(basCrnOpt); +// } catch (Exception ignore) {} +// +// if (result.IsSuccess) { +// log.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()); +// return false; +// } } @Override public void close() { - melsecMcNet.ConnectClose(); + siemensS7Net.ConnectClose(); } /** @@ -296,7 +277,7 @@ } else { heartBeatVal = 1; } - OperateResult write = melsecMcNet.Write("D10", heartBeatVal); + OperateResult write = siemensS7Net.Write("D10", heartBeatVal); if (!write.IsSuccess) { log.error("杈撻�佺嚎plc缂栧彿={} 蹇冭烦澶辫触", slave.getId()); } @@ -307,16 +288,16 @@ /**************************************** 娴嬭瘯涓撶敤 *****************************************/ /*****************************************************************************************/ public static void main(String[] args) throws InterruptedException { - CrnSlave slave = new CrnSlave(); - slave.setId(1); - slave.setIp("192.168.3.39"); - slave.setPort(5015); - slave.setRack(0); - slave.setSlot(0); - SteThread melsecCrnThread = new SteThread(slave); - melsecCrnThread.connect(); - melsecCrnThread.readStatus(); - System.out.println(JSON.toJSONString(melsecCrnThread.crnProtocol)); +// CrnSlave slave = new CrnSlave(); +// slave.setId(1); +// slave.setIp("192.168.3.39"); +// slave.setPort(5015); +// slave.setRack(0); +// slave.setSlot(0); +// SteThread melsecCrnThread = new SteThread(slave); +// melsecCrnThread.connect(); +// melsecCrnThread.readStatus(); +// System.out.println(JSON.toJSONString(melsecCrnThread.crnProtocol)); // 1.鍏ュ簱 婧愬拰鐩爣閮藉彂 // CrnCommand command = new CrnCommand(); -- Gitblit v1.9.1