| | |
| | | |
| | | import cn.hutool.json.JSONArray; |
| | | import cn.hutool.json.JSONObject; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | 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; |
| | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | @Slf4j |
| | | public class PlcParameter2 extends Thread { |
| | | |
| | | // 用于存储应用程序的配置信息 |
| | | private Configuration config; |
| | | |
| | | @Autowired |
| | | StorageCageService storageCageService; |
| | | // 创建一个自定义的 S7 控制器消息处理器对象 |
| | | MessageHandler customS7Control = new MessageHandler(); |
| | | |
| | | // 用于存储应用程序的配置信息 |
| | | private Configuration config; |
| | | |
| | | public PlcParameter2() throws IOException { |
| | | config = new Configuration("config.properties"); |
| | |
| | | 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(",")); |
| | | |
| | | // 急停按钮 |
| | | 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); |
| | | |
| | | // |
| | | |
| | | // |
| | | // 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); |
| | | |
| | | // 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) { |
| | | |
| | | |
| | | |
| | | if (webserver != null&&webserver.session.isOpen()) { |
| | | 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, addressList0, 0); |
| | | |
| | | 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()) { |
| | | |
| | | // 调用 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); |
| | | |
| | | 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"); |
| | | |
| | | } 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); |
| | | |
| | | } |
| | | if (Value2) { |
| | | storageCageService.EndTask(1); |
| | | |
| | | } |
| | | // 检查布尔值列表是否为空 |
| | | if (!sValue.isEmpty()) { |
| | | |
| | | // 调用 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()); |
| | | } |
| | | |
| | | // 存片等待延迟 |
| | | customS7Control.Writetime(messageArray, timeout2, 2); |
| | | |
| | | // 清空消息列表 |
| | | webserver.clearMessages(); |
| | | } |
| | | }else{ |
| | | log.info("Parameter2 is closed"); |
| | | } |
| | | } |
| | | } |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | // id |
| | | List<String> addressList1 = Arrays.asList(config.getProperty("Parameter2.id").split(",")); |
| | | |
| | | List<String> paramlist = S7control.getinstance().readStrings(addressList1); |
| | | |
| | | |
| | | //手动状态 |
| | | 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(",")); |
| | | |
| | | //急停按钮 |
| | | 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); |
| | | |
| | | // 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); |
| | | jsonObject.append("timeout", readtimeout); |
| | | |
| | | |
| | | // 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) { |
| | | |
| | | |
| | | 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, addressList0, 0); |
| | | |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | } |
| | | |
| | | for (int i = 1; i <= 5; i++) { |
| | | boolean value = sValue.get(i); |
| | | if (value) { |
| | | switch (i) { |
| | | case 1: |
| | | controller.UpdateTask(0, 0, paramlist.get(i)); |
| | | break; |
| | | case 2: |
| | | case 3: |
| | | case 4: |
| | | case 5: |
| | | controller.UpdateTask(1, 0, paramlist.get(i)); |
| | | break; |
| | | default: |
| | | // 处理索引值不在范围内的情况 |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 检查布尔值列表是否为空 |
| | | if (!sValue.isEmpty()) { |
| | | |
| | | // 调用 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); |
| | | |
| | | 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"); |
| | | |
| | | |
| | | } catch (NumberFormatException e) { |
| | | // 如果无法解析为 boolean 类型,则忽略该部分 |
| | | System.err.println("Could not parse value: " + value); |
| | | } |
| | | } |
| | | } |
| | | |
| | | boolean Value1 = sValue.get(0); |
| | | boolean Value2 = sValue.get(1); |
| | | |
| | | if (Value1) { |
| | | controller.EndTask(0); |
| | | |
| | | } |
| | | if (Value2) { |
| | | controller.EndTask(0); |
| | | |
| | | } |
| | | // 检查布尔值列表是否为空 |
| | | if (!sValue.isEmpty()) { |
| | | |
| | | // 调用 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.Writetime(messageArray, timeout2, 2); |
| | | |
| | | |
| | | // 清空消息列表 |
| | | webserver.clearMessages(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |