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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
package com.example.springboot.component;
 
import java.util.Date;
 
import org.springframework.beans.factory.annotation.Autowired;
import com.example.springboot.service.SpianServiceNew;
import com.example.springboot.service.StorageCageService;
import com.example.springboot.entity.GlassInfo;
import com.example.springboot.entity.device.PlcParameterObject;
import com.example.springboot.mapper.AlbaniaMapper;
 
public class PlcHoldNew extends Thread {
 
  @Autowired
  private AlbaniaMapper albaniaMapper;
  private SpianServiceNew spianService;
  private StorageCageService storageCageService;
  int aaa;
  String huibao = "";
  String qidong = "";
  @Override
  public void run() {
 
    while (this != null) {
      try {
 
        Thread.sleep(300);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      storageCageService = WebSocketServer.applicationContext.getBean(StorageCageService.class);
      spianService = WebSocketServer.applicationContext.getBean(SpianServiceNew.class);
      albaniaMapper = WebSocketServer.applicationContext.getBean(AlbaniaMapper.class);
  
      // spianService.selectout(1);
      // spianService.mateOut();
      // 读取DB14区文件
      PlcParameterObject plcmes = PLCAutoMes.PlcMesObject;
      if (plcmes.getPlcParameter("PLCToMES").getValue() != null) {
 
        String ExportTOMES1 = plcmes.getPlcParameter("ExportTOMES1").getValue();// 出片请求一线
        String PLCToMES = plcmes.getPlcParameter("PLCToMES").getValue();// 运送车请求
        String IDStatus1 = plcmes.getPlcParameter("IDStatus1").getValue();// 1号任务完成
        String MESToPLCStatus1 = plcmes.getPlcParameter("MESToPLCStatus1").getValue();// 1号确认字
        String MESToPLC = plcmes.getPlcParameter("MESToPLC").getValue();// 发送任务字
        String GaToMES = plcmes.getPlcParameter("GaToMES").getValue();// 测量成功信号
        
        int taskcont = albaniaMapper.SelectTaskcount(); // 正在进行的任务数量
        int outtask = albaniaMapper.SelectOutTaskCount(); // 等待补发的出片任务数量
        if (ExportTOMES1 != null && MESToPLC != null && taskcont == 0) {
          //当可以发任务并且出片队列有任务时
          if (ExportTOMES1.equals("1") == true && MESToPLC.equals("0") == true && PLCToMES.equals("1") == true&&outtask>0 && MESToPLCStatus1.equals("0")) {
             spianService.mateOut();
          }
        }
 
        // String scan=plcmes.getPlcParameter("scan").getValue();//发送扫码信息
        // if(scan.equals("1")==true){
        // spianService.scan(scan);
        // }
        // 获取当前时间
        String currentTime = new Date().toString();
        if (!huibao.equals(IDStatus1)) {
          System.out.println("汇报记录:" + IDStatus1 + "时间" + currentTime);
        }
        huibao = IDStatus1;
        if (!qidong.equals(MESToPLC)) {
          System.out.println("启动记录:" + MESToPLC + "时间" + currentTime);
        }
        qidong = MESToPLC;
 
        PLCToMES = plcmes.getPlcParameter("PLCToMES").getValue();// 运送车请求
        IDStatus1 = plcmes.getPlcParameter("IDStatus1").getValue();// 1号任务完成
        MESToPLCStatus1 = plcmes.getPlcParameter("MESToPLCStatus1").getValue();// 1号确认字
        MESToPLC = plcmes.getPlcParameter("MESToPLC").getValue();// 发送任务字
 
        // 一号线请求
        if (ExportTOMES1 != null && MESToPLC != null && taskcont == 0) {
          if (ExportTOMES1.equals("1") == true && MESToPLC.equals("0") == true && PLCToMES.equals("1") == true
              && MESToPLCStatus1.equals("0") == true&&outtask == 0) {
            // System.out
            //     .println("出片状态:MESToPLC:" + MESToPLC + "PLCToMES:" + PLCToMES + "MESToPLCStatus1:" + MESToPLCStatus1);
            spianService.selectout(1);
            try {
              Thread.sleep(100); // 每100毫秒检查一次
            } catch (InterruptedException e) {
              Thread.currentThread().interrupt(); // 处理线程中断
            }
          }
        }
 
        PLCToMES = plcmes.getPlcParameter("PLCToMES").getValue();// 运送车请求
        IDStatus1 = plcmes.getPlcParameter("IDStatus1").getValue();// 1号任务完成
        MESToPLCStatus1 = plcmes.getPlcParameter("MESToPLCStatus1").getValue();// 1号确认字
        MESToPLC = plcmes.getPlcParameter("MESToPLC").getValue();// 发送任务字
        // 运送车请求和测量完成请求
        GlassInfo glass = albaniaMapper.SelectGlass();
        if (PLCToMES != null && glass != null && MESToPLC != null) {
          if (PLCToMES.equals("1")&& MESToPLC.equals("0")&&("1".equals(GaToMES)||"2".equals(GaToMES))&& taskcont == 0) {
            try {
              Thread.sleep(100); // 每100毫秒检查一次
            } catch (InterruptedException e) {
              Thread.currentThread().interrupt(); // 处理线程中断
            }
            spianService.selectAll(glass);
          }
        }
 
        // 任务完成时
        if ((IDStatus1.equals("1") && MESToPLCStatus1.equals("0")) ||
            (IDStatus1.equals("4") && MESToPLCStatus1.equals("0"))) {
          // 完成确认字
          for (int i = 1; i < 7; i++) {
            String Tastover = plcmes.getPlcParameter("IDStatus" + i).getValue();// PLC理片任务状态汇报
            String Glassid = plcmes.getPlcParameter("MESID" + i).getValueString();// MES玻璃ID
            GlassInfo id = albaniaMapper.SelectTaskId(Glassid);
            if (Tastover.equals("1")) {
              // 调用完成任务 Glassid
              storageCageService.FinishTask();
              System.out.println("完成任务ID:" + id);
            } else if (Tastover.equals("4")) {
              storageCageService.FinishTask();
              System.out.println("完成失败任务ID:" + id);
            }
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCStatus" + i).getAddress(), (short) 1);// 完成确认字
          }
          System.out.println("完成确认字MESToPLCStatus");
          // 清除任务地址
          for (int i = 1; i < 7; i++) {
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCStart" + i).getAddress(), (short) 0);// 清除任务地址
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCTarget" + i).getAddress(), (short) 0);// 清除任务地址
          }
          System.out.println("清除任务地址");
          while (true) {
            String currentValue = plcmes.getPlcParameter("MESToPLC").getValue();
            // 检查 MESToPLC 的值是否为 0
            if (currentValue.equals("0")) {
              System.out.println("MESToPLC 已变为 0,停止循环写入");
              break; // 退出循环
            }
            // 如果不为 0,继续写入
            S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLC").getAddress(),
                (short) 0);// 清除任务发送字
            System.out.println("继续写入 MESToPLC,当前值:" + currentValue);
            // 加上延时,避免占用过多 CPU 资源
            try {
              Thread.sleep(100); // 例如每秒检查一次
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
          }
 
        }
 
        // 汇报取消时
        if ((IDStatus1.equals("0")) && MESToPLCStatus1.equals("1")) {
          // 取消确认字
          for (int i = 1; i < 7; i++) {
            String Tastover = plcmes.getPlcParameter("IDStatus" + i).getValue();// 依次获取任务汇报
            if (Tastover.equals("0")) {
              S7control.getinstance().WriteWord(plcmes.getPlcParameter("MESToPLCStatus" + i).getAddress(), (short) 0);// 清除确认字
 
            }
          }
          System.out.println("清除确认字MESToPLCStatus");
        }
 
      }
 
      // 查询数据库
      // 推送到前端
 
    }
  }
 
}