Fixed MODBUS slave callback when SPS30 is not connected
This commit is contained in:
parent
7e1e71a912
commit
c9d28bd48f
@ -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:
|
||||
|
@ -121,9 +121,9 @@ if action == 'read' or action == 'all':
|
||||
reg_name = ''
|
||||
try:
|
||||
result = s.read_register(reg_number)
|
||||
except ValueError:
|
||||
print(f'Register number {reg_number} cannot be read (wrong number?)')
|
||||
exit(-8)
|
||||
except:
|
||||
print(f'{reg_number : <10} {"N/A" : <10} Failed to read register')
|
||||
continue
|
||||
print(f'{reg_number : <10} {int(result) : <10} {reg_name}')
|
||||
elif action == 'write':
|
||||
if len(register_name) > 0:
|
||||
|
Loading…
Reference in New Issue
Block a user