package com.mes.job; import cn.hutool.json.JSONObject; import com.mes.common.S7object; import com.mes.common.S7objectMarking; 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.mapper.TaskingMapper; import com.mes.md.service.TaskingService; import com.mes.service.ModbusTcp; import com.mes.service.PlcAgreement; import com.mes.service.PlcParameter; import com.mes.tools.WebSocketServer; import com.mes.utils.HexUtil; 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.net.Socket; import java.net.UnknownHostException; import java.text.SimpleDateFormat; import java.util.*; import static cn.hutool.core.io.FileUtil.writeString; /** * 自动丝印机 * @Author : * @Date: 2024/8/20 11:19 * @Description: */ @Component @Slf4j public class SilkScreenTask { @Autowired TaskingMapper taskingMapper; @Autowired MachineMapper machineMapper; @Autowired TaskingService taskingService; public static Long machineId1 = 13L; public static Long machineId2 = 14L; //public ModbusTcp modbusTcp1 = null; public ModbusTcp modbusTcp2 = new ModbusTcp(); public List sendRecords = new ArrayList<>(); //@Scheduled(fixedDelay = 1000) public void plcSilkScreenTask() { Machine machine=machineMapper.selectById(machineId2); String fileName="PlcSilkScreen"; ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),fileName); modbusTcp1.connect(); PlcAgreement plcAgreement=modbusTcp1.getPlcAgreement(fileName); try { //while(true){ if(!modbusTcp1.read(plcAgreement)){ log.info("通讯读取新数据失败"); modbusTcp1.close(); return; } PlcParameter plcRequest =plcAgreement.getPlcParameter("plcRequest");//请求字 PlcParameter plcRequestID =plcAgreement.getPlcParameter("plcRequestID");//请求ID PlcParameter mesSend =plcAgreement.getPlcParameter("mesSend");//发送字 PlcParameter mesSendID =plcAgreement.getPlcParameter("mesSendID");//发送ID PlcParameter length =plcAgreement.getPlcParameter("length");//长 PlcParameter width =plcAgreement.getPlcParameter("width");//宽 PlcParameter thickness =plcAgreement.getPlcParameter("thickness");//厚 PlcParameter X =plcAgreement.getPlcParameter("X");//X PlcParameter Y =plcAgreement.getPlcParameter("Y");//Y //PlcParameter isSilkScreen =plcAgreement.getPlcParameter("isSilkScreen");//是否丝印 PlcParameter plcReport =plcAgreement.getPlcParameter("plcReport");//汇报字 PlcParameter plcReportID =plcAgreement.getPlcParameter("plcReportID");//汇报ID PlcParameter mesConfirm =plcAgreement.getPlcParameter("mesConfirm");//确认字 PlcParameter mesConfirmID =plcAgreement.getPlcParameter("mesConfirmID");//确认ID PlcParameter machineStatusWord =plcAgreement.getPlcParameter("machineStatusWord"); if (machine.getIsLog()>0){ modbusTcp1.consoleLogInfo(plcAgreement); } if (0==plcRequest.getValueInt()&&1==mesSend.getValueInt()) { log.info("1.发送字置零"); //发送字置0 String send=HexUtil.intTo2ByteHex(0); modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesSend.getAddressStart()/2)); log.info("发送字 清空成功;内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesSend.getAddressStart())); modbusTcp1.close(); return; } if (0==plcReport.getValueInt()&&0!=mesConfirm.getValueInt()) { log.info("2.确认字置零"); //发送字置0 String send=HexUtil.intTo2ByteHex(0); modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/2)); log.info("任务完成 清空成功;内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart())); modbusTcp1.close(); return; } if(1==plcReport.getValueInt()&&0==mesConfirm.getValueInt()){ int finishCount=taskingService.finishMachineTask(machine); log.info("3、任务完成"); if(finishCount>0) {//有任务 String send = HexUtil.intTo2ByteHex(1); modbusTcp1.writeString(send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart() / 2)); log.info("任务完成 成功 内容:{},发送起始地址:{}", send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart())); modbusTcp1.close(); return; } String send = HexUtil.intTo2ByteHex(1); modbusTcp1.writeString(send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart() / 2)); log.info("任务完成 异常成功 内容:{},发送起始地址:{}", send, HexUtil.intTo2ByteHex(mesConfirm.getAddressStart())); modbusTcp1.close(); return; } if(4==plcReport.getValueInt()&&0==mesConfirm.getValueInt()){ int finishCount=taskingService.glassDownLineOne(machine); if(finishCount>0){//有任务 log.info("4、人工拿走"); String send=HexUtil.intTo2ByteHex(4); modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/2)); log.info("人工拿走发送报文内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart())); modbusTcp1.close(); return; } String send=HexUtil.intTo2ByteHex(4); modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/2)); log.info("人工拿走异常 发送报文内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart())); modbusTcp1.close(); return; } if(2==plcReport.getValueInt()&&0==mesConfirm.getValueInt()){ int finishCount=taskingService.loseMachineTask(machine); if(finishCount>0){//有任务 log.info("2、重发"); String send=HexUtil.intTo2ByteHex(2); modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/2)); log.info("重发发送报文内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart())); modbusTcp1.close(); return; }else{ log.info("2、异常重发"); String send=HexUtil.intTo2ByteHex(2); modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/2)); log.info("异常重发发送报文内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart())); modbusTcp1.close(); return; } } if(3==plcReport.getValueInt()&&0==mesConfirm.getValueInt()){ int finishCount=taskingService.finishMachineTask(machine); if(finishCount>0){//有任务 log.info("3、设备上人工点破损"); String send=HexUtil.intTo2ByteHex(3); modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/2)); log.info("人工点破损发送报文内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart())); modbusTcp1.close(); return; }else{ //是否自动清除破损 log.info("3、无效破损 (没有找到此ID的玻璃)"); String send=HexUtil.intTo2ByteHex(3); modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/2)); log.info("发送报文内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart())); modbusTcp1.close(); //modbusTcp1.close(); return; } } List taskingCount=taskingService.findMachineWorkStateTask(machine,"正在工作"); if((1==plcRequest.getValueInt()&&0==mesSend.getValueInt()) &&"开工".equals(machine.getState()) &&taskingCount.size()7){ sendRecords.remove(0); } Map sendContentMap=new HashMap(); sendContentMap.put("sendContent",sendRecord); sendRecords.add(sendContentMap); return; } } //} } catch (Exception e) { log.info("交互逻辑错误"); } modbusTcp1.close(); //log.info("无可执行的条件"); } @Scheduled(fixedDelay = 1000) public void SilkScreenTasks() { JSONObject jsonObject = new JSONObject(); Machine machine=machineMapper.selectById(14L); List taskingList=taskingService.findMachineTask(machine); jsonObject.append("taskingList", taskingList); jsonObject.append("machine", machine); jsonObject.append("sendRecords", sendRecords); ArrayList sendwServer = WebSocketServer.sessionMap.get("silkScreenTask"); 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"); } } } } }