package com.mes.plcTaskThread; 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 com.mes.service.ModbusTcp; import com.mes.service.PlcAgreement; import com.mes.service.PlcParameter; import com.mes.utils.HexUtil; import lombok.extern.slf4j.Slf4j; import java.text.SimpleDateFormat; import java.util.*; @Slf4j public class MachineSilkScreen extends Thread{ private MachineMapper machineMapper; private TaskingService taskingService; public static Long machineId = 14L; public List sendRecords = new ArrayList<>(); public Machine thisMachine; public MachineSilkScreen(Machine machine,MachineMapper machineMapper, TaskingService taskingService){ this.thisMachine = machine; this.machineMapper = machineMapper; this.taskingService = taskingService; } public void plcStart() { Machine machine=machineMapper.selectById(thisMachine.getId()); String fileName=machine.getFileName(); ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),fileName); modbusTcp1.connect(); PlcAgreement plcAgreement=modbusTcp1.getPlcAgreement(fileName); try { 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("无可执行的条件"); } @Override public void run() { while (this != null) { try { Thread.sleep(1000); plcStart(); } catch (InterruptedException e) { e.printStackTrace(); } } } }