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 MachineMarking extends Thread { private MachineMapper machineMapper; private TaskingService taskingService; private S7objectMachine s7objectMachine; public static int thinness = 40; public static int edgSpeed = 40; //public static Long machineId = 6L; public List sendRecords = new ArrayList<>(); public Machine thisMachine; public MachineMarking(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.S1500); 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 mesSend = plcParameterObject.getPlcParameter("mesSend");//发送字 PlcParameterInfo isMark = plcParameterObject.getPlcParameter("isMark");//发送ID【0 不打标,1标准模式,2定制模式】 PlcParameterInfo drawingMark = plcParameterObject.getPlcParameter("drawingMark");//打标图纸地址 PlcParameterInfo lengthOutOfService = plcParameterObject.getPlcParameter("length(OutOfService)");//长 PlcParameterInfo widthOutOfService = plcParameterObject.getPlcParameter("width(OutOfService)");//宽 PlcParameterInfo markingMode = plcParameterObject.getPlcParameter("markingMode");// PlcParameterInfo plcReport = plcParameterObject.getPlcParameter("plcReport");//汇报字 PlcParameterInfo plcReportID = plcParameterObject.getPlcParameter("plcReportID");//汇报ID PlcParameterInfo mesConfirm = plcParameterObject.getPlcParameter("mesConfirm");//确认字 PlcParameterInfo mesConfirmID = plcParameterObject.getPlcParameter("mesConfirmID");//确认ID if (machine.getIsLog() > 0) { s7objectMachine.consoleLogInfo(); } if ("0".equals(plcRequest.getValue()) && "1".equals(mesSend.getValue())) { //发送字置0 log.info("1.发送字置零,清除上次发送的数据{},{},{},{},{}" , markingMode.getValue() , isMark.getValue() , lengthOutOfService.getValue() , widthOutOfService.getValue() , mesSend.getValue()); //S7objectMarking.getinstance().plccontrol.writeString(drawingMark.getAddress(),""); s7objectMachine.plccontrol.writeWord(markingMode.getAddress(), 0); s7objectMachine.plccontrol.writeWord(lengthOutOfService.getAddress(), 0); s7objectMachine.plccontrol.writeWord(widthOutOfService.getAddress(), 0); s7objectMachine.plccontrol.writeWord(isMark.getAddress(), 0); s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 0); return; } if ("0".equals(plcReport.getValue()) && "1".equals(mesConfirm.getValue())) { log.info("2.确认字置零"); //发送字置0 s7objectMachine.plccontrol.writeWord(mesConfirm.getAddress(), 0); return; } if ("1".equals(plcReport.getValue()) && "0".equals(mesConfirm.getValue())) { int finishCount = taskingService.finishMachineTask(machine); log.info("3、任务完成"); if (finishCount > 0) {//有任务 s7objectMachine.plccontrol.writeWord(mesConfirm.getAddress(), 1); return; } return; } List taskingCount = taskingService.findMachineWorkStateTask(machine, "正在工作"); if ("1".equals(plcRequest.getValue()) && "0".equals(mesSend.getValue()) && !plcRequestID.getValue().isEmpty() && "开工".equals(machine.getState()) && taskingCount.size() < machine.getMaxTaskCount()) { Tasking tasking = taskingService.startMachineTask(machine); if (tasking != null) { //模式:1定制 0 批量 是否打标:0不打标 1打标 int isMark_ = (tasking.getDrawingMarking() == null || tasking.getDrawingMarking().isEmpty()) ? 0 : 1; int isMarkingMode_ = "定制".equals(tasking.getTaskType()) ? 1 : 0; log.info("4、发送数据:{},{},{},{},{},{}" , tasking.getProgramId() , tasking.getLength().intValue(), tasking.getWidth().intValue(), isMark_, isMarkingMode_, 1); if (isMark_ == 1) { s7objectMachine.plccontrol.writeString(drawingMark.getAddress(), tasking.getProgramId()); } s7objectMachine.plccontrol.writeWord(widthOutOfService.getAddress(), tasking.getWidth().intValue());//y s7objectMachine.plccontrol.writeWord(lengthOutOfService.getAddress(), tasking.getLength().intValue());//x s7objectMachine.plccontrol.writeWord(isMark.getAddress(), isMark_); s7objectMachine.plccontrol.writeWord(markingMode.getAddress(), isMarkingMode_); s7objectMachine.plccontrol.writeWord(mesSend.getAddress(), 1); return; } } } catch (Exception e) { s7objectMachine.plccontrol.closeS7client(); log.info("逻辑处理异常:设备id【{}】", machine.getId()); } } @Override public void run() { while (true) { try { Thread.sleep(1000); plcStart(); } catch (InterruptedException e) { e.printStackTrace(); } catch (Exception e) { log.info("{}", e.getMessage()); } } } }