From 7ae7bcc0245afa4d94516feddc2b8bd60e4253c6 Mon Sep 17 00:00:00 2001
From: wuyouming666 <2265557248@qq.com>
Date: 星期一, 11 十二月 2023 10:25:02 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/CanadaMes

---
 springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java        |  330 +++++
 springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java                |  277 ++++
 springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning1.java              |  159 ++
 springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning2.java              |  146 ++
 springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java                     |    2 
 springboot-vue3/src/main/java/com/example/springboot/component/PLCManualJog.java                 |  244 ++++
 springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java                     |  145 ++
 springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java                      |  112 +
 springboot-vue3/src/main/java/com/example/springboot/controller/SpianController.java             |    2 
 springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java                   |  283 ----
 springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java            |  467 +++++++
 springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java                      |  186 +++
 springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java              |  167 ++
 springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java                 |  156 ++
 springboot-vue3/src/main/java/com/example/springboot/component/Plcstate.java                     |  101 +
 CanadaMes-ui/src/views/login/index.vue                                                           |    2 
 springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java |  204 +++
 springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java         |  456 +++++++
 springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java                |  211 +++
 19 files changed, 3,365 insertions(+), 285 deletions(-)

diff --git a/CanadaMes-ui/src/views/login/index.vue b/CanadaMes-ui/src/views/login/index.vue
index 80c4784..2ae5618 100644
--- a/CanadaMes-ui/src/views/login/index.vue
+++ b/CanadaMes-ui/src/views/login/index.vue
@@ -78,6 +78,8 @@
       this.$refs.loginFormRef.validate(async valid => {
         if (!valid) return;
         login(this.loginForm).then(res => {
+          document.cookie="Authorizationssss="+this.loginForm.username+"; expires=Thu, 18 Dec 2203 12:00:00 GMT";
+          
           // 璁剧疆token
           setToken(res.data.Authorization);
           this.$router.push('/layout')
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java b/springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java
new file mode 100644
index 0000000..15e3552
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PLCAutomaticParameterSetting.java
@@ -0,0 +1,204 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import org.apache.commons.io.FileUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class PLCAutomaticParameterSetting extends Thread {
+  String name = "";
+  Integer count = 0;
+
+  public static String readFileToString(String filePath) throws IOException {
+    File file = new File(filePath);
+    return FileUtils.readFileToString(file, "UTF-8");
+  }
+
+  public void readValue() {
+    String str = "";
+    BufferedReader bufferedReader = null;
+    FileInputStream fileInputStream;
+    try {
+      // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+      fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/address.json");
+      // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+      // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+      bufferedReader = new BufferedReader(inputStreamReader);
+      String line = null;
+      // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+      while ((line = bufferedReader.readLine()) != null) {
+        str += line;
+      }
+
+      // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+      JSONObject jsonObject = new JSONObject(str);
+
+      // 鑾峰彇json涓殑鍊�
+      JSONArray address = jsonObject.getJSONArray("address");
+      for (int i = 0; i < address.size(); i++) {
+        JSONObject ress = (JSONObject) address.get(i);
+
+        this.name = ress.getStr("name");
+        this.count = ress.getInt("count");
+
+      }
+
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
+    } catch (UnsupportedEncodingException e) {
+      e.printStackTrace();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(1000);
+
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+      // this.readValue();
+      // String PlcAddress = this.name;
+      // Integer Plccount = this.count;
+
+      // System.out.println(stt);
+      List<Short> arraylist = S7control.getinstance().ReadWord("DB100.120", 8);
+      List<Short> dache1 = S7control.getinstance().ReadWord("DB100.18", 1);
+      List<Short> xiaoche1 = S7control.getinstance().ReadWord("DB100.22", 1);
+      List<Short> fanzhuan1 = S7control.getinstance().ReadWord("DB100.14", 1);
+      // Short[] values1 = { 1, 2, 3, 4, 5, 6, 7, 8 };
+      // List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
+      // Short[] fanzhuan = { 4 };
+      // List<Short> fanzhuan1 = new ArrayList<>(Arrays.asList(fanzhuan));
+      // Short[] dache = { 5 };
+      // List<Short> dache1 = new ArrayList<>(Arrays.asList(dache));
+      // Short[] xiaoche = { 6 };
+      // List<Short> xiaoche1 = new ArrayList<>(Arrays.asList(xiaoche));
+
+      JSONObject jsonObject = new JSONObject();
+      // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
+      // new short[]{0,0, 0, 0, 0, 0, 0, 0, 0, 0}
+
+      jsonObject.append("params", arraylist);
+      jsonObject.append("dache1", dache1);
+      jsonObject.append("xiaoche", xiaoche1);
+      jsonObject.append("fanzhuan", fanzhuan1);
+//
+//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
+//      if (sendwServer != null) {
+//        sendwServer.sendMessage(jsonObject.toString());
+//      }
+      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
+      if (sendwServer != null) {
+        for (WebSocketServer webserver : sendwServer) {
+          webserver.sendMessage(jsonObject.toString());
+
+//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("AutomaticParameterSetting");
+      if (webserver != null) {
+        List<String> messages = webserver.getMessages();
+        String addressList1 = "DB100.120";
+        String addressList2 = "DB100.18";
+        String addressList3 = "DB100.22";
+        String addressList4 = "DB100.14";
+
+        if (!messages.isEmpty()) {
+          // 灏嗘渶鍚庝竴涓秷鎭浆鎹负 short 绫诲瀷鐨勫垪琛�
+          String lastMessage = messages.get(messages.size() - 1);
+          // System.out.println("lastMessage锛�" + lastMessage);
+          JSONArray messageArray = new JSONArray(lastMessage);
+
+          // 鏁村悎绗� 1 鍒� 2 涓暟缁勫苟鍘绘帀 null 鍏冪礌
+          List<Short> mergedList = new ArrayList<>();
+          for (int i = 0; i < 2; i++) {
+            JSONArray sublist = messageArray.getJSONArray(i);
+            for (int j = 0; j < sublist.size(); j++) {
+              Object value = sublist.get(j);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  short sValue = Short.parseShort(cleanedValue.trim());
+                  mergedList.add(sValue);
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+          }
+          System.out.println(messageArray);
+          // 鍐欏叆绗竴涓湴鍧�
+          if (messageArray.getJSONArray(2).size() > 0) {
+            Object value = messageArray.getJSONArray(2).get(0);
+            if (value != null && !value.toString().equals("null")) {
+              try {
+                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                short sValue = Short.parseShort(cleanedValue.trim());
+                S7control.getinstance().WriteWord(addressList2, Arrays.asList(sValue));
+                System.out
+                        .println("messageValue锛�" + Arrays.asList(sValue) + " written to PLC at address " + addressList2);
+              } catch (NumberFormatException e) {
+                // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                System.err.println("Could not parse value: " + value);
+              }
+            }
+          }
+
+          // 鍐欏叆绗簩涓湴鍧�
+          if (messageArray.getJSONArray(3).size() > 0) {
+            Object value = messageArray.getJSONArray(3).get(0);
+            if (value != null && !value.toString().equals("null")) {
+              try {
+                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                short sValue = Short.parseShort(cleanedValue.trim());
+                S7control.getinstance().WriteWord(addressList3, Arrays.asList(sValue));
+                System.out
+                        .println("messageValue锛�" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
+              } catch (NumberFormatException e) {
+                // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                System.err.println("Could not parse value: " + value);
+              }
+            }
+          }
+
+          // 鍐欏叆绗笁涓湴鍧�
+          if (messageArray.getJSONArray(4).size() > 0) {
+            Object value = messageArray.getJSONArray(4).get(0);
+            if (value != null && !value.toString().equals("null")) {
+              try {
+                String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                short sValue = Short.parseShort(cleanedValue.trim());
+                S7control.getinstance().WriteWord(addressList4, Arrays.asList(sValue));
+                System.out
+                        .println("messageValue锛�" + Arrays.asList(sValue) + " written to PLC at address " + addressList4);
+              } catch (NumberFormatException e) {
+                // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                System.err.println("Could not parse value: " + value);
+              }
+            }
+          }
+
+          // 鍐欏叆绗洓涓湴鍧�
+          if (!mergedList.isEmpty()) {
+            S7control.getinstance().WriteWord(addressList1, mergedList);
+            System.out.println("messageValue锛�" + mergedList + " written to PLC at address " + addressList1);
+          }
+
+          // 娓呯┖娑堟伅鍒楄〃
+          webserver.clearMessages();
+        }
+      }}
+
+      }
+
+    }
+  }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PLCManualJog.java b/springboot-vue3/src/main/java/com/example/springboot/component/PLCManualJog.java
new file mode 100644
index 0000000..a7d9579
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PLCManualJog.java
@@ -0,0 +1,244 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import org.apache.commons.io.FileUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class PLCManualJog extends Thread {
+  String name = "";
+  Integer count = 0;
+
+  public static String readFileToString(String filePath) throws IOException {
+    File file = new File(filePath);
+    return FileUtils.readFileToString(file, "UTF-8");
+  }
+
+  public void readValue() {
+    String str = "";
+    BufferedReader bufferedReader = null;
+    FileInputStream fileInputStream;
+    try {
+      // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+      fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/address.json");
+      // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+      // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+      bufferedReader = new BufferedReader(inputStreamReader);
+      String line = null;
+      // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+      while ((line = bufferedReader.readLine()) != null) {
+        str += line;
+      }
+
+      // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+      JSONObject jsonObject = new JSONObject(str);
+
+      // 鑾峰彇json涓殑鍊�
+      JSONArray address = jsonObject.getJSONArray("address");
+      for (int i = 0; i < address.size(); i++) {
+        JSONObject ress = (JSONObject) address.get(i);
+
+        this.name = ress.getStr("name");
+        this.count = ress.getInt("count");
+
+      }
+
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
+    } catch (UnsupportedEncodingException e) {
+      e.printStackTrace();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(500);
+
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+      // this.readValue();
+      // String PlcAddress = this.name;
+      // Integer Plccount = this.count;
+
+      // System.out.println(stt);
+
+      List<String> addressList0 = new ArrayList<>();
+      addressList0.add("DB101.2.6");
+      addressList0.add("DB101.2.7");
+      addressList0.add("DB101.3.0");
+      addressList0.add("DB101.3.1");
+      addressList0.add("DB101.3.2");
+      addressList0.add("DB101.3.3");
+      addressList0.add("DB101.3.4");
+      addressList0.add("DB101.3.5");
+
+      List<String> addressList21 = new ArrayList<>();
+      addressList21.add("DB101.0.0");
+      addressList21.add("DB101.0.1");
+      addressList21.add("DB101.0.2");
+      addressList21.add("DB101.0.3");
+      addressList21.add("DB101.0.4");
+      addressList21.add("DB101.0.5");
+      addressList21.add("DB101.0.6");
+      addressList21.add("DB101.0.7");
+      addressList21.add("DB101.1.0");
+      addressList21.add("DB101.1.1");
+      addressList21.add("DB101.1.2");
+      addressList21.add("DB101.1.3");
+      addressList21.add("DB101.1.4");
+      addressList21.add("DB101.1.5");
+      addressList21.add("DB101.1.6");
+      addressList21.add("DB101.1.7");
+      List<Boolean> arraylist = S7control.getinstance().readBits(addressList21);
+      List<Boolean> arraylist2 = S7control.getinstance().readBits(addressList0);
+      List<Boolean> arraylist3 = S7control.getinstance().ReadBits("DB101.5.2", 2);
+      // Boolean[] values1 = { false, true, true, true, false, false, true, false,
+      // false, true, true, true, false, false,
+      // true, false };
+      // List<Boolean> arraylist = new ArrayList<>(Arrays.asList(values1));
+      // Boolean[] values2 = { false, true, true, true, false, false, true, false };
+      // List<Boolean> arraylist2 = new ArrayList<>(Arrays.asList(values2));
+      // Boolean[] values3 = { false, false };
+      // List<Boolean> arraylist3 = new ArrayList<>(Arrays.asList(values3));
+
+      arraylist.addAll(arraylist2);
+      arraylist.addAll(arraylist3);
+
+      JSONObject jsonObject = new JSONObject();
+
+      short[] params = new short[arraylist.size()];
+      for (int i = 0; i < arraylist.size(); i++) {
+        boolean value = arraylist.get(i);
+        params[i] = value ? (short) 1 : (short) 0;
+      }
+
+      jsonObject.append("params", params);
+
+//      System.out.println("messageValue锛�" + arraylist +"messageValue2锛�" + arraylist2 );
+//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualJog");
+//      if (sendwServer != null) {
+//        sendwServer.sendMessage(jsonObject.toString());
+//      }
+
+      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("ManualJog");
+      if (sendwServer != null) {
+        for (WebSocketServer webserver : sendwServer) {
+          webserver.sendMessage(jsonObject.toString());
+
+//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualJog");
+
+          if (webserver != null) {
+            //       String addressList1 = "DB101.0.0";
+//        String addressList2 = "DB101.2.6";
+            String addressList3 = "DB101.5.2";
+
+
+            List<String> addressList2 = new ArrayList<>();
+            addressList2.add("DB101.2.6");
+            addressList2.add("DB101.2.7");
+            addressList2.add("DB101.3.0");
+            addressList2.add("DB101.3.1");
+            addressList2.add("DB101.3.2");
+            addressList2.add("DB101.3.3");
+            addressList2.add("DB101.3.4");
+            addressList2.add("DB101.3.5");
+
+
+            List<String> addressList211 = new ArrayList<>();
+            addressList211.add("DB101.0.0");
+            addressList211.add("DB101.0.1");
+            addressList211.add("DB101.0.2");
+            addressList211.add("DB101.0.3");
+            addressList211.add("DB101.0.4");
+            addressList211.add("DB101.0.5");
+            addressList211.add("DB101.0.6");
+            addressList211.add("DB101.0.7");
+            addressList211.add("DB101.1.0");
+            addressList211.add("DB101.1.1");
+            addressList211.add("DB101.1.2");
+            addressList211.add("DB101.1.3");
+            addressList211.add("DB101.1.4");
+            addressList211.add("DB101.1.5");
+            addressList211.add("DB101.1.6");
+            addressList211.add("DB101.1.7");
+
+            List<String> addressList311 = new ArrayList<>();
+            addressList311.add("DB101.5.2");
+            addressList311.add("DB101.5.3");
+
+            List<String> messages = webserver.getMessages();
+            if (!messages.isEmpty()) {
+              // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
+              String lastMessage = messages.get(messages.size() - 1);
+              // System.out.println("messages锛�" + messages);
+              String[] parts = lastMessage.split(",");
+              List<Integer> messageValues = new ArrayList<>();
+              for (String part : parts) {
+                try {
+                  // 浣跨敤姝e垯琛ㄨ揪寮忔竻闄ら潪鏁板瓧瀛楃
+                  String cleanedPart = part.replaceAll("[^0-9-]", "");
+                  Integer value = Integer.parseInt(cleanedPart.trim());
+                  messageValues.add(value);
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓烘暣鏁扮被鍨嬶紝鍒欏拷鐣ヨ閮ㄥ垎
+                  // e.printStackTrace();
+                }
+
+              }
+              // 灏嗘秷鎭�艰浆鎹负甯冨皵鍒楄〃
+              List<Boolean> messageBooleans = new ArrayList<>();
+              for (Integer value : messageValues) {
+                messageBooleans.add(value == 1 ? true : false);
+              }
+              // System.out.println(messageBooleans);
+              List<Boolean> bolList = new ArrayList<>();
+              List<Boolean> bolList2 = new ArrayList<>();
+              List<Boolean> bolList3 = new ArrayList<>();
+
+              for (int i = 0; i < 16 && i < messageBooleans.size(); i++) {
+                bolList.add(messageBooleans.get(i));
+              }
+
+              for (int i = 16; i < 24 && i < messageBooleans.size(); i++) {
+                bolList2.add(messageBooleans.get(i));
+              }
+
+              for (int i = 24; i < 26 && i < messageBooleans.size(); i++) {
+                bolList3.add(messageBooleans.get(i));
+              }
+
+              // System.out.println(bolList);
+              // System.out.println(bolList2);
+              // System.out.println(bolList3);
+              if (!bolList.isEmpty()) {
+                S7control.getinstance().WriteBit(addressList211, bolList);
+                System.out.println("messageValue锛�" + bolList + " written to PLC at address " + addressList211);
+              }
+              if (!bolList2.isEmpty()) {
+                S7control.getinstance().WriteBit(addressList2, bolList2);
+                System.out.println("messageValue锛�" + bolList2 + " written to PLC at address " + addressList2);
+              }
+              if (!bolList3.isEmpty()) {
+                S7control.getinstance().WriteBit(addressList311, bolList3);
+                System.out.println("messageValue锛�" + bolList3 + " written to PLC at address " + addressList311);
+              }
+              webserver.clearMessages();
+            }
+          }
+        }
+
+      }
+
+    }
+  }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java
new file mode 100644
index 0000000..1d685d8
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition.java
@@ -0,0 +1,456 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import org.apache.commons.io.FileUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class PlcManualonePosition extends Thread {
+  private Configuration config;
+
+  public PlcManualonePosition() throws IOException {
+    config = new Configuration("config.properties");
+  }
+
+  public static class PLCBooleanConverter {
+
+    public static short[] convertListsToBinaryShortArray(List<Boolean>... lists) {
+      // 璁$畻鎵�鏈夊垪琛ㄤ腑鍏冪礌鐨勬�绘暟
+      int totalSize = 0;
+      for (List<Boolean> list : lists) {
+        totalSize += list.size();
+      }
+
+      // 鍒涘缓涓�涓冻澶熷ぇ鐨勬暟缁勬潵瀛樻斁鎵�鏈夌殑浜岃繘鍒跺��
+      short[] binaryShortArray = new short[totalSize];
+
+      // 褰撳墠鏁扮粍濉厖浣嶇疆鎸囬拡
+      int currentIndex = 0;
+
+      // 閬嶅巻鎵�鏈夌殑鍒楄〃
+      for (List<Boolean> list : lists) {
+        // 灏嗘瘡涓竷灏斿�艰浆鎹负 0 鎴� 1 骞跺~鍏ユ暟缁�
+        for (Boolean value : list) {
+          binaryShortArray[currentIndex++] = (short) (value ? 1 : 0);
+        }
+      }
+
+      return binaryShortArray;
+    }
+  }
+
+
+
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(500);
+
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+      // this.readValue();
+      // String PlcAddress = this.name;
+      // Integer Plccount = this.count;
+
+      List<String> addresses = new ArrayList<>();
+      addresses.add("DB100.108");
+      addresses.add("DB100.20");
+      addresses.add("DB103.32");
+      List<Short> arraylist = S7control.getinstance().readWords(addresses);
+      // System.out.println(arraylist);
+
+      List<String> addresses2 = new ArrayList<>();
+      addresses2.add("DB100.110");
+      addresses2.add("DB100.176");
+      addresses2.add("DB103.34");
+      List<Short> arraylist2 = S7control.getinstance().readWords(addresses2);
+
+      List<String> addresses3 = new ArrayList<>();
+      addresses3.add("DB100.112");
+      addresses3.add("DB100.24");
+      addresses3.add("DB103.36");
+      List<Short> arraylist3 = S7control.getinstance().readWords(addresses3);
+
+      List<String> addresses4 = new ArrayList<>();
+      addresses4.add("DB100.114");
+      addresses4.add("DB100.178");
+      addresses4.add("DB103.40");
+      List<Short> arraylist4 = S7control.getinstance().readWords(addresses4);
+
+      List<Short> arraylist5 = S7control.getinstance().ReadWord("DB106.0", 1);
+      List<Short> arraylist6 = S7control.getinstance().ReadWord("DB106.12", 1);
+      List<Short> arraylist7 = S7control.getinstance().ReadWord("DB106.40", 1);
+      List<Short> arraylist8 = S7control.getinstance().ReadWord("DB106.50", 1);
+      List<String> addresses9 = new ArrayList<>();
+      addresses9.add("DB104.1.2");
+      addresses9.add("DB104.1.3");
+      addresses9.add("DB104.1.6");
+      addresses9.add("DB104.1.7");
+      List<Boolean> arraylist9 = S7control.getinstance().readBits(addresses9);
+
+      List<String> addresses10 = new ArrayList<>();
+      addresses10.add("DB104.9.4");
+      addresses10.add("DB104.9.5");
+      addresses10.add("DB104.9.4");
+      addresses10.add("DB104.9.5");
+      List<Boolean> arraylist10 = S7control.getinstance().readBits(addresses10);
+
+      //A01鍚姩鍦板潃
+      List<String> A01start = Arrays.asList(config.getProperty("mlp.A01start"));
+      //A02鍚姩鍦板潃
+      List<String> A02start = Arrays.asList(config.getProperty("mlp.A02start"));
+
+      List<String> B01start = Arrays.asList(config.getProperty("mlp.B01start"));
+
+      List<String> B02start = Arrays.asList(config.getProperty("mlp.B02start"));
+
+      List<Boolean> A01readstart = S7control.getinstance().readBits(A01start);
+      List<Boolean> A02readstart = S7control.getinstance().readBits(A02start);
+      List<Boolean> B01readstart = S7control.getinstance().readBits(B01start);
+      List<Boolean> B02readstart = S7control.getinstance().readBits(B02start);
+
+      short[] combinedBinaryShortArray = PLCBooleanConverter.convertListsToBinaryShortArray(
+              A01readstart,  A02readstart,B01readstart, B02readstart
+      );
+
+      // Short[] values1 = { 1, 2, 3 };
+      // List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
+      // Short[] values2 = { 1, 2, 3 };
+      // List<Short> arraylist2 = new ArrayList<>(Arrays.asList(values2));
+      // Short[] values3 = { 1, 2, 3 };
+      // List<Short> arraylist3 = new ArrayList<>(Arrays.asList(values3));
+      // Short[] values4 = { 1, 2, 3 };
+      // List<Short> arraylist4 = new ArrayList<>(Arrays.asList(values4));
+      // Short[] values5 = { 5 };
+      // List<Short> arraylist5 = new ArrayList<>(Arrays.asList(values5));
+      // Short[] values6 = { 6 };
+      // List<Short> arraylist6 = new ArrayList<>(Arrays.asList(values6));
+      // Short[] values7 = { 7 };
+      // List<Short> arraylist7 = new ArrayList<>(Arrays.asList(values7));
+      // Short[] values8 = { 8 };
+      // List<Short> arraylist8 = new ArrayList<>(Arrays.asList(values8));
+      // Boolean[] values9 = { false, false, true, true };
+      // List<Boolean> arraylist9 = new ArrayList<>(Arrays.asList(values9));
+      short[] params2 = new short[arraylist9.size()];
+      for (int i = 0; i < arraylist9.size(); i++) {
+        boolean value = arraylist9.get(i);
+        params2[i] = value ? (short) 1 : (short) 0;
+      }
+
+      // Boolean[] values10 = { false, false, true, true };
+      // List<Boolean> arraylist10 = new ArrayList<>(Arrays.asList(values10));
+      short[] params3 = new short[arraylist10.size()];
+      for (int i = 0; i < arraylist10.size(); i++) {
+        boolean value = arraylist10.get(i);
+        params3[i] = value ? (short) 1 : (short) 0;
+      }
+      // List<Short> arraylist9 = S7control.getinstance().readWords(addresses9);
+      arraylist5.addAll(arraylist6);
+      arraylist5.addAll(arraylist7);
+      arraylist5.addAll(arraylist8);
+
+      JSONObject jsonObject = new JSONObject();
+      // System.out.println(arraylist6);
+      jsonObject.append("zuhe1", arraylist);
+      jsonObject.append("zuhe2", arraylist2);
+      jsonObject.append("zuhe3", arraylist3);
+      jsonObject.append("zuhe4", arraylist4);
+      jsonObject.append("shishi1", arraylist5);
+      jsonObject.append("guzhang", params2);
+      jsonObject.append("weihuiling", params3);
+      jsonObject.append("qidong", combinedBinaryShortArray);
+
+//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualonePosition");
+//      if (sendwServer != null) {
+//        sendwServer.sendMessage(jsonObject.toString());
+//      }
+
+      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("ManualonePosition");
+      if (sendwServer != null) {
+        for (WebSocketServer webserver : sendwServer) {
+          webserver.sendMessage(jsonObject.toString());
+
+//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualonePosition");
+      if (webserver != null) {
+        List<String> messages = webserver.getMessages();
+        List<String> waddresses1 = new ArrayList<>();
+        waddresses1.add("DB100.108");
+        waddresses1.add("DB100.20");
+        waddresses1.add("DB103.32");
+
+        List<String> waddresses2 = new ArrayList<>();
+        waddresses2.add("DB100.110");
+        waddresses2.add("DB100.176");
+        waddresses2.add("DB103.34");
+
+        List<String> waddresses3 = new ArrayList<>();
+        waddresses3.add("DB100.112");
+        waddresses3.add("DB100.24");
+        waddresses3.add("DB103.36");
+
+        List<String> waddresses4 = new ArrayList<>();
+        waddresses4.add("DB100.114");
+        waddresses4.add("DB100.178");
+        waddresses4.add("DB103.40");
+
+        // 鏁呴殰鍦板潃
+        List<String> waddresses5 = new ArrayList<>();
+        // waddresses5.add("DB103.244");
+        // waddresses5.add("DB103.250");
+        waddresses5.add("DB103.252");
+        waddresses5.add("DB103.254");
+
+        // 澶嶄綅鍦板潃
+        List<String> waddresses6 = new ArrayList<>();
+        waddresses6.add("DB101.4.0");
+        waddresses6.add("DB101.4.3");
+        waddresses6.add("DB101.4.4");
+        waddresses6.add("DB101.4.6");
+
+        // 鍥為浂鍦板潃
+        List<String> waddresses7 = new ArrayList<>();
+
+        waddresses7.add("DB101.4.5");
+        waddresses7.add("DB101.4.7");
+
+
+        // System.out.println(messages.isEmpty());
+        if (!messages.isEmpty()) {
+          // 灏嗘渶鍚庝竴涓秷鎭浆鎹负 short 绫诲瀷鐨勫垪琛�
+          String lastMessage = messages.get(messages.size() - 1);
+          // System.out.println("lastMessage锛�" + lastMessage);
+          JSONArray messageArray = new JSONArray(lastMessage);
+          // 鍐欏叆A01
+          if (messageArray.getJSONArray(0).size() > 0) {
+            JSONArray jsonArray = messageArray.getJSONArray(0);
+            List<Short> sValue = new ArrayList<>();
+            for (int i = 0; i < jsonArray.size(); i++) {
+              Object value = jsonArray.get(i);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  short val = Short.parseShort(cleanedValue.trim());
+                  sValue.add(val);
+                  System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+            if (!sValue.isEmpty()) {
+              S7control.getinstance().WriteWord(waddresses1, sValue);
+              if (A01readstart != null && !A01readstart.isEmpty()) {
+                // 鍒涘缓涓�涓柊鐨勫垪琛ㄧ敤浜庡啓鍏ユ柊鍊�
+                List<Boolean> a01startval = new ArrayList<>();
+                // 閬嶅巻鎵�鏈夎鍙栧埌鐨勪綅鍊�
+                for (Boolean bit : A01readstart) {
+                  // 鍙栧弽褰撳墠浣嶇殑鍊煎苟娣诲姞鍒版柊鐨勫垪琛ㄤ腑
+                  a01startval.add(!bit);
+                }
+                // 鍐欏叆鏂扮殑浣嶅�煎垪琛�
+                S7control.getinstance().WriteBit(A01start, a01startval);
+                System.out.println("a01startval " + a01startval + " written to PLC at address " + A01start);
+              }
+
+
+              System.out.println("Values " + sValue + " written to PLC at address " + waddresses1);
+            }
+          }
+
+          // 鍐欏叆A02
+
+          if (messageArray.getJSONArray(1).size() > 0) {
+            JSONArray jsonArray = messageArray.getJSONArray(1);
+            List<Short> sValue2 = new ArrayList<>();
+            for (int i = 0; i < jsonArray.size(); i++) {
+              Object value = jsonArray.get(i);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  short val = Short.parseShort(cleanedValue.trim());
+                  sValue2.add(val);
+                  System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+            if (!sValue2.isEmpty()) {
+              S7control.getinstance().WriteWord(waddresses2, sValue2);
+              if (A02readstart != null && !A02readstart.isEmpty()) {
+                // 鍒涘缓涓�涓柊鐨勫垪琛ㄧ敤浜庡啓鍏ユ柊鍊�
+                List<Boolean> a02startval = new ArrayList<>();
+                // 閬嶅巻鎵�鏈夎鍙栧埌鐨勪綅鍊�
+                for (Boolean bit : A02readstart) {
+                  // 鍙栧弽褰撳墠浣嶇殑鍊煎苟娣诲姞鍒版柊鐨勫垪琛ㄤ腑
+                  a02startval.add(!bit);
+                }
+                // 鍐欏叆鏂扮殑浣嶅�煎垪琛�
+                S7control.getinstance().WriteBit(A02start, a02startval);
+              }
+
+
+              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses2);
+            }
+          }
+
+          // 鍐欏叆B01
+          if (messageArray.getJSONArray(2).size() > 0) {
+            JSONArray jsonArray = messageArray.getJSONArray(2);
+            List<Short> sValue2 = new ArrayList<>();
+            for (int i = 0; i < jsonArray.size(); i++) {
+              Object value = jsonArray.get(i);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  short val = Short.parseShort(cleanedValue.trim());
+                  sValue2.add(val);
+                  System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+            if (!sValue2.isEmpty()) {
+              S7control.getinstance().WriteWord(waddresses3, sValue2);
+              if (B01readstart != null && !B01readstart.isEmpty()) {
+                // 鍒涘缓涓�涓柊鐨勫垪琛ㄧ敤浜庡啓鍏ユ柊鍊�
+                List<Boolean> b01startval = new ArrayList<>();
+                // 閬嶅巻鎵�鏈夎鍙栧埌鐨勪綅鍊�
+                for (Boolean bit : B01readstart) {
+                  // 鍙栧弽褰撳墠浣嶇殑鍊煎苟娣诲姞鍒版柊鐨勫垪琛ㄤ腑
+                  b01startval.add(!bit);
+                }
+                // 鍐欏叆鏂扮殑浣嶅�煎垪琛�
+                S7control.getinstance().WriteBit(B01start, b01startval);
+              }
+              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses3);
+            }
+          }
+
+          // 鍐欏叆B02
+          if (messageArray.getJSONArray(3).size() > 0) {
+            JSONArray jsonArray = messageArray.getJSONArray(3);
+            List<Short> sValue2 = new ArrayList<>();
+            for (int i = 0; i < jsonArray.size(); i++) {
+              Object value = jsonArray.get(i);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  short val = Short.parseShort(cleanedValue.trim());
+                  sValue2.add(val);
+                  System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+            if (!sValue2.isEmpty()) {
+              S7control.getinstance().WriteWord(waddresses4, sValue2);
+              if (B02readstart != null && !B02readstart.isEmpty()) {
+                // 鍒涘缓涓�涓柊鐨勫垪琛ㄧ敤浜庡啓鍏ユ柊鍊�
+                List<Boolean> b02startval = new ArrayList<>();
+                // 閬嶅巻鎵�鏈夎鍙栧埌鐨勪綅鍊�
+                for (Boolean bit : B02readstart) {
+                  // 鍙栧弽褰撳墠浣嶇殑鍊煎苟娣诲姞鍒版柊鐨勫垪琛ㄤ腑
+                  b02startval.add(!bit);
+                }
+                // 鍐欏叆鏂扮殑浣嶅�煎垪琛�
+                S7control.getinstance().WriteBit(B02start, b02startval);
+                System.out.println("Values " + b02startval + " written to PLC at address " + B02start);
+              }
+              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses4);
+            }
+          }
+
+          // 鍐欏叆鏁呴殰鍦板潃
+          if (messageArray.getJSONArray(4).size() > 0) {
+            JSONArray jsonArray = messageArray.getJSONArray(4);
+            List<Short> sValue2 = new ArrayList<>();
+            for (int i = 0; i < jsonArray.size(); i++) {
+              Object value = jsonArray.get(i);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  short val = Short.parseShort(cleanedValue.trim());
+                  sValue2.add(val);
+                  System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+            if (!sValue2.isEmpty()) {
+              S7control.getinstance().WriteWord(waddresses5, sValue2);
+              System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses5);
+            }
+          }
+
+          // 鍐欏叆澶嶄綅鍦板潃
+          if (messageArray.getJSONArray(5).size() > 0) {
+            JSONArray jsonArray3 = messageArray.getJSONArray(5);
+            List<Boolean> sValue3 = new ArrayList<>();
+            for (int i = 0; i < jsonArray3.size(); i++) {
+              Object value = jsonArray3.get(i);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  boolean val = "1".equals(cleanedValue.trim());
+                  sValue3.add(val);
+                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+            if (!sValue3.isEmpty()) {
+              S7control.getinstance().WriteBit(waddresses6, sValue3);
+              System.out.println("Values " + sValue3 + " written to PLC at address " + waddresses6);
+            }
+          }
+
+          // 鍐欏叆鍥為浂鍦板潃
+          if (messageArray.getJSONArray(6).size() > 0) {
+            JSONArray jsonArray3 = messageArray.getJSONArray(6);
+            List<Boolean> sValue3 = new ArrayList<>();
+            for (int i = 0; i < jsonArray3.size(); i++) {
+              Object value = jsonArray3.get(i);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  boolean val = "1".equals(cleanedValue.trim());
+                  sValue3.add(val);
+                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+            if (!sValue3.isEmpty()) {
+              S7control.getinstance().WriteBit(waddresses7, sValue3);
+              System.out.println("Values " + sValue3 + " written to PLC at address " + waddresses7);
+            }
+          }
+
+          // 娓呯┖娑堟伅鍒楄〃
+          webserver.clearMessages();
+        }
+      }}
+      }
+    }
+  }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java
new file mode 100644
index 0000000..51b0640
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcManualonePosition2.java
@@ -0,0 +1,330 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import org.apache.commons.io.FileUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class PlcManualonePosition2 extends Thread {
+  private Configuration config;
+
+  public PlcManualonePosition2() throws IOException {
+    config = new Configuration("config.properties");
+  }
+
+  public static class PLCBooleanConverter {
+
+    public static short[] convertListsToBinaryShortArray(List<Boolean>... lists) {
+      // 璁$畻鎵�鏈夊垪琛ㄤ腑鍏冪礌鐨勬�绘暟
+      int totalSize = 0;
+      for (List<Boolean> list : lists) {
+        totalSize += list.size();
+      }
+
+      // 鍒涘缓涓�涓冻澶熷ぇ鐨勬暟缁勬潵瀛樻斁鎵�鏈夌殑浜岃繘鍒跺��
+      short[] binaryShortArray = new short[totalSize];
+
+      // 褰撳墠鏁扮粍濉厖浣嶇疆鎸囬拡
+      int currentIndex = 0;
+
+      // 閬嶅巻鎵�鏈夌殑鍒楄〃
+      for (List<Boolean> list : lists) {
+        // 灏嗘瘡涓竷灏斿�艰浆鎹负 0 鎴� 1 骞跺~鍏ユ暟缁�
+        for (Boolean value : list) {
+          binaryShortArray[currentIndex++] = (short) (value ? 1 : 0);
+        }
+      }
+
+      return binaryShortArray;
+    }
+  }
+
+
+
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(500);
+
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+      // this.readValue();
+      // String PlcAddress = this.name;
+      // Integer Plccount = this.count;
+
+      List<String> addresses = new ArrayList<>();
+      addresses.add("DB100.116");
+      addresses.add("DB100.16");
+
+      addresses.add("DB103.20");
+      List<Short> arraylist = S7control.getinstance().readWords(addresses);
+      // System.out.println(arraylist);
+
+      List<String> addresses2 = new ArrayList<>();
+      addresses2.add("DB100.118");
+      addresses2.add("DB100.192");
+
+      addresses2.add("DB103.22");
+      List<Short> arraylist2 = S7control.getinstance().readWords(addresses2);
+
+      List<String> addresses9 = new ArrayList<>();
+
+      addresses9.add("DB104.1.2");
+      addresses9.add("DB104.1.3");
+      List<Boolean> arraylist9 = S7control.getinstance().readBits(addresses9);
+      short[] params2 = new short[arraylist9.size()];
+      for (int i = 0; i < arraylist9.size(); i++) {
+        boolean value = arraylist9.get(i);
+        params2[i] = value ? (short) 1 : (short) 0;
+      }
+
+      // Short[] values1 = { 1, 2, 3 };
+      // List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
+      // Short[] values2 = { 1, 2, 3 };
+      // List<Short> arraylist2 = new ArrayList<>(Arrays.asList(values2));
+      // Boolean[] values9 = { false, true };
+      // List<Boolean> arraylist9 = new ArrayList<>(Arrays.asList(values9));
+      // short[] params2 = new short[arraylist9.size()];
+      // for (int i = 0; i < arraylist9.size(); i++) {
+      // boolean value = arraylist9.get(i);
+      // params2[i] = value ? (short) 1 : (short) 0;
+      // }
+
+      // Boolean[] values10 = { false, true };
+      List<String> addresses10 = new ArrayList<>();
+
+      addresses10.add("DB104.9.0");
+      addresses10.add("DB104.9.1");
+      List<Boolean> arraylist10 = S7control.getinstance().readBits(addresses10);
+      short[] params3 = new short[arraylist10.size()];
+      for (int i = 0; i < arraylist10.size(); i++) {
+        boolean value = arraylist10.get(i);
+        params3[i] = value ? (short) 1 : (short) 0;
+      }
+
+
+
+      //A01鍚姩鍦板潃
+      List<String> A01start = Arrays.asList(config.getProperty("mlp2.A01start"));
+      //A02鍚姩鍦板潃
+      List<String> A02start = Arrays.asList(config.getProperty("mlp2.A02start"));
+
+
+
+      List<Boolean> A01readstart = S7control.getinstance().readBits(A01start);
+      List<Boolean> A02readstart = S7control.getinstance().readBits(A02start);
+
+
+      short[] combinedBinaryShortArray = PLCBooleanConverter.convertListsToBinaryShortArray(
+              A01readstart,  A02readstart
+      );
+
+      JSONObject jsonObject = new JSONObject();
+
+      jsonObject.append("zuhe1", arraylist);
+      jsonObject.append("zuhe2", arraylist2);
+      jsonObject.append("guzhang", params2);
+      jsonObject.append("weihuiling", params3);
+      jsonObject.append("qidong", combinedBinaryShortArray);
+      // System.out.println(jsonObject);
+//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ManualonePosition2");
+//      if (sendwServer != null) {
+//        sendwServer.sendMessage(jsonObject.toString());
+//      }
+      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("ManualonePosition2");
+      if (sendwServer != null) {
+        for (WebSocketServer webserver : sendwServer) {
+          webserver.sendMessage(jsonObject.toString());
+
+//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ManualonePosition2");
+          if (webserver != null) {
+            List<String> messages = webserver.getMessages();
+            List<String> waddresses1 = new ArrayList<>();
+            waddresses1.add("DB100.116");
+            waddresses1.add("DB100.16");
+
+
+            List<String> waddresses2 = new ArrayList<>();
+            waddresses2.add("DB100.118");
+            waddresses2.add("DB100.192");
+
+
+            // 鏁呴殰鍦板潃
+            List<String> waddresses3 = new ArrayList<>();
+            waddresses3.add("DB103.242");
+            waddresses3.add("DB103.248");
+
+            // 澶嶄綅鍦板潃
+            List<String> waddresses4 = new ArrayList<>();
+            waddresses4.add("DB101.3.6");
+            waddresses4.add("DB101.4.1");
+
+            // 鍥為浂鍦板潃
+            List<String> waddresses5 = new ArrayList<>();
+            waddresses5.add("DB101.3.7");
+            waddresses5.add("DB101.4.2");
+
+            if (!messages.isEmpty()) {
+              // 灏嗘渶鍚庝竴涓秷鎭浆鎹负 short 绫诲瀷鐨勫垪琛�
+              String lastMessage = messages.get(messages.size() - 1);
+              // System.out.println("lastMessage锛�" + lastMessage);
+              JSONArray messageArray = new JSONArray(lastMessage);
+
+              // A01涓嬪彂
+              if (messageArray.getJSONArray(0).size() > 0) {
+                JSONArray jsonArray = messageArray.getJSONArray(0);
+                List<Short> sValue = new ArrayList<>();
+                for (int i = 0; i < jsonArray.size(); i++) {
+                  Object value = jsonArray.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      short val = Short.parseShort(cleanedValue.trim());
+                      sValue.add(val);
+                      System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValue.isEmpty()) {
+                  S7control.getinstance().WriteWord(waddresses1, sValue);
+                  if (A01readstart != null && !A01readstart.isEmpty()) {
+                    // 鍒涘缓涓�涓柊鐨勫垪琛ㄧ敤浜庡啓鍏ユ柊鍊�
+                    List<Boolean> a01startval = new ArrayList<>();
+                    // 閬嶅巻鎵�鏈夎鍙栧埌鐨勪綅鍊�
+                    for (Boolean bit : A01readstart) {
+                      // 鍙栧弽褰撳墠浣嶇殑鍊煎苟娣诲姞鍒版柊鐨勫垪琛ㄤ腑
+                      a01startval.add(!bit);
+                    }
+                    // 鍐欏叆鏂扮殑浣嶅�煎垪琛�
+                    S7control.getinstance().WriteBit(A01start, a01startval);
+                  }
+                  System.out.println("Values " + sValue + " written to PLC at address " + waddresses1);
+                }
+              }
+
+              // A02涓嬪彂
+              if (messageArray.getJSONArray(1).size() > 0) {
+                JSONArray jsonArray = messageArray.getJSONArray(1);
+                List<Short> sValue2 = new ArrayList<>();
+                for (int i = 0; i < jsonArray.size(); i++) {
+                  Object value = jsonArray.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      short val = Short.parseShort(cleanedValue.trim());
+                      sValue2.add(val);
+                      System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValue2.isEmpty()) {
+                  S7control.getinstance().WriteWord(waddresses2, sValue2);
+                  if (A02readstart != null && !A02readstart.isEmpty()) {
+                    // 鍒涘缓涓�涓柊鐨勫垪琛ㄧ敤浜庡啓鍏ユ柊鍊�
+                    List<Boolean> a02startval = new ArrayList<>();
+                    // 閬嶅巻鎵�鏈夎鍙栧埌鐨勪綅鍊�
+                    for (Boolean bit : A02readstart) {
+                      // 鍙栧弽褰撳墠浣嶇殑鍊煎苟娣诲姞鍒版柊鐨勫垪琛ㄤ腑
+                      a02startval.add(!bit);
+                    }
+                    // 鍐欏叆鏂扮殑浣嶅�煎垪琛�
+                    S7control.getinstance().WriteBit(A02start, a02startval);
+                  }
+                  System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses2);
+                }
+              }
+
+              // 鍐欏叆鏁呴殰鍦板潃
+              if (messageArray.getJSONArray(2).size() > 0) {
+                JSONArray jsonArray = messageArray.getJSONArray(2);
+                List<Short> sValue2 = new ArrayList<>();
+                for (int i = 0; i < jsonArray.size(); i++) {
+                  Object value = jsonArray.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      short val = Short.parseShort(cleanedValue.trim());
+                      sValue2.add(val);
+                      System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValue2.isEmpty()) {
+                  S7control.getinstance().WriteWord(waddresses3, sValue2);
+                  System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses3);
+                }
+              }
+
+              // 鍐欏叆澶嶄綅鍦板潃
+              if (messageArray.getJSONArray(3).size() > 0) {
+                JSONArray jsonArray3 = messageArray.getJSONArray(3);
+                List<Boolean> sValue3 = new ArrayList<>();
+                for (int i = 0; i < jsonArray3.size(); i++) {
+                  Object value = jsonArray3.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      boolean val = "1".equals(cleanedValue.trim());
+                      sValue3.add(val);
+                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValue3.isEmpty()) {
+                  S7control.getinstance().WriteBit(waddresses4, sValue3);
+                  System.out.println("Values " + sValue3 + " written to PLC at address " + waddresses4);
+                }
+              }
+
+              // 鍐欏叆鍥為浂鍦板潃
+              if (messageArray.getJSONArray(4).size() > 0) {
+                JSONArray jsonArray3 = messageArray.getJSONArray(4);
+                List<Boolean> sValue3 = new ArrayList<>();
+                for (int i = 0; i < jsonArray3.size(); i++) {
+                  Object value = jsonArray3.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      boolean val = "1".equals(cleanedValue.trim());
+                      sValue3.add(val);
+                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValue3.isEmpty()) {
+                  S7control.getinstance().WriteBit(waddresses5, sValue3);
+                  System.out.println("Values " + sValue3 + " written to PLC at address " + waddresses5);
+                }
+              }
+
+              // 娓呯┖娑堟伅鍒楄〃
+              webserver.clearMessages();
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java
new file mode 100644
index 0000000..c049feb
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter.java
@@ -0,0 +1,156 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+
+import org.apache.commons.io.FileUtils;
+
+public class PlcParameter extends Thread {
+  String name = "";
+  Integer count = 0;
+
+  public static String readFileToString(String filePath) throws IOException {
+    File file = new File(filePath);
+    return FileUtils.readFileToString(file, "UTF-8");
+  }
+
+  public void readValue() {
+    String str = "";
+    BufferedReader bufferedReader = null;
+    FileInputStream fileInputStream;
+    try {
+      // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+      fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/Parameter.json");
+      // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+      // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+      bufferedReader = new BufferedReader(inputStreamReader);
+      String line = null;
+      // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+      while ((line = bufferedReader.readLine()) != null) {
+        str += line;
+      }
+
+      // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+      JSONObject jsonObject = new JSONObject(str);
+
+      // 鑾峰彇json涓殑鍊�
+      JSONArray address = jsonObject.getJSONArray("address");
+      for (int i = 0; i < address.size(); i++) {
+        JSONObject ress = (JSONObject) address.get(i);
+
+        this.name = ress.getStr("name");
+        this.count = ress.getInt("count");
+
+      }
+
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
+    } catch (UnsupportedEncodingException e) {
+      e.printStackTrace();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(500);
+
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+//      this.readValue();
+//      String PlcAddress = this.name;
+//      Integer Plccount = this.count;
+
+      // System.out.println(stt);
+      List<Short> arraylist = S7control.getinstance().ReadWord("DB100.0", 60);
+     List<Short> state = S7control.getinstance().ReadWord("DB103.0", 10);
+//      Short[] values1 = { 1231, 1, 1, 1, 1, 1, 2, 33, 2, 3, 4, 5 ,1231, 1, 1, 1, 1, 1, 2, 33, 2, 3, 4, 5 };
+//      List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
+
+//      Short[] values2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+//      List<Short> state = new ArrayList<>(Arrays.asList(values2));
+
+      // Boolean[] values = { false, true, true, true, true, true, true, true, true,
+      // true, true, true, true, true, true, true, true, true, true, true, true, true,
+      // true,
+      // true, false, true };
+      // List<Boolean> paramlist = new ArrayList<>(Arrays.asList(values));
+
+      // short[] sholist = new short[paramlist.size()];
+
+      // for (int i = 0; i < paramlist.size(); i++) {
+      // boolean value = paramlist.get(i);
+      // sholist[i] = value ? (short) 1 : (short) 0;
+      // }
+
+      JSONObject jsonObject = new JSONObject();
+      // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
+      // new short[]{0,0, 0, 0, 0, 0, 0, 0, 0, 0}
+
+      jsonObject.append("params", arraylist);
+      jsonObject.append("state", state);
+      // jsonObject.append("action", sholist);
+//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter");
+//      if (sendwServer != null) {
+//        sendwServer.sendMessage(jsonObject.toString());
+//      }
+
+      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter");
+      if (sendwServer != null) {
+        for (WebSocketServer webserver : sendwServer) {
+          webserver.sendMessage(jsonObject.toString());
+
+//      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Parameter");
+          if (webserver != null) {
+            List<String> messages = webserver.getMessages();
+
+            String addressList = "DB100.0";
+
+            if (!messages.isEmpty()) {
+              // 灏嗘渶鍚庝竴涓秷鎭浆鎹负 short 绫诲瀷鐨勫垪琛�
+              String lastMessage = messages.get(messages.size() - 1);
+              System.out.println("messages锛�" + messages);
+              String[] parts = lastMessage.split(",");
+              List<Short> messageValues = new ArrayList<>();
+              for (String part : parts) {
+                try {
+                  // 浣跨敤姝e垯琛ㄨ揪寮忔竻闄ら潪鏁板瓧瀛楃
+                  String cleanedPart = part.replaceAll("[^0-9-]", "");
+                  short value = Short.parseShort(cleanedPart.trim());
+                  messageValues.add(value);
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+
+                  e.printStackTrace();
+                }
+              }
+
+              // 灏嗘秷鎭�煎啓鍏� PLC
+              S7control.getinstance().WriteWord(addressList, messageValues);
+              System.out.println("messageValues锛�" + messageValues);
+              System.out.println("addressList锛�" + addressList);
+              // 娓呯┖娑堟伅鍒楄〃
+              webserver.clearMessages();
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java
new file mode 100644
index 0000000..739f205
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1.java
@@ -0,0 +1,211 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import org.apache.commons.io.FileUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class PlcParameter1 extends Thread {
+  String name = "";
+  Integer count = 0;
+
+  public static String readFileToString(String filePath) throws IOException {
+    File file = new File(filePath);
+    return FileUtils.readFileToString(file, "UTF-8");
+  }
+
+  public void readValue() {
+    String str = "";
+    BufferedReader bufferedReader = null;
+    FileInputStream fileInputStream;
+    try {
+      // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+      fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/address.json");
+      // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+      // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+      bufferedReader = new BufferedReader(inputStreamReader);
+      String line = null;
+      // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+      while ((line = bufferedReader.readLine()) != null) {
+        str += line;
+      }
+
+      // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+      JSONObject jsonObject = new JSONObject(str);
+
+      // 鑾峰彇json涓殑鍊�
+      JSONArray address = jsonObject.getJSONArray("address");
+      for (int i = 0; i < address.size(); i++) {
+        JSONObject ress = (JSONObject) address.get(i);
+
+        this.name = ress.getStr("name");
+        this.count = ress.getInt("count");
+
+      }
+
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
+    } catch (UnsupportedEncodingException e) {
+      e.printStackTrace();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(1000);
+
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+      // this.readValue();
+      // String PlcAddress = this.name;
+      // Integer Plccount = this.count;
+
+      // System.out.println(stt);
+      List<String> addresses = new ArrayList<>();
+      addresses.add("DB100.0");
+      addresses.add("DB100.2");
+      addresses.add("DB100.4");
+      addresses.add("DB100.6");
+      addresses.add("DB100.26");
+      addresses.add("DB100.28");
+      addresses.add("DB100.30");
+      addresses.add("DB100.32");
+      addresses.add("DB100.34");
+      addresses.add("DB100.36");
+      addresses.add("DB100.38");
+      addresses.add("DB100.40");
+      List<Short> arraylist = S7control.getinstance().readWords(addresses);
+//缈昏浆
+    List<Short> fanzhuan1 = S7control.getinstance().ReadWord("DB100.8", 1);
+    List<Short> xiaoche1 = S7control.getinstance().ReadWord("DB100.12", 1);
+      // Short[] values1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
+      // List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
+      // Short[] fanzhuan = { 4 };
+      // List<Short> fanzhuan1 = new ArrayList<>(Arrays.asList(fanzhuan));
+      // Short[] xiaoche = {5};
+      // List<Short> xiaoche1 = new ArrayList<>(Arrays.asList(xiaoche));
+
+      JSONObject jsonObject = new JSONObject();
+      // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
+      // new short[]{0,0, 0, 0, 0, 0, 0, 0, 0, 0}
+
+      jsonObject.append("params", arraylist);
+     jsonObject.append("fanzhuan", fanzhuan1);
+     jsonObject.append("xiaoche", xiaoche1);
+
+//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter1");
+//      if (sendwServer != null) {
+//        sendwServer.sendMessage(jsonObject.toString());
+//      }
+
+      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter1");
+      if (sendwServer != null) {
+        for (WebSocketServer webserver : sendwServer) {
+          webserver.sendMessage(jsonObject.toString());
+
+
+          if (webserver != null) {
+            List<String> messages = webserver.getMessages();
+            List<String> waddresses1 = new ArrayList<>();
+            waddresses1.add("DB100.0");
+            waddresses1.add("DB100.2");
+            waddresses1.add("DB100.4");
+            waddresses1.add("DB100.6");
+            waddresses1.add("DB100.26");
+            waddresses1.add("DB100.28");
+            waddresses1.add("DB100.30");
+            waddresses1.add("DB100.32");
+            waddresses1.add("DB100.34");
+            waddresses1.add("DB100.36");
+            waddresses1.add("DB100.38");
+            waddresses1.add("DB100.40");
+
+            String addressList2 = "DB100.8";
+            String addressList3 = "DB100.12";
+
+            if (!messages.isEmpty()) {
+              // 灏嗘渶鍚庝竴涓秷鎭浆鎹负 short 绫诲瀷鐨勫垪琛�
+              String lastMessage = messages.get(messages.size() - 1);
+              // System.out.println("lastMessage锛�" + lastMessage);
+              JSONArray messageArray = new JSONArray(lastMessage);
+
+              // 鏁村悎绗� 1 鍒� 3 涓暟缁勫苟鍘绘帀 null 鍏冪礌
+              List<Short> mergedList = new ArrayList<>();
+              for (int i = 0; i < 3; i++) {
+                JSONArray sublist = messageArray.getJSONArray(i);
+                for (int j = 0; j < sublist.size(); j++) {
+                  Object value = sublist.get(j);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      short sValue = Short.parseShort(cleanedValue.trim());
+                      mergedList.add(sValue);
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+              }
+
+              // 鍐欏叆绗竴涓湴鍧�
+              if (messageArray.getJSONArray(3).size() > 0) {
+                Object value = messageArray.getJSONArray(3).get(0);
+                if (value != null && !value.toString().equals("null")) {
+                  try {
+                    String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                    short sValue = Short.parseShort(cleanedValue.trim());
+                    S7control.getinstance().WriteWord(addressList2, Arrays.asList(sValue));
+                    System.out
+                            .println("messageValue锛�" + Arrays.asList(sValue) + " written to PLC at address " + addressList2);
+                  } catch (NumberFormatException e) {
+                    // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                    System.err.println("Could not parse value: " + value);
+                  }
+                }
+              }
+
+              // 鍐欏叆绗簩涓湴鍧�
+              if (messageArray.getJSONArray(4).size() > 0) {
+                Object value = messageArray.getJSONArray(4).get(0);
+                if (value != null && !value.toString().equals("null")) {
+                  try {
+                    String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                    short sValue = Short.parseShort(cleanedValue.trim());
+                    S7control.getinstance().WriteWord(addressList3, Arrays.asList(sValue));
+                    System.out
+                            .println("messageValue锛�" + Arrays.asList(sValue) + " written to PLC at address " + addressList3);
+                  } catch (NumberFormatException e) {
+                    // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                    System.err.println("Could not parse value: " + value);
+                  }
+                }
+              }
+
+              // 鍐欏叆绗笁涓湴鍧�
+              if (!mergedList.isEmpty()) {
+                S7control.getinstance().WriteWord(waddresses1, mergedList);
+                System.out.println("messageValue锛�" + mergedList + " written to PLC at address " + waddresses1);
+              }
+
+              // 娓呯┖娑堟伅鍒楄〃
+              webserver.clearMessages();
+            }
+          }
+        }
+
+      }
+
+    }
+  }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java
new file mode 100644
index 0000000..eb37fda
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java
@@ -0,0 +1,277 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import org.apache.commons.io.FileUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+
+public class PlcParameter2 extends Thread {
+  String name = "";
+  Integer count = 0;
+
+  public static String readFileToString(String filePath) throws IOException {
+    File file = new File(filePath);
+    return FileUtils.readFileToString(file, "UTF-8");
+  }
+
+  public void readValue() {
+    String str = "";
+    BufferedReader bufferedReader = null;
+    FileInputStream fileInputStream;
+    try {
+      // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+      fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/address.json");
+      // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+      // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+      bufferedReader = new BufferedReader(inputStreamReader);
+      String line = null;
+      // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+      while ((line = bufferedReader.readLine()) != null) {
+        str += line;
+      }
+
+      // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+      JSONObject jsonObject = new JSONObject(str);
+
+      // 鑾峰彇json涓殑鍊�
+      JSONArray address = jsonObject.getJSONArray("Positioning1");
+      for (int i = 0; i < address.size(); i++) {
+        JSONObject ress = (JSONObject) address.get(i);
+
+        this.name = ress.getStr("name");
+        this.count = ress.getInt("count");
+
+      }
+
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
+    } catch (UnsupportedEncodingException e) {
+      e.printStackTrace();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(1000);
+
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+
+   //    鎵嬪姩鐘舵�佸湴鍧�
+      List<String> addressList1 = new ArrayList<>();
+
+      addressList1.add("DB103.44");//D01
+      addressList1.add("DB103.58");//D02
+      addressList1.add("DB103.72");//D03
+      addressList1.add("DB103.86");//D04
+      addressList1.add("DB103.100");//D05
+      addressList1.add("DB103.114");//D06
+      addressList1.add("DB103.128");//A01
+      addressList1.add("DB103.142");//A01 2
+      addressList1.add("DB103.156");//A02
+      addressList1.add("DB103.184");//B01
+      addressList1.add("DB103.212");//B02
+
+
+      List<String> paramlist = S7control.getinstance().readStrings(addressList1);
+
+
+   //娓呴櫎ID鍦板潃
+      List<String> addresses = new ArrayList<>();
+      addresses.add("DB103.0");
+      addresses.add("DB103.2");
+      addresses.add("DB103.12");
+      addresses.add("DB103.14");
+      addresses.add("DB103.16");
+      addresses.add("DB103.18");
+      addresses.add("DB103.8");
+      addresses.add("DB103.10");
+      addresses.add("DB103.4");
+      addresses.add("DB103.6");
+      List<Short> data = S7control.getinstance().readWords(addresses);
+
+
+      //id
+      List<String> addressList0 = new ArrayList<>();
+
+      addressList0.add("DB101.9.2");
+      addressList0.add("DB101.9.3");
+      addressList0.add("DB101.9.4");
+      addressList0.add("DB101.9.5");
+      addressList0.add("DB101.9.6");
+      addressList0.add("DB101.9.7");
+
+      addressList0.add("DB101.10.0");
+      addressList0.add("DB101.10.1");
+      addressList0.add("DB101.10.2");
+      addressList0.add("DB101.10.3");
+
+     // 鎵爜鏋�
+      List<Boolean> data2 = S7control.getinstance().readBits(addressList0);
+      List<String> addressList3 = new ArrayList<>();
+      addressList3.add("DB103.256");
+      addressList3.add("DB103.270");
+
+
+
+
+      List<String> niuanaddressList3 = new ArrayList<>();
+
+      niuanaddressList3.add("DB101.10.4");
+      List<Boolean> anniuread = S7control.getinstance().readBits(niuanaddressList3);
+
+
+
+      List<String> data3 = S7control.getinstance().readStrings(addressList3);
+// A01 A02 B01 B02
+      List<String> addresses4 = new ArrayList<>();
+      addresses4.add("DB103.32");
+      addresses4.add("DB103.34");
+      addresses4.add("DB103.36");
+      addresses4.add("DB103.40");
+
+    List<Short> data4 = S7control.getinstance().readWords(addresses4);
+
+//      List<Long> TIME2 = Collections.singletonList(S7control.getinstance().readtime("DB100.194"));
+//      System.out.println("addressList锛�" + TIME2);
+
+
+      //
+
+
+
+
+//      String[] values6 = { ".x1 ","x2 ","x3",";;x4","x5","x6","x7","x8","x9","x10","x11"};
+//      List<String> paramlist = new ArrayList<>(Arrays.asList(values6));
+//      Short[] values1 = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1};
+//     List<Short> data = new ArrayList<>(Arrays.asList(values1));
+//      Boolean[] value4 = { false, false, false, false, false, false, false, false, false,
+//              false};
+//     List<Boolean> data2 = new ArrayList<>(Arrays.asList(value4));
+//      String[] values3 = { ".x11 ","x21 "};
+//      List<String> data3 = new ArrayList<>(Arrays.asList(values3));
+//      Short[] values4 = { 2,2,3,4};
+//      List<Short> data4 = new ArrayList<>(Arrays.asList(values4));
+//
+//
+      JSONObject jsonObject = new JSONObject();
+      short[] params = new short[data2.size()];
+      for (int i = 0; i < data2.size(); i++) {
+        boolean value = data2.get(i);
+        params[i] = value ? (short) 1 : (short) 0;
+      }
+
+      short[] anniuparams = new short[anniuread.size()];
+      for (int i = 0; i < anniuread.size(); i++) {
+        boolean value = anniuread.get(i);
+        anniuparams[i] = value ? (short) 1 : (short) 0;
+      }
+
+      jsonObject.append("params", params);
+      jsonObject.append("params", paramlist);
+      jsonObject.append("params", data);
+      jsonObject.append("params", data3);
+      jsonObject.append("params", data4);
+      jsonObject.append("jiting", anniuparams);
+
+
+
+      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter2");
+ if (sendwServer != null) {
+ for (WebSocketServer webserver : sendwServer) {
+ webserver.sendMessage(jsonObject.toString());
+
+
+
+
+        List<String> messages = webserver.getMessages();
+        List<String> addressList = new ArrayList<>();
+
+        addressList.add("DB101.9.2");
+        addressList.add("DB101.9.3");
+        addressList.add("DB101.9.4");
+        addressList.add("DB101.9.5");
+        addressList.add("DB101.9.6");
+        addressList.add("DB101.9.7");
+        addressList.add("DB101.10.0");
+        addressList.add("DB101.10.1");
+        addressList.add("DB101.10.2");
+        addressList.add("DB101.10.3");
+
+
+
+        if (!messages.isEmpty()) {
+          // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
+          String lastMessage = messages.get(messages.size() - 1);
+//        System.out.println("lastMessage锛�" + lastMessage);
+          JSONArray messageArray = new JSONArray(lastMessage);
+
+          if (messageArray.getJSONArray(0).size() > 0) {
+            JSONArray jsonArray3 = messageArray.getJSONArray(0);
+            List<Boolean> sValue3 = new ArrayList<>();
+            for (int i = 0; i < jsonArray3.size(); i++) {
+              Object value = jsonArray3.get(i);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  boolean val = "1".equals(cleanedValue.trim());
+                  sValue3.add(val);
+                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+            if (!sValue3.isEmpty()) {
+             S7control.getinstance().WriteBit(addressList, sValue3);
+              System.out.println("Values " + sValue3 + " written to PLC at address " + sValue3);
+            }
+          }
+          // 灏嗗竷灏斿垪琛ㄥ啓鍏� PLC
+          if (messageArray.getJSONArray(1).size() > 0) {
+            JSONArray jsonArray3 = messageArray.getJSONArray(1);
+            List<Boolean> sValue3 = new ArrayList<>();
+            for (int i = 0; i < jsonArray3.size(); i++) {
+              Object value = jsonArray3.get(i);
+              if (value != null && !value.toString().equals("null")) {
+                try {
+                  String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                  boolean val = "1".equals(cleanedValue.trim());
+                  sValue3.add(val);
+                  System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                } catch (NumberFormatException e) {
+                  // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                  System.err.println("Could not parse value: " + value);
+                }
+              }
+            }
+            if (!sValue3.isEmpty()) {
+            S7control.getinstance().WriteBit(niuanaddressList3, sValue3);
+
+              System.out.println("Values " + sValue3 + " written to PLC at address " + sValue3);
+            }
+          }
+
+
+          // 娓呯┖娑堟伅鍒楄〃
+            webserver.clearMessages();
+        }
+      }
+ }
+    }
+    }
+  }
+
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning1.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning1.java
new file mode 100644
index 0000000..9ec4c88
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning1.java
@@ -0,0 +1,159 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+
+import org.apache.commons.io.FileUtils;
+
+public class PlcPositioning1 extends Thread {
+    String name = "";
+    Integer count = 0;
+
+    public static String readFileToString(String filePath) throws IOException {
+        File file = new File(filePath);
+        return FileUtils.readFileToString(file, "UTF-8");
+    }
+
+    public void readValue() {
+        String str = "";
+        BufferedReader bufferedReader = null;
+        FileInputStream fileInputStream;
+        try {
+            // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+            fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/address.json");
+            // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+            // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+            bufferedReader = new BufferedReader(inputStreamReader);
+            String line = null;
+            // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+            while ((line = bufferedReader.readLine()) != null) {
+                str += line;
+            }
+
+            // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+            JSONObject jsonObject = new JSONObject(str);
+
+            // 鑾峰彇json涓殑鍊�
+            JSONArray address = jsonObject.getJSONArray("Positioning1");
+            for (int i = 0; i < address.size(); i++) {
+                JSONObject ress = (JSONObject) address.get(i);
+
+                this.name = ress.getStr("name");
+                this.count = ress.getInt("count");
+                System.out.println("messageValues锛�" + this.name);
+                System.out.println("messageValues锛�" + this.count);
+            }
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void run() {
+        while (this != null) {
+            try {
+                Thread.sleep(1000);
+
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+//        this.readValue();
+//            String PlcAddress = this.name;
+//            Integer Plccount = this.count;
+
+            // System.out.println(stt);
+            //瀛樼墖鏍�  鍑虹墖鏍艰鍙�
+  List<Short> arraylist = S7control.getinstance().ReadWord("DB100.42", 23);
+//            System.out.println(arraylist);
+//            Short[] 瀛樼墖 = { 1 };
+//            List<Short> 瀛樼墖1 = new ArrayList<>(Arrays.asList(瀛樼墖));
+//            Short[] 鎺ョ墖 = { 1 };
+//            List<Short> 鎺ョ墖1 = new ArrayList<>(Arrays.asList(鎺ョ墖));
+//            Short[] 闂磋窛 = { 1 };
+//            List<Short> 闂磋窛1 = new ArrayList<>(Arrays.asList(闂磋窛));
+//            Short[] values1 = {1,1,1, 1,2, 3, 4, 5, 6, 7, 8, 9, 10,11, 12,13,14,15,16,17,18,19,20 };
+//            List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
+
+
+            JSONObject jsonObject = new JSONObject();
+
+
+            jsonObject.append("params", arraylist);
+
+
+//            WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Positioning1");
+//            if (sendwServer != null) {
+//                sendwServer.sendMessage(jsonObject.toString());
+//            }
+
+//            WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Positioning1");
+            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Positioning1");
+            if (sendwServer != null) {
+                for (WebSocketServer webserver : sendwServer) {
+                    webserver.sendMessage(jsonObject.toString());
+
+                    if (webserver != null) {
+                        List<String> messages = webserver.getMessages();
+                        //瀛樼墖鏍�  鍑虹墖鏍煎湴鍧�
+                        String addressList3 = "DB100.42";
+
+                        if (!messages.isEmpty()) {
+                            // 灏嗘渶鍚庝竴涓秷鎭浆鎹负 short 绫诲瀷鐨勫垪琛�
+                            String lastMessage = messages.get(messages.size() - 1);
+//        System.out.println("lastMessage锛�" + lastMessage);
+                            JSONArray messageArray = new JSONArray(lastMessage);
+
+                            // 鏁村悎绗� 1 鍒� 3 涓暟缁勫苟鍘绘帀 null 鍏冪礌
+                            List<Short> mergedList = new ArrayList<>();
+                            for (int i = 0; i < 5; i++) {
+                                JSONArray sublist = messageArray.getJSONArray(i);
+                                for (int j = 0; j < sublist.size(); j++) {
+                                    Object value = sublist.get(j);
+                                    if (value != null && !value.toString().equals("null")) {
+                                        try {
+                                            String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                                            short sValue = Short.parseShort(cleanedValue.trim());
+                                            mergedList.add(sValue);
+                                        } catch (NumberFormatException e) {
+                                            // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                                            System.err.println("Could not parse value: " + value);
+                                        }
+                                    }
+                                }
+                            }
+
+
+                            // 鍐欏叆瀛樼墖鏍�  鍑虹墖鏍间綅缃瀹氭暟鎹�
+                            if (!mergedList.isEmpty()) {
+                                S7control.getinstance().WriteWord(addressList3, mergedList);
+                                System.out.println("messageValue锛�" + mergedList + " written to PLC at address " + addressList3);
+                            }
+
+                            // 娓呯┖娑堟伅鍒楄〃
+                            webserver.clearMessages();
+                        }
+                    }
+                }
+
+
+            }
+        }
+    }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning2.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning2.java
new file mode 100644
index 0000000..2182ee9
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcPositioning2.java
@@ -0,0 +1,146 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import org.apache.commons.io.FileUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class PlcPositioning2 extends Thread {
+    String name = "";
+    Integer count = 0;
+
+    public static String readFileToString(String filePath) throws IOException {
+        File file = new File(filePath);
+        return FileUtils.readFileToString(file, "UTF-8");
+    }
+
+    public void readValue() {
+        String str = "";
+        BufferedReader bufferedReader = null;
+        FileInputStream fileInputStream;
+        try {
+            // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+            fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/address.json");
+            // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+            // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+            bufferedReader = new BufferedReader(inputStreamReader);
+            String line = null;
+            // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+            while ((line = bufferedReader.readLine()) != null) {
+                str += line;
+            }
+
+            // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+            JSONObject jsonObject = new JSONObject(str);
+
+            // 鑾峰彇json涓殑鍊�
+            JSONArray address = jsonObject.getJSONArray("Positioning2");
+            for (int i = 0; i < address.size(); i++) {
+                JSONObject ress = (JSONObject) address.get(i);
+
+                this.name = ress.getStr("name");
+                this.count = ress.getInt("count");
+                System.out.println("messageValues锛�" + this.name);
+                System.out.println("messageValues锛�" + this.count);
+            }
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void run() {
+        while (this != null) {
+            try {
+                Thread.sleep(1000);
+
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+//        this.readValue();
+//            String PlcAddress = this.name;
+//            Integer Plccount = this.count;
+
+            // System.out.println(stt);
+            //B01鏍间綅缃� 鍦板潃璇诲彇
+            List<Short> arraylist = S7control.getinstance().ReadWord("DB100.88", 10);
+
+//            Short[] values1 = { 1,2, 3, 4, 5 , 11, 12,13,14,15};
+//            List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
+
+
+            JSONObject jsonObject = new JSONObject();
+            // new short[]{1,1, 1, 1, 1, 1, 2, 33, 2,3, 4, 5}
+            // new short[]{0,0, 0, 0, 0, 0, 0, 0, 0, 0}
+
+            jsonObject.append("params", arraylist);
+
+
+//            WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Positioning2");
+//            if (sendwServer != null) {
+//                sendwServer.sendMessage(jsonObject.toString());
+//            }
+
+            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Positioning2");
+            if (sendwServer != null) {
+                for (WebSocketServer webserver : sendwServer) {
+                    webserver.sendMessage(jsonObject.toString());
+
+
+                    if (webserver != null) {
+                        List<String> messages = webserver.getMessages();
+                        //B01  B02 鍦板潃
+                        String addressList3 = "DB100.88";
+
+                        if (!messages.isEmpty()) {
+                            // 灏嗘渶鍚庝竴涓秷鎭浆鎹负 short 绫诲瀷鐨勫垪琛�
+                            String lastMessage = messages.get(messages.size() - 1);
+//        System.out.println("lastMessage锛�" + lastMessage);
+                            JSONArray messageArray = new JSONArray(lastMessage);
+
+                            // 鏁村悎绗� 1 鍒� 3 涓暟缁勫苟鍘绘帀 null 鍏冪礌
+                            List<Short> mergedList = new ArrayList<>();
+                            for (int i = 0; i < 2; i++) {
+                                JSONArray sublist = messageArray.getJSONArray(i);
+                                for (int j = 0; j < sublist.size(); j++) {
+                                    Object value = sublist.get(j);
+                                    if (value != null && !value.toString().equals("null")) {
+                                        try {
+                                            String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                                            short sValue = Short.parseShort(cleanedValue.trim());
+                                            mergedList.add(sValue);
+                                        } catch (NumberFormatException e) {
+                                            // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                                            System.err.println("Could not parse value: " + value);
+                                        }
+                                    }
+                                }
+                            }
+
+
+                            // 鍐欏叆b01  b02鍦板潃
+                            if (!mergedList.isEmpty()) {
+                                S7control.getinstance().WriteWord(addressList3, mergedList);
+                                System.out.println("messageValue锛�" + mergedList + " written to PLC at address " + addressList3);
+                            }
+
+                            // 娓呯┖娑堟伅鍒楄〃
+                            webserver.clearMessages();
+                        }
+
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java
new file mode 100644
index 0000000..3859be2
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java
@@ -0,0 +1,467 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import com.google.common.primitives.Bytes;
+import org.apache.commons.io.FileUtils;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class PlcServoManualone extends Thread {
+
+
+
+  private Configuration config;
+
+  public PlcServoManualone() throws IOException {
+    config = new Configuration("config.properties");
+  }
+
+  public static class PLCBooleanConverter {
+
+    public static short[] convertListsToBinaryShortArray(List<Boolean>... lists) {
+      // 璁$畻鎵�鏈夊垪琛ㄤ腑鍏冪礌鐨勬�绘暟
+      int totalSize = 0;
+      for (List<Boolean> list : lists) {
+        totalSize += list.size();
+      }
+
+      // 鍒涘缓涓�涓冻澶熷ぇ鐨勬暟缁勬潵瀛樻斁鎵�鏈夌殑浜岃繘鍒跺��
+      short[] binaryShortArray = new short[totalSize];
+
+      // 褰撳墠鏁扮粍濉厖浣嶇疆鎸囬拡
+      int currentIndex = 0;
+
+      // 閬嶅巻鎵�鏈夌殑鍒楄〃
+      for (List<Boolean> list : lists) {
+        // 灏嗘瘡涓竷灏斿�艰浆鎹负 0 鎴� 1 骞跺~鍏ユ暟缁�
+        for (Boolean value : list) {
+          binaryShortArray[currentIndex++] = (short) (value ? 1 : 0);
+        }
+      }
+
+      return binaryShortArray;
+    }
+  }
+
+//璇诲彇id
+  public StringBuilder queGlassid(String address,int count) {
+    StringBuilder writedstrIdOut = new StringBuilder();
+    byte[] writedglassidbytesOut = S7control.getinstance().ReadByte(address, count);
+    if (writedglassidbytesOut != null) {
+      // 鑾峰彇鐜荤拑id
+      for (byte iditem : writedglassidbytesOut) {
+        writedstrIdOut.append((char) iditem);
+      }
+    }
+    return writedstrIdOut;
+  }
+//鍐欏叆id
+  public void outmesid(String glassid,String address) {
+    //System.out.println("outmesid:" + glassid);
+    List<Byte> glassidlist = new ArrayList();
+    char ds[]=glassid.toCharArray();
+    for (char iditem : ds) {
+      glassidlist.add((byte)iditem);
+    }
+    byte[] bytes = Bytes.toArray(glassidlist);
+    System.out.println("outmesidbytes:" + bytes.length);
+    S7control.getinstance().WriteByte(address, bytes);
+  }
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(1000);
+
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+
+//A01缁勫悎涓湴鍧�琛ㄩ泦鍚�
+      List<String> addresses = Arrays.asList(config.getProperty("A01.addresses").split(","));
+      //System.out.println(addresses);
+
+      List<Short> arraylist = S7control.getinstance().readWords(addresses);
+
+//A02缁勫悎涓湴鍧�琛ㄩ泦鍚�
+      List<String> addresses2 = Arrays.asList(config.getProperty("A02.addresses").split(","));
+      List<Short> arraylist2 = S7control.getinstance().readWords(addresses2);
+
+      //A01缈昏浆鍦板潃
+      List<String> addresses3 = Arrays.asList(config.getProperty("A01.flipAddress"));
+      List<Short> arraylist3 = S7control.getinstance().readWords(addresses3);
+
+      //A02缈昏浆鍦板潃
+      List<String> addresses4 = Arrays.asList(config.getProperty("A02.flipAddress"));
+
+      List<Short> arraylist4 = S7control.getinstance().readWords(addresses4);
+     //B01缁勫悎涓湴鍧�
+      String b01Address = config.getProperty("B01.address");
+      List<Short> arraylist5 = S7control.getinstance().ReadWord(b01Address, 2);
+      //B02缁勫悎鍦板潃
+      String b02Address = config.getProperty("B02.address");
+      List<Short> arraylist6 = S7control.getinstance().ReadWord(b02Address, 2);
+//      System.out.println(b02Address);
+     // 鎵�鏈夋晠闅滄寜閽湴鍧�
+      List<String> addresses7 = Arrays.asList(config.getProperty("faultButtonAddresses").split(","));
+      List<Boolean> arraylist7 = S7control.getinstance().readBits(addresses7);
+
+      //A01鍚姩鍦板潃
+      List<String> A01start = Arrays.asList(config.getProperty("A01start"));
+      //A02鍚姩鍦板潃
+      List<String> A02start = Arrays.asList(config.getProperty("A02start"));
+//A01鍗婅嚜鍔ㄥ湴鍧�
+      List<String> A01Bstart = Arrays.asList(config.getProperty("A01Bstart"));
+      //A02鍗婅嚜鍔ㄥ湴鍧�
+      List<String> A02Bstart = Arrays.asList(config.getProperty("A02Bstart"));
+      //
+      List<String> abortresumeTasks = Arrays.asList(config.getProperty("abortresumeTasks"));
+      //鍥為浂鎸夐挳鍦板潃
+      List<String> waddresses4 = Arrays.asList(config.getProperty("HomedButtonAddresses").split(","));
+      // 鎵�鏈夊浣嶆寜閽湴鍧�
+      List<String> Reset = Arrays.asList(config.getProperty("resetButtonAddresses").split(","));
+//      System.out.println(Reset);
+      // 鎵�鏈夋湭鍥為浂鎸夐挳鍦板潃
+      List<String> addresses8 = Arrays.asList(config.getProperty("notHomedButtonAddresses").split(","));
+      // 杩涚墖id鍦板潃
+      String inputGlassIdAddress = config.getProperty("inputGlassIdAddress");
+      String outputGlassIdAddress = config.getProperty("outputGlassIdAddress");
+      StringBuilder queueid1 = queGlassid(inputGlassIdAddress, 14);
+      // 瀛樼墖id鍦板潃
+      StringBuilder queueid2 = queGlassid(outputGlassIdAddress, 14);
+
+      List<Boolean> A01readstart = S7control.getinstance().readBits(A01start);
+      List<Boolean> A02readstart = S7control.getinstance().readBits(A02start);
+      List<Boolean> A01readBstart = S7control.getinstance().readBits(A01Bstart);
+      List<Boolean> A02readsBtart = S7control.getinstance().readBits(A02Bstart);
+
+      List<Boolean> resumeTasks = S7control.getinstance().readBits(abortresumeTasks);
+
+      short[] combinedBinaryShortArray = PLCBooleanConverter.convertListsToBinaryShortArray(
+              A01readstart, A01readBstart, A02readstart, A02readsBtart
+      );
+
+
+// 鎵�鏈夋晠闅滄寜閽浆鎹负1鍜�0
+      short[] params2 = new short[arraylist7.size()];
+      for (int i = 0; i < arraylist7.size(); i++) {
+        boolean value = arraylist7.get(i);
+        params2[i] = value ? (short) 1 : (short) 0;
+      }
+
+//鎬ュ仠涓鎸夐挳
+      short[] resumeTask = new short[resumeTasks.size()];
+      for (int i = 0; i < resumeTasks.size(); i++) {
+        boolean value = resumeTasks.get(i);
+        resumeTask[i] = value ? (short) 1 : (short) 0;
+      }
+
+      List<Boolean> Reset1 = S7control.getinstance().readBits(Reset);
+    //  System.out.println(Reset1);
+// 鎵�鏈夋晠闅滄寜閽浆鎹负1鍜�0
+      short[] rReset = new short[Reset1.size()];
+      for (int i = 0; i < Reset1.size(); i++) {
+        boolean value = Reset1.get(i);
+        rReset[i] = value ? (short) 1 : (short) 0;
+      }
+
+
+
+      List<Boolean> arraylist8 = S7control.getinstance().readBits(addresses8);
+      short[] params = new short[arraylist8.size()];
+      for (int i = 0; i < arraylist8.size(); i++) {
+        boolean value = arraylist8.get(i);
+        params[i] = value ? (short) 1 : (short) 0;
+      }
+
+
+
+
+
+//      Short[] values1 = { 1, 2, 3, 4, 5, 6, 7};
+//      List<Short> arraylist = new ArrayList<>(Arrays.asList(values1));
+//      Short[] values2 = { 1, 2, 3, 4, 5};
+//      List<Short> arraylist2 = new ArrayList<>(Arrays.asList(values2));
+//
+//      Short[] values3 = {1};
+//      List<Short> arraylist3 = new ArrayList<>(Arrays.asList(values3));
+//      Short[] values4 = {2};
+//      List<Short> arraylist4 = new ArrayList<>(Arrays.asList(values4));
+//      Short[] values5 = {3,3};
+//      List<Short> arraylist5 = new ArrayList<>(Arrays.asList(values5));
+//      Short[] values6 = { 4,4};
+//      List<Short> arraylist6 = new ArrayList<>(Arrays.asList(values6));
+//      Boolean[] values7 = { false, true, true, true, true, true};
+//     List<Boolean> arraylist7 = new ArrayList<>(Arrays.asList(values7));
+//      Boolean[] values8 = { false, true, true, true, true, true};
+//      List<Boolean> arraylist8 = new ArrayList<>(Arrays.asList(values8));
+//
+//      String queueid1 = "x1234567890123";
+//      String queueid2 = "x1234567890123";
+//
+//      short[] params2 = new short[arraylist7.size()];
+//      for (int i = 0; i < arraylist7.size(); i++) {
+//        boolean value = arraylist7.get(i);
+//        params2[i] = value ? (short) 1 : (short) 0;
+//      }
+//
+//
+//      short[] params = new short[arraylist8.size()];
+//      for (int i = 0; i < arraylist8.size(); i++) {
+//        boolean value = arraylist8.get(i);
+//        params[i] = value ? (short) 1 : (short) 0;
+//      }
+
+      JSONObject jsonObject = new JSONObject();
+
+      jsonObject.append("zuhe1", arraylist);
+      jsonObject.append("zuhe2", arraylist2);
+      jsonObject.append("zuhe3", arraylist3);
+      jsonObject.append("zuhe4", arraylist4);
+      jsonObject.append("zuhe5", arraylist5);
+      jsonObject.append("zuhe6", arraylist6);
+      jsonObject.append("guzhang", params2);
+   jsonObject.append("weihuiling", params);
+      jsonObject.append("jinpianid", queueid1);
+      jsonObject.append("qupianid", queueid2);
+      jsonObject.append("fuwei", rReset);
+      jsonObject.append("qidong", combinedBinaryShortArray);
+      jsonObject.append("resumeTasks", resumeTask);
+
+
+
+//      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("ServoManualone");
+//      if (sendwServer != null) {
+//        sendwServer.sendMessage(jsonObject.toString());
+//      }
+
+      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("ServoManualone");
+      if (sendwServer != null) {
+        for (WebSocketServer webserver : sendwServer) {
+          webserver.sendMessage(jsonObject.toString());
+
+
+          if (webserver != null) {
+            List<String> messages = webserver.getMessages();
+
+
+            if (!messages.isEmpty()) {
+              // 灏嗘渶鍚庝竴涓秷鎭浆鎹负 short 绫诲瀷鐨勫垪琛�
+              String lastMessage = messages.get(messages.size() - 1);
+//        System.out.println("lastMessage锛�" + lastMessage);
+              JSONArray messageArray = new JSONArray(lastMessage);
+
+
+              // 鍐欏叆AO1缁勫悎
+              if (messageArray.getJSONArray(0).size() > 0) {
+                JSONArray jsonArray = messageArray.getJSONArray(0);
+                List<Short> sValue = new ArrayList<>();
+                for (int i = 0; i < jsonArray.size(); i++) {
+                  Object value = jsonArray.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      short val = Short.parseShort(cleanedValue.trim());
+                      sValue.add(val);
+                      System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValue.isEmpty()) {
+
+                  S7control.getinstance().WriteWord(addresses, sValue);
+                  // 妫�鏌ユ槸鍚﹁鍙栧埌浜嗕綅鍊硷紝骞朵笖鍒楄〃涓嶄负绌�
+                  if (A01readstart != null && !A01readstart.isEmpty()) {
+                    // 鍒涘缓涓�涓柊鐨勫垪琛ㄧ敤浜庡啓鍏ユ柊鍊�
+                    List<Boolean> a01startval = new ArrayList<>();
+                    // 閬嶅巻鎵�鏈夎鍙栧埌鐨勪綅鍊�
+                    for (Boolean bit : A01readstart) {
+                      // 鍙栧弽褰撳墠浣嶇殑鍊煎苟娣诲姞鍒版柊鐨勫垪琛ㄤ腑
+                      a01startval.add(!bit);
+                    }
+                    // 鍐欏叆鏂扮殑浣嶅�煎垪琛�
+                    S7control.getinstance().WriteBit(A01start, a01startval);
+                  }
+                  System.out.println("Values " + sValue + " written to PLC at address " + addresses);
+                }
+              }
+
+
+              //// 鍐欏叆AO2缁勫悎
+              if (messageArray.getJSONArray(1).size() > 0) {
+                JSONArray jsonArray2 = messageArray.getJSONArray(1);
+                List<Short> sValue2 = new ArrayList<>();
+                for (int i = 0; i < jsonArray2.size(); i++) {
+                  Object value = jsonArray2.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      short val = Short.parseShort(cleanedValue.trim());
+                      sValue2.add(val);
+                      System.out.println("messageValue锛�" + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValue2.isEmpty()) {
+                  S7control.getinstance().WriteWord(addresses2, sValue2);
+
+                  if (A02readstart != null && !A02readstart.isEmpty()) {
+                    // 鍒涘缓涓�涓柊鐨勫垪琛ㄧ敤浜庡啓鍏ユ柊鍊�
+                    List<Boolean> a02startval = new ArrayList<>();
+                    // 閬嶅巻鎵�鏈夎鍙栧埌鐨勪綅鍊�
+                    for (Boolean bit : A02readstart) {
+                      // 鍙栧弽褰撳墠浣嶇殑鍊煎苟娣诲姞鍒版柊鐨勫垪琛ㄤ腑
+                      a02startval.add(!bit);
+                    }
+                    // 鍐欏叆鏂扮殑浣嶅�煎垪琛�
+                    S7control.getinstance().WriteBit(A02start, a02startval);
+                  }
+                  System.out.println("Values " + sValue2 + " written to PLC at address " + addresses2);
+                }
+              }
+
+
+              // 澶嶄綅鎸夐挳鍐欏叆
+              if (messageArray.getJSONArray(2).size() > 0) {
+                JSONArray jsonArray3 = messageArray.getJSONArray(2);
+                List<Boolean> sValue3 = new ArrayList<>();
+                for (int i = 0; i < jsonArray3.size(); i++) {
+                  Object value = jsonArray3.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      boolean val = "1".equals(cleanedValue.trim());
+                      sValue3.add(val);
+                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValue3.isEmpty()) {
+                  S7control.getinstance().WriteBit(Reset, sValue3);
+                  System.out.println("Values " + sValue3 + " written to PLC at address " + Reset);
+                }
+              }
+
+              //鍥為浂鎸夐挳鍐欏叆
+              if (messageArray.getJSONArray(3).size() > 0) {
+                JSONArray jsonArray4 = messageArray.getJSONArray(3);
+                List<Boolean> sValue4 = new ArrayList<>();
+                for (int i = 0; i < jsonArray4.size(); i++) {
+                  Object value = jsonArray4.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      boolean val = "1".equals(cleanedValue.trim());
+                      sValue4.add(val);
+                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValue4.isEmpty()) {
+                  S7control.getinstance().WriteBit(waddresses4, sValue4);
+                  System.out.println("Values " + sValue4 + " written to PLC at address " + waddresses4);
+                }
+              }
+
+
+              //鍙栫墖ID鍐欏叆
+              if (messageArray.getJSONArray(5).size() > 0) {
+//            JSONArray jsonArray5 = messageArray.getJSONArray(4);
+                String jsonArray5 = String.valueOf(messageArray.getJSONArray(5));
+                if (!jsonArray5.isEmpty()) {
+//              String value = (String) jsonArray5.get(0);
+                  jsonArray5 = jsonArray5.replaceAll("[\\[\\]\"]", ""); // 鍘婚櫎鏂规嫭鍙峰拰鍙屽紩鍙�
+                  outmesid(jsonArray5, outputGlassIdAddress);
+                  System.out.println("Values1 " + jsonArray5 + " written to PLC at address " + outputGlassIdAddress);
+                }
+              }
+              // 杩涚墖ID鍐欏叆
+              if (messageArray.getJSONArray(4).size() > 0) {
+                JSONArray jsonArray6 = messageArray.getJSONArray(4);
+
+                if (!jsonArray6.isEmpty()) {
+                  String value2 = (String) jsonArray6.get(0);
+                  outmesid(value2.trim(), inputGlassIdAddress);
+                  System.out.println("Values2 " + value2 + " written to PLC at address " + inputGlassIdAddress);
+                }
+              }
+
+
+              if (messageArray.getJSONArray(6).size() > 0) {
+                JSONArray jsonArray4 = messageArray.getJSONArray(6);
+                List<Boolean> sValueb4 = new ArrayList<>();
+                for (int i = 0; i < jsonArray4.size(); i++) {
+                  Object value = jsonArray4.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      boolean val = "1".equals(cleanedValue.trim());
+                      sValueb4.add(val);
+                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValueb4.isEmpty()) {
+
+                  S7control.getinstance().WriteBit(A01Bstart, sValueb4);
+                  System.out.println("Values " + sValueb4 + " written to PLC at address " + A01Bstart);
+                }
+              }
+
+
+              if (messageArray.getJSONArray(7).size() > 0 && !messageArray.isNull(7)) {
+                JSONArray jsonArray4 = messageArray.getJSONArray(7);
+                List<Boolean> sValueb5 = new ArrayList<>();
+                for (int i = 0; i < jsonArray4.size(); i++) {
+                  Object value = jsonArray4.get(i);
+                  if (value != null && !value.toString().equals("null")) {
+                    try {
+                      String cleanedValue = value.toString().replaceAll("[^0-9-]", "");
+                      boolean val = "1".equals(cleanedValue.trim());
+                      sValueb5.add(val);
+                      System.out.println("messageValue: " + Arrays.asList(val) + " added to the list");
+                    } catch (NumberFormatException e) {
+                      // 濡傛灉鏃犳硶瑙f瀽涓� boolean 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+                      System.err.println("Could not parse value: " + value);
+                    }
+                  }
+                }
+                if (!sValueb5.isEmpty()) {
+
+                  S7control.getinstance().WriteBit(A02Bstart, sValueb5);
+                  System.out.println("Values " + sValueb5 + " written to PLC at address " + A02Bstart);
+                }
+              }
+
+
+
+
+              // 娓呯┖娑堟伅鍒楄〃
+              webserver.clearMessages();
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java b/springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java
new file mode 100644
index 0000000..a9045d0
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/Plcalarm.java
@@ -0,0 +1,145 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import com.example.springboot.mapper.AlarmMapper;
+
+public class Plcalarm extends Thread {
+  private AlarmMapper alarmMapper;
+
+  String content = "";
+  String name = "";
+  Integer count = 0;
+
+  public List<String> readValue() {
+    String str = "";
+    BufferedReader bufferedReader = null;
+    FileInputStream fileInputStream;
+    try {
+      // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+      fileInputStream = new FileInputStream("D:/canadames/Alarm.json");
+      // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+      // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+      bufferedReader = new BufferedReader(inputStreamReader);
+      String line = null;
+      // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+      while ((line = bufferedReader.readLine()) != null) {
+        str += line;
+      }
+
+      // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+      JSONObject jsonObject = new JSONObject(str);
+
+      List<String> arraylistss = new ArrayList<>();
+
+      // 鑾峰彇json涓姤璀︿俊鎭殑鍊�
+      JSONArray AlarmContent = jsonObject.getJSONArray("content");
+      for (int i = 0; i < AlarmContent.size(); i++) {
+        JSONObject ress = (JSONObject) AlarmContent.get(i);
+
+        this.content = ress.getStr("name");
+        arraylistss.add(content);
+      }
+      // 鑾峰彇json涓湴鍧�鐨勫��
+      JSONArray address = jsonObject.getJSONArray("address");
+      for (int i = 0; i < address.size(); i++) {
+        JSONObject ress = (JSONObject) address.get(i);
+
+        this.name = ress.getStr("name");
+        this.count = ress.getInt("count");
+
+      }
+
+      return arraylistss;
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
+    } catch (UnsupportedEncodingException e) {
+      e.printStackTrace();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+    return null;
+  }
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(1000);
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+
+//      this.readValue();
+//      String PlcAddress = this.name;
+//      Integer Plccount = this.count;
+
+      // 鏍规嵁鍦板潃璇诲彇PCL鏁版嵁
+      List<Boolean> plclist = S7control.getinstance().ReadBits("DB104.0.0", 71);
+//      List<Boolean> plclist = S7control.getinstance().ReadBits(PlcAddress, Plccount);
+      // System.out.println(plclist);
+      // Boolean[] values = { false, false, true, false, true, false, true, false,
+      // true, false, true, false, true, false,
+      // true, false, true, false, true, false, true, false, true, false, true, false,
+      // true, false, true, false, true,
+      // false, true, false, true, false,
+      // true, false, true, false };
+      // List<Boolean> plclist = new ArrayList<>(Arrays.asList(values));
+      if (plclist != null) {
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.append("params", plclist);
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("alarm");
+        if (sendwServer != null) {
+          for (WebSocketServer webserver : sendwServer) {
+            webserver.sendMessage(jsonObject.toString());
+
+
+            // 灏嗚幏鍙栫殑甯冨皵绫诲瀷杞崲涓烘暣鏁扮被鍨�
+            List<Integer> Intlist = new ArrayList<>();
+            for (Boolean value : plclist) {
+              Intlist.add(value == true ? 1 : 0);
+
+            }
+
+            // 灏咺ntlist杞崲涓烘暟缁�
+            // System.out.println(Intlist);
+            Integer[] shuzu1 = Intlist.toArray(new Integer[0]);
+
+            // 瀹氫箟鐨勬姤璀﹀唴瀹规暟缁�,鑾峰彇json杩斿洖鐨勯泦鍚�
+            List<String> myCollection;
+            myCollection = readValue();
+            String[] array1 = myCollection.toArray(new String[myCollection.size()]);
+            //  System.out.println(array1.length);
+            alarmMapper = WebSocketServer.applicationContext.getBean(AlarmMapper.class);
+            for (short i = 0; i < array1.length; i++) {
+              // 鏌ヨ瀵瑰簲鎶ヨ淇℃伅缁撴潫鏃堕棿涓簄ull鐨勬潯鏁�
+              short result = alarmMapper.selectnullti(array1[i]);
+              // 璇诲彇鍒癙LC鐨勫�间负1骞朵笖瀵瑰簲鎶ヨ淇℃伅缁撴潫鏃堕棿涓簄ull鐨勬潯鏁扮殑鏉℃暟涓�0
+              // System.out.println(result);
+              if (shuzu1[i] == 1 && result == 0) {
+                // 濉姞涓�鏉℃姤璀︿俊鎭�,鏈夊紑濮嬫椂闂�
+                alarmMapper.Insertalarm(array1[i]);
+              } else if (shuzu1[i] == 0 && result > 0) {
+                // 淇敼璇ユ潯鎶ヨ淇℃伅鐨勭粨鏉熸椂闂�
+                alarmMapper.updatealarm(array1[i]);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java b/springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
new file mode 100644
index 0000000..583f3fe
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -0,0 +1,186 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONObject;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.example.springboot.entity.Out_slice;
+import com.example.springboot.entity.Queue;
+import com.example.springboot.entity.StorageCage;
+import com.example.springboot.entity.alarmmg;
+import com.example.springboot.mapper.HomeMapper;
+import com.example.springboot.mapper.SpianMapper;
+import com.example.springboot.service.JdbcConnections;
+import com.example.springboot.service.North_Glass_Buffer1Service;
+import com.example.springboot.service.OutSliceServive;
+import com.example.springboot.service.SpianService;
+
+
+public class Plchome extends Thread {
+
+    @Autowired
+    private HomeMapper homeMapper;
+    private OutSliceServive outSliceServive;
+    private SpianMapper spianMapper;
+    private SpianService spianService;
+    private North_Glass_Buffer1Service north_Glass_Buffer1Service;
+    private JdbcConnections dbserve;
+    //鍑虹墖闃熷垪鏄惁鍏佽鍑虹墖
+    public static Boolean isAllowQueue=true;
+    //閾濇id
+    public static String FrameNo;
+    //鏄惁闇�瑕佹墜鍔ㄧ‘璁ょ幓鐠�
+    public static Boolean isConfirm=false;
+    // public static Map b=new HashMap<>();
+    // b.put()
+    @Override
+    public void run() {
+        while (this != null) {
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            JSONObject jsonObject = new JSONObject();
+
+            // 娉ㄥ叆mapper
+            homeMapper = WebSocketServer.applicationContext.getBean(HomeMapper.class);
+            spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
+            spianService = WebSocketServer.applicationContext.getBean(SpianService.class);
+            outSliceServive = WebSocketServer.applicationContext.getBean(OutSliceServive.class);
+            north_Glass_Buffer1Service = WebSocketServer.applicationContext.getBean(North_Glass_Buffer1Service.class);
+            // 绗煎瓙浣跨敤鎯呭喌
+            List<StorageCage> tableData = homeMapper.selectAll();
+            jsonObject.append("tableData", tableData);
+            // 鏍肩悊鐗囩鏍煎瓙鐘舵��
+            List<StorageCage> cagelist1 = homeMapper.selectRack1();
+            List<StorageCage> cagelist2 = homeMapper.selectRack2();
+            List<StorageCage> cagelist3 = homeMapper.selectRack3();
+            List<StorageCage> cagelist4 = homeMapper.selectRack4();
+            jsonObject.append("cagelist1", cagelist1);
+            jsonObject.append("cagelist2", cagelist2);
+            jsonObject.append("cagelist3", cagelist3);
+            jsonObject.append("cagelist4", cagelist4);
+            // 杩涘嚭鐗囦换鍔�
+            List<StorageCage> tasklist1 = homeMapper.selectinout(3);
+            List<StorageCage> tasklist2 = homeMapper.selectinout(2);
+            jsonObject.append("tasklist1", tasklist1);
+            jsonObject.append("tasklist2", tasklist2);
+            // 鏌ヨ鎶ヨ淇℃伅
+            List<alarmmg> alarmmg = homeMapper.SelectAlarmmgInfo();
+            jsonObject.append("alarmmg", alarmmg);
+            // 璇诲幓Plc杩涚墖杞︿笌鍑虹墖杞︿綅缃甒
+             List<String> addressList = new ArrayList<String>();
+             addressList.add("DB106.12");
+             addressList.add("DB106.0");
+             List<Short> paramlist = S7control.getinstance().ReadWord(addressList);
+             if (paramlist != null) {
+             jsonObject.append("params", paramlist);
+             }
+//             // 鑾峰彇杩涚墖杞︾姸鎬�
+//             List<Short> datas1ListState = S7control.getinstance().ReadWord("DB106.8",
+//             1);// 鑾峰彇杩涚墖杞︾姸鎬�
+//             boolean exist1 = datas1ListState.contains((short) 0);
+//             jsonObject.append("zhuangtai", exist1);
+             //鑾峰彇杩涚墖鐜荤拑淇℃伅
+             List<Short> inglassInfo = S7control.getinstance().ReadWord("DB106.24", 1);
+             if (inglassInfo != null) {
+             if (inglassInfo.size() > 0)
+             jsonObject.append("loadglassheight", inglassInfo.get(0) * 70);
+             }
+            
+            // 浼� 鑾峰彇杩涙槸鍚︽湁寰呯‘璁ょ殑鐜荤拑id
+            String queid = spianMapper.Selectqueueid();
+            int state = spianMapper.Selectqueuestate();
+            jsonObject.append("queid", queid);
+            jsonObject.append("state", state);
+            // 鑾峰彇鎵爜浣嶄笌涓婄墖浣嶇幓鐠冧俊鎭�
+            Queue form2 = homeMapper.GetQueueInfo(2);
+            Queue form3 = homeMapper.GetQueueInfo(1);
+            if(form2.getglassId()!=null&&form2.getglassId()!=""){
+                jsonObject.append("form2", form2);
+            }
+            if(form3.getglassId()!=null&&form3.getglassId()!=""){
+                jsonObject.append("form3", form3);
+            }
+            // 鑾峰彇鍑虹墖闃熷垪淇℃伅
+            List<Out_slice> listoutslice=outSliceServive.SelectProductionqueue();
+            // List<Out_slice> listoutslice = homeMapper.SelectProductionqueue();
+            // for (Out_slice out_slice : listoutslice) {
+            //     out_slice.setstorageCage(homeMapper.SelectStorageGlassById(out_slice.getGlassId()));
+            // }
+            jsonObject.append("listoutslice", listoutslice);
+            //鑾峰彇褰撳墠鍑虹墖闃熷垪鐘舵��
+            jsonObject.append("isAllowQueue",Plchome.isAllowQueue);
+
+            //鑾峰彇閾濇idDB106.DBW64
+            // String frameno=spianService.queGlassid("DB106.24",14).toString();
+            // if(frameno!=Plchome.FrameNo){
+            //     Plchome.FrameNo=frameno;
+            // }
+            // Plchome.FrameNo="123";
+            // try {
+            //     north_Glass_Buffer1Service.AddOutSliceS(Plchome.FrameNo);
+            // } catch (SQLException e) {
+            //     // TODO Auto-generated catch block
+            //     e.printStackTrace();
+            // }
+            //鏄惁闇�瑕佷汉宸ョ‘璁や笂鐗囩幓鐠�
+            jsonObject.append("isConfirm", isConfirm);
+
+            //閾濇绾夸氦浜�
+
+            // //閾濇id璇锋眰瀛�
+            // List<Short> framerequest = S7control.getinstance().ReadWord("閾濇id璇锋眰瀛楀湴鍧�", 1);
+            // if(framerequest!=null){
+            //     //閾濇id
+            //     String franmeno= spianService.queGlassid("閾濇id鍦板潃", 14).toString();
+            //     String position;
+            //         try {
+            //             position=dbserve.SelectPositionByFrameBarcode(franmeno);
+            //         } catch (SQLException e) {
+            //             // TODO Auto-generated catch block
+            //             position="0";
+            //             e.printStackTrace();
+            //         }
+            //     Short send;
+            //     if(position=="0"){
+            //         send=0;
+            //     }else{
+            //         send=1;
+            //     }
+            //     S7control.getinstance().WriteWord("閾濇缈昏浆鍙戦�佸湴鍧�", (short)send);
+            // }
+            
+
+            
+            
+
+            
+            dbserve = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
+            boolean dbconnected = false;
+            try {
+                dbserve.getConn();
+                dbconnected = true;
+            } catch (Exception e) {
+                // TODO: handle exception
+                dbconnected = false;
+            }
+            jsonObject.append("dbconnected", dbconnected);
+            // jsonObject.append("params", new short[] { 30, 40, });
+            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home");
+ if (sendwServer != null) {
+ for (WebSocketServer webserver : sendwServer) {
+ webserver.sendMessage(jsonObject.toString());
+ }
+ }
+
+
+
+
+            
+        }
+    }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java b/springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java
new file mode 100644
index 0000000..2daeaf3
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/Plcsign.java
@@ -0,0 +1,112 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+
+public class Plcsign extends Thread {
+  String name = "";
+  Integer count = 0;
+
+  public void readValue() {
+    String str = "";
+    BufferedReader bufferedReader = null;
+    FileInputStream fileInputStream;
+    try {
+      // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+      fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/Sign.json");
+      // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+      // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+      bufferedReader = new BufferedReader(inputStreamReader);
+      String line = null;
+      // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+      while ((line = bufferedReader.readLine()) != null) {
+        str += line;
+      }
+
+      // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+      JSONObject jsonObject = new JSONObject(str);
+
+      // 鑾峰彇json涓殑鍊�
+      JSONArray address = jsonObject.getJSONArray("address");
+      for (int i = 0; i < address.size(); i++) {
+        JSONObject ress = (JSONObject) address.get(i);
+
+        this.name = ress.getStr("name");
+        this.count = ress.getInt("count");
+
+      }
+
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
+    } catch (UnsupportedEncodingException e) {
+      e.printStackTrace();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(1000);
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+
+//      this.readValue();
+//      String PlcAddress = this.name;
+//      Integer Plccount = this.count;
+      // System.out.println(PlcAddress);
+
+//      List<Boolean> plclist = S7control.getinstance().ReadBits(PlcAddress, Plccount);
+       List<Boolean> plclist = S7control.getinstance().ReadBits("DB102.0.0", 64);
+
+//       Boolean[] values = { true, true, true, true, true, false, true, false,
+//       true, false, true, false, true, false,
+//       true, false, true, false, true, false, true, false, true, false, true, false,
+//       true, false, true, false, true,
+//       false, true, false, true, false,
+//       true, false, true, false, true, false, true, false, null,
+//       true, false,
+//       true, false, true, false, true, false,
+//       true, false, true, false, true, };
+//       List<Boolean> plclist = new ArrayList<>(Arrays.asList(values));
+
+      if (plclist != null) {
+        // 灏嗚幏鍙栫殑甯冨皵绫诲瀷杞崲涓烘暣鏁扮被鍨�
+        List<Integer> Intlist = new ArrayList<>();
+        for (Boolean value : plclist) {
+          if (value != null) {
+            Intlist.add(value == true ? 0 : 1);
+          }
+
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.append("sig", Intlist);
+//        WebSocketServer sendwServer3 = WebSocketServer.sessionMap.get("Sign");
+//        if (sendwServer3 != null) {
+//          sendwServer3.sendMessage(jsonObject.toString());
+//        }
+
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Sign");
+        if (sendwServer != null) {
+          for (WebSocketServer webserver : sendwServer) {
+            webserver.sendMessage(jsonObject.toString());
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/Plcstate.java b/springboot-vue3/src/main/java/com/example/springboot/component/Plcstate.java
new file mode 100644
index 0000000..cf362da
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/Plcstate.java
@@ -0,0 +1,101 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Arrays;
+
+public class Plcstate extends Thread {
+  String name = "";
+  Integer count = 0;
+
+  public void readValue() {
+    String str = "";
+    BufferedReader bufferedReader = null;
+    FileInputStream fileInputStream;
+    try {
+      // 浠庢枃浠朵腑璇诲彇瀛楄妭鏁版嵁瀛樺叆 fileInputStream
+      fileInputStream = new FileInputStream("CanadaMes-ui/src/configuration/State.json");
+      // 璇诲彇 fileInputStream 涓瓧鑺傚苟灏嗗叾瑙g爜涓哄瓧绗�
+      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
+      // 鎻愰珮璇诲彇鏁堢巼锛屽湪 BufferedReader 鍐呭寘瑁� InputStreamReader
+      bufferedReader = new BufferedReader(inputStreamReader);
+      String line = null;
+      // 灏� bufferedReader 鍐呭涓�琛屼竴琛岃祴鍊肩粰str
+      while ((line = bufferedReader.readLine()) != null) {
+        str += line;
+      }
+
+      // 灏唖tr瀛楃涓叉牸寮忚浆涓簀son
+      JSONObject jsonObject = new JSONObject(str);
+
+      // 鑾峰彇json涓殑鍊�
+      JSONArray address = jsonObject.getJSONArray("address");
+      for (int i = 0; i < address.size(); i++) {
+        JSONObject ress = (JSONObject) address.get(i);
+
+        this.name = ress.getStr("name");
+        this.count = ress.getInt("count");
+
+      }
+
+    } catch (FileNotFoundException e) {
+      e.printStackTrace();
+    } catch (UnsupportedEncodingException e) {
+      e.printStackTrace();
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  @Override
+  public void run() {
+    while (this != null) {
+      try {
+        Thread.sleep(1000);
+      } catch (InterruptedException e) {
+        e.printStackTrace();
+      }
+
+//      this.readValue();
+//      String PlcAddress = this.name;
+//      Integer Plccount = this.count;
+      // System.out.println(PlcAddress);
+
+      //璇诲彇鐘舵�佹暟鎹�
+List<Short> plclist = S7control.getinstance().ReadWord("DB103.0", 44);
+//      Short[] values = { 0, 1, 1, 0, 1, 0, 1, 0,
+//          1, 0, };
+//      List<Short> plclist = new ArrayList<>(Arrays.asList(values));
+      if (plclist != null) {
+
+        List<String> Intlist = new ArrayList<>();
+        for (Short value : plclist) {
+          Intlist.add(value == 1 ? "AUTO" : "Manual");
+
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.append("sta", Intlist);
+//        WebSocketServer sendwServer = WebSocketServer.sessionMap.get("State");
+//        if (sendwServer != null) {
+//          sendwServer.sendMessage(jsonObject.toString());
+//        }
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("State");
+        if (sendwServer != null) {
+          for (WebSocketServer webserver : sendwServer) {
+            webserver.sendMessage(jsonObject.toString());
+          }
+        }
+
+      }
+    }
+  }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java b/springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java
new file mode 100644
index 0000000..dfea454
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java
@@ -0,0 +1,167 @@
+package com.example.springboot.component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.websocket.OnClose;
+import javax.websocket.OnError;
+import javax.websocket.OnMessage;
+import javax.websocket.OnOpen;
+import javax.websocket.Session;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.stereotype.Component;
+
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+
+@ServerEndpoint(value = "/api/talk/{username}")
+@Component
+public class WebSocketServer {
+
+    // @Autowired
+    // HomeMapper homeMapper;
+
+    static ConfigurableApplicationContext applicationContext;
+
+    // 瑙e喅鏃犳硶娉ㄥ叆mapper闂 //浣跨敤鏂规硶
+    // homeMapper=WebSocketServer.applicationContext.getBean(HomeMapper.class);
+    public static void setApplicationContext(ConfigurableApplicationContext configurableApplicationContext) {
+        WebSocketServer.applicationContext = configurableApplicationContext;
+    }
+
+    private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
+    private List<String> messages;
+    /**
+     * 璁板綍褰撳墠鍦ㄧ嚎杩炴帴鏁�
+     */
+    public static final Map<String, ArrayList<WebSocketServer>> sessionMap = new ConcurrentHashMap<>();
+
+    String username;
+    Session session;
+
+    public WebSocketServer() {
+        this.messages = new ArrayList<>();
+    }
+
+    /**
+     * 杩炴帴寤虹珛鎴愬姛璋冪敤鐨勬柟娉�
+     */
+    @OnOpen
+    public void onOpen(Session session, @PathParam("username") String username) {
+        this.username = username;
+        this.session = session;
+        List<WebSocketServer> webSocketServers = sessionMap.get(username);
+        if (webSocketServers == null) {
+            ArrayList<WebSocketServer> arrayListwebserver = new ArrayList<WebSocketServer>();
+            arrayListwebserver.add(this);
+            sessionMap.put(username, arrayListwebserver);
+        } else {
+            webSocketServers.add(this);
+        }
+        
+        log.info("鏈夋柊鐢ㄦ埛鍔犲叆锛寀sername={}, 褰撳墠鍦ㄧ嚎浜烘暟涓猴細{}", username, sessionMap.get(username).size());
+
+        // JSONObject result = new JSONObject();
+        // JSONArray array = new JSONArray();
+        // result.set("users", array);
+        // for (Object key : sessionMap.keySet()) {
+        // JSONObject jsonObject = new JSONObject();
+        // jsonObject.set("username", key);
+        // array.add(jsonObject);
+        // }
+
+        // sendAllMessage(JSONUtil.toJsonStr(result)); // 鍚庡彴鍙戦�佹秷鎭粰鎵�鏈夌殑瀹㈡埛绔�
+    }
+
+    /**
+     * 杩炴帴鍏抽棴璋冪敤鐨勬柟娉�
+     */
+    @OnClose
+    public void onClose(Session session, @PathParam("username") String username) {
+        List<WebSocketServer> webSocketServers = sessionMap.get(username);
+        ArrayList<WebSocketServer> arrayListwebserver = new ArrayList<WebSocketServer>();
+        if (webSocketServers.size()>1) {
+            for (WebSocketServer webSocketServer : webSocketServers) {
+                if(webSocketServer!=this){
+                    arrayListwebserver.add(webSocketServer);
+                }
+            }
+            sessionMap.put(username, arrayListwebserver);
+            log.info("绉婚櫎username={}涓�鍚嶇敤鎴穝ession, {}鐨勫綋鍓嶅湪绾夸汉鏁颁负锛歿}", username, username, sessionMap.get(username).size());
+        }else{
+            sessionMap.remove(username);
+            log.info("绉婚櫎username={}涓�鍚嶇敤鎴穝ession, {}杩炴帴鍏抽棴, 褰撳墠杩炴帴鏁颁负锛歿}", username, username, sessionMap.size());
+        }
+        
+    }
+
+    /**
+     * 鏀跺埌瀹㈡埛绔秷鎭悗璋冪敤鐨勬柟娉�
+     * 鍚庡彴鏀跺埌瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+     * onMessage 鏄竴涓秷鎭殑涓浆绔�
+     * 鎺ュ彈 娴忚鍣ㄧ socket.send 鍙戦�佽繃鏉ョ殑 json鏁版嵁
+     * 
+     * @param message 瀹㈡埛绔彂閫佽繃鏉ョ殑娑堟伅
+     */
+    @OnMessage
+    public void onMessage(String message, Session session, @PathParam("username") String username) {
+        log.info("鏈嶅姟绔敹鍒扮敤鎴穟sername={}鐨勬秷鎭�:{}", username, message);
+        JSONObject obj = JSONUtil.parseObj(message);
+        String text = obj.getStr("data");
+
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.set("message", text);
+        this.messages.add(text);
+        this.sendMessage(jsonObject.toString()); // JSONUtil.toJsonStr(jsonObject)
+
+    }
+
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("鍙戠敓閿欒");
+        error.printStackTrace();
+    }
+
+    /**
+     * 鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔�
+     */
+    public void sendMessage(String message) {
+        try {
+            // log.info("鏈嶅姟绔粰瀹㈡埛绔痆{}]鍙戦�佹秷鎭瘂}", this.session.getId(), message);
+            this.session.getBasicRemote().sendText(message);
+        } catch (Exception e) {
+            log.error("鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔け璐�", e);
+        }
+    }
+
+    // /**
+    //  * 鏈嶅姟绔彂閫佹秷鎭粰鎵�鏈夊鎴风
+    //  */
+    // public void sendAllMessage(String message) {
+    //     try {
+    //         for (WebSocketServer webSocketServer : sessionMap.values()) {
+    //             // log.info("鏈嶅姟绔粰瀹㈡埛绔痆{}]鍙戦�佹秷鎭瘂}", this.session.getId(), message);
+    //             webSocketServer.sendMessage(message);
+    //         }
+    //     } catch (Exception e) {
+    //         log.error("鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔け璐�", e);
+    //     }
+    // }
+
+    public List<String> getMessages() {
+        return messages;
+
+    }
+
+    public void clearMessages() {
+        messages.clear();
+    }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/controller/SpianController.java b/springboot-vue3/src/main/java/com/example/springboot/controller/SpianController.java
index 7ab5b9a..0968120 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/controller/SpianController.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/controller/SpianController.java
@@ -24,7 +24,7 @@
 @GetMapping("/all2")
     public void selectdd(String orderid){
        SpianService service=new SpianService();
-       service.selectout(orderid);
+       service.selectout2(orderid);
     
 }
 
diff --git a/springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java b/springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
index ffb3918..42a458d 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/mapper/SpianMapper.java
@@ -54,7 +54,7 @@
      int selectGlassState(int  cage,int cell);
 
      //鍒ゆ柇璇ヨ皟鎷ㄧ殑绗煎瓙
-     @Select("select glass_id,cage,cell,max(state)as shu,ROUND(id/2)as prcid,id from storage_cage where width>=#{width} and cage>#{cage1} and cage<#{cage2} GROUP BY cage,cell HAVING shu=0 order by abs(#{cage} - cage) limit 1;")
+     @Select("select glass_id,cage,cell,max(state)as shu,ROUND(id/2)as prcid,id from storage_cage where width>=#{width} and cage>#{cage1} and cage<#{cage2} GROUP BY cage,cell HAVING shu=0 order by abs(#{cage} - cage),cell desc  limit 1;")
      StorageCage selectGlassCage(int cage,double width,int cage1,int cage2);
 
     //鍒犻櫎绗煎瓙淇℃伅(鍑虹墖)
diff --git a/springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java b/springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
index aceee1b..2a1c301 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/service/SpianService.java
@@ -1,16 +1,10 @@
 package com.example.springboot.service;
-
-import java.lang.reflect.Array;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
-import com.example.springboot.common.Result;
 import com.example.springboot.component.S7control;
-import com.example.springboot.entity.Glass;
 import com.example.springboot.entity.StorageCage;
 import com.example.springboot.entity.north_glass_buffer1;
 import com.example.springboot.mapper.SpianMapper;
@@ -116,283 +110,6 @@
 
         }
         return (400);
-
-    }
-
-    public Short selectAll2() { // 澶氱墖涓婄墖
-        int cage1;
-        int cells;
-        int ids;
-        int prcid;
-        int tiers;
-        int prctier;
-        double width;
-        double minwidth = 0;
-        List<String> adddresslist = new ArrayList<>();
-        adddresslist.add("DB105.0");// 杩涚墖杞﹁捣濮嬩綅缃�
-        adddresslist.add("DB105.2");// 杩涚墖杞︾洰鏍囦綅缃�
-        adddresslist.add("DB105.4");// 杩涚墖绗肩幓鐠冩暟
-        adddresslist.add("DB105.12");// 杩涚墖杞﹀惎鍔� 1涓哄惎鍔�
-        List<Short> datas = new ArrayList<>();
-
-        // 鑾峰彇澶氱墖搴忓垪鐜荤拑瀹藉害
-        StorageCage queGlass = spianMapper.SelectQueueWidth();
-        double widths = queGlass.getWidth();
-        String orderids = queGlass.getOrderId();
-        int num = spianMapper.SelectQueOrder();
-        if (num == 1) {
-
-            // 鑾峰彇璁㈠崟鐩稿叧搴︽渶楂樼殑绗煎瓙鎺掑簭
-            List<StorageCage> storageCage = spianMapper.selectAll(orderids);
-            if (storageCage == null) {
-                return (400);
-            }
-            for (StorageCage storageCage2 : storageCage) {
-                // 淇濆瓨璁㈠崟浼樺厛椤哄簭绗煎瓙鍙�
-                cage1 = storageCage2.getCage();
-                // 鍒ゆ柇璇ョ瀛愬彿鐩搁偦鏈�澶х殑绌烘牸鏁�
-                int cages = spianMapper.selectCage(cage1);
-                StorageCage cages1;
-                // 鍒ゆ柇鏄惁鏈夊悎閫傚畬鏁寸┖鏍�
-                cages1 = spianMapper.selectqueCage1(cage1, storageCage2.getCell(), widths);
-                // 鍒ゆ柇閫変腑绗煎瓙鏄惁鏈夊悎閫傚搴︾┖鏍�
-                // 鏈夊悎閫傜┖鏍兼椂杩涚墖
-                if (cages1 != null && cages >= 1) {
-                    ids = cages1.getId();// 鏁版嵁搴揑D
-                    cells = cages1.getCell();// 鏍煎瓙鍙�
-                    prcid = cages1.getPrcId();// 浼犵粰prc鐨勭洰鏍囧湴id
-                    String glassid="";
-                    // 鏁版嵁搴撲慨鏀圭瀛愯〃鏂板涓�鏉$幓鐠�
-                    for (int i = 2; i > 0; i--) {
-                        north_glass_buffer1 qglass = spianMapper.SelectQueueGlass(i);
-                        width = qglass.getglasslengthmm();// 鏍煎瓙鍓╀綑瀹藉害
-                        glassid=qglass.getbarcode();
-                        spianMapper.UpdataAddqueCage(qglass.getordernumber(), qglass.getbarcode(), width, cage1, cells, i,1);
-                        spianMapper.UpdataAddCage1(width, cage1, cells);// 鍑忓皯鏍煎瓙瀹藉害
-                        spianMapper.Inserttask(0, 0, 1000, ids, qglass.getbarcode().toString());// 鏂板浠诲姟
-                    }
-                    // 鎵ц杩涚墖
-                    datas.add((short) 1000);
-                    datas.add((short) prcid);
-                    datas.add((short) 0);
-                    datas.add((short) 1);
-                    S7control.getinstance().WriteWord(adddresslist, datas);
-                    outmesid(glassid,"DB105.20");
-                    return (200);
-
-                }
-            }
-
-        } else {
-            for (int i = 2; i > 0; i--) {
-                north_glass_buffer1 qglass = spianMapper.SelectQueueGlass(i);
-                String orderid = qglass.getordernumber().toString();
-                String glassid = qglass.getbarcode();
-                widths = qglass.getglasslengthmm();
-                List<StorageCage> storageCage = spianMapper.selectAll(orderid);
-                if (storageCage == null) {
-                    return (400);
-                }
-                for (StorageCage storageCage2 : storageCage) {
-                    // 淇濆瓨璁㈠崟浼樺厛椤哄簭绗煎瓙鍙�
-                    cage1 = storageCage2.getCage();
-                    // 鍒ゆ柇璇ョ瀛愬彿鐩搁偦鏈�澶х殑绌烘牸鏁�
-                    int cages = spianMapper.selectCage(cage1);
-                    StorageCage cages1;
-                    // 鍒ゆ柇鏄惁鏄浜岀墖闇�瑕佸姞闂撮殧鐗�
-                    prctier = spianMapper.selectsum(cage1, storageCage2.getCell());// 浼犵粰prc鐨勬牸瀛愬唴鐜荤拑鏁�
-                    if (prctier > 0) {
-                        cages1 = spianMapper.selectCage1(cage1, storageCage2.getCell(), widths + 400);
-                    } else {
-                        cages1 = spianMapper.selectCage1(cage1, storageCage2.getCell(), widths);
-                    }
-                    // 鍒ゆ柇閫変腑绗煎瓙鏄惁鏈夊悎閫傚搴︾┖鏍�
-                    // 鏈夊悎閫傜┖鏍兼椂杩涚墖
-                    if (cages1 != null && cages >= 1) {
-                        ids = cages1.getId();// 鏁版嵁搴揑D
-                        tiers = cages1.getTier();// 鍐呭鐗�
-                        cells = cages1.getCell();// 鏍煎瓙鍙�
-                        prcid = cages1.getPrcId();// 浼犵粰prc鐨勭洰鏍囧湴id
-                        width = cages1.getWidth();// 鏍煎瓙鍓╀綑瀹藉害
-                        widths = qglass.getglasslengthmm();
-
-                        // 鎵ц杩涚墖
-                        datas.add((short) 1000);
-                        datas.add((short) prcid);
-                        datas.add((short) prctier);
-                        datas.add((short) 1);
-                        // 鏁版嵁搴撲慨鏀圭瀛愯〃鏂板涓�鏉$幓鐠�
-                        spianMapper.UpdataAddCage(orderid, glassid, widths, cage1, cells, ids, 2);
-                        spianMapper.UpdataAddCage1(widths, cage1, cells);// 鍑忓皯鏍煎瓙瀹藉害
-                        spianMapper.Inserttask(0, 0, 1000, ids, glassid.toString());// 鏂板浠诲姟
-                        outmesid(glassid,"DB105.20");//娲惧彂杩涚墖id
-                        // S7control.getinstance().WriteWord(adddresslist, datas);
-                        break;
-                        // S7control.getinstance().WriteByte("DB105.16",glassid);
-
-                    }
-
-                }
-
-            }
-
-        }
-        return (400);
-
-    }
-
-    // 鎸夎鍗曞嚭鐗�
-    public Result selectout(String orderid) {
-
-        // spianMapper.UpdatetaskOut(); //瀹屾垚涓婁竴娆″嚭鐗囨垨鑰呰皟搴︿换鍔★紝鏀瑰埌plchold閲岋紝鍑虹墖鎴栬皟搴︿换鍔″畬鎴愮珛鍗虫敼鍙樼粨鏉熶换鍔★紱
-        // 瀹氫箟PRC鏁版嵁浼犻�佹暟缁�
-        List<String> adddresslist = new ArrayList<>();
-        adddresslist.add("DB105.10");// 鍑虹墖杞﹁捣濮嬩綅缃�
-        adddresslist.add("DB105.12");// 鍑虹墖杞︾洰鏍囦綅缃�
-        adddresslist.add("DB105.14");// 鍑虹墖绗肩幓鐠冩暟
-        adddresslist.add("DB105.18");// 鍑虹墖杞﹀惎鍔� 1涓哄惎鍔�
-        List<Short> datas = new ArrayList<>();
-        // 鑾峰彇浼樺厛鍑虹墖鐨勪綅缃�
-        StorageCage cageout = spianMapper.selectOut(orderid);
-        if (cageout == null) {
-            return Result.success("200");
-        }
-        // 鍒ゆ柇鏄惁鍚屼竴鏍煎唴閮戒负鍚屼竴璁㈠崟
-
-        int orders = Integer.valueOf(cageout.getOrderId()).intValue();
-
-        int cage = cageout.getCage(); // 鍌ㄥ瓨鍑虹墖浣嶇疆锛岀瀛愭牸瀛愬嚑鍙风幓鐠�
-        int cell = cageout.getCell();// 鍑虹墖鏍煎彿
-        int tier = cageout.getTier();// 鍑虹墖鍐呭鐗�
-        int prcid = cageout.getPrcId();// prcid
-        String glassid = cageout.getGlassId();
-        int prcid2;
-        int ids;
-        int cages;
-        int cells;
-        double glasswidth = cageout.getGlassWidth();
-        // 褰撲竴鏍煎唴閮戒负鍚屼竴璁㈠崟鏃�
-
-        if (orders == 2) {
-            datas.add((short) prcid);
-            datas.add((short) 1000);
-            datas.add((short) 2);
-            datas.add((short) 1);
-            spianMapper.UpdatequeOut(cage, cell);
-            return Result.success("200");
-        } else {
-            // 鍒ゆ柇鏄惁闄ゆ鏍煎瓙鍐呰繕鏈夊叾浠栨牸瀛愭湁鍗曠嫭鐨勮鍗曠幓鐠�
-            StorageCage pd = spianMapper.SelectQueout(orderid,cage, cell);
-            // 鍒ゆ柇鐜荤拑鍐呭鐗�
-            if (tier == 2) {
-
-                // 鍒ゆ柇鐜荤拑鍙洿鎺ュ嚭鐗囨椂
-                // 淇敼鏁版嵁搴撶瀛愯〃(鍑虹墖)
-                datas.add((short) prcid);
-                datas.add((short) 1000);
-                datas.add((short) 1);
-                datas.add((short) 1);
-
-                spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 澧炲姞鍘熸牸瀛愬搴�
-                spianMapper.UpdataGlassCageState(glassid,3);//鏇存敼绗煎瓙琛ㄧ殑鐜荤拑鐘舵��
-                spianMapper.Inserttask(1, 0, cageout.getId(), 1000, orderid);// 鏂板浠诲姟
-                S7control.getinstance().WriteWord(adddresslist, datas);// 娲惧彂鍑虹墖杞︿换鍔�
-                outmesid(glassid,"DB105.34");// 娲惧彂鍑虹墖ID
-                if (pd != null) {
-                    cage = pd.getCage();
-                    cell = pd.getCage();
-                    // 娓呴櫎鏈牸鏁版嵁鍑虹墖
-                    spianMapper.UpdatequeOut(cage, cell);
-                    return Result.success("200");
-                }
-                return Result.success(datas);// 缁撴潫
-            } else {
-                // 鑾峰彇鏍煎瓙鐨勭幓鐠冩暟閲�
-                int state = spianMapper.selectGlassState(cage, cell);
-                // 鍒ゆ柇鍐呯墖鏄惁闇�瑕佽皟鎷�
-                if (state == 1) {
-                    // spianMapper.UpdataGlassCage("", "", glasswidth, cage, cell, tier, 0);
-                    datas.add((short) prcid);
-                    datas.add((short) 1000);
-                    datas.add((short) 1);
-                    datas.add((short) 1);
-                    spianMapper.Inserttask(1, 0,prcid, 1000, orderid);// 鏂板浠诲姟
-                    spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 澧炲姞鍘熸牸瀛愬搴�
-                    spianMapper.UpdataGlassCageState(glassid,3);//鏇存敼绗煎瓙琛ㄧ殑鐜荤拑鐘舵��
-                    //S7control.getinstance().WriteWord(adddresslist, datas);// 娲惧彂鍑虹墖杞︿换鍔�
-                    //outmesid(glassid);// 娲惧彂鍑虹墖ID
-                    if (pd != null) {
-                        cage = pd.getCage();    
-                        cell = pd.getCage();
-                        // 娓呴櫎鏈牸鏁版嵁鍑虹墖
-                        spianMapper.UpdatequeOut(cage, cell);
-                        return Result.success("200");
-                    }
-                    return Result.success(datas);// 缁撴潫
-
-                } else {
-                    // 鐜荤拑闇�瑕佽皟鎷ㄦ椂锛屽垽鏂睘浜庡摢涓崐鍖虹殑绗煎瓙
-                    if (cage < 6) {
-                        StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 0, 6);
-                        if (cagecell == null) {
-                            return Result.success(cagecell);
-                        }
-                        // 鑾峰彇璋冩嫧浣嶇疆杩涜璋冩嫧
-                        prcid2 = cagecell.getPrcId();// 璋冩嫧鐩爣浣峆RCID
-                        ids = cagecell.getId();// 璋冩嫧鐩爣浣岻D
-                        cages = cagecell.getCage();// 璋冩嫧鐩爣浣嶇瀛�
-                        cells = cagecell.getCell();// 璋冩嫧鐩爣浣嶆牸瀛�
-
-                        // 濉叆璋冩嫧鏁版嵁
-                        datas.add((short) prcid);// 璋冩嫧澶栫墖璧峰浣嶇疆
-                        datas.add((short) prcid2);
-                        datas.add((short) 2);
-                        datas.add((short) 1);
-                        // 鏇存崲鐜荤拑鐨勭瀛�
-                        String glassids = spianMapper.SelectGlassid(cage, cell); // 鑾峰彇琚皟鎷ㄧ殑鐜荤拑id
-                        spianMapper.UpdateDBCage(ids, cage, cell,2);// 灏嗗師鏍煎瓙鏁版嵁鏇存柊鍒版柊鏍煎瓙閲�
-                        spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 鍑忓皯鏂版牸瀛愬搴�
-                        spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 澧炲姞鍘熸牸瀛愬搴�
-                        spianMapper.UpdataGlassCageState(glassid,3);//鏇存敼绗煎瓙琛ㄧ殑鐜荤拑鐘舵��
-                        spianMapper.Inserttask(2, 0, cageout.getId(), ids, orderid);// 鏂板璋冨害浠诲姟
-                        // 浼犺緭mes鏁版嵁,鍧愭爣锛屾暟鎹�
-                        S7control.getinstance().WriteWord(adddresslist, datas);// 娲惧彂鍑虹墖杞︿换鍔�
-                        System.out.println(datas);
-                        outmesid(glassids,"DB105.34");// 娲惧彂璋冩嫧鐜荤拑ID
-                        return Result.success(cagecell); // 缁撴潫
-
-                    } else {// 绗煎瓙鍙峰ぇ浜�5鏃�
-                        StorageCage cagecell = spianMapper.selectGlassCage(cage, glasswidth, 5, 11);
-                        if (cagecell == null) {
-                            return Result.success(cagecell);
-                        }
-                        // 鑾峰彇璋冩嫧浣嶇疆杩涜璋冩嫧
-                        prcid2 = cagecell.getPrcId();// 璋冩嫧鐩爣浣峱rcID
-                        ids = cagecell.getId();// 璋冩嫧鐩爣浣岻D
-                        cages = cagecell.getCage();// 璋冩嫧鐩爣浣嶇瀛�
-                        cells = cagecell.getCell();// 璋冩嫧鐩爣浣嶆牸瀛�
-                        // 濉叆璋冩嫧鏁版嵁
-                        datas.add((short) prcid);
-                        datas.add((short) prcid2);
-                        datas.add((short) 2);
-                        datas.add((short) 1);
-                        String glassids = spianMapper.SelectGlassid(cage, cell); // 鑾峰彇琚皟鎷ㄧ殑鐜荤拑id
-                        spianMapper.UpdateDBCage(ids, cage, cell,2);// 灏嗗師鏍煎瓙鏁版嵁鏇存柊鍒版柊鏍煎瓙閲�
-                        spianMapper.Inserttask(2, 0, cageout.getId(), ids, orderid);// 鏂板璋冨害浠诲姟
-                        spianMapper.UpdataAddCage1(glasswidth, cages, cells);// 鍑忓皯鏂版牸瀛愬搴�
-                        spianMapper.UpdataOutCage1(glasswidth, cage, cell);// 澧炲姞鍘熸牸瀛愬搴�
-                        spianMapper.UpdataGlassCageState(glassid,3);//鏇存敼绗煎瓙琛ㄧ殑鐜荤拑鐘舵��
-                        // 浼犺緭mes鏁版嵁,鍧愭爣锛屾暟鎹�
-                        S7control.getinstance().WriteWord(adddresslist, datas);// 娲惧彂鍑虹墖杞︿换鍔�
-
-                        outmesid(glassids,"DB105.34");// 娲惧彂璋冩嫧鐜荤拑ID
-                        return Result.success(cagecell); // 缁撴潫
-
-                    }
-                }
-
-            }
-        }
 
     }
 

--
Gitblit v1.8.0