ZengTao
2024-03-07 a836d3f2c7bfd818060a39b0432f0200301ce1a5
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.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.example.springboot.service.JdbcConnections;
import com.example.springboot.service.SpianService;
import com.example.springboot.entity.north_glass_buffer1;
import com.example.springboot.entity.device.PlcParameterObject;
import com.example.springboot.mapper.AlarmMapper;
import com.example.springboot.mapper.SpianMapper;
 
public class PlcHoldNew extends Thread {
 
  private AlarmMapper alarmMapper;
 
  @Autowired
  private JdbcConnections jdbcConnections;
  private SpianMapper spianMapper;
  private SpianService spianService;
  int aaa;
 
  @Override
  public void run() {
 
    while (this != null) {
      try {
 
        Thread.sleep(100);
      } catch (InterruptedException e) {
        // \\ TODO Auto-generated catch block
        e.printStackTrace();
      }
 
      // if (S7control.getinstance().CheckConnected() == false) {
      spianService = WebSocketServer.applicationContext.getBean(SpianService.class);
      spianMapper = WebSocketServer.applicationContext.getBean(SpianMapper.class);
      jdbcConnections = WebSocketServer.applicationContext.getBean(JdbcConnections.class);
 
      //读取DB105区文件
      PlcParameterObject plcmes=PLCAutoMes.PlcMesObject;
      //读106
      PlcParameterObject plcread=PLCAutoMes.PlcReadObject;
      //读103
      PlcParameterObject plcstate=PLCAutoMes.plcStateObject;
      String OutRequest=plcread.getPlcParameter("OutRequest").getValue();//出片请求
      String OutActivate=plcmes.getPlcParameter("OutActivate").getValue();//出片启动
      
 
     
      S7control.getinstance().WriteWord( plcmes.getPlcParameter("1231").getAddress(plcmes.getPlcParameter("1231").getAddressIndex()), (short) 0);
      // 出片任务
      
      if (OutActivate.equals("1") == false&&OutRequest.equals("1")==true) {
        S7control.getinstance().WriteWord("DB105.18", (short) 0);// 出片任务启动改为0  
      }
      String FeedRequest=plcread.getPlcParameter("FeedRequest").getValue();// 进片请求字
      String AddActivate=plcmes.getPlcParameter("AddActivate").getValue();// 进片启动
      if (FeedRequest.equals("1") == false&&AddActivate.equals("1")==true) {
        S7control.getinstance().WriteWord("DB105.16", (short) 0);//进片任务启动改为0
      }     
   
      if (OutActivate.equals("1") == true) {
        // 判断当前是否有未执行的任务
        int outnum = spianMapper.SelectOutSliceshu();//是否有正在出片的任务
        int cageoutsum = spianMapper.Selectcageout(3);//笼子内是否还有在出片的玻璃
        // 当没有任务执行并且出片车空闲时
        if (outnum == 0 &&  Plchome.isAllowQueue == true && cageoutsum == 0) {
          // 判断铝框出片队列表是否有待出片的玻璃
          String outglassid = spianMapper.SelectOutSlice();
          // 当有待出片的玻璃时
          if (outglassid != null) {
            // 获取该玻璃是否被禁用
            int glassdisabled = spianMapper.SelectCageGlassState(outglassid);
            // 未禁用下发任务
            if (glassdisabled == 0) {
              spianService.selectout2(outglassid);
              Plchome.isQueueWarning = false;
            } else { // 禁用更改状态弹出提示
              Plchome.isQueueWarning = true;
            }
 
          }
        }
     
      }
 
      ///////////// 进片任务      
 
      String B01backs = plcread.getPlcParameter("B01CompleteTheReport").getValue();// b01汇报
      String B02backs = plcread.getPlcParameter("B02CompleteTheReport").getValue();// b02汇报
      
      String B01glassid = plcstate.getPlcParameter("B01ID1").getValue();// BO1的玻璃id
      String B02glassid = plcstate.getPlcParameter("B02ID1").getValue();// B02的玻璃id
 
      // 当进片小车完成任务时
      if (B01backs.equals("1") == true) {
        // 判断是否汇报正确的id
        int HB = spianMapper.SelectHB(B01glassid.toString());
        if (HB > 0) {
          // 恢复B01小车应答改为1
          S7control.getinstance().WriteWord(plcmes.getPlcParameter("B01report").getAddress(plcmes.getPlcParameter("B01report").getAddressIndex()), (short) 1);
          String yingda =plcmes.getPlcParameter("B01report").getValue();// b01汇报
          if (yingda.equals("1")) {
            spianService.overtask(B01glassid.toString());// 完成任务
          }       
        }
 
      }else{
        // 恢复B01小车应答改为0
        S7control.getinstance().WriteWord(plcmes.getPlcParameter("B01report").getAddress(plcmes.getPlcParameter("B01report").getAddressIndex()), (short) 0);
      }
 
      // 当出片小车完成任务时
      if (B02backs.equals("1") == true) {
        // 判断是否汇报正确的id
        int HB = spianMapper.SelectHB(B02glassid);
        if (HB > 0) {
          // 恢复B02小车应答改为1
          S7control.getinstance().WriteWord(plcmes.getPlcParameter("B02report").getAddress(plcmes.getPlcParameter("B02report").getAddressIndex()), (short) 1);
          String yingda =plcmes.getPlcParameter("B01report").getValue();// b02应答
          if (yingda.equals("1") == true) {
            spianService.overtask(B02glassid);// 完成任务
          }    
        }
      }else{
        S7control.getinstance().WriteWord(plcmes.getPlcParameter("B02report").getAddress(plcmes.getPlcParameter("B02report").getAddressIndex()), (short) 0);
      }
 
 
      // 获取DO1数据
      String Do1ID=plcread.getPlcParameter("FeedID").getValue();// 获取请求的id跟DO1同时清
      // 获取DO2数据
      String Do2ID=plcread.getPlcParameter("FeedID").getValue();// 获取请求的id跟DO1同时清
 
 
      int questate = spianMapper.Selectquecount(Do1ID.toString());// 判断扫码位是否有玻璃已确认
      // queueid1.toString().isEmpty()
      north_glass_buffer1 glass1 = spianMapper.selectGlass(Do1ID);// D01的玻璃信息
      north_glass_buffer1 glass2 = spianMapper.selectGlass(Do2ID);// D02玻璃信息
      // 当扫码位玻璃id为空时 宽度为0
      if (Do1ID != null && questate == 0) {
        // 写入D01的数据到上片队列表
        if (glass1 == null) { // 当没有值时传空
          spianMapper.Updatequeue(null, null, null, null, 0, null, null, null, null, 1);
        } else {
          spianMapper.Updatequeue(Do1ID.toString(), glass1.getordernumber(), glass1.getlistnumber(),
          glass1.getboxnumber(), 0, glass1.getglasslengthmm().toString(), glass1.getglassheightmm().toString(),
          glass1.getglasslength().toString(), glass1.getglassheight().toString(), 1);
        }
 
      }
 
      if (Do2ID != null) {
        // 写入D02的数据到上片队列表
        if (glass2 == null) {
          spianMapper.Updatequeue(null, null, null, null, 0, null, null, null, null, 2);
        } else {
          spianMapper.Updatequeue(Do2ID.toString(), glass2.getordernumber(), glass2.getlistnumber(),
          glass2.getboxnumber(), 0, glass2.getglasslengthmm().toString(), glass2.getglassheightmm().toString(),
          glass2.getglasslength().toString(), glass2.getglassheight().toString(), 2);
          spianMapper.overqueue2(Do2ID.toString(), 0, 1);// 更改扫码位任务表的状态为0
          S7control.getinstance().WriteWord("DB105.16", (short) 0);// 关闭任务启动
        }
 
      }
 
      // 查询数据库
      // 推送到前端
 
      // }
    }
  }
 
}