wuyouming666
2023-12-11 8f1c10fc1cfb02b208876f5cd140934baf753c11
增加MessageHandler 消息处理对象  PlcServoManualone 先调用
4个文件已修改
1个文件已添加
306 ■■■■■ 已修改文件
CanadaMes-ui/src/lang/locales/en-US.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/MessageHandler.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java 200 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json
@@ -1,6 +1,6 @@
{
  
  "ip": "192.168.10.101",
  "ip": "localhost",
  "systemTitle": "Login System",
  "usernamePlaceholder": "Please enter username",
  "passwordPlaceholder": "Please enter password",
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -1,5 +1,5 @@
{
  "ip": "192.168.10.101",
  "ip": "localhost",
  "systemTitle": "登录系统",
  "usernamePlaceholder": "请输入用户名",
  "passwordPlaceholder": "请输入密码",
springboot-vue3/src/main/java/com/example/springboot/component/MessageHandler.java
New file
@@ -0,0 +1,98 @@
package com.example.springboot.component;
import cn.hutool.json.JSONArray;
import com.example.springboot.component.*;
import com.google.common.primitives.Bytes;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MessageHandler {
    //写入byte
    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);
    }
    //写入bit
    public void writeBitToPLC( JSONArray messageArray,List<String> addresses, int index) {
        if (messageArray.getJSONArray(index).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(index);
            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);
                    }
                }
            }
            if (!sValue.isEmpty()) {
                // 这里假设 S7control.getinstance().WriteBit 方法可以正确写入 sValue 到地址列表 addresses
              S7control.getinstance().WriteBit(addresses, sValue);
                System.out.println("Values " + sValue + " written to PLC at address " + addresses);
            }
        }
    }
    //写入Word
    public void WriteWordToPLC( JSONArray messageArray,List<String> addresses, int index) {
        if (messageArray.getJSONArray(index).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(index);
            List<Short> sValues = 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());
                        sValues.add(val);
                        System.out.println("messageValue:" + Arrays.asList(val) + " added to the list");
                    } catch (NumberFormatException e) {
                        // 如果无法解析为 short 类型,则忽略该部分
                        System.err.println("Could not parse value: " + value);
                    }
                }
            }
            if (!sValues.isEmpty()) {
                S7control.getinstance().WriteWord(addresses.get(index), sValues);
                System.out.println("Values " + sValues + " written to PLC at address " + addresses.get(index));
            }
        }
    }
//写入String
    public void writeStringToPLC( JSONArray messageArray, String addresses,int index) {
        if (messageArray.getJSONArray(index).size() > 0) {
            JSONArray jsonArray = messageArray.getJSONArray(index);
            if (!jsonArray.isEmpty()) {
                String value = (String) jsonArray.get(0);
                outmesid(value.trim(), addresses);
                System.out.println("Value " + value + " written to PLC at address " + addresses);
            }
        }
    }
}
springboot-vue3/src/main/java/com/example/springboot/component/PlcServoManualone.java
@@ -13,13 +13,18 @@
public class PlcServoManualone extends Thread {
  // 用于存储应用程序的配置信息
  private Configuration config;
  // 创建一个自定义的 S7 控制器消息处理器对象
  MessageHandler customS7Control = new MessageHandler();
  public PlcServoManualone() throws IOException {
    config = new Configuration("config.properties");
  }
//将布尔列表转换为二进制的 short 数组
  public static class PLCBooleanConverter {
    public static short[] convertListsToBinaryShortArray(List<Boolean>... lists) {
@@ -59,18 +64,7 @@
    }
    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() {
@@ -81,6 +75,8 @@
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
//A01组合中地址表集合
      List<String> addresses = Arrays.asList(config.getProperty("A01.addresses").split(","));
@@ -134,7 +130,7 @@
      StringBuilder queueid1 = queGlassid(inputGlassIdAddress, 14);
      // 存片id地址
      StringBuilder queueid2 = queGlassid(outputGlassIdAddress, 14);
//A01 A02启动   半自动启动
      List<Boolean> A01readstart = S7control.getinstance().readBits(A01start);
      List<Boolean> A02readstart = S7control.getinstance().readBits(A02start);
      List<Boolean> A01readBstart = S7control.getinstance().readBits(A01Bstart);
@@ -171,7 +167,7 @@
      }
//所有未回零按钮转换为1和0
      List<Boolean> arraylist8 = S7control.getinstance().readBits(addresses8);
      short[] params = new short[arraylist8.size()];
      for (int i = 0; i < arraylist8.size(); i++) {
@@ -258,27 +254,7 @@
              // 写入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) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValue.isEmpty()) {
                  S7control.getinstance().WriteWord(addresses, sValue);
                  // 检查是否读取到了位值,并且列表不为空
              customS7Control.WriteWordToPLC(messageArray, addresses,0);
                  if (A01readstart != null && !A01readstart.isEmpty()) {
                    // 创建一个新的列表用于写入新值
                    List<Boolean> a01startval = new ArrayList<>();
@@ -290,31 +266,11 @@
                    // 写入新的位值列表
                    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) {
                      // 如果无法解析为 short 类型,则忽略该部分
                      System.err.println("Could not parse value: " + value);
                    }
                  }
                }
                if (!sValue2.isEmpty()) {
                  S7control.getinstance().WriteWord(addresses2, sValue2);
              // 写入AO2组合
              customS7Control.WriteWordToPLC(messageArray, addresses2,1);
                  if (A02readstart != null && !A02readstart.isEmpty()) {
                    // 创建一个新的列表用于写入新值
@@ -327,132 +283,24 @@
                    // 写入新的位值列表
                    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) {
                      // 如果无法解析为 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);
                }
              }
              customS7Control.writeBitToPLC( messageArray, Reset,2);
              //回零按钮写入
              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) {
                      // 如果无法解析为 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);
                }
              }
              customS7Control.writeBitToPLC( messageArray, waddresses4,3);
              //取片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);
              customS7Control.writeStringToPLC(  messageArray,inputGlassIdAddress,4);
              //取片ID写入
              customS7Control.writeStringToPLC(  messageArray,outputGlassIdAddress,5);
                if (!jsonArray6.isEmpty()) {
                  String value2 = (String) jsonArray6.get(0);
                  outmesid(value2.trim(), inputGlassIdAddress);
                  System.out.println("Values2 " + value2 + " written to PLC at address " + inputGlassIdAddress);
                }
              }
              //A01半自动
              customS7Control.writeBitToPLC( messageArray, A01Bstart,6);
              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) {
                      // 如果无法解析为 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) {
                      // 如果无法解析为 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);
                }
              }
            //A02半自动
              customS7Control.writeBitToPLC( messageArray, A02Bstart,7);
springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -32,13 +32,13 @@
//      new Plcstate().start();
//      new PlcPositioning1().start();
//      new PlcPositioning2().start();
     new PlcParameter2().start();
  //   new PlcParameter2().start();
//      new PlcParameter1().start();
//      new PLCAutomaticParameterSetting().start();
//
//      new PlcManualonePosition().start();
//      new PlcManualonePosition2().start();
//      new PlcServoManualone().start();
    new PlcServoManualone().start();
//      new PLCManualJog().start();
  }
}