package com.mes.job; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.opctask.entity.EdgStorageDeviceTask; import com.mes.opctask.service.EdgStorageDeviceTaskService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** * @Author : zhoush * @Date: 2024/10/10 8:05 * @Description: */ @Component @Slf4j public class OpcCacheGlassTask { private static final String EDG_STORAGE_DEVICE_ONE_TASK = "edg_storage_device_one_task"; private static final String EDG_STORAGE_DEVICE_TWO_TASK = "edg_storage_device_two_task"; @Autowired(required = false) MiloService miloService; @Resource(name = "cacheGlassStartCallback") SubscriptionCallback cacheGlassStartCallback; @Resource(name = "cacheGlassTestCallback") SubscriptionCallback cacheGlassTestCallback; @Resource 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()); } } // mesControlWord glassId // width height // thickness filmRemove // deviceControlWord deviceWarnState // @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 list = new ArrayList<>(); list.add(generateReadWriteEntity("A001-MB1.dev.mesControlWord", 0)); miloService.writeToOpcWord(list); } log.info("当前未收到磨边机的请求任务"); return; } EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK); String glassId = task.getGlassId(); if (StringUtils.isBlank(glassId)) { log.info("磨边前的架子没有玻璃信息"); return; } //获取磨边对列 EdgGlassTaskQueueInfo edgInfo = edgGlassTaskQueueInfoService.getOne(new LambdaQueryWrapper() .eq(EdgGlassTaskQueueInfo::getGlassId, glassId) .eq(EdgGlassTaskQueueInfo::getState, Const.GLASS_STATE_NEW)); if (edgInfo == null) { log.info("对列表中的玻璃id错误,请检查数据,玻璃id:{}", glassId); return; } List 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); } private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) { ReadWriteEntity readWriteEntity = new ReadWriteEntity(); readWriteEntity.setIdentifier(identifier); readWriteEntity.setValue(value); return readWriteEntity; } }