| | |
| | | import java.util.List; |
| | | |
| | | public class PlcServoManualone extends Thread { |
| | | String name = ""; |
| | | Integer count = 0; |
| | | |
| | | public static String readFileToString(String filePath) throws IOException { |
| | | File file = new File(filePath); |
| | | return FileUtils.readFileToString(file, "UTF-8"); |
| | | |
| | | |
| | | private Configuration config; |
| | | |
| | | public PlcServoManualone() throws IOException { |
| | | config = new Configuration("config.properties"); |
| | | } |
| | | |
| | | public static class PLCBooleanConverter { |
| | | |
| | | public static short[] convertListsToBinaryShortArray(List<Boolean>... lists) { |
| | | // 计算所有列表中元素的总数 |
| | | int totalSize = 0; |
| | | for (List<Boolean> list : lists) { |
| | | totalSize += list.size(); |
| | | } |
| | | |
| | | // 创建一个足够大的数组来存放所有的二进制值 |
| | | short[] binaryShortArray = new short[totalSize]; |
| | | |
| | | // public void insertDataToList(List<Short> list, String rangeAddress, int insertIndex) { |
| | | // if (list.size() >= insertIndex + 14) { |
| | | // List<Short> rangeData = new ArrayList<>(); |
| | | // byte[] byteData = S7control.getinstance().ReadByte(rangeAddress, 14); |
| | | // if (byteData != null && byteData.length >= 13) { |
| | | // for (byte b : byteData) { |
| | | // rangeData.add((short) b); |
| | | // } |
| | | // } else { |
| | | // // 读取数据失败,添加默认值 |
| | | // for (int i = 0; i < 14; i++) { |
| | | // rangeData.add((short) -1); |
| | | // } |
| | | // } |
| | | // |
| | | // list.addAll(insertIndex, rangeData); |
| | | // }else{ |
| | | // List<Short> rangeData = new ArrayList<>(); |
| | | // rangeData.add((short) 0); |
| | | // list.addAll(insertIndex, rangeData); |
| | | // } |
| | | // } |
| | | // 当前数组填充位置指针 |
| | | int currentIndex = 0; |
| | | |
| | | // 遍历所有的列表 |
| | | for (List<Boolean> list : lists) { |
| | | // 将每个布尔值转换为 0 或 1 并填入数组 |
| | | for (Boolean value : list) { |
| | | binaryShortArray[currentIndex++] = (short) (value ? 1 : 0); |
| | | } |
| | | } |
| | | |
| | | return binaryShortArray; |
| | | } |
| | | } |
| | | |
| | | //读取id |
| | | public StringBuilder queGlassid(String address,int count) { |
| | | StringBuilder writedstrIdOut = new StringBuilder(); |
| | | byte[] writedglassidbytesOut = S7control.getinstance().ReadByte(address, count); |
| | |
| | | } |
| | | return writedstrIdOut; |
| | | } |
| | | |
| | | //写入id |
| | | public void outmesid(String glassid,String address) { |
| | | //System.out.println("outmesid:" + glassid); |
| | | List<Byte> glassidlist = new ArrayList(); |
| | |
| | | } |
| | | byte[] bytes = Bytes.toArray(glassidlist); |
| | | System.out.println("outmesidbytes:" + bytes.length); |
| | | S7control.getinstance().WriteByte(address, bytes);// 派发出片id |
| | | S7control.getinstance().WriteByte(address, bytes); |
| | | } |
| | | |
| | | @Override |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | |
| | | List<String> addresses = new ArrayList<>(); |
| | | addresses.add("DB103.32"); |
| | | addresses.add("DB100.144"); |
| | | addresses.add("DB100.184"); |
| | | addresses.add("DB100.186"); |
| | | addresses.add("DB100.180"); |
| | | addresses.add("DB100.182"); |
| | | //A01组合中地址表集合 |
| | | List<String> addresses = Arrays.asList(config.getProperty("A01.addresses").split(",")); |
| | | //System.out.println(addresses); |
| | | |
| | | List<Short> arraylist = S7control.getinstance().readWords(addresses); |
| | | |
| | | // String rangeAddress = "DB100.148-161"; |
| | | // String rangeAddress = "DB100.148"; |
| | | // int insertIndex = 2; |
| | | // insertDataToList(arraylist, rangeAddress, insertIndex); |
| | | |
| | | |
| | | List<String> addresses2 = new ArrayList<>(); |
| | | addresses2.add("DB103.26"); |
| | | addresses2.add("DB100.188"); |
| | | addresses2.add("DB100.190"); |
| | | addresses2.add("DB100.146"); |
| | | // addresses2.add("DB100.162-175"); |
| | | //A02组合中地址表集合 |
| | | List<String> addresses2 = Arrays.asList(config.getProperty("A02.addresses").split(",")); |
| | | List<Short> arraylist2 = S7control.getinstance().readWords(addresses2); |
| | | // String rangeAddress2 = "DB100.148-161"; |
| | | // String rangeAddress2 = "DB100.162"; |
| | | // int insertIndex2 = 4; |
| | | // insertDataToList(arraylist2, rangeAddress2, insertIndex2); |
| | | // System.out.println(arraylist2); |
| | | List<String> addresses3 = new ArrayList<>(); |
| | | addresses3.add("DB103.42"); |
| | | |
| | | //A01翻转地址 |
| | | List<String> addresses3 = Arrays.asList(config.getProperty("A01.flipAddress")); |
| | | List<Short> arraylist3 = S7control.getinstance().readWords(addresses3); |
| | | |
| | | List<String> addresses4 = new ArrayList<>(); |
| | | addresses4.add("DB103.46"); |
| | | List<Short> arraylist4 = S7control.getinstance().readWords(addresses4); |
| | | //A02翻转地址 |
| | | List<String> addresses4 = Arrays.asList(config.getProperty("A02.flipAddress")); |
| | | |
| | | List<Short> arraylist5 = S7control.getinstance().ReadWord("DB103.27", 2); |
| | | List<Short> arraylist6 = S7control.getinstance().ReadWord("DB103.29", 2); |
| | | List<String> addresses7 = new ArrayList<>(); |
| | | addresses7.add("DB104.1.4"); |
| | | addresses7.add("DB104.1.5"); |
| | | addresses7.add("DB104.1.2"); |
| | | addresses7.add("DB104.1.3"); |
| | | addresses7.add("DB104.1.6"); |
| | | addresses7.add("DB104.1.7"); |
| | | List<Short> arraylist4 = S7control.getinstance().readWords(addresses4); |
| | | //B01组合中地址 |
| | | String b01Address = config.getProperty("B01.address"); |
| | | List<Short> arraylist5 = S7control.getinstance().ReadWord(b01Address, 2); |
| | | //B02组合地址 |
| | | String b02Address = config.getProperty("B02.address"); |
| | | List<Short> arraylist6 = S7control.getinstance().ReadWord(b02Address, 2); |
| | | // System.out.println(b02Address); |
| | | // 所有故障按钮地址 |
| | | List<String> addresses7 = Arrays.asList(config.getProperty("faultButtonAddresses").split(",")); |
| | | List<Boolean> arraylist7 = S7control.getinstance().readBits(addresses7); |
| | | |
| | | //A01启动地址 |
| | | List<String> A01start = Arrays.asList(config.getProperty("A01start")); |
| | | //A02启动地址 |
| | | List<String> A02start = Arrays.asList(config.getProperty("A02start")); |
| | | //A01半自动地址 |
| | | List<String> A01Bstart = Arrays.asList(config.getProperty("A01Bstart")); |
| | | //A02半自动地址 |
| | | List<String> A02Bstart = Arrays.asList(config.getProperty("A02Bstart")); |
| | | // |
| | | List<String> abortresumeTasks = Arrays.asList(config.getProperty("abortresumeTasks")); |
| | | //回零按钮地址 |
| | | List<String> waddresses4 = Arrays.asList(config.getProperty("HomedButtonAddresses").split(",")); |
| | | // 所有复位按钮地址 |
| | | List<String> Reset = Arrays.asList(config.getProperty("resetButtonAddresses").split(",")); |
| | | // System.out.println(Reset); |
| | | // 所有未回零按钮地址 |
| | | List<String> addresses8 = Arrays.asList(config.getProperty("notHomedButtonAddresses").split(",")); |
| | | // 进片id地址 |
| | | String inputGlassIdAddress = config.getProperty("inputGlassIdAddress"); |
| | | String outputGlassIdAddress = config.getProperty("outputGlassIdAddress"); |
| | | StringBuilder queueid1 = queGlassid(inputGlassIdAddress, 14); |
| | | // 存片id地址 |
| | | StringBuilder queueid2 = queGlassid(outputGlassIdAddress, 14); |
| | | |
| | | List<Boolean> A01readstart = S7control.getinstance().readBits(A01start); |
| | | List<Boolean> A02readstart = S7control.getinstance().readBits(A02start); |
| | | List<Boolean> A01readBstart = S7control.getinstance().readBits(A01Bstart); |
| | | List<Boolean> A02readsBtart = S7control.getinstance().readBits(A02Bstart); |
| | | |
| | | List<Boolean> resumeTasks = S7control.getinstance().readBits(abortresumeTasks); |
| | | |
| | | short[] combinedBinaryShortArray = PLCBooleanConverter.convertListsToBinaryShortArray( |
| | | A01readstart, A01readBstart, A02readstart, A02readsBtart |
| | | ); |
| | | |
| | | |
| | | // 所有故障按钮转换为1和0 |
| | | short[] params2 = new short[arraylist7.size()]; |
| | | for (int i = 0; i < arraylist7.size(); i++) { |
| | | boolean value = arraylist7.get(i); |
| | | params2[i] = value ? (short) 1 : (short) 0; |
| | | } |
| | | |
| | | List<String> addresses8 = new ArrayList<>(); |
| | | addresses8.add("DB104.9.0"); |
| | | addresses8.add("DB104.9.1"); |
| | | addresses8.add("DB104.9.0"); |
| | | addresses8.add("DB104.9.1"); |
| | | addresses8.add("DB104.9.4"); |
| | | addresses8.add("DB104.9.5"); |
| | | //急停中止按钮 |
| | | short[] resumeTask = new short[resumeTasks.size()]; |
| | | for (int i = 0; i < resumeTasks.size(); i++) { |
| | | boolean value = resumeTasks.get(i); |
| | | resumeTask[i] = value ? (short) 1 : (short) 0; |
| | | } |
| | | |
| | | List<Boolean> Reset1 = S7control.getinstance().readBits(Reset); |
| | | // System.out.println(Reset1); |
| | | // 所有故障按钮转换为1和0 |
| | | short[] rReset = new short[Reset1.size()]; |
| | | for (int i = 0; i < Reset1.size(); i++) { |
| | | boolean value = Reset1.get(i); |
| | | rReset[i] = value ? (short) 1 : (short) 0; |
| | | } |
| | | |
| | | |
| | | |
| | | List<Boolean> arraylist8 = S7control.getinstance().readBits(addresses8); |
| | | short[] params = new short[arraylist8.size()]; |
| | | for (int i = 0; i < arraylist8.size(); i++) { |
| | |
| | | } |
| | | |
| | | |
| | | StringBuilder queueid1 = queGlassid("DB100.148", 14); |
| | | StringBuilder queueid2 = queGlassid("DB100.162", 14); |
| | | |
| | | |
| | | |
| | |
| | | jsonObject.append("weihuiling", params); |
| | | jsonObject.append("jinpianid", queueid1); |
| | | jsonObject.append("qupianid", queueid2); |
| | | jsonObject.append("fuwei", rReset); |
| | | jsonObject.append("qidong", combinedBinaryShortArray); |
| | | jsonObject.append("resumeTasks", resumeTask); |
| | | |
| | | |
| | | |
| | |
| | | WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("ServoManualone"); |
| | | if (webSocketServer != null) { |
| | | List<String> messages = webSocketServer.getMessages(); |
| | | List<String> waddresses1 = new ArrayList<>(); |
| | | waddresses1.add("DB103.32"); |
| | | waddresses1.add("DB100.144"); |
| | | // waddresses1.add("DB100.148-161"); |
| | | waddresses1.add("DB100.184"); |
| | | waddresses1.add("DB100.186"); |
| | | waddresses1.add("DB100.180"); |
| | | waddresses1.add("DB100.182"); |
| | | |
| | | List<String> waddresses2 = new ArrayList<>(); |
| | | waddresses2.add("DB103.26"); |
| | | waddresses2.add("DB100.188"); |
| | | waddresses2.add("DB100.190"); |
| | | waddresses2.add("DB100.146"); |
| | | // waddresses2.add("DB100.162-175"); |
| | | |
| | | List<String> waddresses3 = new ArrayList<>(); |
| | | waddresses3.add("DB101.4.0"); |
| | | waddresses3.add("DB101.4.3"); |
| | | waddresses3.add("DB101.3.6"); |
| | | waddresses3.add("DB101.4.1"); |
| | | waddresses3.add("DB101.4.4"); |
| | | waddresses3.add("DB101.4.6"); |
| | | |
| | | |
| | | List<String> waddresses4 = new ArrayList<>(); |
| | | waddresses4.add("DB101.3.7"); |
| | | waddresses4.add("DB101.4.2"); |
| | | waddresses4.add("DB101.4.5"); |
| | | waddresses4.add("DB101.4.7"); |
| | | |
| | | |
| | | |
| | | |
| | | String waddresses5="DB100.148"; |
| | | String waddresses6="DB100.162"; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | |
| | | JSONArray messageArray = new JSONArray(lastMessage); |
| | | |
| | | |
| | | |
| | | |
| | | // 写入第一个地址 |
| | | if (messageArray.getJSONArray(0).size() > 0) { |
| | | // 写入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++) { |
| | |
| | | } |
| | | } |
| | | if (!sValue.isEmpty()) { |
| | | S7control.getinstance().WriteWord(waddresses1, sValue); |
| | | System.out.println("Values " + sValue + " written to PLC at address " + waddresses1); |
| | | |
| | | S7control.getinstance().WriteWord(addresses, sValue); |
| | | // 检查是否读取到了位值,并且列表不为空 |
| | | if (A01readstart != null && !A01readstart.isEmpty()) { |
| | | // 创建一个新的列表用于写入新值 |
| | | List<Boolean> a01startval = new ArrayList<>(); |
| | | // 遍历所有读取到的位值 |
| | | for (Boolean bit : A01readstart) { |
| | | // 取反当前位的值并添加到新的列表中 |
| | | a01startval.add(!bit); |
| | | } |
| | | // 写入新的位值列表 |
| | | 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<>(); |
| | |
| | | } |
| | | } |
| | | if (!sValue2.isEmpty()) { |
| | | S7control.getinstance().WriteWord(waddresses2, sValue2); |
| | | System.out.println("Values " + sValue2 + " written to PLC at address " + waddresses2); |
| | | S7control.getinstance().WriteWord(addresses2, sValue2); |
| | | |
| | | if (A02readstart != null && !A02readstart.isEmpty()) { |
| | | // 创建一个新的列表用于写入新值 |
| | | List<Boolean> a02startval = new ArrayList<>(); |
| | | // 遍历所有读取到的位值 |
| | | for (Boolean bit : A02readstart) { |
| | | // 取反当前位的值并添加到新的列表中 |
| | | a02startval.add(!bit); |
| | | } |
| | | // 写入新的位值列表 |
| | | S7control.getinstance().WriteBit(A02start, a02startval); |
| | | } |
| | | System.out.println("Values " + sValue2 + " written to PLC at address " + addresses2); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | if (messageArray.getJSONArray(2).size() > 0) { |
| | | // 复位按钮写入 |
| | | if (messageArray.getJSONArray(2).size() > 0 ) { |
| | | JSONArray jsonArray3 = messageArray.getJSONArray(2); |
| | | List<Boolean> sValue3 = new ArrayList<>(); |
| | | for (int i = 0; i < jsonArray3.size(); i++) { |
| | |
| | | } |
| | | } |
| | | if (!sValue3.isEmpty()) { |
| | | S7control.getinstance().WriteBit(waddresses3, sValue3); |
| | | System.out.println("Values " + sValue3 + " written to PLC at address " + waddresses3); |
| | | S7control.getinstance().WriteBit(Reset, sValue3); |
| | | System.out.println("Values " + sValue3 + " written to PLC at address " + Reset); |
| | | } |
| | | } |
| | | |
| | | |
| | | //回零按钮写入 |
| | | if (messageArray.getJSONArray(3).size() > 0) { |
| | | JSONArray jsonArray4 = messageArray.getJSONArray(3); |
| | | List<Boolean> sValue4 = new ArrayList<>(); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | //进片ID写入 |
| | | if (messageArray.getJSONArray(4).size() > 0) { |
| | | // JSONArray jsonArray5 = messageArray.getJSONArray(4); |
| | | String jsonArray5 = String.valueOf(messageArray.getJSONArray(4)); |
| | | if (!jsonArray5.isEmpty()) { |
| | | // String value = (String) jsonArray5.get(0); |
| | | jsonArray5 = jsonArray5.replaceAll("[\\[\\]\"]", ""); // 去除方括号和双引号 |
| | | outmesid( jsonArray5,waddresses5); |
| | | System.out.println("Values " + jsonArray5 + " written to PLC at address " + waddresses5); |
| | | outmesid( jsonArray5,inputGlassIdAddress); |
| | | System.out.println("Values " + jsonArray5 + " written to PLC at address " + inputGlassIdAddress); |
| | | } |
| | | } |
| | | |
| | | // 存片ID写入 |
| | | if (messageArray.getJSONArray(5).size() > 0) { |
| | | JSONArray jsonArray6 = messageArray.getJSONArray(5); |
| | | |
| | | if (!jsonArray6.isEmpty()) { |
| | | String value2 = (String) jsonArray6.get(0); |
| | | outmesid( value2,waddresses6); |
| | | System.out.println("Values " + value2 + " written to PLC at address " + waddresses6); |
| | | outmesid( value2,outputGlassIdAddress); |
| | | System.out.println("Values " + value2 + " written to PLC at address " + outputGlassIdAddress); |
| | | } |
| | | } |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | // if (messageArray.getJSONArray(8).size() > 0 ) { |
| | | // JSONArray jsonArray5 = messageArray.getJSONArray(8); |
| | | // List<Boolean> sValueb5 = new ArrayList<>(); |
| | | // for (int i = 0; i < jsonArray5.size(); i++) { |
| | | // Object value = jsonArray5.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(abortresumeTasks, sValueb5); |
| | | // System.out.println("Values " + sValueb5 + " written to PLC at address " + A02Bstart); |
| | | // } |
| | | // } |
| | | |
| | | |
| | | // 清空消息列表 |
| | | webSocketServer.clearMessages(); |