From c80d68ee7d5ceb5f93289220a410737da3a7bf9f Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期二, 23 四月 2024 08:44:47 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/ssdwcs' into ssdwcs --- src/main/java/com/zy/core/thread/MelsecExtThread.java | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 200 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/zy/core/thread/MelsecExtThread.java b/src/main/java/com/zy/core/thread/MelsecExtThread.java new file mode 100644 index 0000000..0b5805f --- /dev/null +++ b/src/main/java/com/zy/core/thread/MelsecExtThread.java @@ -0,0 +1,200 @@ +package com.zy.core.thread; + +import HslCommunication.Core.Types.OperateResult; +import HslCommunication.Core.Types.OperateResultExOne; +import HslCommunication.Profinet.Melsec.MelsecMcNet; +import com.core.common.DateUtils; +import com.core.common.SpringUtils; +import com.core.exception.CoolException; +import com.zy.asrs.entity.BasCrnp; +import com.zy.asrs.entity.BasExt; +import com.zy.asrs.service.BasCrnpService; +import com.zy.asrs.service.BasExtService; +import com.zy.core.ThreadHandler; +import com.zy.core.cache.MessageQueue; +import com.zy.core.cache.OutputQueue; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.ExtSlave; +import com.zy.core.model.Task; +import com.zy.core.model.protocol.ExtProtocol; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.text.MessageFormat; +import java.util.Date; + +/** + * 鏈烘鑷傜嚎绋� //Extraman==>鏈烘鑷� + * Created by vincent on 2020/8/4 + */ +@Data +@Slf4j +public class MelsecExtThread implements Runnable, ThreadHandler { + + private MelsecMcNet melsecMcNet; + private ExtSlave slave; + private ExtProtocol extProtocol; + private short heartBeatVal = 1; + private boolean resetFlag = false; + + public boolean isRunning = true; + + public MelsecExtThread(ExtSlave slave) { + this.slave = slave; + } + + @Override + @SuppressWarnings("InfiniteLoopStatement") + public void run() { + System.out.println("绾跨▼鍚姩"); + System.out.println("extProtocol:"+extProtocol); + this.connect(); +// try { +// Thread.sleep(2000); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } + while (isRunning) { + try { + int step = 1; + Task task = MessageQueue.poll(SlaveType.Ext, slave.getId()); + if (task != null) { + step = task.getStep(); + } + switch (step) { + // 璇绘暟鎹� + case 1: + readStatus(); + break; + default: + break; + } + // 蹇冭烦 +// heartbeat(); + Thread.sleep(500); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * 鍒濆鍖栨満姊拌噦鐘舵�� + */ + private void initExt() { + if (null == extProtocol) { + extProtocol = new ExtProtocol(); + } + extProtocol.setTake(false); + extProtocol.setPut(false); + } + + @Override + public boolean connect() { + boolean result = false; + melsecMcNet = new MelsecMcNet(slave.getIp(), slave.getPort()); + OperateResult connect = melsecMcNet.ConnectServer(); + if(connect.IsSuccess){ + result = true; + OutputQueue.Ext.offer(MessageFormat.format( "銆恵0}銆戞満姊拌噦plc杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + log.info("MelsecExt"+" - 1"+" - 鏈烘鑷俻lc杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + } else { + OutputQueue.Ext.offer(MessageFormat.format("銆恵0}銆戞満姊拌噦plc杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}] ", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + log.error("MelsecExt"+" - 2"+" - 鏈烘鑷俻lc杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + initExt(); + } +// melsecMcNet.ConnectClose(); + return result; + } + + /** + * 璇诲彇鐘舵�� + */ + private void readStatus(){ + try { + OperateResultExOne<byte[]> result = melsecMcNet.Read("D1035", (short) 56); + if (result.IsSuccess) { + if (null == extProtocol) { + extProtocol = new ExtProtocol(); + extProtocol.setExtNo(slave.getId()); + } + extProtocol.setTake(melsecMcNet.getByteTransform().TransBool(result.Content, 0)); + extProtocol.setPut(melsecMcNet.getByteTransform().TransBool(result.Content, 0)); +// extProtocol.setMode(melsecMcNet.getByteTransform().TransInt16(result.Content, 0)); +// extProtocol.setTaskNo(melsecMcNet.getByteTransform().TransInt16(result.Content, 2)); + + +// 鏍规嵁瀹炴椂淇℃伅鏇存柊鏁版嵁搴� + BasExtService extService = SpringUtils.getBean(BasExtService.class); + BasExt basExt = new BasExt(); + basExt.setExtNo(slave.getId()); + basExt.setExtTask(extProtocol.isTake()?"Y":"N"); + basExt.setExtPut(extProtocol.isPut()?"Y":"N"); + if (!extService.updateById(basExt)){ + log.error("MelsecExt"+" - 4"+" - 鏈烘鑷俻lc鏁版嵁搴撴洿鏂板け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + }else { + OutputQueue.Ext.offer(MessageFormat.format("銆恵0}銆慬id:{1}] <<<<< 瀹炴椂鏁版嵁鏇存柊鎴愬姛",DateUtils.convert(new Date()), slave.getId())); + } + } else { + BasExtService extService = SpringUtils.getBean(BasExtService.class); + BasExt basExt = new BasExt(); + basExt.setExtNo(slave.getId()); + basExt.setExtTask("N"); + basExt.setExtPut("N"); + extService.updateById(basExt); + OutputQueue.Ext.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.Ext.offer(MessageFormat.format("銆恵0}銆戣鍙栨満姊拌噦plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + log.error("MelsecExt"+" - 5"+" - 璇诲彇鏈烘鑷俻lc鐘舵�佷俊鎭け璐� ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + initExt(); + } finally { +// sign = System.currentTimeMillis(); + } + + } + + @Override + public void close() { + melsecMcNet.ConnectClose(); + } + + /** + * 蹇冭烦 + */ + private void heartbeat(){ + if (heartBeatVal >= 30000) { + heartBeatVal = -30000; + } else { + heartBeatVal =(short) (heartBeatVal+1); + } + OperateResult write = melsecMcNet.Write("D1011", heartBeatVal); + if (!write.IsSuccess) { + log.error("MelsecExt"+" - 9"+" - 鏈烘鑷俻lc蹇冭烦閫氳澶辫触 ===>> [id:{}] [ip:{}] [port:{}]", slave.getId(), slave.getIp(), slave.getPort()); + } + } + + + /******************************************************************************************/ + /**************************************** 娴嬭瘯涓撶敤 *****************************************/ + /*****************************************************************************************/ + public static void main(String[] args) throws InterruptedException { + + } + + // 鎻愪緵涓�涓柟娉曟潵鍋滄绾跨▼ + public void requestStop() { + isRunning = false; + } + + // 鎻愪緵涓�涓柟娉曟潵閲嶅惎绾跨▼ + public Thread restartThread() { + isRunning = true; + Thread newThread = new Thread(this); + newThread.start(); + return newThread; + } + +} -- Gitblit v1.9.1