package com.gzlh.device.plc.handler; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.spring.SpringUtil; import com.gzlh.bus.EventBus; import com.gzlh.bus.EventDataManager; import com.gzlh.bus.SysConfig; import com.gzlh.config.dto.SerialSetting; import com.gzlh.config.task.Task; import com.gzlh.config.task.TaskService; import com.gzlh.device.plc.client.PlcNettyConfig; import com.gzlh.utils.DeviceCache; import com.gzlh.utils.ModbusUtils; import lombok.extern.slf4j.Slf4j; /** * 检查下发落杆指令下发之后任然没有抬杆 */ @Slf4j public class CheckUpTask extends Task { private int tryCount; public CheckUpTask(String id, long delayInMilliseconds, int tryCount) { super(id, delayInMilliseconds); this.tryCount = tryCount; } @Override public void run() { if (tryCount >= 8) { log.error("尝试超过8次无法抬杆,需要人工干预========="); return; } String plcStatus= DeviceCache.getPlcStatus(); if (StrUtil.isEmpty(plcStatus)){ return; } SerialSetting.PlcDTO.StatusDTO statusDTO= SysConfig.serialSetting.getPlc().getStatus(); String upPoint= statusDTO.getUpPoint(); String upStatus=plcStatus.charAt(Integer.parseInt(upPoint))+""; if (upStatus.equals("1")){ log.info("抬杆完成,停止下发指令"); //已经上到位了,所以停止检查 return; } String gatePoint = SysConfig.serialSetting.getPlc().getOut().getGatePoint(); String command = PLCHadnler.COMMAND_PREFIX + gatePoint + PLCHadnler.COMMAND_ON; String packData = ModbusUtils.buildRequestPacket(command); PlcNettyConfig plcNettyConfig = SpringUtil.getBean(PlcNettyConfig.class); plcNettyConfig.send(packData); tryCount = tryCount + 1; TaskService taskService = SpringUtil.getBean(TaskService.class); taskService.addTask(new CheckUpTask(RandomUtil.randomNumbers(10), 2000, tryCount)); } }