Fixed MODBUS slave callback when SPS30 is not connected
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user