package com.mes.plcTaskThread;
|
|
import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
|
import com.mes.common.S7objectMachine;
|
import com.mes.device.PlcParameterInfo;
|
import com.mes.device.PlcParameterObject;
|
import com.mes.md.entity.Machine;
|
import com.mes.md.entity.Tasking;
|
import com.mes.md.mapper.MachineMapper;
|
import com.mes.md.service.TaskingService;
|
import lombok.extern.slf4j.Slf4j;
|
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
@Slf4j
|
public class MachineRotate extends Thread {
|
|
|
private MachineMapper machineMapper;
|
private TaskingService taskingService;
|
private S7objectMachine s7objectMachine;
|
public static Long machineId = 6L;
|
public List<Map> sendRecords = new ArrayList<>();
|
public Machine thisMachine;
|
|
public MachineRotate(Machine machine, MachineMapper machineMapper, TaskingService taskingService) {
|
this.thisMachine = machine;
|
this.machineMapper = machineMapper;
|
this.taskingService = taskingService;
|
}
|
|
public void plcStart() throws Exception {
|
//旋转台
|
Machine machine = machineMapper.selectById(thisMachine.getId());
|
S7objectMachine s7objectMachine = new S7objectMachine(machine.getIp(), machine.getPort(), machine.getFileName(), EPlcType.S1200);
|
s7objectMachine.readData();//按照json文件读取内容
|
PlcParameterObject plcParameterObject = s7objectMachine.PlcMesObject;
|
if (plcParameterObject == null) {
|
s7objectMachine.plccontrol.closeS7client();
|
return;
|
}
|
try {
|
|
PlcParameterInfo plcRequest = plcParameterObject.getPlcParameter("plcRequest");//请求字
|
PlcParameterInfo plcRequestID = plcParameterObject.getPlcParameter("plcRequestID");//请求ID
|
PlcParameterInfo plcRequestType = plcParameterObject.getPlcParameter("plcRequestType");//PLC请求
|
|
PlcParameterInfo mesSend = plcParameterObject.getPlcParameter("mesSend");//发送字
|
PlcParameterInfo mesSendId = plcParameterObject.getPlcParameter("mesSendID");//发送ID
|
PlcParameterInfo length = plcParameterObject.getPlcParameter("length");//长
|
PlcParameterInfo width = plcParameterObject.getPlcParameter("width");//宽
|
PlcParameterInfo rotateType = plcParameterObject.getPlcParameter("rotateType");//旋转类型
|
|
PlcParameterInfo mesSendType = plcParameterObject.getPlcParameter("mesSendType");// 扫码1 不扫码2
|
String scan_id = "";
|
if (machine.getIsLog() > 0) {
|
s7objectMachine.consoleLogInfo();
|
}
|
if ("0".equals(plcRequestType.getValue()) && !"0".equals(mesSendType.getValue())) {
|
//发送字置0
|
log.info("1.发送类型字置零,清除上次发送的类型数据{}->0", mesSendType.getValue());
|
s7objectMachine.plccontrol.writeWord(mesSendType.getAddress(), 0);
|
return;
|
}
|
if ("0".equals(plcRequest.getValue()) && !"0".equals(mesSend.getValue())) {
|
//发送字置0
|
int finishCount = taskingService.finishMachineTask(machine);
|
nullMachine(machine);
|
log.info("1.发送字置零,清除上次发送的数据{},{},{},{},{}"
|
, finishCount
|
, length.getValue()
|
, width.getValue()
|
, mesSendId.getValue()
|
, mesSend.getValue());
|
s7objectMachine.plccontrol.writeWord(length.getAddress(), 0);
|
s7objectMachine.plccontrol.writeWord(width.getAddress(), 0);
|
s7objectMachine.plccontrol.writeWord(mesSendId.getAddress(), 0);
|
s7objectMachine.plccontrol.writeWord(rotateType.getAddress(), 0);
|
s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 0);
|
|
return;
|
}
|
if ("1".equals(plcRequestType.getValue()) && "0".equals(mesSendType.getValue())) {
|
//发送类型 1扫码 2不扫码
|
int type = machine.getMode() == 1 ? 2 : 1;
|
log.info("3.发送类型数据0->{}", mesSendType.getValue());
|
s7objectMachine.plccontrol.writeWord(mesSendType.getAddress(), type);
|
return;
|
}
|
List<Tasking> taskingCount = taskingService.findMachineWorkStateTask(machine, "正在工作");
|
if ("1".equals(plcRequest.getValue()) && "0".equals(mesSend.getValue())
|
&& "开工".equals(machine.getState())
|
&& taskingCount.size() < machine.getMaxTaskCount()) {
|
Tasking tasking;
|
if (machine.getMode() == 1) {
|
//标准模式
|
tasking = taskingService.startMachineTask(machine);
|
} else {
|
//定制模式
|
String PlcRequestID_ = plcRequestID.getValue();
|
scan_id = PlcRequestID_.substring(PlcRequestID_.lastIndexOf(",") + 1);
|
//标记当前工序 以前的玻璃 直接到当前工序
|
tasking = taskingService.startScanIdMachineTask(machine, scan_id);//不管顺序,直接找从翻片台扫码后到旋转台的数据
|
}
|
if (tasking != null) {
|
log.info("4、发送数据:{},{},{},{},{}"
|
, tasking.getGlassId(), tasking.getProgramId()
|
, tasking.getLength().intValue(), tasking.getWidth().intValue(), 1);
|
s7objectMachine.plccontrol.writeWord(length.getAddress(), tasking.getLength().intValue());
|
s7objectMachine.plccontrol.writeWord(width.getAddress(), tasking.getWidth().intValue());
|
s7objectMachine.plccontrol.writeString(mesSendId.getAddress(), tasking.getTaskSequence().toString());
|
s7objectMachine.plccontrol.writeWord(rotateType.getAddress(), machine.getRotateMode());
|
s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 1);
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String sendRecord = df.format(new Date()) + " " +
|
tasking.getGlassId() + "-" +
|
tasking.getLength() + "-" +
|
tasking.getWidth();
|
if (sendRecords.size() > 7) {
|
sendRecords.remove(0);
|
}
|
nullMachine(machine);
|
Map sendContentMap = new HashMap();
|
sendContentMap.put("sendContent", sendRecord);
|
sendRecords.add(sendContentMap);
|
} else if (!scan_id.isEmpty()) {
|
taskingService.scanMachineAdd(machine, scan_id);
|
}
|
} else if ("0".equals(plcRequest.getValue())) {
|
nullMachine(machine);
|
}
|
} catch (Exception e) {
|
s7objectMachine.plccontrol.closeS7client();
|
log.info("逻辑处理异常:设备id【{}】", machine.getId());
|
}
|
|
}
|
|
public void nullMachine(Machine machine) {
|
if (!"".equals(machine.getRemark())) {
|
machine.setRemark("");
|
machineMapper.updateById(machine);
|
}
|
}
|
|
@Override
|
public void run() {
|
while (true) {
|
try {
|
Thread.sleep(1000);
|
plcStart();
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}catch (Exception e) {
|
log.info("{}", e.getMessage());
|
}
|
}
|
}
|
}
|