igds-protocol-fzzy3/src/main/java/com/ld/igds/protocol/fzzy/analysis/AnalysisGas.java
@@ -48,8 +48,6 @@ private CoreGasService gasService; @Autowired private CoreCommonService commonService; @Autowired private ExeOrderService exeOrderService; @Autowired private NotifyWebInvoker notifyInvoker; igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java
@@ -56,7 +56,7 @@ modbusMaster.init(); //初始化之后等待,避免出现连接未创建 Thread.sleep(2000); Thread.sleep(2500); masterMap.put(key, modbusMaster); @@ -164,34 +164,6 @@ WriteCoilResponse coilResponse = (WriteCoilResponse) getMaster(ip, port).send(coilRequest); return !coilResponse.isException(); } /** * 写线圈开关状态数据 0x05 * * @param offset * @param status * @return * @throws ModbusTransportException * @throws ModbusInitException public static Boolean writeCoilStatus(String ip, int port, int offset, boolean status) throws ModbusTransportException, ModbusInitException, InterruptedException { // boolean coilValue = status; // WriteCoilRequest coilRequest = new WriteCoilRequest(slaveId, offset, coilValue); // WriteCoilResponse coilResponse = (WriteCoilResponse) getMaster(ip, port).send(coilRequest); // return !coilResponse.isException(); WriteCoilRequest coilRequest = new WriteCoilRequest(slaveId, offset, status); // Thread.sleep(3000); WriteCoilResponse coilResponse = (WriteCoilResponse) getMaster(ip, port).send(coilRequest); //发送清除命令 WriteCoilRequest coilRequest1 = new WriteCoilRequest(slaveId, offset, !status); getMaster(ip, port).send(coilRequest1); return !coilResponse.isException(); } */ /** igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ServerUtil.java
@@ -13,6 +13,10 @@ public static final String RUN_TAG = "RUN_TAG"; /** * 设备状态返回的结果 KEY= companyId + serId + deviceCode value = 结果状态 */ igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/AnalysisService.java
@@ -1,17 +1,24 @@ package com.ld.igds.protocol.modbus.command; import com.ld.igds.common.CoreDeviceService; import com.ld.igds.constant.BizType; import com.ld.igds.gas.CoreGasService; import com.ld.igds.io.constant.OrderRespEnum; import com.ld.igds.io.notify.NotifyWebInvoker; import com.ld.igds.io.request.CheckGasRequest; import com.ld.igds.io.request.DeviceControlRequest; import com.ld.igds.models.Gas; import com.ld.igds.protocol.modbus.ServerUtil; import com.ld.igds.protocol.modbus.data.ModbusGasResult; import com.ld.igds.util.ContextUtil; import com.ld.igds.util.NumberUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.Date; import java.util.List; /** @@ -25,6 +32,8 @@ private CoreDeviceService coreDeviceService; @Resource private NotifyWebInvoker notifyInvoker; @Autowired private CoreGasService gasService; /** @@ -58,5 +67,83 @@ * @param results */ public void analysisGas(CheckGasRequest request, List<ModbusGasResult> results) { log.debug("----------开始执行气体结果解析----{}", request.getDepotId()); String batchId = ContextUtil.getDefaultBatchId(); //主体信息 Gas gas = new Gas(batchId, request.getCompanyId(), request.getDepotId(), new Date()); gas.setCheckNum(results.size()); gas.setGasEnd(results.size()); gas.setGasStart(1); gas.setReceiveDate(new Date()); int sumNum = results.size(); double co2, o2, ph3, n2; double sumO2 = 0.0, sumCo2 = 0.0, sumPh3 = 0.0, sumN2 = 0.0; StringBuffer sb = new StringBuffer(); for (ModbusGasResult gasResult : results) { co2 = gasResult.getCo2().doubleValue(); o2 = gasResult.getO2().doubleValue(); ph3 = gasResult.getPh3().doubleValue(); n2 = -100; //TODO >>>>> 根据返回值进行判断和转换 if (gas.getPerCo2Max() < co2) { gas.setPerCo2Max(co2); } if (gas.getPerCo2Min() > co2) { gas.setPerCo2Min(co2); } if (gas.getPerO2Max() < o2) { gas.setPerO2Max(o2); } if (gas.getPerO2Min() > o2) { gas.setPerO2Min(o2); } if (gas.getPerPh3Max() < ph3) { gas.setPerPh3Max(ph3); } if (gas.getPerPh3Min() > ph3) { gas.setPerPh3Min(ph3); } if (gas.getPerN2Max() < n2) { gas.setPerN2Max(n2); } if (gas.getPerN2Min() > n2) { gas.setPerN2Min(n2); } //固定为:passCode,co2,o2,ph3,n2;passCode,co2,o2,ph3,n2;" sb.append(gasResult.getPasscode()); sb.append(","); sb.append(co2); sb.append(","); sb.append(o2); sb.append(","); sb.append(ph3); sb.append(","); sb.append(n2); sb.append(";"); sumCo2 += co2; sumO2 += o2; sumPh3 += ph3; sumN2 += n2; } gas.setPoints(sb.toString()); gas.setPerCo2(NumberUtil.keepPrecision(sumCo2 / sumNum, 2)); gas.setPerO2(NumberUtil.keepPrecision(sumO2 / sumNum, 2)); gas.setPerN2(NumberUtil.keepPrecision(sumN2 / sumNum, 2)); gas.setPerPh3(NumberUtil.keepPrecision(sumPh3 / sumNum, 2)); gasService.saveOrUpdateData(gas); // 调用通知前端 notifyInvoker.notifyWeb(gas.getCompanyId(), OrderRespEnum.MSG_SUCCESS, BizType.GAS, request.getDepotId() + " 气体检测:结果返回成功."); log.info("控制柜----->>>平台:气体解析完成-仓库={}", request.getDepotId()); } } igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/command/RemoteGasServiceImpl.java
@@ -1,6 +1,7 @@ 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; @@ -14,6 +15,7 @@ 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; @@ -39,6 +41,9 @@ private HModbusService modbusService; @Resource private AnalysisService analysisService; @Resource private RedisUtil redisUtil; @Override public String getProtocol() { @@ -47,6 +52,12 @@ @Override public GasResponse checkGas(CheckGasRequest request) { boolean isRun = isRun(request); if (isRun) { return new GasResponse(OrderRespEnum.ORDER_ERROR.getCode(), "提醒:当前仓正在执行检测"); } String passCode = request.getDepotId(); try { @@ -64,6 +75,8 @@ boolean exeResult = ModbusUtil2.writeCoilStatus(modbusTcp.getIp(), modbusTcp.getPort(), modbusTcp.getAddrExe(), true); if (exeResult) { addRun(request); //调用异步获取结果 progressGasResult(request, modbusTcp); log.debug("--------启动测气---{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode()); @@ -76,6 +89,27 @@ 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; } /** * 异步执行进度查询 * @@ -83,6 +117,7 @@ */ @Async public void progressGasResult(CheckGasRequest request, ModbusTcp modbusTcp) { log.debug("--------------异步执行气体检测记过获取-------------"); @@ -97,6 +132,12 @@ //根据通道数量线程等待,每个通道等待50秒 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<>(); @@ -124,16 +165,18 @@ results.add(gasResult); } //删除运行标记 delRun(request); log.debug("----获取的气体检测结果---{}--{}", request.getDepotId(), results.toString()); //通知解析 analysisService.analysisGas(request, results); } catch (Exception e) { log.error("------------更新气体检测结果进度失败,执行异常-----{}--{}", modbusTcp.getBizCode(), e.getMessage()); } } @Override public GasResponse checkGasByPoint(CheckGasRequest request) { @@ -162,6 +205,7 @@ log.debug("--------关闭测气---{}-{}", modbusTcp.getSerId(), modbusTcp.getBizCode()); //通知异步结束结果采集 delRun(request); } } catch (Exception e) {