package com.mes.plcTaskThread;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.mes.md.entity.LineConfiguration;
|
import com.mes.md.entity.Machine;
|
import com.mes.md.entity.PrimitiveTask;
|
import com.mes.md.entity.Tasking;
|
import com.mes.md.mapper.MachineMapper;
|
import com.mes.md.mapper.TaskingMapper;
|
import com.mes.md.service.*;
|
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 org.apache.http.protocol.HTTP;
|
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
@Slf4j
|
public class MachineThread extends Thread{
|
|
TaskingMapper taskingMapper;
|
|
MachineMapper machineMapper;
|
|
TaskingService taskingService;
|
|
PrimitiveTaskService primitiveTaskService;
|
|
LineConfigurationService lineConfigurationService;
|
|
public MachineThread(TaskingMapper taskingMapper, MachineMapper machineMapper, TaskingService taskingService, PrimitiveTaskService primitiveTaskService, LineConfigurationService lineConfigurationService){
|
this.taskingMapper = taskingMapper;
|
this.machineMapper = machineMapper;
|
this.taskingService = taskingService;
|
this.primitiveTaskService = primitiveTaskService;
|
this.lineConfigurationService = lineConfigurationService;
|
}
|
|
|
public Long machineId = 2L;
|
public List<Map> sendRecords = new ArrayList<>();
|
|
// public void plcStart1(PlcAgreement plcAgreement,String zuKey) {
|
// //逻辑组 :请求组,完成组,其他组
|
// //List<Map<String,String>> map=new ArrayList<>();//逻辑组
|
// Map<String,Map<String,Map<String,String>>> map=new HashMap<>();//请求逻辑组
|
|
// Map<String,Map<String,String>> zuMap=map.get(zuKey);
|
//
|
// for(String key:map.keySet()){
|
// boolean istrue=false;
|
// if(plcAgreement.getPlcParameter(key).getValueString()==map.get(key)){
|
// istrue=true;
|
// }
|
// map.put(key,plcAgreement.getPlcParameter(key).getValueString());
|
// }
|
//
|
// }
|
|
public void plcStart() {
|
Machine machine=machineMapper.selectById(machineId);
|
ModbusTcp modbusTcp1 =new ModbusTcp(machine.getIp(),machine.getPort(),"PlcLoad");
|
modbusTcp1.connect();
|
PlcAgreement plcAgreement=modbusTcp1.getPlcAgreement("PlcLoad");
|
try {
|
if(!modbusTcp1.read(plcAgreement)){
|
log.info("通讯读取新数据失败");
|
modbusTcp1.close();
|
return;
|
}
|
PlcParameter plcRequest =plcAgreement.getPlcParameter("plcRequest");//请求字
|
PlcParameter mesSend =plcAgreement.getPlcParameter("mesSend");//发送字
|
PlcParameter mesSendCount =plcAgreement.getPlcParameter("mesSendCount");//发送数量
|
|
PlcParameter plcReport =plcAgreement.getPlcParameter("plcReport");//汇报字
|
PlcParameter plcReportID =plcAgreement.getPlcParameter("plcReportID");//汇报ID
|
PlcParameter mesConfirm =plcAgreement.getPlcParameter("mesConfirm");//确认字
|
PlcParameter mesConfirmID =plcAgreement.getPlcParameter("mesConfirmID");//确认ID
|
if (machine.getIsLog()>0){
|
modbusTcp1.consoleLogInfo(plcAgreement);
|
}
|
if (0==plcRequest.getValueInt()&&1==mesSend.getValueInt()) {
|
//发送字置0
|
String send= HexUtil.intTo2ByteHex(0);
|
modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesSend.getAddressStart()/2));
|
log.info("1.发送字置零 发送字 清空成功;内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesSend.getAddressStart()));
|
modbusTcp1.close();
|
return;
|
}
|
if (0==plcReport.getValueInt()&&0!=mesConfirm.getValueInt()) {
|
//确认字置零
|
String send=HexUtil.intTo2ByteHex(0);
|
modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()/2));
|
log.info("2.确认字置零 任务完成 清空成功;内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesConfirm.getAddressStart()));
|
modbusTcp1.close();
|
return;
|
}
|
if(1==plcReport.getValueInt()&&0==mesConfirm.getValueInt()){
|
int finishCount=taskingService.finishMachineTask(machine);
|
log.info("3、任务完成:"+plcReportID.getValueString());
|
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;
|
}
|
List<Tasking> taskingCount=taskingService.findMachineWorkStateTask(machine,"正在工作");
|
if((1==plcRequest.getValueInt()&&0==mesSend.getValueInt())
|
&&"开工".equals(machine.getState())){
|
int loadCount=0;
|
if(machine.getMode()==1){
|
//标准模式 找已领取未完成的第一条任务
|
LineConfiguration lineConfiguration=lineConfigurationService.machineLineConfiguration(machine);
|
List<PrimitiveTask> findPrimitiveTasking=primitiveTaskService.findPrimitiveTasking(machine,lineConfiguration.getLineId());
|
for(PrimitiveTask primitiveTask:findPrimitiveTasking){
|
//任务数>已上数量
|
List<Tasking> taskingTopList=taskingMapper.selectList(new QueryWrapper<Tasking>().lambda()
|
.eq(Tasking::getScanId,primitiveTask.getScanId())
|
);
|
loadCount=primitiveTask.getTaskQuantity()-taskingTopList.size();
|
loadCount=(loadCount>0?loadCount:0);
|
break;
|
}
|
//loadCount=taskingCount.size();
|
}else{
|
//定制模式
|
loadCount=1;
|
}
|
if(loadCount>0){
|
log.info("4、发送任务 任务数据:{}, 设备状态:{}, ",loadCount,machine);
|
String send=HexUtil.intTo2ByteHex(1)+ HexUtil.intTo2ByteHex(loadCount);
|
modbusTcp1.writeString(send,HexUtil.intTo2ByteHex(mesSend.getAddressStart()/2));
|
log.info("发送任务发送报文内容:{},发送起始地址:{}",send,HexUtil.intTo2ByteHex(mesSend.getAddressStart()/2));
|
modbusTcp1.close();
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
String sendRecord=df.format(new Date())+" "+"1 "+ loadCount;
|
if (sendRecords.size()>7){
|
sendRecords.remove(0);
|
}
|
Map sendContentMap=new HashMap();
|
sendContentMap.put("sendContent",sendRecord);
|
sendRecords.add(sendContentMap);
|
return;
|
}
|
}
|
} catch (Exception e) {
|
log.info("交互逻辑错误");
|
}
|
modbusTcp1.close();
|
}
|
@Override
|
public void run() {
|
while (this != null) {
|
try {
|
Thread.sleep(1000);
|
log.info("111");
|
plcStart();
|
//plcStart();
|
// if ("开工".equals(machine.getState()) ){
|
//
|
// }
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|