Added MODBUS registers for sensor return (error) value
This commit is contained in:
parent
87ca42af91
commit
7acf7ab819
@ -90,9 +90,11 @@ enum
|
||||
REGISTER_NUM_PMC_NUMBER_4_0 = 30016, /* 1 / m^3 */
|
||||
REGISTER_NUM_PMC_NUMBER_10_0 = 30017, /* 1 / m^3 */
|
||||
REGISTER_NUM_TYPICAL_PARTICLE_SIZE = 30018, /* nm */
|
||||
REGISTER_NUM_T_SCD4x = 30019, /* deg C */
|
||||
REGISTER_NUM_T_SCD4x_F = 30020, /* deg F */
|
||||
REGISTER_NUM_RH_SCD4x = 30021 /* % */
|
||||
REGISTER_NUM_READ_ERR_T = 30019, /* deg C */
|
||||
REGISTER_NUM_READ_ERR_RH = 30020, /* deg C */
|
||||
REGISTER_NUM_READ_ERR_CO2 = 30021, /* deg C */
|
||||
REGISTER_NUM_READ_ERR_VOC = 30022, /* deg C */
|
||||
REGISTER_NUM_READ_ERR_PMC = 30023, /* deg C */
|
||||
/* VOC Index has initial blackout beriod, when the data is not ready. VOC index is 0 during this period */
|
||||
} data_registers_numbers;
|
||||
|
||||
@ -148,6 +150,12 @@ uint8_t sps30_is_connected = 0;
|
||||
uint8_t sgp40_is_connected = 0;
|
||||
/* Sensirion library for VOC */
|
||||
GasIndexAlgorithmParams voc_params;
|
||||
/* Sensor return value variables */
|
||||
int8_t read_error_temperature;
|
||||
int8_t read_error_rh;
|
||||
int8_t read_error_co2;
|
||||
int8_t read_error_voc;
|
||||
int8_t read_error_pmc;
|
||||
/* USER CODE END PV */
|
||||
|
||||
/* Private function prototypes -----------------------------------------------*/
|
||||
@ -461,12 +469,12 @@ int main(void)
|
||||
{
|
||||
/* TODO: Check the data */
|
||||
/* Read SHT4x data (always connected) */
|
||||
sht4x_measure(&T_SHT4x, &RH_SHT4x);
|
||||
read_error_temperature = read_error_rh = sht4x_measure(&T_SHT4x, &RH_SHT4x);
|
||||
TF_SHT4x = CELSIUS_TO_FAHRENHEIT(T_SHT4x);
|
||||
/* Read SCD4x data (if connected) */
|
||||
if (scd4x_is_connected == 1)
|
||||
{
|
||||
if (scd4x_read_measurement(&CO2, &T_SCD4x, &RH_SCD4x) != SCD4X_OK) {
|
||||
if ((read_error_co2 = scd4x_read_measurement(&CO2, &T_SCD4x, &RH_SCD4x)) != SCD4X_OK) {
|
||||
/* read failed, either I2C fail or CRC error */
|
||||
// TODO something
|
||||
}
|
||||
@ -481,7 +489,7 @@ int main(void)
|
||||
/* Read SPS30 data (if connected) */
|
||||
if (sps30_is_connected == 1)
|
||||
{
|
||||
sps30_read_measured_values(&PM_SPS30);
|
||||
read_error_pmc = sps30_read_measured_values(&PM_SPS30);
|
||||
}
|
||||
/* TODO: Process data and light a desired color of LED */
|
||||
/* TODO: Add hystheresis */
|
||||
@ -490,7 +498,7 @@ int main(void)
|
||||
if (sgp40_is_connected == 1)
|
||||
{
|
||||
//sgp40_measure_raw_signal(&voc_ticks);
|
||||
sgp40_measure_raw_signal_compensated(&voc_ticks_compensated, RH_SHT4x, T_SHT4x);
|
||||
read_error_voc = sgp40_measure_raw_signal_compensated(&voc_ticks_compensated, RH_SHT4x, T_SHT4x);
|
||||
// sgp40_measure_raw_signal(&voc_ticks);
|
||||
/* Sensirion VOC library */
|
||||
GasIndexAlgorithm_process(&voc_params, voc_ticks_compensated, (int32_t*)&voc_index);
|
||||
@ -1040,21 +1048,27 @@ int8_t modbus_slave_callback(modbus_transaction_t *transaction)
|
||||
MODBUS_ASSERT(sps30_is_connected);
|
||||
transaction->input_registers[i] = (uint16_t)PM_SPS30.typical_particle_size;
|
||||
break;
|
||||
case REGISTER_NUM_T_SCD4x:
|
||||
transaction->input_registers_signed[i] = (int16_t)T_SCD4x;
|
||||
break;
|
||||
case REGISTER_NUM_T_SCD4x_F:
|
||||
transaction->input_registers_signed[i] = (int16_t)TF_SCD4x;
|
||||
break;
|
||||
case REGISTER_NUM_RH_SCD4x:
|
||||
transaction->input_registers[i] = (uint16_t)RH_SCD4x;
|
||||
break;
|
||||
case REGISTER_NUM_SERIAL_NUMBER_1:
|
||||
transaction->input_registers[i] = (uint16_t)sensor_config.serial_number_1;
|
||||
break;
|
||||
case REGISTER_NUM_SERIAL_NUMBER_2:
|
||||
transaction->input_registers[i] = (uint16_t)sensor_config.serial_number_2;
|
||||
break;
|
||||
case REGISTER_NUM_READ_ERR_T:
|
||||
transaction->input_registers[i] = (uint16_t)read_error_temperature;
|
||||
break;
|
||||
case REGISTER_NUM_READ_ERR_RH:
|
||||
transaction->input_registers[i] = (uint16_t)read_error_rh;
|
||||
break;
|
||||
case REGISTER_NUM_READ_ERR_CO2:
|
||||
transaction->input_registers[i] = (uint16_t)read_error_co2;
|
||||
break;
|
||||
case REGISTER_NUM_READ_ERR_VOC:
|
||||
transaction->input_registers[i] = (uint16_t)read_error_voc;
|
||||
break;
|
||||
case REGISTER_NUM_READ_ERR_PMC:
|
||||
transaction->input_registers[i] = (uint16_t)read_error_pmc;
|
||||
break;
|
||||
default:
|
||||
return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user