[feat] move neg_concentration to modbus 0x530 address

This commit is contained in:
zhji 2025-01-19 17:31:06 +08:00
parent bfbbf28024
commit 046572af97
3 changed files with 36 additions and 13 deletions

View File

@ -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;
}
}
}

View File

@ -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,
};

View File

@ -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 {