产线输送机

This commit is contained in:
张怡蓉
2025-09-24 10:39:41 +08:00
parent 00dc18ca9e
commit b5656f096e

View File

@@ -4,12 +4,14 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.ruoyi.api.service.IApiService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.domain.SendData;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.device.ssj.domain.DeviceSsj;
import com.ruoyi.job.domain.MydoJob;
import com.ruoyi.job.service.IMydoJobService;
import com.ruoyi.queue.agv.service.IAgvQueueService;
import com.ruoyi.schedule.plcRead.ssj.PlcSsjRead;
import com.ruoyi.schedule.plcRead.util.Tools;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
@@ -79,50 +81,81 @@ public class LineSsjThread implements Runnable {
public void inDispatch(DeviceSsj SsjDevice) {
//如果到位,扫到条码,托盘大小,
if (SsjDevice.getDw() == 1 && StrUtil.isNotBlank(SsjDevice.getTrayCode()) && SsjDevice.getTraySize() !=0) {
log.info("设备:{} 位置:{} 条码:{} 托盘大小:{}",SsjDevice.getDeviceCode(),"产线",SsjDevice.getTrayCode(),SsjDevice.getTraySize());
//如果到位,扫到条码,托盘大小,执行阶段卡控一下(下发输送机后改执行阶段)
if (SsjDevice.getDw() == 1 && StrUtil.isNotBlank(SsjDevice.getTrayCode()) && SsjDevice.getTraySize() !=0 && SsjDevice.getTaskNo()<1000) {
log.info("设备:{} 位置:{} 条码:{} 托盘大小:{}",SsjDevice.getDeviceCode(),"产线到位",SsjDevice.getTrayCode(),SsjDevice.getTraySize());
//查作业,入如果已经有了,直接下发输送线
MydoJob mydoJob = new MydoJob();
mydoJob.setInOrOut("1");
mydoJob.setStatus("1");
mydoJob.setEntranceId("G1005");
mydoJob.setExecutionPhase("0");
List<MydoJob> mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob);
//有作业,下发输送机任务号,覆盖任务号
if(mydoJobs.size()>0){
mydoJob = mydoJobs.get(0);
SendData taskNo = new SendData(Tools.INT, mydoJob.getTaskNo());
byte[] bytes = Tools.sendData(taskNo);
int i = PlcSsjRead.WriteToSSJ(SsjDevice.getPlcDbWriteAddress(), bytes);
if (i==1){
mydoJob.setExecutionPhase("1");
mydoJobService.updateMydoJob(mydoJob);
log.info("G1005产线输送机下发任务号成功:"+mydoJob.getTaskNo());
}
}else {
//请求wms生成入库作业
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("trayCode",SsjDevice.getTrayCode());
paramMap.put("size",SsjDevice.getTraySize());
paramMap.put("floor","2");
paramMap.put("extranceId","G1005");
paramMap.put("trayCode", SsjDevice.getTrayCode());
paramMap.put("size", SsjDevice.getTraySize());
paramMap.put("floor", "2");
paramMap.put("extranceId", "G1005");
AjaxResult ajaxResult = apiService.createInMydoJob(paramMap);
//判断结果是否成功
if(ajaxResult.isSuccess()){
log.info("请求wms生成入库作业成功,条码为:{}",SsjDevice.getTrayCode());
}else{
log.error("请求wms生成入库作业失败,条码为:{}",SsjDevice.getTrayCode());
if (ajaxResult.isSuccess()) {
//拿到正常作业,插到wcs作业表,下发给输送机任务号,覆盖任务号
MydoJob mydoJob2 = (MydoJob) ajaxResult.get("mydoJob");
mydoJobService.insertMydoJob(mydoJob2);
SendData taskNo = new SendData(Tools.INT, mydoJob2.getTaskNo());
byte[] bytes = Tools.sendData(taskNo);
int i = PlcSsjRead.WriteToSSJ(SsjDevice.getPlcDbWriteAddress(), bytes);
if (i==1){
mydoJob2.setExecutionPhase("1");
mydoJobService.updateMydoJob(mydoJob2);
log.info("G1005产线输送机下发任务号成功:"+mydoJob2.getTaskNo());
}
} else if (ajaxResult.isError()) {
//超大,给plc下发错误信息,等待人工处理
//托盘大小对不上,给plc下发错误信息,等待人工处理
//码不对,给plc下发错误信息,等待人工处理
}
}
}
//查这个口的入库作业,与出库作业,如果没有出库作业,且有入库作业,生成agv搬运作业
if (SsjDevice.getDw() == 1 && StrUtil.isBlank(SsjDevice.getTrayCode()) && SsjDevice.getTraySize() !=0 && SsjDevice.getTaskNo()<1000) {
log.info("设备:{} 位置:{} 条码:{} 托盘大小:{}",SsjDevice.getDeviceCode(),"产线",SsjDevice.getTrayCode(),SsjDevice.getTraySize());
//查wcs有没作业,有下发给输送机任务号,覆盖任务号
MydoJob mydoJob = new MydoJob();
mydoJob.setEntranceId("G1005");
mydoJob.setInOrOut("1");
mydoJob.setStatus("1");
mydoJob.setInOut("1");
mydoJob.setEntranceId("G1005");
mydoJob.setExecutionPhase("0");
List<MydoJob> mydoJobs = mydoJobService.selectInOrOutMydoJobList(mydoJob);
if (mydoJobs.size() > 0) {
//没有,请求错误接口,找作业,返回成功,//拿到正常作业,插到wcs作业表,下发给输送机任务号,覆盖任务号,shibai...
for (MydoJob mydoJob1 : mydoJobs) {
MydoJob mydoJob2 = new MydoJob();
if ("1".equals(mydoJob1.getRoadwayId())){
mydoJob2.setExitId("L1011");
}else{
mydoJob2.setExitId("L1012");
}
mydoJob2.setInOut("2");
mydoJob2.setStatus("3");
List<MydoJob> mydoJobouts = mydoJobService.selectInOrOutMydoJobList(mydoJob2);
if (mydoJobouts.size() == 0) {
//生成agv搬运作业
}
}
}
if (SsjDevice.getDw() == 1 && SsjDevice.getTraySize() ==0 && SsjDevice.getTaskNo()>1000) {
log.info("设备:{} 位置:{} 条码:{} 托盘大小:{}",SsjDevice.getDeviceCode(),"产线",SsjDevice.getTrayCode(),SsjDevice.getTraySize());
//任务号查wcs作业,查巷道,看目标输送线是否空闲
}
}