From 2b6156951c18ea9ff60ed5578db633cebbe99fa7 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期四, 25 九月 2025 10:46:16 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java |  274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 274 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java b/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java
new file mode 100644
index 0000000..6840786
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java
@@ -0,0 +1,274 @@
+package com.zy.core.thread.impl;
+
+import HslCommunication.Core.Types.OperateResult;
+import HslCommunication.Core.Types.OperateResultExOne;
+import HslCommunication.Profinet.Siemens.SiemensPLCS;
+import HslCommunication.Profinet.Siemens.SiemensS7Net;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.zy.common.SpringUtils;
+import com.zy.common.utils.DateUtils;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
+import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.*;
+import com.zy.core.model.DeviceCommandMsgModel;
+import com.zy.core.model.DeviceMsgModel;
+import com.zy.core.properties.DeviceConfig;
+import com.zy.core.thread.ForkLiftThread;
+import com.zy.core.utils.DeviceMsgUtils;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import java.text.MessageFormat;
+import java.util.*;
+
+@Slf4j
+@SuppressWarnings("all")
+public class ZyForkLiftThread implements ForkLiftThread {
+
+    private DeviceConfig deviceConfig;
+    private RedisUtil redisUtil;
+    private SiemensS7Net siemensS7Net;
+    private boolean connect = false;
+
+    public ZyForkLiftThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
+        this.deviceConfig = deviceConfig;
+        this.redisUtil = redisUtil;
+    }
+
+    @Override
+    public boolean connect() {
+        if (deviceConfig.getFake()) {
+            this.connect = true;
+            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort(), 0, 0));
+            News.info("銆恵}銆戣揣鍙夋彁鍗囨満杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort());
+            return true;
+        }
+
+        boolean result = false;
+        siemensS7Net = new SiemensS7Net(SiemensPLCS.S1200, deviceConfig.getIp());
+        siemensS7Net.setRack(Integer.valueOf(0).byteValue());
+        siemensS7Net.setSlot(Integer.valueOf(0).byteValue());
+        OperateResult connect = siemensS7Net.ConnectServer();
+        if(connect.IsSuccess){
+            result = true;
+            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}] [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort(), 0, 0));
+            News.info("銆恵}銆戣揣鍙夋彁鍗囨満杩炴帴鎴愬姛 ===>> [id:{}] [ip:{}] [port:{}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort());
+        } else {
+            OutputQueue.FORKLIFT.offer(MessageFormat.format( "銆恵0}銆戣揣鍙夋彁鍗囨満杩炴帴澶辫触锛侊紒锛� ===>> [id:{1}] [ip:{2}] [port:{3}]  [rack:{4}] [slot:{5}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort(), 0, 0));
+            News.error("銆恵}銆戣揣鍙夋彁鍗囨満杩炴帴澶辫触锛侊紒锛� ===>> [id:{}] [ip:{}] [port:{}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort());
+        }
+        // siemensS7Net.ConnectClose();
+        this.connect = result;
+        return result;
+    }
+
+    @Override
+    public void close() {
+
+    }
+
+    @Override
+    public void run() {
+        News.info("{}鍙疯揣鍙夋彁鍗囨満绾跨▼鍚姩", deviceConfig.getDeviceNo());
+        this.connect();
+        while (true) {
+            try {
+                DeviceMsgUtils deviceMsgUtils = null;
+                try {
+                    deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class);
+                }catch (Exception e){}
+                if (deviceMsgUtils == null) {
+                    continue;
+                }
+                DeviceCommandMsgModel deviceCommandMsg = deviceMsgUtils.getDeviceCommandMsg(SlaveType.ForkLift, deviceConfig.getDeviceNo());
+                if (deviceCommandMsg == null) {
+                    continue;
+                }
+                executeCommand(deviceCommandMsg, deviceMsgUtils);
+
+                Thread.sleep(200);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private void executeCommand(DeviceCommandMsgModel deviceCommandMsg, DeviceMsgUtils deviceMsgUtils) {
+        if (deviceConfig.getFake()) {
+            redisUtil.set(RedisKeyType.FAKE_DEVICE_FORK_LIFT_COMMAND_MSG_KEY.key + deviceConfig.getDeviceNo(), deviceCommandMsg, 60 * 60);
+            return;
+        }
+
+        String command = JSON.toJSONString(deviceCommandMsg.getCommand());
+        JSONObject commandObj = JSON.parseObject(command);
+
+        HashMap<String, Object> resultData = new HashMap<>();
+        resultData.put("result", "false");
+
+        String deviceMsgType = "command";
+        OperateResult result = null;
+        OperateResult result2 = null;
+        if (commandObj.getInteger("mode") == 3) {
+            //鍙栨斁璐�
+            short[] array = new short[4];
+            array[0] = commandObj.getShort("taskNO");//浠诲姟鍙�
+            array[1] = commandObj.getShort("mode");//浠诲姟妯″紡
+            array[2] = commandObj.getShort("pick");//鍙栬揣鏁版嵁
+            array[3] = commandObj.getShort("put");//鏀捐揣鏁版嵁
+            resultData.put("commandData", array);
+
+            result = siemensS7Net.Write("DB103.0", array);
+            if (result.IsSuccess) {
+                result2 = siemensS7Net.Write("DB103.8", (short) 1);
+                if (result2.IsSuccess) {
+                    resultData.put("result", "success");
+                }
+            }
+        } else if (commandObj.getInteger("mode") == 4) {
+            //灏忚溅鎹㈠眰
+            short[] array = new short[4];
+            array[0] = commandObj.getShort("taskNO");//浠诲姟鍙�
+            array[1] = commandObj.getShort("mode");//浠诲姟妯″紡
+            array[2] = commandObj.getShort("pick");//鍙栬揣鏁版嵁
+            array[3] = commandObj.getShort("put");//鏀捐揣鏁版嵁
+            resultData.put("commandData", array);
+
+            result = siemensS7Net.Write("DB103.0", array);
+            if (result.IsSuccess) {
+                result2 = siemensS7Net.Write("DB103.8", (short) 1);
+                if (result2.IsSuccess) {
+                    resultData.put("result", "success");
+                }
+            }
+        } else if (commandObj.getInteger("mode") == 5) {
+            //鎻愬崌鏈虹Щ鍔�
+            short[] array = new short[4];
+            array[0] = commandObj.getShort("taskNO");//浠诲姟鍙�
+            array[1] = commandObj.getShort("mode");//浠诲姟妯″紡
+            array[2] = commandObj.getShort("pick");//鍙栬揣鏁版嵁
+            array[3] = commandObj.getShort("put");//鏀捐揣鏁版嵁
+            resultData.put("commandData", array);
+
+            result = siemensS7Net.Write("DB103.0", array);
+            if (result.IsSuccess) {
+                result2 = siemensS7Net.Write("DB103.8", (short) 1);
+                if (result2.IsSuccess) {
+                    resultData.put("result", "success");
+                }
+            }
+        } else if (commandObj.getInteger("mode") == 9996) {
+            //澶嶄綅
+            short[] array = new short[1];
+            array[0] = 1;
+            resultData.put("commandData", array);
+
+            result = siemensS7Net.Write("DB103.10", array);
+            if (result.IsSuccess) {
+                resultData.put("result", "success");
+            }
+        } else if (commandObj.getInteger("mode") == 9997) {
+            //鍒囨崲鍏ュ簱妯″紡
+            short[] array = new short[1];
+            array[0] = 1;
+            resultData.put("commandData", array);
+
+            result = siemensS7Net.Write("DB103.12", array);
+            if (result.IsSuccess) {
+                resultData.put("result", "success");
+            }
+        } else if (commandObj.getInteger("mode") == 9998) {
+            //鍒囨崲鍑哄簱妯″紡
+            short[] array = new short[1];
+            array[0] = 2;
+            resultData.put("commandData", array);
+
+            result = siemensS7Net.Write("DB103.12", array);
+            if (result.IsSuccess) {
+                resultData.put("result", "success");
+            }
+        } else if (commandObj.getInteger("mode") == 9999) {
+            //璇诲彇鐘舵��
+            JSONObject device = new JSONObject();
+
+            OperateResultExOne<byte[]> readResult1 = siemensS7Net.Read("DB101.0", (short) 18);
+            if (readResult1.IsSuccess) {
+                //妯″紡
+                device.put("model", (int) siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 0));
+                //PLC浠诲姟鍙�
+                device.put("wrkNo", (int) siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 2));
+                //浠诲姟鐘舵��
+                device.put("protocolStatus", (int) siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 4));
+                //浠诲姟妯″紡
+                device.put("taskMode", (int) siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 6));
+                //鍙栬揣鏁版嵁
+                device.put("pick", (int) siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 8));
+                //鏀捐揣鏁版嵁
+                device.put("put", (int) siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 10));
+                //鍑哄叆搴撴ā寮�
+                device.put("iOMode", (int) siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 12));
+                //鏁呴殰鐮�
+                device.put("errorCode", (int) siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 14));
+                //灞�
+                device.put("lev", (int) siemensS7Net.getByteTransform().TransInt16(readResult1.Content, 16));
+
+                resultData.put("deviceStatus", device);
+            }
+
+            //绔欑偣涓暟
+            int staCount = 4;
+            //璇诲彇鎵樼洏鏁版嵁
+            List<Integer> trayList = new ArrayList<>();
+            OperateResultExOne<byte[]> readResult2 = siemensS7Net.Read("DB102.0", (short) (staCount * 2));
+            if(readResult2.IsSuccess) {
+                for (int i = 0; i < staCount; i++) {
+                    short val = siemensS7Net.getByteTransform().TransInt16(readResult2.Content, i * 2);
+                    trayList.add((int) val);
+                }
+            }
+
+            //璇诲彇灏忚溅鏁版嵁
+            OperateResultExOne<byte[]> readResult3 = siemensS7Net.Read("DB102.50", (short) (staCount * 2));
+            List<Integer> carList = new ArrayList<>();
+            if(readResult3.IsSuccess) {
+                for (int i = 0; i < staCount; i++) {
+                    short val = siemensS7Net.getByteTransform().TransInt16(readResult3.Content, i * 2);
+                    carList.add((int) val);
+                }
+            }
+
+            device.put("trayList", trayList);
+            device.put("carList", carList);
+
+            deviceMsgType = "status";
+        }
+
+        resultData.put("commandResult1", JSON.toJSONString(result));
+        resultData.put("commandResult2", JSON.toJSONString(result2));
+
+        if (deviceMsgType.equals("command")) {
+            log.info("鏀跺埌Rcs ForkLift Command Data: {}", JSON.toJSONString(deviceCommandMsg));
+        }
+        DeviceMsgModel deviceMsgModel = new DeviceMsgModel();
+        deviceMsgModel.setDeviceId(deviceConfig.getDeviceNo());
+        deviceMsgModel.setDeviceMsgType(deviceMsgType);
+        deviceMsgModel.setDeviceMsg(JSON.toJSONString(resultData));
+        deviceMsgModel.setDeviceOriginMsg(JSON.toJSONString(resultData));
+        deviceMsgModel.setResultKey(deviceCommandMsg.getResultKey());
+        deviceMsgUtils.sendDeviceMsg(SlaveType.ForkLift, deviceConfig.getDeviceNo(), deviceMsgModel);
+    }
+
+    @Override
+    public DeviceConfig getDeviceConfig() {
+        return this.deviceConfig;
+    }
+
+    /**
+     * 鎵╁睍瀛楁
+     */
+    @Data
+    private class InnerForkLiftExtend {
+
+    }
+}

--
Gitblit v1.9.1