package com.mes.job; import cn.hutool.json.JSONObject; import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType; import com.mes.common.S7objectFlipSlice; import com.mes.common.S7objectMachine; import com.mes.common.S7objectMarking; 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.GlassInfoMapper; import com.mes.md.mapper.MachineMapper; import com.mes.md.mapper.TaskingMapper; import com.mes.md.service.TaskingService; import com.mes.tools.WebSocketServer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; /** * 自动打标机 * @Author : yanzhxiin * @Date: 2024/8/20 11:19 * @Description: */ @Component @Slf4j public class MachineTask { public static String engineerId = ""; @Autowired TaskingMapper taskingMapper; @Autowired MachineMapper machineMapper; @Autowired TaskingService taskingService; @Autowired private GlassInfoMapper glassInfoMapper; public int a =1; public S7objectMachine s7objectMachine; //@Scheduled(fixedDelay = 1000) public void plcMachineTask() { Long machineId=12L; Machine machine=machineMapper.selectById(machineId); if (s7objectMachine==null){ s7objectMachine=new S7objectMachine(machine.getIp(),machine.getPort(),"PlcMarking", EPlcType.S1500); s7objectMachine.start(); } PlcParameterObject plcParameterObject = s7objectMachine.PlcMesObject; 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 String str=S7objectMarking.getinstance().plccontrol.readString("DB14.30"); //String width=S7objectMarking.getinstance().plccontrol.readWord(widthOutOfService.getAddress()); log.info("plcRequest:{},plcRequestID:{},mesSend:{},mesSendID:{},drawingMark:{}," + "plcReport:{},plcReportID:{},mesConfirm:{},mesConfirmID:{}" ,plcRequest.getValue(),plcRequestID.getValue(),mesSend.getValue(),isMark.getValue(),drawingMark.getValue(), plcReport.getValue(),plcReportID.getValue(),mesConfirm.getValue(),mesConfirmID.getValue()); 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(),""); S7objectMarking.getinstance().plccontrol.writeWord(markingMode.getAddress(), 0); S7objectMarking.getinstance().plccontrol.writeWord(lengthOutOfService.getAddress(), 0); S7objectMarking.getinstance().plccontrol.writeWord(widthOutOfService.getAddress(), 0); S7objectMarking.getinstance().plccontrol.writeWord(isMark.getAddress(), 0); S7objectMarking.getinstance().plccontrol.writeWord(mesSend.getAddress(), 0); return; } if ("0".equals(plcReport.getValue())&&"1".equals(mesConfirm.getValue())) { log.info("2.确认字置零"); //发送字置0 S7objectMarking.getinstance().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){//有任务 S7objectMarking.getinstance().plccontrol.writeWord(mesConfirm.getAddress(), 1); return; } } if("1".equals(plcRequest.getValue())&&"0".equals(mesSend.getValue())&& !plcRequestID.getValue().isEmpty()&&"开工".equals(machine.getState())){ Tasking tasking; if("0".equals(plcRequestID.getValue())){ //标准模式 tasking=taskingService.startMachineTask(machine); }else{ //定制模式 tasking=taskingService.startMachineTask(machine,plcRequestID.getValue()); } //log.info("4、发送任务 设备状态:{}, 数据:{},",machine,tasking); if(tasking!=null){ //模式:1定制 0 批量 是否打标:0不打标 1打标 int isMark_=tasking.getDrawingMarking()==null?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){ S7objectMarking.getinstance().plccontrol.writeString(drawingMark.getAddress(), tasking.getProgramId()); } //S7objectMarking.getinstance().plccontrol.writeUInt32 (mesSendID.getAddress(), 2); S7objectMarking.getinstance().plccontrol.writeWord(lengthOutOfService.getAddress(), tasking.getLength().intValue()); S7objectMarking.getinstance().plccontrol.writeWord(widthOutOfService.getAddress(), tasking.getWidth().intValue()); S7objectMarking.getinstance().plccontrol.writeWord(isMark.getAddress(), isMark_); S7objectMarking.getinstance().plccontrol.writeWord(markingMode.getAddress(), isMarkingMode_); S7objectMarking.getinstance().plccontrol.writeWord(mesSend.getAddress(), 1); return; } } //log.info("无可执行的条件"); } //@Scheduled(fixedDelay = 1000) public void markingTasks() { JSONObject jsonObject = new JSONObject(); Machine machine=machineMapper.selectById(11L); List taskingList=taskingService.findMachineTask(machine); jsonObject.append("taskingList", taskingList); jsonObject.append("machine", machine); ArrayList sendwServer = WebSocketServer.sessionMap.get("marking"); if (sendwServer != null) { for (WebSocketServer webserver : sendwServer) { if (webserver != null) { webserver.sendMessage(jsonObject.toString()); List messages = webserver.getMessages(); if (!messages.isEmpty()) { // // 将最后一个消息转换为整数类型的列表 webserver.clearMessages(); } } else { log.info("Home is closed"); } } } } }