diff --git a/lark1fq/src/concentration.c b/lark1fq/src/concentration.c index f9f27c5..5c300a5 100755 --- a/lark1fq/src/concentration.c +++ b/lark1fq/src/concentration.c @@ -148,7 +148,7 @@ int32_t concentration_calc(uint8_t ch) k = (p->concentration[idx_c] - p->concentration[idx_c - 1]) / (p->calc_b[idx_c] - p->calc_b[idx_c - 1]); temp = k * (cnt - p->calc_b[idx_c - 1]) + p->concentration[idx_c - 1]; - return concentration_neg_drift_compensation(ch, (int32_t)temp); + return (int32_t)temp; } void concentration_loop(void) @@ -161,16 +161,20 @@ void concentration_loop(void) for (uint8_t i = 0; i < 4; i++) { if ((data_gas_info.id[i] != GAS_ID_INVALID) && (data_gas_info.id[i] != GAS_ID_REF)) { device_data.gas_concentration[i] = concentration_calc(i); + device_data.gas_neg_concentration[i] = concentration_neg_drift_compensation(i, device_data.gas_concentration[i]); } else { device_data.gas_concentration[i] = 0; + device_data.gas_neg_concentration[i] = 0; } } } else if (data_gas_info.comb == GAS_COMB_2_2) { for (uint8_t i = 0; i < 4; i++) { if ((data_gas_info.id[i] != GAS_ID_INVALID) && (data_gas_info.id[i] != GAS_ID_REF)) { device_data.gas_concentration[i] = concentration_calc(i); + device_data.gas_neg_concentration[i] = concentration_neg_drift_compensation(i, device_data.gas_concentration[i]); } else { device_data.gas_concentration[i] = 0; + device_data.gas_neg_concentration[i] = 0; } } } else if (data_gas_info.comb == GAS_COMB_3_1) { @@ -181,15 +185,18 @@ void concentration_loop(void) if ((data_gas_info.id[i] != GAS_ID_INVALID) && (data_gas_info.id[i] != GAS_ID_REF)) { conc = concentration_calc(i); device_data.gas_concentration[i] = conc; + device_data.gas_neg_concentration[i] = concentration_neg_drift_compensation(i, device_data.gas_concentration[i]); sum += conc; } else { ref = i; } } device_data.gas_concentration[ref] = sum / 3; + device_data.gas_neg_concentration[ref] = concentration_neg_drift_compensation(ref, device_data.gas_concentration[ref]); } else { for (uint8_t i = 0; i < 4; i++) { device_data.gas_concentration[i] = 0; + device_data.gas_neg_concentration[i] = 0; } } } diff --git a/lark1fq/src/device.c b/lark1fq/src/device.c index 98834ff..f1b8217 100755 --- a/lark1fq/src/device.c +++ b/lark1fq/src/device.c @@ -106,7 +106,7 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_MAIN + 65] = (uint8_t *)(&flag.gas_fault) + 2, [OFFSET_MAIN + 66] = (uint8_t *)(&flag.gas_fault) + 1, [OFFSET_MAIN + 67] = (uint8_t *)(&flag.gas_fault) + 0, - [(OFFSET_MAIN + 68) ... (OFFSET_MAIN + 511)] = (uint8_t *)0, + [(OFFSET_MAIN + 68) ... (OFFSET_MAIN + 511)] = num_tab_ro + 0, [OFFSET_GAS1 + 0] = (uint8_t *)(&bitmap_main->gas1_sub_id) + 3, [OFFSET_GAS1 + 1] = (uint8_t *)(&bitmap_main->gas1_sub_id) + 2, @@ -360,7 +360,7 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_GAS1 + 249] = (uint8_t *)&((*bitmap_gas)[0].user_cali.span_data[4][6]) + 2, [OFFSET_GAS1 + 250] = (uint8_t *)&((*bitmap_gas)[0].user_cali.span_data[4][6]) + 1, [OFFSET_GAS1 + 251] = (uint8_t *)&((*bitmap_gas)[0].user_cali.span_data[4][6]) + 0, - [(OFFSET_GAS1 + 252) ... (OFFSET_GAS1 + 511)] = (uint8_t *)0, + [(OFFSET_GAS1 + 252) ... (OFFSET_GAS1 + 511)] = num_tab_ro + 0, [OFFSET_GAS2 + 0] = (uint8_t *)(&bitmap_main->gas2_sub_id) + 3, [OFFSET_GAS2 + 1] = (uint8_t *)(&bitmap_main->gas2_sub_id) + 2, @@ -646,7 +646,7 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_GAS2 + 249] = (uint8_t *)&((*bitmap_gas)[1].user_cali.span_data[4][6]) + 2, [OFFSET_GAS2 + 250] = (uint8_t *)&((*bitmap_gas)[1].user_cali.span_data[4][6]) + 1, [OFFSET_GAS2 + 251] = (uint8_t *)&((*bitmap_gas)[1].user_cali.span_data[4][6]) + 0, - [(OFFSET_GAS2 + 252) ... (OFFSET_GAS2 + 511)] = (uint8_t *)0, + [(OFFSET_GAS2 + 252) ... (OFFSET_GAS2 + 511)] = num_tab_ro + 0, [OFFSET_GAS3 + 0] = (uint8_t *)(&bitmap_main->gas3_sub_id) + 3, [OFFSET_GAS3 + 1] = (uint8_t *)(&bitmap_main->gas3_sub_id) + 2, @@ -932,7 +932,7 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_GAS3 + 249] = (uint8_t *)&((*bitmap_gas)[2].user_cali.span_data[4][6]) + 2, [OFFSET_GAS3 + 250] = (uint8_t *)&((*bitmap_gas)[2].user_cali.span_data[4][6]) + 1, [OFFSET_GAS3 + 251] = (uint8_t *)&((*bitmap_gas)[2].user_cali.span_data[4][6]) + 0, - [(OFFSET_GAS3 + 252) ... (OFFSET_GAS3 + 511)] = (uint8_t *)0, + [(OFFSET_GAS3 + 252) ... (OFFSET_GAS3 + 511)] = num_tab_ro + 0, [OFFSET_GAS4 + 0] = (uint8_t *)(&bitmap_main->gas4_sub_id) + 3, [OFFSET_GAS4 + 1] = (uint8_t *)(&bitmap_main->gas4_sub_id) + 2, @@ -1218,7 +1218,7 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_GAS4 + 249] = (uint8_t *)&((*bitmap_gas)[3].user_cali.span_data[4][6]) + 2, [OFFSET_GAS4 + 250] = (uint8_t *)&((*bitmap_gas)[3].user_cali.span_data[4][6]) + 1, [OFFSET_GAS4 + 251] = (uint8_t *)&((*bitmap_gas)[3].user_cali.span_data[4][6]) + 0, - [(OFFSET_GAS4 + 252) ... (OFFSET_GAS4 + 511)] = (uint8_t *)0, + [(OFFSET_GAS4 + 252) ... (OFFSET_GAS4 + 511)] = num_tab_ro + 0, [OFFSET_DATA + 0] = (uint8_t *)&(device_data.detector_temperature) + 3, [OFFSET_DATA + 1] = (uint8_t *)&(device_data.detector_temperature) + 2, @@ -1260,7 +1260,7 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_DATA + 37] = (uint8_t *)&(device_data.gas_sig[0]) + 2, [OFFSET_DATA + 38] = (uint8_t *)&(device_data.gas_sig[0]) + 1, [OFFSET_DATA + 39] = (uint8_t *)&(device_data.gas_sig[0]) + 0, - [(OFFSET_DATA + 40) ... (OFFSET_DATA + 47)] = (uint8_t *)0, + [(OFFSET_DATA + 40) ... (OFFSET_DATA + 47)] = num_tab_ro + 0, [OFFSET_DATA + 48] = (uint8_t *)&(device_data.gas_concentration[1]) + 3, [OFFSET_DATA + 49] = (uint8_t *)&(device_data.gas_concentration[1]) + 2, [OFFSET_DATA + 50] = (uint8_t *)&(device_data.gas_concentration[1]) + 1, @@ -1269,7 +1269,7 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_DATA + 53] = (uint8_t *)&(device_data.gas_sig[1]) + 2, [OFFSET_DATA + 54] = (uint8_t *)&(device_data.gas_sig[1]) + 1, [OFFSET_DATA + 55] = (uint8_t *)&(device_data.gas_sig[1]) + 0, - [(OFFSET_DATA + 56) ... (OFFSET_DATA + 63)] = (uint8_t *)0, + [(OFFSET_DATA + 56) ... (OFFSET_DATA + 63)] = num_tab_ro + 0, [OFFSET_DATA + 64] = (uint8_t *)&(device_data.gas_concentration[2]) + 3, [OFFSET_DATA + 65] = (uint8_t *)&(device_data.gas_concentration[2]) + 2, [OFFSET_DATA + 66] = (uint8_t *)&(device_data.gas_concentration[2]) + 1, @@ -1278,7 +1278,7 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_DATA + 69] = (uint8_t *)&(device_data.gas_sig[2]) + 2, [OFFSET_DATA + 70] = (uint8_t *)&(device_data.gas_sig[2]) + 1, [OFFSET_DATA + 71] = (uint8_t *)&(device_data.gas_sig[2]) + 0, - [(OFFSET_DATA + 72) ... (OFFSET_DATA + 79)] = (uint8_t *)0, + [(OFFSET_DATA + 72) ... (OFFSET_DATA + 79)] = num_tab_ro + 0, [OFFSET_DATA + 80] = (uint8_t *)&(device_data.gas_concentration[3]) + 3, [OFFSET_DATA + 81] = (uint8_t *)&(device_data.gas_concentration[3]) + 2, [OFFSET_DATA + 82] = (uint8_t *)&(device_data.gas_concentration[3]) + 1, @@ -1287,8 +1287,24 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_DATA + 85] = (uint8_t *)&(device_data.gas_sig[3]) + 2, [OFFSET_DATA + 86] = (uint8_t *)&(device_data.gas_sig[3]) + 1, [OFFSET_DATA + 87] = (uint8_t *)&(device_data.gas_sig[3]) + 0, - [(OFFSET_DATA + 88) ... (OFFSET_DATA + 95)] = (uint8_t *)0, - [(OFFSET_DATA + 96) ... (OFFSET_DATA + 511)] = (uint8_t *)0, + [(OFFSET_DATA + 88) ... (OFFSET_DATA + 95)] = num_tab_ro + 0, + [OFFSET_DATA + 96] = (uint8_t *)&(device_data.gas_neg_concentration[0]) + 3, + [OFFSET_DATA + 97] = (uint8_t *)&(device_data.gas_neg_concentration[0]) + 2, + [OFFSET_DATA + 98] = (uint8_t *)&(device_data.gas_neg_concentration[0]) + 1, + [OFFSET_DATA + 99] = (uint8_t *)&(device_data.gas_neg_concentration[0]) + 0, + [OFFSET_DATA + 100] = (uint8_t *)&(device_data.gas_neg_concentration[1]) + 3, + [OFFSET_DATA + 101] = (uint8_t *)&(device_data.gas_neg_concentration[1]) + 2, + [OFFSET_DATA + 102] = (uint8_t *)&(device_data.gas_neg_concentration[1]) + 1, + [OFFSET_DATA + 103] = (uint8_t *)&(device_data.gas_neg_concentration[1]) + 0, + [OFFSET_DATA + 104] = (uint8_t *)&(device_data.gas_neg_concentration[2]) + 3, + [OFFSET_DATA + 105] = (uint8_t *)&(device_data.gas_neg_concentration[2]) + 2, + [OFFSET_DATA + 106] = (uint8_t *)&(device_data.gas_neg_concentration[2]) + 1, + [OFFSET_DATA + 107] = (uint8_t *)&(device_data.gas_neg_concentration[2]) + 0, + [OFFSET_DATA + 108] = (uint8_t *)&(device_data.gas_neg_concentration[3]) + 3, + [OFFSET_DATA + 109] = (uint8_t *)&(device_data.gas_neg_concentration[3]) + 2, + [OFFSET_DATA + 110] = (uint8_t *)&(device_data.gas_neg_concentration[3]) + 1, + [OFFSET_DATA + 111] = (uint8_t *)&(device_data.gas_neg_concentration[3]) + 0, + [(OFFSET_DATA + 112) ... (OFFSET_DATA + 511)] = num_tab_ro + 0, [OFFSET_STAT + 0] = (uint8_t *)&(device_status.cali_zero_record_status[0]) + 1, [OFFSET_STAT + 1] = (uint8_t *)&(device_status.cali_zero_record_status[0]) + 0, @@ -1312,5 +1328,5 @@ const uint8_t * const modbus_map_ro[] = { [OFFSET_STAT + 19] = (uint8_t *)&(device_status.cali_restore_status) + 0, [OFFSET_STAT + 20] = (uint8_t *)&(device_status.heat_on_off_status) + 1, [OFFSET_STAT + 21] = (uint8_t *)&(device_status.heat_on_off_status) + 0, - [(OFFSET_STAT + 22) ... (OFFSET_STAT + 511)] = (uint8_t *)0, + [(OFFSET_STAT + 22) ... (OFFSET_STAT + 511)] = num_tab_ro + 0, }; diff --git a/lark1fq/src/device.h b/lark1fq/src/device.h index 2764bc2..5ab4001 100755 --- a/lark1fq/src/device.h +++ b/lark1fq/src/device.h @@ -159,7 +159,7 @@ struct device_data_s { uint32_t gas_sig[4]; // uint32_t gas_sig_fliter[4]; int32_t gas_concentration[4]; - // int32_t gas_neg_concentration[4]; + int32_t gas_neg_concentration[4]; }; struct device_status_s {