Fixed MODBUS slave callback when SPS30 is not connected

This commit is contained in:
mj
2022-01-09 18:46:20 +01:00
parent 7e1e71a912
commit c9d28bd48f
3 changed files with 17 additions and 6 deletions

View File

@@ -99,6 +99,7 @@ int8_t uart_enable_interrupts(void);
/* USER CODE BEGIN Private defines */
#define MEASUREMENT_PERIOD_MS 600000
#define RESET_MAGIC_NUMBER 0xABCD
#define MODBUS_ASSERT(x) if (x == 0) return MODBUS_ERROR_FUNCTION_NOT_IMPLEMENTED
extern uint16_t usart2_rx_message_index;
extern uint16_t usart2_rx_message_len;

View File

@@ -125,6 +125,9 @@ uint8_t sensor_config_pending_write = 0;
uint8_t baudrate_changed = 0;
uint8_t modbus_address_changed = 0;
uint8_t co2_valid = 0;
/* dynamic sensor configuration */
uint8_t scd4x_is_connected = 0;
uint8_t sps30_is_connected = 0;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
@@ -251,9 +254,6 @@ int main(void)
device_id.object_name.ProductName = "SensCO2";
device_id.object_name.ModelName = "Hugo";
modbus_slave_init_device_id(&device_id);
uint8_t scd4x_is_connected = 0;
uint8_t sps30_is_connected = 0;
/* USER CODE END 2 */
/* Infinite loop */
@@ -863,33 +863,43 @@ int8_t modbus_slave_callback(modbus_transaction_t *transaction)
transaction->input_registers_signed[i] = (int16_t)T_SCD4x;
break;
case REGISTER_NUM_PMC_MASS_1_0:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.mass_concentration[PM1_0];
break;
case REGISTER_NUM_PMC_MASS_2_5:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.mass_concentration[PM2_5];
break;
case REGISTER_NUM_PMC_MASS_4_0:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.mass_concentration[PM4_0];
break;
case REGISTER_NUM_PMC_MASS_10_0:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.mass_concentration[PM10_0];
break;
case REGISTER_NUM_PMC_NUMBER_0_5:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.number_concentration[PM0_5];
break;
case REGISTER_NUM_PMC_NUMBER_1_0:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.number_concentration[PM1_0];
break;
case REGISTER_NUM_PMC_NUMBER_2_5:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.number_concentration[PM2_5];
break;
case REGISTER_NUM_PMC_NUMBER_4_0:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.number_concentration[PM4_0];
break;
case REGISTER_NUM_PMC_NUMBER_10_0:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.number_concentration[PM10_0];
break;
case REGISTER_NUM_TYPICAL_PARTICLE_SIZE:
MODBUS_ASSERT(sps30_is_connected);
transaction->input_registers[i] = (uint16_t)PM_SPS30.typical_particle_size;
break;
default: