From fbc1ee007b2cbf95d33b6950fc95c0b4a34027d6 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 10 七月 2025 15:54:24 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/controller/OpenController.java | 7
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 4
src/main/java/com/zy/core/thread/fake/FakeZyForkLiftThread.java | 364 ++++++++++++++++++++++++++++++
src/main/java/com/zy/core/enums/RedisKeyType.java | 3
src/main/java/com/zy/core/thread/ForkLiftThread.java | 3
src/main/resources/application.yml | 2
src/main/java/com/zy/core/ServerBootstrap.java | 4
src/main/java/com/zy/core/thread/impl/ZyForkLiftThread.java | 274 ++++++++++++++++++++++
8 files changed, 658 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/zy/core/ServerBootstrap.java b/src/main/java/com/zy/core/ServerBootstrap.java
index ecf3f0a..9c9ebd6 100644
--- a/src/main/java/com/zy/core/ServerBootstrap.java
+++ b/src/main/java/com/zy/core/ServerBootstrap.java
@@ -7,6 +7,7 @@
import com.zy.core.enums.SlaveType;
import com.zy.core.properties.DeviceConfig;
import com.zy.core.thread.fake.FakeNyShuttleThread;
+import com.zy.core.thread.fake.FakeZyForkLiftThread;
import com.zy.core.thread.impl.LfdZyForkLiftMasterThread;
import com.zy.core.thread.impl.NyShuttleThread;
import com.zy.core.utils.DeviceMsgUtils;
@@ -75,6 +76,9 @@
private void initFakeThread(){
ThreadHandler thread = new FakeNyShuttleThread(redisUtil, gatewayPort);
new Thread(thread).start();
+
+ ThreadHandler thread2 = new FakeZyForkLiftThread(redisUtil);
+ new Thread(thread2).start();
}
diff --git a/src/main/java/com/zy/core/controller/OpenController.java b/src/main/java/com/zy/core/controller/OpenController.java
index 062a84c..a7ec4ea 100644
--- a/src/main/java/com/zy/core/controller/OpenController.java
+++ b/src/main/java/com/zy/core/controller/OpenController.java
@@ -6,6 +6,7 @@
import com.zy.core.model.param.AddFakeDeviceParam;
import com.zy.core.model.param.DeleteDeviceParam;
import com.zy.core.properties.DeviceConfig;
+import com.zy.core.thread.ForkLiftThread;
import com.zy.core.thread.ShuttleThread;
import com.zy.core.utils.DeviceMsgUtils;
import com.zy.core.utils.FakeDeviceUtils;
@@ -48,6 +49,12 @@
continue;
}
deviceList.add(shuttleThread.getDeviceConfig());
+ } else if (slaveType.equals(SlaveType.ForkLift)) {
+ ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(slaveType, config.getDeviceNo());
+ if(forkLiftThread == null){
+ continue;
+ }
+ deviceList.add(forkLiftThread.getDeviceConfig());
}
}
diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java
index 16e7065..23b7baa 100644
--- a/src/main/java/com/zy/core/enums/RedisKeyType.java
+++ b/src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -10,6 +10,9 @@
DEVICE_SHUTTLE_COMMAND_MSG_KEY("deviceShuttleCommandMsgKey_"),
DEVICE_FORK_LIFT_COMMAND_MSG_KEY("deviceForkLiftCommandMsgKey_"),
+ //铏氭嫙璁惧鎸囦护娑堟伅KEY
+ FAKE_DEVICE_FORK_LIFT_COMMAND_MSG_KEY("fakeDeviceForkLiftCommandMsgKey_"),
+
//璁惧閰嶇疆鏂囦欢
DEVICE_CONFIG("deviceConfig"),
//铏氭嫙璁惧閰嶇疆鏂囦欢
diff --git a/src/main/java/com/zy/core/thread/ForkLiftThread.java b/src/main/java/com/zy/core/thread/ForkLiftThread.java
index 1d87499..5147a1e 100644
--- a/src/main/java/com/zy/core/thread/ForkLiftThread.java
+++ b/src/main/java/com/zy/core/thread/ForkLiftThread.java
@@ -1,7 +1,10 @@
package com.zy.core.thread;
import com.zy.core.ThreadHandler;
+import com.zy.core.properties.DeviceConfig;
public interface ForkLiftThread extends ThreadHandler {
+ DeviceConfig getDeviceConfig();
+
}
diff --git a/src/main/java/com/zy/core/thread/fake/FakeZyForkLiftThread.java b/src/main/java/com/zy/core/thread/fake/FakeZyForkLiftThread.java
new file mode 100644
index 0000000..226573d
--- /dev/null
+++ b/src/main/java/com/zy/core/thread/fake/FakeZyForkLiftThread.java
@@ -0,0 +1,364 @@
+package com.zy.core.thread.fake;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.zy.common.Cools;
+import com.zy.common.SpringUtils;
+import com.zy.common.utils.RedisUtil;
+import com.zy.core.News;
+import com.zy.core.ThreadHandler;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.RedisKeyType;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.DeviceCommandMsgModel;
+import com.zy.core.model.DeviceMsgModel;
+import com.zy.core.properties.DeviceConfig;
+import com.zy.core.thread.impl.ZyForkLiftThread;
+import com.zy.core.utils.DeviceMsgUtils;
+import com.zy.core.utils.FakeDeviceUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.*;
+import java.util.*;
+
+@Slf4j
+@SuppressWarnings("all")
+public class FakeZyForkLiftThread implements ThreadHandler {
+
+ private RedisUtil redisUtil;
+ private JSONObject fakeStatusDemo = JSONObject.parseObject("{\"model\":2,\"wrkNo\":0,\"lev\":1,\"protocolStatus\":0,\"taskMode\":0,\"pick\":0,\"put\":0,\"iOMode\":0,\"errorCode\":0,\"trayList\":[0,0,0,0],\"carList\":[0,0,0,0]}");
+ private HashMap<String, Thread> fakeThreadMap = new HashMap();
+ private HashMap<String, JSONObject> fakeStatusMap = new HashMap();
+ private HashMap<String, JSONObject> fakeCommandMap = new HashMap();
+
+ private boolean fake = false;
+
+ public FakeZyForkLiftThread(RedisUtil redisUtil) {
+ this.redisUtil = redisUtil;
+ }
+
+ @Override
+ public void run() {
+ News.info("Fake Server is Started");
+
+ Thread fakeCommandThread = new Thread(() -> {
+ while (true) {
+ try {
+ FakeDeviceUtils fakeDeviceUtils = null;
+ try {
+ fakeDeviceUtils = SpringUtils.getBean(FakeDeviceUtils.class);
+ }catch (Exception e){}
+ if(fakeDeviceUtils == null){
+ continue;
+ }
+ List<DeviceConfig> deviceConfigs = fakeDeviceUtils.getFakeDeviceConfig();
+ for (DeviceConfig device : deviceConfigs) {
+ excuteFakeCommand(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo());
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ });
+ fakeCommandThread.start();
+
+ while (true) {
+ try {
+ initFakeDeviceServer();
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private synchronized void initFakeDeviceServer() {
+ FakeDeviceUtils fakeDeviceUtils = null;
+ try {
+ fakeDeviceUtils = SpringUtils.getBean(FakeDeviceUtils.class);
+ }catch (Exception e){}
+ if(fakeDeviceUtils == null){
+ return;
+ }
+ List<DeviceConfig> deviceConfigs = fakeDeviceUtils.getFakeDeviceConfig();
+ for (DeviceConfig device : deviceConfigs) {
+ if (!device.getDeviceType().equals(String.valueOf(SlaveType.ForkLift))) {
+ continue;
+ }
+
+ if (!device.getThreadImpl().equals("ZyForkLiftThread")) {
+ continue;
+ }
+
+ if (fakeThreadMap.containsKey(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo())) {
+ continue;
+ }
+
+ Thread fakeThread = new Thread(() -> {
+ log.info("{}:device is start handle client", device.getDeviceNo());
+ try {
+ while (true) {
+ handleClient(device);
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ });
+ fakeThread.start();
+
+ String fakeStatus = JSON.toJSONString(fakeStatusDemo);
+ if (!Cools.isEmpty(device.getFakeInitStatus())) {
+ fakeStatus = device.getFakeInitStatus();
+ }
+ fakeThreadMap.put(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo(), fakeThread);
+ fakeStatusMap.put(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo(), JSON.parseObject(fakeStatus));
+
+
+ // init
+ ThreadHandler thread = new ZyForkLiftThread(device, redisUtil);;
+ new Thread(thread).start();
+ SlaveConnection.put(SlaveType.ForkLift, device.getDeviceNo(), thread);
+ }
+ }
+
+ private void excuteFakeCommand(String key) {
+ if (!fakeCommandMap.containsKey(key)) {
+ return;
+ }
+ JSONObject command = fakeCommandMap.get(key);
+ JSONObject commandBody = command.getJSONObject("commandBody");
+ fakeCommandMap.remove(key);
+ new Thread(() -> {
+ try {
+ JSONObject fakeStatus = fakeStatusMap.get(key);
+ Integer commandType = command.getInteger("commandType");
+ if (commandType == null) {
+ return;
+ }
+
+ if (commandType == 3) {
+ //鍙栨斁璐�
+ fakeStatus.put("wrkNo", commandBody.getInteger("taskNo"));//浠诲姟鍙�
+ fakeStatus.put("protocolStatus", 1);//鍙栬揣涓�
+ fakeStatus.put("taskMode", commandType);//浠诲姟绫诲瀷
+ fakeStatus.put("pick", commandBody.getInteger("pick"));//鍙栬揣鏁版嵁
+ fakeStatus.put("put", commandBody.getInteger("put"));//鏀捐揣鏁版嵁
+ fakeStatusMap.put(key, fakeStatus);
+
+ //delay
+ Thread.sleep(5000);
+ fakeStatus.put("protocolStatus", 2);//鏀捐揣涓�
+ fakeStatusMap.put(key, fakeStatus);
+
+ //delay
+ Thread.sleep(5000);
+
+ fakeStatus.put("protocolStatus", 98);//绛夊緟纭
+ fakeStatus.put("lev", command.getInteger("put"));
+ fakeStatusMap.put(key, fakeStatus);
+ } else if (commandType == 4) {
+ //灏忚溅鎹㈠眰
+ fakeStatus.put("wrkNo", commandBody.getInteger("taskNo"));//浠诲姟鍙�
+ fakeStatus.put("protocolStatus", 1);//鍙栬揣涓�
+ fakeStatus.put("taskMode", commandType);//浠诲姟绫诲瀷
+ fakeStatus.put("pick", commandBody.getInteger("pick"));//鍙栬揣鏁版嵁
+ fakeStatus.put("put", commandBody.getInteger("put"));//鏀捐揣鏁版嵁
+ fakeStatusMap.put(key, fakeStatus);
+
+ //delay
+ Thread.sleep(5000);
+ fakeStatus.put("protocolStatus", 2);//鏀捐揣涓�
+ fakeStatusMap.put(key, fakeStatus);
+
+ //delay
+ Thread.sleep(5000);
+
+ fakeStatus.put("protocolStatus", 98);//绛夊緟纭
+ fakeStatus.put("lev", commandBody.getInteger("put"));
+ fakeStatusMap.put(key, fakeStatus);
+ } else if (commandType == 5) {
+ //鎻愬崌鏈虹Щ鍔�
+ fakeStatus.put("wrkNo", commandBody.getInteger("taskNo"));//浠诲姟鍙�
+ fakeStatus.put("protocolStatus", 3);//绉诲姩涓�
+ fakeStatus.put("taskMode", commandType);//浠诲姟绫诲瀷
+ fakeStatus.put("pick", commandBody.getInteger("pick"));//鍙栬揣鏁版嵁
+ fakeStatus.put("put", commandBody.getInteger("put"));//鏀捐揣鏁版嵁
+ fakeStatusMap.put(key, fakeStatus);
+
+ //delay
+ Thread.sleep(5000);
+
+ fakeStatus.put("protocolStatus", 98);//绛夊緟纭
+ fakeStatus.put("lev", commandBody.getInteger("pick"));
+ fakeStatusMap.put(key, fakeStatus);
+ } else if (commandType == 9996) {
+ //澶嶄綅
+ fakeStatus.put("wrkNo", 0);//浠诲姟鍙�
+ fakeStatus.put("protocolStatus", 0);
+ fakeStatus.put("taskMode", 0);//浠诲姟绫诲瀷
+ fakeStatus.put("pick", 0);//鍙栬揣鏁版嵁
+ fakeStatus.put("put", 0);//鏀捐揣鏁版嵁
+ fakeStatusMap.put(key, fakeStatus);
+ } else if (commandType == 9997) {
+ //鍒囨崲鍏ュ簱妯″紡
+ fakeStatus.put("iOMode", 1);//鍑哄叆搴撴ā寮�
+ fakeStatusMap.put(key, fakeStatus);
+ } else if (commandType == 9998) {
+ //鍒囨崲鍑哄簱妯″紡
+ fakeStatus.put("iOMode", 2);//鍑哄叆搴撴ā寮�
+ fakeStatusMap.put(key, fakeStatus);
+ }
+
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ }).start();
+ }
+
+ private void handleClient(DeviceConfig device) throws IOException {
+ try {
+ Set<String> keys = redisUtil.searchKeys(RedisKeyType.FAKE_DEVICE_FORK_LIFT_COMMAND_MSG_KEY.key + device.getDeviceNo());
+ if (keys.isEmpty()) {
+ return;
+ }
+
+ TreeSet<String> treeSet = new TreeSet<>();
+ for (String key : keys) {
+ treeSet.add(key);
+ }
+
+ String first = treeSet.first();
+ DeviceCommandMsgModel deviceCommandMsgModel = (DeviceCommandMsgModel) redisUtil.get(first);
+ redisUtil.del(first);
+
+// log.info("鏀跺埌Client Data: {}", JSON.toJSONString(result));
+ processCommand(deviceCommandMsgModel, device);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void removeFake(DeviceConfig device) {
+ Thread thread = fakeThreadMap.get(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo());
+ if (thread != null) {
+ thread.interrupt();
+ }
+
+ fakeThreadMap.remove(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo());
+ fakeStatusMap.remove(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo());
+ fakeCommandMap.remove(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo());
+ }
+
+ public void processCommand(DeviceCommandMsgModel deviceCommandMsgModel, DeviceConfig device) throws IOException {
+ DeviceMsgUtils deviceMsgUtils = SpringUtils.getBean(DeviceMsgUtils.class);
+ if (deviceMsgUtils == null) {
+ return;
+ }
+
+ HashMap<String, Object> response = null;
+ JSONObject fakeStatus = fakeStatusMap.get(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo());
+
+ String command = JSON.toJSONString(deviceCommandMsgModel.getCommand());
+ JSONObject commandObj = JSON.parseObject(command);
+ Integer mode = commandObj.getInteger("mode");
+
+ String deviceMsgType = "command";
+ JSONObject fakeCommand = new JSONObject();
+ fakeCommand.put("deviceNo", device.getDeviceNo());
+ fakeCommand.put("deviceType", device.getDeviceType());
+ fakeCommand.put("commandType", commandObj.getInteger("mode"));
+ fakeCommand.put("commandBody", command);
+ if (mode == 3) {
+ //鍙栨斁璐�
+ fakeCommandMap.put(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo(), fakeCommand);
+ response = genereateFakeCommandResponse();
+ } else if (mode == 4) {
+ //灏忚溅鎹㈠眰
+ fakeCommandMap.put(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo(), fakeCommand);
+ response = genereateFakeCommandResponse();
+ } else if (mode == 5) {
+ //鎻愬崌鏈虹Щ鍔�
+ fakeCommandMap.put(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo(), fakeCommand);
+ response = genereateFakeCommandResponse();
+ } else if (mode == 9996) {
+ //澶嶄綅
+ fakeCommandMap.put(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo(), fakeCommand);
+ response = genereateFakeCommandResponse();
+ } else if (mode == 9997) {
+ //鍒囨崲鍏ュ簱妯″紡
+ fakeCommandMap.put(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo(), fakeCommand);
+ response = genereateFakeCommandResponse();
+ } else if (mode == 9998) {
+ //鍒囨崲鍑哄簱妯″紡
+ fakeCommandMap.put(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo(), fakeCommand);
+ response = genereateFakeCommandResponse();
+ } else if (mode == 9999) {
+ //璇诲彇鐘舵��
+ response = genereateFakeStatusResponse(fakeStatus);
+ deviceMsgType = "status";
+ }
+
+ fakeStatusMap.put(String.valueOf(SlaveType.ForkLift) + device.getDeviceNo(), fakeStatus);
+
+ if (deviceMsgType.equals("command")) {
+ log.info("鏀跺埌Rcs ForkLift Command Data: {}", JSON.toJSONString(deviceCommandMsgModel));
+ }
+ DeviceMsgModel deviceMsgModel = new DeviceMsgModel();
+ deviceMsgModel.setDeviceId(device.getDeviceNo());
+ deviceMsgModel.setDeviceMsgType(deviceMsgType);
+ deviceMsgModel.setDeviceMsg(response);
+ deviceMsgModel.setDeviceOriginMsg(JSON.toJSONString(response));
+ deviceMsgModel.setResultKey(deviceCommandMsgModel.getResultKey());
+ deviceMsgUtils.sendDeviceMsg(SlaveType.ForkLift, device.getDeviceNo(), deviceMsgModel);
+ }
+
+ public HashMap<String, Object> genereateFakeStatusResponse(JSONObject fakeStatus) {
+ JSONObject device = new JSONObject();
+ HashMap<String, Object> resultData = new HashMap<>();
+ resultData.put("result", "success");
+ resultData.put("deviceStatus", device);
+
+
+ device.put("model", fakeStatus.getInteger("model"));
+ device.put("wrkNo", fakeStatus.getInteger("wrkNo"));
+ device.put("protocolStatus", fakeStatus.getInteger("protocolStatus"));
+ device.put("taskMode", fakeStatus.getInteger("taskMode"));
+ device.put("pick", fakeStatus.getInteger("pick"));
+ device.put("put", fakeStatus.getInteger("put"));
+ device.put("iOMode", fakeStatus.getInteger("iOMode"));
+ device.put("errorCode", fakeStatus.getInteger("errorCode"));
+ device.put("lev", fakeStatus.getInteger("lev"));
+
+ Object trayListObj = fakeStatus.get("trayList");
+ List<Integer> trayList = new ArrayList<>();
+ if (trayListObj != null) {
+ trayList = JSON.parseArray(JSON.toJSONString(trayListObj), Integer.class);
+ }
+
+ Object carListObj = fakeStatus.get("carList");
+ List<Integer> carList = new ArrayList<>();
+ if (carListObj != null) {
+ carList = JSON.parseArray(JSON.toJSONString(carListObj), Integer.class);
+ }
+
+ device.put("trayList", trayList);
+ device.put("carList", carList);
+ return resultData;
+ }
+
+ public HashMap<String, Object> genereateFakeCommandResponse() {
+ HashMap<String, Object> resultData = new HashMap<>();
+ resultData.put("result", "success");
+ return resultData;
+ }
+
+ @Override
+ public boolean connect() {
+ return true;
+ }
+
+ @Override
+ public void close() {
+
+ }
+
+}
diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
index 9a9aa99..e3854e0 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -165,7 +165,7 @@
deviceMsgModel.setResultKey(resultKey);
deviceMsgUtils.sendDeviceMsg(SlaveType.Shuttle, deviceConfig.getDeviceNo(), deviceMsgModel);
}else {
- log.info("鏀跺埌Server Command Data: {}", JSON.toJSONString(result));
+ log.info("鏀跺埌Rcs Shuttle Command Data: {}", JSON.toJSONString(result));
DeviceMsgModel deviceMsgModel = new DeviceMsgModel();
deviceMsgModel.setDeviceId(deviceConfig.getDeviceNo());
deviceMsgModel.setDeviceMsgType("command");
@@ -175,7 +175,7 @@
deviceMsgUtils.sendDeviceMsg(SlaveType.Shuttle, deviceConfig.getDeviceNo(), deviceMsgModel);
}
} else if ("requestMsg".equals(msgType)) {
- log.info("鏀跺埌Server Init Data: {}", JSON.toJSONString(result));
+ log.info("鏀跺埌Shuttle Init Data: {}", JSON.toJSONString(result));
String requestType = body.getString("requestType");
if (requestType.equals("init")) {
DeviceMsgModel deviceMsgModel = new DeviceMsgModel();
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 {
+
+ }
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index d3f7e19..dc5d773 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
- port: 9099
+ port: 9098
servlet:
context-path: /@pom.build.finalName@
--
Gitblit v1.9.1