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) { try { List 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()); } } //写入bit public void writeBitToPLC(JSONArray messageArray, List addresses, int index) { try { // 检查索引是否有效 if (messageArray.getJSONArray(index).size() > 0) { // 获取消息数组 JSONArray jsonArray = messageArray.getJSONArray(index); // 创建一个布尔值列表 List 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 方法将布尔值列表写入地址列表 S7control.getinstance().WriteBit(addresses, sValue); System.out.println("Values " + sValue + " written to PLC at address " + addresses); } } } catch (Exception e) { System.err.println("An error occurred while writing bit to PLC: " + e.getMessage()); } } //不连续地址 写入Word public void WriteWordToPLC(JSONArray messageArray, List addresses, int index) { try { if (messageArray.getJSONArray(index).size() > 0) { JSONArray jsonArray = messageArray.getJSONArray(index); List 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); } } } } public void Writetime(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 { long cleanedValue = Long.parseLong(value.toString().replaceAll("[^0-9-]", "")); S7control.getinstance().writetime(address, cleanedValue); System.out.println("messageValue:" + Arrays.asList(cleanedValue) + " 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()); } } public void writeBitandrenwuToPLC(JSONArray messageArray, List addresses, int index) { try { // 检查索引是否有效 if (messageArray.getJSONArray(index).size() > 0) { // 获取消息数组 JSONArray jsonArray = messageArray.getJSONArray(index); // 创建一个布尔值列表 List 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"); if(sValue.get(1)){ } } catch (NumberFormatException e) { // 如果无法解析为 boolean 类型,则忽略该部分 System.err.println("Could not parse value: " + value); } } } // 检查布尔值列表是否为空 if (!sValue.isEmpty()) { // 调用 S7control.getinstance().WriteBit 方法将布尔值列表写入地址列表 S7control.getinstance().WriteBit(addresses, sValue); System.out.println("Values " + sValue + " written to PLC at address " + addresses); } } } catch (Exception e) { System.err.println("An error occurred while writing bit to PLC: " + e.getMessage()); } } public short[] convertBooleanListToShortArray(List booleanList) { short[] shortArray = new short[booleanList.size()]; for (int i = 0; i < booleanList.size(); i++) { boolean value = booleanList.get(i); shortArray[i] = value ? (short) 1 : (short) 0; } return shortArray; } }