springboot-vue3/src/main/java/com/example/springboot/component/PlcParameter1Review.java
@@ -25,7 +25,7 @@
  private ResourceLoader resourceLoader;
  private volatile static PlcParameter1Review instance = null;
  private PlcParameter1Review() {
  public PlcParameter1Review() {
    init();
  }
@@ -40,11 +40,12 @@
    }
    return instance;
  }
  PlcParameterObject plcParameterObject = new PlcParameterObject();//该DB区数据实例
  private void init() {
  private void init() {
    try {
      String jsonfilename=  PlcParameter1Review.class.getResource("/JsonFile/PlcParameter.json").getFile();
      String jsonfilename = PlcParameter1Review.class.getResource("/JsonFile/PlcParameter.json").getFile();
      FileReader fileReader = new FileReader(jsonfilename);
      BufferedReader bufferedReader = new BufferedReader(fileReader);
@@ -55,27 +56,27 @@
        content.append(line);
      }
      bufferedReader.close();
      bufferedReader.close();
      fileReader.close();
      JSONObject jsonfileobj = new JSONObject(content.toString());
      JSONArray jsonArray = jsonfileobj.getJSONArray("parameteInfor");
       plcParameterObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//设置起始位地址
       plcParameterObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//设置地址长度
      plcParameterObject.setPlcAddressBegin(jsonfileobj.getStr("plcAddressBegin"));//设置起始位地址
      plcParameterObject.setPlcAddressLength(Integer.valueOf(jsonfileobj.getStr("plcAddressLenght")));//设置地址长度
      for (int i = 0; i < jsonArray.size(); i++) {
        JSONObject parameterObj = jsonArray.getJSONObject(i);
        JSONObject parameterObj = jsonArray.getJSONObject(i);
        PlcParameterInfo plcParameterInfo = new PlcParameterInfo(jsonfileobj.getStr("plcAddressBegin")); //参数实例 
        String codeid=parameterObj.getStr("codeId");
        String codeid = parameterObj.getStr("codeId");
        plcParameterInfo.setCodeId(codeid);
        plcParameterInfo.setAddressIndex(Integer.valueOf(parameterObj.getStr("addressIndex")));
        plcParameterInfo.setRatio(Integer.valueOf(parameterObj.getStr("ratio")));
        plcParameterInfo.setAddressLength(Integer.valueOf(parameterObj.getStr("addressLenght")));
        plcParameterInfo.setUnit(parameterObj.getStr("unit"));
        plcParameterInfo.setAddressLength(Integer.valueOf(parameterObj.getStr("addressLenght")));
        plcParameterInfo.setUnit(parameterObj.getStr("unit"));
        plcParameterObject.addPlcParameter(plcParameterInfo);
      }
      }
      System.out.println("");
    } catch (IOException e) {
      e.printStackTrace();
@@ -92,122 +93,139 @@
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      byte[] getplcvlues=S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(),plcParameterObject.getPlcAddressLength());
     byte[] getplcvlues = S7control.getinstance().ReadByte(plcParameterObject.getPlcAddressBegin(), plcParameterObject.getPlcAddressLength());
      //byte[] getplcvlues = {0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02, 0x03, 0x04,0x01, 0x02};
      plcParameterObject.setPlcParameterList(getplcvlues);
       int index=plcParameterObject.getPlcParameter("conveyorVelocity(AutoFAST)").getAddressIndex();
      S7control.getinstance().WriteWord(plcParameterObject.getPlcParameter("conveyorVelocity(AutoFAST)").getAddress(index), (short)100);
     int index = plcParameterObject.getPlcParameter("A01ID").getAddressIndex();
      System.out.println(index);
      plcParameterObject.getPlcParameter("A01ID").getAddress(index);
      System.out.println(plcParameterObject.getPlcParameter("A01ID").getAddress(index));
     // S7control.getinstance().WriteWord(plcParameterObject.getPlcParameter("conveyorVelocity(AutoFAST)").getAddress(index), (short) 100);
      List<String> addresses = new ArrayList<>();
      addresses.add("conveyorVelocity(AutoFAST)");
      addresses.add("conveyorVelocity(AutoSLOW)");
      addresses.add("conveyorVelocity(Manual)");
      addresses.add("A01A02TURNJOGVelocity");
      addresses.add("A01A02TRAVELJOGVelocity");
      plcParameterObject.getPlcParameterValues(addresses);
      JSONObject jsonObject = new JSONObject();
      addresses.add("A01ID");
     //addresses.add("conveyorVelocity(AutoSLOW)");
//      addresses.add("A01A02TURNJOGVelocity");
//     addresses.add("A01A02TRAVELJOGVelocity");
      System.out.println(plcParameterObject.getPlcParameterValues(addresses));
      JSONObject jsonObject = new JSONObject();
      jsonObject.append("params", plcParameterObject.getPlcParameterValues(addresses));
      jsonObject.append("fanzhuan", plcParameterObject.getPlcParameter("conveyorVelocity(AutoFAST)").getValue());
      jsonObject.append("xiaoche", plcParameterObject.getPlcParameter("").getValue());
     // jsonObject.append("xiaoche", plcParameterObject.getPlcParameter("").getValue());
      WebSocketServer sendwServer = WebSocketServer.sessionMap.get("Parameter1");
      ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Parameter1");
      if (sendwServer != null) {
        sendwServer.sendMessage(jsonObject.toString());
      }
        for (WebSocketServer webserver : sendwServer) {
      WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("Parameter1");
      if (webSocketServer != null) {
        List<String> messages = webSocketServer.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");
          webserver.sendMessage(jsonObject.toString());
        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) {
                  // 如果无法解析为 short 类型,则忽略该部分
                  System.err.println("Could not parse value: " + value);
          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) {
                      // 如果无法解析为 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) {
                // 如果无法解析为 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) {
                    // 如果无法解析为 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) {
                // 如果无法解析为 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) {
                    // 如果无法解析为 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();
            }
          }
          // 写入第三个地址
          if (!mergedList.isEmpty()) {
            S7control.getinstance().WriteWord(waddresses1, mergedList);
            System.out.println("messageValue:" + mergedList + " written to PLC at address " + waddresses1);
          }
          // 清空消息列表
          webSocketServer.clearMessages();
        }
      }
    }
  }
}