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