wu
2023-09-08 3c4996922ee0b0cd04f798762a5df0d08fa82fb0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.example.springboot.component;
 
import cn.hutool.json.JSONObject;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
 
public class Plcaction extends Thread {
  private static final long SEND_INTERVAL = 2000; // 发送消息的时间间隔
  private static final long WRITE_INTERVAL = 100; // 写入PLC的时间间隔
 
  @Override
  public void run() {
    try {
      // 发送一次消息
      sendMessages();
 
      // 延迟一段时间
      Thread.sleep(SEND_INTERVAL);
 
      while (true) {
        // 写入PLC
        writeToPlc();
        Thread.sleep(WRITE_INTERVAL);
 
        // 发送消息
        sendMessages();
        Thread.sleep(SEND_INTERVAL);
      }
 
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
 
  private void sendMessages() {
    WebSocketServer sendwServer = WebSocketServer.sessionMap.get("action");
    if (sendwServer != null) {
 
      List<Boolean> paramlist = S7control.getinstance().ReadBits("DB100.DBW", 12);
      // new short[]{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
      // 1, 0}
      JSONObject jsonObject = new JSONObject();
      jsonObject.append("params",
          new short[] { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 });
 
      sendwServer.sendMessage(jsonObject.toString());
    }
 
  }
 
  private void writeToPlc() {
    WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("action");
    if (webSocketServer != null) {
      List<String> messages = webSocketServer.getMessages();
 
      String addressList = "DB100.DBW0";
 
      if (!messages.isEmpty()) {
        // 将最后一个消息转换为整数类型的列表
        String lastMessage = messages.get(messages.size() - 1);
        System.out.println("messages:" + messages);
        String[] parts = lastMessage.split(",");
        List<Integer> messageValues = new ArrayList<>();
        for (String part : parts) {
          try {
            // 使用正则表达式清除非数字字符
            String cleanedPart = part.replaceAll("[^0-9-]", "");
            Integer value = Integer.parseInt(cleanedPart.trim());
            messageValues.add(value);
          } catch (NumberFormatException e) {
            // 如果无法解析为整数类型,则忽略该部分
            e.printStackTrace();
          }
        }
 
 
        // 将消息值转换为布尔列表
        List<Boolean> messageBooleans = new ArrayList<>();
        for (Integer value : messageValues) {
          messageBooleans.add(value == 0 ? true : false);
        }
 
        // 将布尔列表写入 PLC
        S7control.getinstance().WriteBit(addressList, messageBooleans);
        System.out.println("messageValues:" + messageBooleans);
        System.out.println("addressList:" + addressList);
 
        // 清空消息列表
        webSocketServer.clearMessages();
      }
    }
  }
 
  private List<Boolean> paramList() {
    // 获取参数列表的逻辑
 
    return new ArrayList<>(); // 假设返回空列表
  }
}