wuyouming666
2023-12-19 ea57b412689d6aa808707bc074d662cb0706a13f
springboot-vue3/src/main/java/com/example/springboot/component/MessageHandler.java
@@ -10,89 +10,124 @@
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);
        try {
            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);
        } catch (Exception e) {
            System.err.println("An error occurred while writing byte to PLC: " + e.getMessage());
        }
        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);
    public void writeBitToPLC(JSONArray messageArray, List<String> addresses, int index) {
        try {
            // 检查索引是否有效
            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);
            }
        }
    }
                // 检查布尔值列表是否为空
                if (!sValue.isEmpty()) {
    //写入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);
                    }
                    // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表
                    S7control.getinstance().WriteBit(addresses, sValue);
                    System.out.println("Values " + sValue + " written to PLC at address " + addresses);
                }
            }
            if (!sValues.isEmpty()) {
                S7control.getinstance().WriteWord(addresses.get(index), sValues);
                System.out.println("Values " + sValues + " written to PLC at address " + addresses.get(index));
            }
        } catch (Exception e) {
            System.err.println("An error occurred while writing bit to PLC: " + e.getMessage());
        }
    }
//写入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);
    //不连续地址 写入Word
    public void WriteWordToPLC(JSONArray messageArray, List<String> addresses, int index) {
        try {
            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) {
                            System.err.println("Could not parse value: " + value);
                        }
                    }
                }
                if (!sValues.isEmpty()) {
                    S7control.getinstance().WriteWord(addresses, sValues);
                    System.out.println("Values " + sValues + " written to PLC at address " + addresses);
                }
            }
        } catch (Exception e) {
            System.err.println("An error occurred while writing word to PLC: " + e.getMessage());
        }
    }
    public void WriteWordsToPLC(JSONArray jsonArray,  String address,int index) {
        if (jsonArray.getJSONArray(index).size() > 0) {
            Object value = jsonArray.getJSONArray(index).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(address, Arrays.asList(sValue));
                    System.out.println("messageValue:" + Arrays.asList(sValue) + " written to PLC at address " + address);
                } catch (NumberFormatException e) {
                    // 如果无法解析为 short 类型,则忽略该部分
                    System.err.println("Could not parse value: " + value);
                }
            }
        }
    }
}
    //写入String
    public void writeStringToPLC(JSONArray messageArray, String addresses, int index) {
        try {
            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);
                }
            }
        } catch (Exception e) {
            System.err.println("An error occurred while writing string to PLC: " + e.getMessage());
        }
    }
}