| | |
| | | package com.mes.job; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.kangaroohy.milo.model.ReadWriteEntity; |
| | | import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; |
| | | import com.kangaroohy.milo.service.MiloService; |
| | | import com.mes.common.config.Const; |
| | | import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo; |
| | | import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService; |
| | | import com.mes.glassinfo.entity.GlassInfo; |
| | | import com.mes.glassinfo.service.GlassInfoService; |
| | | import com.mes.opctask.entity.EdgStorageDeviceTask; |
| | | import com.mes.opctask.service.EdgStorageDeviceTaskService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | EdgStorageDeviceTaskService edgStorageDeviceTaskService; |
| | | @Resource |
| | | EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService; |
| | | private int sum = 0; |
| | | |
| | | @Scheduled(fixedDelay = 10) |
| | | public void startOpcTask() throws Exception { |
| | | // miloService.subscriptionFromOpcUa(Arrays.asList("C101-WL.S7-1200.plc_task_state", "D101-WL.S7-1200.plc_task_state"), cacheGlassStartCallback); |
| | | // miloService.subscriptionFromOpcUa(Arrays.asList("mes.dec.edg_storage_device_one_task[1].task_state", "D101-WL.S7-1200.plc_task_state"), cacheGlassTestCallback); |
| | | // log.info("--------------------s---------------------------"); |
| | | EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage("edg_storage_device_one_task"); |
| | | try { |
| | | if (task == null) { |
| | | log.info("任务表基础数据录入失败,请检查数据是否录入成功"); |
| | | return; |
| | | } |
| | | if (task.getTaskState() == sum) { |
| | | return; |
| | | } |
| | | sum = task.getTaskState(); |
| | | task.setTaskRunning(sum); |
| | | log.info("当前第{}次执行", task.getTaskRunning()); |
| | | // task.setTaskState(task.getTaskRunning()); |
| | | edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task); |
| | | } catch (Exception e) { |
| | | log.info("{}", e.getMessage()); |
| | | } |
| | | @Resource |
| | | GlassInfoService glassInfoService; |
| | | |
| | | private String glassIdOne = ""; |
| | | private String glassIdTwo = ""; |
| | | |
| | | @Scheduled(fixedDelay = Long.MAX_VALUE) |
| | | public void startOneOpcTask() throws Exception { |
| | | miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL1.edg_storage_device_one_task[1].task_state"), cacheGlassStartCallback); |
| | | } |
| | | |
| | | // mesControlWord glassId |
| | | // width height |
| | | // thickness filmRemove |
| | | // deviceControlWord deviceWarnState |
| | | @Scheduled(fixedDelay = Long.MAX_VALUE) |
| | | public void startTwoOpcTask() throws Exception { |
| | | miloService.subscriptionFromOpcUa(Arrays.asList("mes.WL2.edg_storage_device_two_task[1].task_state"), cacheGlassStartCallback); |
| | | } |
| | | |
| | | // @Scheduled(fixedDelay = 1000) |
| | | public void edgOpcTask() throws Exception { |
| | | ReadWriteEntity controlEntity = miloService.readFromOpcUa("A001-MB1.dev.deviceControlWord"); |
| | | String deviceControlWord = (String) controlEntity.getValue(); |
| | | if ("0".equals(deviceControlWord)) { |
| | | ReadWriteEntity messageEntity = miloService.readFromOpcUa("A001-MB1.dev.mesControlWord"); |
| | | String messageValue = (String) messageEntity.getValue(); |
| | | if ("1".equals(messageValue)) { |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(generateReadWriteEntity("A001-MB1.dev.mesControlWord", 0)); |
| | | miloService.writeToOpcWord(list); |
| | | } |
| | | log.info("当前未收到磨边机的请求任务"); |
| | | return; |
| | | } |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void edgOneOpcTask() throws Exception { |
| | | EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK); |
| | | String glassId = task.getGlassId(); |
| | | if (StringUtils.isBlank(glassId)) { |
| | | log.info("磨边前的架子没有玻璃信息"); |
| | | if (StringUtils.isBlank(glassId) || glassId.equals(glassIdOne)) { |
| | | log.info("{}号线磨边前玻璃未就位,结束本次任务", 1); |
| | | return; |
| | | } |
| | | //获取磨边对列 |
| | | EdgGlassTaskQueueInfo edgInfo = edgGlassTaskQueueInfoService.getOne(new LambdaQueryWrapper<EdgGlassTaskQueueInfo>() |
| | | .eq(EdgGlassTaskQueueInfo::getGlassId, glassId) |
| | | .eq(EdgGlassTaskQueueInfo::getState, Const.GLASS_STATE_NEW)); |
| | | if (edgInfo == null) { |
| | | edgTaskChild(glassId, 1); |
| | | } |
| | | |
| | | @Scheduled(fixedDelay = 1000) |
| | | public void edgTwoOpcTask() throws Exception { |
| | | EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_TWO_TASK); |
| | | String glassId = task.getGlassId(); |
| | | if (StringUtils.isBlank(glassId) || glassId.equals(glassIdTwo)) { |
| | | log.info("{}号线磨边前玻璃未就位,结束本次任务", 2); |
| | | return; |
| | | } |
| | | edgTaskChild(glassId, 2); |
| | | } |
| | | |
| | | private void edgTaskChild(String glassId, int cell) throws Exception { |
| | | GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId).last("limit 1")); |
| | | if (glassInfo == null) { |
| | | log.info("对列表中的玻璃id错误,请检查数据,玻璃id:{}", glassId); |
| | | return; |
| | | } |
| | | String toEndingId = glassInfo.getTemperingLayoutId() + "" + glassInfo.getTemperingFeedSequence(); |
| | | List<ReadWriteEntity> list = new ArrayList<>(); |
| | | list.add(generateReadWriteEntity("A001-MB1.dev.mesControlWord", 1)); |
| | | list.add(generateReadWriteEntity("A001-MB1.dev.glassId", glassId)); |
| | | list.add(generateReadWriteEntity("A001-MB1.dev.width", edgInfo.getWidth())); |
| | | list.add(generateReadWriteEntity("A001-MB1.dev.height", edgInfo.getHeight())); |
| | | list.add(generateReadWriteEntity("A001-MB1.dev.thickness", edgInfo.getThickness())); |
| | | list.add(generateReadWriteEntity("A001-MB1.dev.filmRemove", 0)); |
| | | miloService.writeToOpcWord(list); |
| | | list.add(generateReadWriteEntity("PLC.MB" + cell + ".mesControl", true)); |
| | | list.add(generateReadWriteEntity("PLC.MB" + cell + ".glassId", Integer.parseInt(toEndingId))); |
| | | list.add(generateReadWriteEntity("PLC.MB" + cell + ".toEdingId", Integer.parseInt(toEndingId))); |
| | | list.add(generateReadWriteEntity("PLC.MB" + cell + ".width", (int) Math.max(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10))); |
| | | list.add(generateReadWriteEntity("PLC.MB" + cell + ".height", (int) Math.min(glassInfo.getWidth() * 10, glassInfo.getHeight() * 10))); |
| | | |
| | | miloService.writeToOpcUa(list); |
| | | miloService.writeToOpcWord(generateReadWriteEntity("PLC.MB" + cell + ".thickness", (int) glassInfo.getThickness() * 10)); |
| | | //修改磨边对列中的磨边线路及状态 |
| | | edgGlassTaskQueueInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskQueueInfo>() |
| | | .set(EdgGlassTaskQueueInfo::getLine, cell) |
| | | .set(EdgGlassTaskQueueInfo::getState, 1) |
| | | .eq(EdgGlassTaskQueueInfo::getGlassId, glassId) |
| | | .eq(EdgGlassTaskQueueInfo::getState, Const.GLASS_STATE_NEW)); |
| | | if (cell == 1) { |
| | | glassIdOne = glassId; |
| | | } else { |
| | | glassIdTwo = glassId; |
| | | } |
| | | |
| | | } |
| | | |
| | | private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) { |
| | | ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | readWriteEntity.setIdentifier(identifier); |
| | | readWriteEntity.setValue(value); |
| | | return readWriteEntity; |
| | | return ReadWriteEntity.builder() |
| | | .identifier(identifier) |
| | | //Kep中是Long类型,即:Int32,Java中的int类型 |
| | | .value(value) |
| | | .build(); |
| | | } |
| | | } |