diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt index 9935cbf..1a0a03b 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt @@ -12,8 +12,12 @@ import com.common.serialport.utils.HexUtils import com.yinuo.safetywatcher.watcher.bean.GasReqBean import com.yinuo.safetywatcher.watcher.constant.GAS_CLOUD_UPLOAD_SIZE_ONCE import com.yinuo.safetywatcher.watcher.net.DevicesApi +import com.yinuo.safetywatcher.watcher.port.cmd.CH4 +import com.yinuo.safetywatcher.watcher.port.cmd.CH4_LEL2PPMFACTOR import com.yinuo.safetywatcher.watcher.port.cmd.GasPortStatus import com.yinuo.safetywatcher.watcher.port.cmd.GasTypeEnum +import com.yinuo.safetywatcher.watcher.port.cmd.H2 +import com.yinuo.safetywatcher.watcher.port.cmd.H2_LEL2PPMFACTOR import com.yinuo.safetywatcher.watcher.port.cmd.O2 import com.yinuo.safetywatcher.watcher.port.cmd.ResponseHelper import com.yinuo.safetywatcher.watcher.port.cmd.getGasTypeEnumByCode @@ -33,6 +37,7 @@ object ParseHelper { DevicesApi() } private val gasMap = hashMapOf<String, Gas>() + private val unConvertValueMap = hashMapOf<String, Float>() fun parse(it: ByteArray, index: Byte) { try { @@ -120,6 +125,7 @@ object ParseHelper { value = correctValueByOtherGas(type, value) LogUtils.w("receive msg 多气体矫正后 $type, 浓度 = $value $unit") + unConvertValueMap[type.desc] = value //根据单位进行数值转换 val localGasUnit = getLocalGasUnit(type.desc) @@ -301,21 +307,28 @@ object ParseHelper { * 根据其他气体修正当前气体值 * * @param type 类型 - * @param value 当前值 + * @param oriValue 当前值 * @return 修正后的值 */ - private fun correctValueByOtherGas(type: GasTypeEnum, value: Float): Float { + private fun correctValueByOtherGas(type: GasTypeEnum, oriValue: Float): Float { var offset = 0f - if (gasMap.isNotEmpty()) { - gasMap.forEach { entry -> - val gas = entry.value - val coefficient = getInfluenceCoefficient(type, gas.gasName) - if (gas.gasValue > 0f && coefficient != 0f) { - offset += gas.gasValue * coefficient + if (unConvertValueMap.isNotEmpty()) { + unConvertValueMap.forEach { entry -> + val gasValue = entry.value + val nameKey = entry.key + val coefficient = getInfluenceCoefficient(type, nameKey) + if (gasValue > 0f && coefficient != 0f) { + // h2和Ch4需要先转换成ppm,再参与计算 + offset += if (H2 == nameKey || CH4 == nameKey) { + val factor = if (H2 == nameKey) H2_LEL2PPMFACTOR else CH4_LEL2PPMFACTOR + lel2ppm(gasValue, factor) * coefficient + } else { + gasValue * coefficient + } } } } - return value + offset + return oriValue + offset } /**