| | |
| | | package com.ld.igds.protocol.modbus.command; |
| | | |
| | | import com.ld.igds.constant.BizType; |
| | | import com.ld.igds.constant.RedisConst; |
| | | import com.ld.igds.io.RemoteGasService; |
| | | import com.ld.igds.io.constant.OrderRespEnum; |
| | | import com.ld.igds.io.constant.ProtocolEnum; |
| | |
| | | import com.ld.igds.protocol.modbus.ServerUtil; |
| | | import com.ld.igds.protocol.modbus.data.ModbusGasResult; |
| | | import com.ld.igds.protocol.modbus.data.ModbusTcp; |
| | | import com.ld.igds.util.RedisUtil; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.scheduling.annotation.Async; |
| | | import org.springframework.stereotype.Component; |
| | |
| | | private HModbusService modbusService; |
| | | @Resource |
| | | private AnalysisService analysisService; |
| | | @Resource |
| | | private RedisUtil redisUtil; |
| | | |
| | | |
| | | @Override |
| | | public String getProtocol() { |
| | |
| | | |
| | | @Override |
| | | public GasResponse checkGas(CheckGasRequest request) { |
| | | |
| | | boolean isRun = isRun(request); |
| | | if (isRun) { |
| | | return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "提醒:当前仓正在执行检测"); |
| | | } |
| | | |
| | | String passCode = request.getDepotId(); |
| | | |
| | | try { |
| | |
| | | |
| | | boolean exeResult = ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), true); |
| | | if (exeResult) { |
| | | ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), false); |
| | | addRun(request); |
| | | //调用异步获取结果 |
| | | progressGasResult(request, modbusTcp); |
| | | log.debug("--------启动测气---{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode()); |
| | |
| | | return new GasResponse(OrderRespEnum.ORDER_SUCCESS); |
| | | } |
| | | |
| | | private void addRun(CheckGasRequest request) { |
| | | String key = RedisConst.buildKey(request.getCompanyId(), ServerUtil.RUN_TAG, request.getDepotId()); |
| | | |
| | | redisUtil.set(key, request, 6 * 60); |
| | | } |
| | | |
| | | private void delRun(CheckGasRequest request) { |
| | | String key = RedisConst.buildKey(request.getCompanyId(), ServerUtil.RUN_TAG, request.getDepotId()); |
| | | |
| | | redisUtil.del(key); |
| | | } |
| | | |
| | | private boolean isRun(CheckGasRequest request) { |
| | | String key = RedisConst.buildKey(request.getCompanyId(), ServerUtil.RUN_TAG, request.getDepotId()); |
| | | |
| | | Object obj = redisUtil.get(key); |
| | | if (null == obj) return false; |
| | | |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 异步执行进度查询 |
| | | * |
| | |
| | | */ |
| | | @Async |
| | | public void progressGasResult(CheckGasRequest request, ModbusTcp modbusTcp) { |
| | | |
| | | |
| | | log.debug("--------------异步执行气体检测记过获取-------------"); |
| | | |
| | |
| | | return; |
| | | } |
| | | |
| | | //根据通道数量线程等待,每个通道等待50秒 |
| | | //根据通道数量线程等待,每个通道等待60秒 |
| | | Thread.sleep(list.size() * 50 * 1000); |
| | | log.debug("--------------等待时间完成,开始获取检测结果-------------{}", modbusTcp.getBizCode()); |
| | | |
| | | boolean isRun = isRun(request); |
| | | if (!isRun) { |
| | | log.info("--------------当前仓库检测已经停止,取消结果查询-------------{}", modbusTcp.getBizCode()); |
| | | return; |
| | | } |
| | | |
| | | ModbusTcp modbusTcpTemp = modbusTcp; |
| | | List<ModbusGasResult> results = new ArrayList<>(); |
| | |
| | | modbusTcpTemp.setAddrExe(ServerUtil.getAddrExe(gasModbus.getPh3())); |
| | | check = ModbusUtil2.readHoldingRegister(modbusTcpTemp.getIp(), modbusTcpTemp.getPort(), modbusTcpTemp.getAddrExe()); |
| | | gasResult.setPh3(check); |
| | | |
| | | log.debug("----通道{},Co2={},O2={},Ph3={}", gasModbus.getPasscode(), gasResult.getCo2(), gasResult.getO2(), gasResult.getPh3()); |
| | | results.add(gasResult); |
| | | } |
| | | |
| | | //删除运行标记 |
| | | delRun(request); |
| | | |
| | | log.debug("----获取的气体检测结果---{}--{}", request.getDepotId(), results.toString()); |
| | | //通知解析 |
| | | analysisService.analysisGas(request, results); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("------------更新气体检测结果进度失败,执行异常-----{}--{}", modbusTcp.getBizCode(), e.getMessage()); |
| | | log.error("------------更新气体检测结果进度失败,执行异常-----{}--{}", modbusTcp.getBizCode(), e); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public GasResponse checkGasByPoint(CheckGasRequest request) { |
| | |
| | | log.debug("--------关闭测气---{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode()); |
| | | |
| | | //通知异步结束结果采集 |
| | | delRun(request); |
| | | } |
| | | |
| | | } catch (Exception e) { |