ZengTao
2024-04-29 7687eb6cc76ab8ca20b39e7567255939abc4ff66
springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter2.java
@@ -2,7 +2,11 @@
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.example.springboot.controller.HomeController;
import com.example.springboot.mapper.HomeMapper;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.springboot.service.StorageCageService;
import java.io.*;
import java.util.ArrayList;
@@ -10,155 +14,268 @@
import java.util.Collections;
import java.util.List;
public class PlcParameter2 extends Thread {
    @Autowired
    StorageCageService storageCageService;
    // 创建一个自定义的 S7 控制器消息处理器对象
    MessageHandler customS7Control = new MessageHandler();
    // 用于存储应用程序的配置信息
    private Configuration config;
    public PlcParameter2() throws IOException {
        config = new Configuration("config.properties");
    }
  // 用于存储应用程序的配置信息
  private Configuration config;
    @Override
    public void run() {
        while (this != null) {
            try {
                Thread.sleep(1000);
                storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class);
                // id
                List<String> addressList1 = Arrays.asList(config.getProperty("Parameter2.id").split(","));
                List<String> paramlist = S7control.getinstance().readStrings(addressList1);
                // System.out.println(paramlist);
                // 手动状态
                List<String> addresses = Arrays.asList(config.getProperty("Parameter2.state").split(","));
                List<Short> data = S7control.getinstance().readWords(addresses);
                // 清除id
                List<String> addressList0 = Arrays.asList(config.getProperty("Parameter2.cleanid").split(","));
                // 扫码枪
                List<Boolean> data2 = S7control.getinstance().readBits(addressList0);
                List<String> addressList3 = Arrays.asList(config.getProperty("Parameter2.scanner").split(","));
  // 创建一个自定义的 S7 控制器消息处理器对象
  MessageHandler customS7Control = new MessageHandler();
                // 急停按钮
                List<String> niuanaddressList3 = Arrays.asList(config.getProperty("Parameter2.stop").split(","));
                List<String> timeout = Arrays.asList(config.getProperty("Parameter2.timeout").split(","));
                String timeout2 = config.getProperty("Parameter2.timeout");
                Long readtimeout = S7control.getinstance().readtime(timeout2);
                List<Boolean> anniuread = S7control.getinstance().readBits(niuanaddressList3);
                List<String> data3 = S7control.getinstance().readStrings(addressList3);
                // A01 A02 B01 B02
                List<String> addresses4 = Arrays.asList(config.getProperty("Parameter2.Currentcell").split(","));
                List<Short> data4 = S7control.getinstance().readWords(addresses4);
                // System.out.println(data);
                // List<Long> TIME2 =
                // Collections.singletonList(S7control.getinstance().readtime("DB100.194"));
                // System.out.println("addressList:" + TIME2);
  public PlcParameter2() throws IOException {
    config = new Configuration("config.properties");
  }
                //
                //
                // 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;
                // }
                // boolean转为0 1
                short[] params = customS7Control.convertBooleanListToShortArray(data2);
                short[] anniuparams = customS7Control.convertBooleanListToShortArray(anniuread);
                JSONObject jsonObject = new JSONObject();
                jsonObject.append("params", params);
                jsonObject.append("params", paramlist);
                jsonObject.append("params", data);
                jsonObject.append("params", data3);
                jsonObject.append("params", data4);
                jsonObject.append("jiting", anniuparams);
                jsonObject.append("timeout", readtimeout);
  public static String readFileToString(String filePath) throws IOException {
    File file = new File(filePath);
    return FileUtils.readFileToString(file, "UTF-8");
  }
                // WebSocketServer sendwServer =
                // WebSocketServer.getWebSocketServer("Parameter2");
                // if (sendwServer != null) {
                // JSONObject jsonObject = new JSONObject();
                // jsonObject.set("message", "Hello, Parameter2!");
                // sendwServer.sendMessage(jsonObject.toString());
                // }
                // HomeController controller = new HomeController();
                ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter2");
                if (sendwServer != null) {
                    for (WebSocketServer webserver : sendwServer) {
                        webserver.sendMessage(jsonObject.toString());
                        if (webserver != null) {
  @Override
  public void run() {
    while (this != null) {
      try {
        Thread.sleep(1000);
                            List<String> messages = webserver.getMessages();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
                            if (!messages.isEmpty()) {
                                // 将最后一个消息转换为整数类型的列表
                                String lastMessage = messages.get(messages.size() - 1);
                                // System.out.println("lastMessage:" + lastMessage);
                                JSONArray messageArray = new JSONArray(lastMessage);
                                // 清除ID
                                // customS7Control.writeBitToPLC(messageArray, addressList0, 0);
   //    id
      List<String> addressList1 = Arrays.asList(config.getProperty("Parameter2.id").split(","));
                                try {
                                    // 检查索引是否有效
                                    if (messageArray.getJSONArray(0).size() > 0) {
                                        // 获取消息数组
                                        JSONArray jsonArray = messageArray.getJSONArray(0);
                                        // 创建一个布尔值列表
                                        List<Boolean> 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-]", "");
                                                    // 解析为布尔值
                                                    boolean val = "1".equals(cleanedValue.trim());
                                                    // 将布尔值添加到布尔值列表中
                                                    sValue.add(val);
                                                    System.out.println(
                                                            "messageValue: " + Arrays.asList(val)
                                                                    + " added to the list");
                                                } catch (NumberFormatException e) {
                                                    // 如果无法解析为 boolean 类型,则忽略该部分
                                                    System.err.println("Could not parse value: " + value);
                                                }
                                            }
                                        }
                                        // 完成出片
                                        boolean containsOne = data.stream().anyMatch(number -> number == 1);
                                        for (int i = 1; i <= 5; i++) {
                                            boolean value = sValue.get(i);
                                            String id = paramlist.get(i);
                                            // 判断是否自动状态
                                            if (!containsOne) {
                                                // 判断id是否包含数字
                                                if (id.matches(".*\\d.*")) {
                                                    // 判断清除id是否true
                                                    if (value) {
                                                        System.out.println(id);
                                                        switch (i) {
                                                            case 1:
                                                                storageCageService.UpdateTask(2, 0, paramlist.get(i));
                                                                break;
                                                            case 2:
                                                            case 3:
                                                            case 4:
                                                            case 5:
                                                                storageCageService.UpdateTask(3, 0, paramlist.get(i));
                                                                break;
                                                            default:
                                                                // 处理索引值不在范围内的情况
                                                                break;
                                                        }
                                                    }
                                                }
                                                // 检查布尔值列表是否为空
                                                if (!sValue.isEmpty()) {
      List<String> paramlist = S7control.getinstance().readStrings(addressList1);
                                                    // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表
                                                    S7control.getinstance().WriteBit(addressList0, sValue);
                                                    System.out
                                                            .println("Values " + sValue + " written to PLC at address "
                                                                    + addressList0);
                                                }
                                            }
                                        }
                                    }
                                } catch (Exception e) {
                                    System.err.println("An error occurred while writing bit to PLC: " + e.getMessage());
                                }
                                // 急停
                                // customS7Control.writeBitToPLC(messageArray, niuanaddressList3, 1);
   //清除ID地址
      List<String> addresses = Arrays.asList(config.getProperty("Parameter2.cleanid").split(","));
                                try {
                                    // 检查索引是否有效
                                    if (messageArray.getJSONArray(1).size() > 0) {
                                        // 获取消息数组
                                        JSONArray jsonArray = messageArray.getJSONArray(1);
                                        // 创建一个布尔值列表
                                        List<Boolean> 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-]", "");
                                                    // 解析为布尔值
                                                    boolean val = "1".equals(cleanedValue.trim());
                                                    // 将布尔值添加到布尔值列表中
                                                    sValue.add(val);
                                                    System.out.println(
                                                            "messageValue: " + Arrays.asList(val)
                                                                    + " added to the list");
      List<Short> data = S7control.getinstance().readWords(addresses);
                                                } catch (NumberFormatException e) {
                                                    // 如果无法解析为 boolean 类型,则忽略该部分
                                                    System.err.println("Could not parse value: " + value);
                                                }
                                            }
                                        }
                                        // 终止进片任务
                                        boolean Value1 = sValue.get(0);
                                        boolean Value2 = sValue.get(1);
                                        if (Value1) {
                                            storageCageService.EndTask(0);
      //手动状态
      List<String> addressList0 = Arrays.asList(config.getProperty("Parameter2.state").split(","));
                                        }
                                        if (Value2) {
                                            storageCageService.EndTask(1);
                                        }
                                        // 检查布尔值列表是否为空
                                        if (!sValue.isEmpty()) {
      List<Boolean> data2 = S7control.getinstance().readBits(addressList0);
      // 扫码枪
      List<String> addressList3 = Arrays.asList(config.getProperty("Parameter2.scanner").split(","));
                                            // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表
                                            S7control.getinstance().WriteBit(niuanaddressList3, sValue);
                                            System.out.println(
                                                    "Values " + sValue + " written to PLC at address "
                                                            + niuanaddressList3);
                                        }
                                    }
                                } catch (Exception e) {
                                    System.err.println("An error occurred while writing bit to PLC: " + e.getMessage());
                                }
      List<String> data3 = S7control.getinstance().readStrings(addressList3);
                                // 存片等待延迟
                                customS7Control.Writetime(messageArray, timeout2, 2);
                                // 清空消息列表
                                webserver.clearMessages();
                            }
                        }
                    }
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
//急停
      List<String> niuanaddressList3 = Arrays.asList(config.getProperty("Parameter2.stop").split(","));
      List<Boolean> anniuread = S7control.getinstance().readBits(niuanaddressList3);
// A01 A02 B01 B02 当前格子
      List<String> addresses4 = Arrays.asList(config.getProperty("Parameter2.Currentcell").split(","));
    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();
        if (!messages.isEmpty()) {
          // 将最后一个消息转换为整数类型的列表
          String lastMessage = messages.get(messages.size() - 1);
//        System.out.println("lastMessage:" + lastMessage);
          JSONArray messageArray = new JSONArray(lastMessage);
        //清除id
          customS7Control.writeBitToPLC( messageArray, addresses,0);
         //急停
          customS7Control.writeBitToPLC( messageArray, niuanaddressList3,1);
          // 清空消息列表
            webserver.clearMessages();
        }
      }
 }
    }
    }
  }
}