mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 18:57:19 +02:00
Merge branch 'bugfix/fix_modbus_tcp_slave_examples_use_events_v52' into 'release/v5.2'
fix(examples/modbus): fix modbus slave examples may process event flags incorrectly (Backport v5.2) See merge request espressif/esp-idf!28246
This commit is contained in:
@ -175,13 +175,12 @@ void app_main(void)
|
|||||||
// incremented each access cycle reaches the CHAN_DATA_MAX_VAL value.
|
// incremented each access cycle reaches the CHAN_DATA_MAX_VAL value.
|
||||||
for(;holding_reg_params.holding_data0 < MB_CHAN_DATA_MAX_VAL;) {
|
for(;holding_reg_params.holding_data0 < MB_CHAN_DATA_MAX_VAL;) {
|
||||||
// Check for read/write events of Modbus master for certain events
|
// Check for read/write events of Modbus master for certain events
|
||||||
mb_event_group_t event = mbc_slave_check_event(MB_READ_WRITE_MASK);
|
(void)mbc_slave_check_event(MB_READ_WRITE_MASK);
|
||||||
const char* rw_str = (event & MB_READ_MASK) ? "READ" : "WRITE";
|
ESP_ERROR_CHECK_WITHOUT_ABORT(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
||||||
|
const char* rw_str = (reg_info.type & MB_READ_MASK) ? "READ" : "WRITE";
|
||||||
// Filter events and process them accordingly
|
// Filter events and process them accordingly
|
||||||
if(event & (MB_EVENT_HOLDING_REG_WR | MB_EVENT_HOLDING_REG_RD)) {
|
if(reg_info.type & (MB_EVENT_HOLDING_REG_WR | MB_EVENT_HOLDING_REG_RD)) {
|
||||||
// Get parameter information from parameter queue
|
// Get parameter information from parameter queue
|
||||||
ESP_ERROR_CHECK(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
|
||||||
ESP_LOGI(TAG, "HOLDING %s (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
ESP_LOGI(TAG, "HOLDING %s (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
||||||
rw_str,
|
rw_str,
|
||||||
reg_info.time_stamp,
|
reg_info.time_stamp,
|
||||||
@ -198,24 +197,21 @@ void app_main(void)
|
|||||||
}
|
}
|
||||||
portEXIT_CRITICAL(¶m_lock);
|
portEXIT_CRITICAL(¶m_lock);
|
||||||
}
|
}
|
||||||
} else if (event & MB_EVENT_INPUT_REG_RD) {
|
} else if (reg_info.type & MB_EVENT_INPUT_REG_RD) {
|
||||||
ESP_ERROR_CHECK(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
|
||||||
ESP_LOGI(TAG, "INPUT READ (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
ESP_LOGI(TAG, "INPUT READ (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
||||||
reg_info.time_stamp,
|
reg_info.time_stamp,
|
||||||
(unsigned)reg_info.mb_offset,
|
(unsigned)reg_info.mb_offset,
|
||||||
(unsigned)reg_info.type,
|
(unsigned)reg_info.type,
|
||||||
(uint32_t)reg_info.address,
|
(uint32_t)reg_info.address,
|
||||||
(unsigned)reg_info.size);
|
(unsigned)reg_info.size);
|
||||||
} else if (event & MB_EVENT_DISCRETE_RD) {
|
} else if (reg_info.type & MB_EVENT_DISCRETE_RD) {
|
||||||
ESP_ERROR_CHECK(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
|
||||||
ESP_LOGI(TAG, "DISCRETE READ (%" PRIu32 " us): ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
ESP_LOGI(TAG, "DISCRETE READ (%" PRIu32 " us): ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
||||||
reg_info.time_stamp,
|
reg_info.time_stamp,
|
||||||
(unsigned)reg_info.mb_offset,
|
(unsigned)reg_info.mb_offset,
|
||||||
(unsigned)reg_info.type,
|
(unsigned)reg_info.type,
|
||||||
(uint32_t)reg_info.address,
|
(uint32_t)reg_info.address,
|
||||||
(unsigned)reg_info.size);
|
(unsigned)reg_info.size);
|
||||||
} else if (event & (MB_EVENT_COILS_RD | MB_EVENT_COILS_WR)) {
|
} else if (reg_info.type & (MB_EVENT_COILS_RD | MB_EVENT_COILS_WR)) {
|
||||||
ESP_ERROR_CHECK(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
|
||||||
ESP_LOGI(TAG, "COILS %s (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
ESP_LOGI(TAG, "COILS %s (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
||||||
rw_str,
|
rw_str,
|
||||||
reg_info.time_stamp,
|
reg_info.time_stamp,
|
||||||
|
@ -169,12 +169,12 @@ static void slave_operation_func(void *arg)
|
|||||||
// incremented each access cycle reaches the CHAN_DATA_MAX_VAL value.
|
// incremented each access cycle reaches the CHAN_DATA_MAX_VAL value.
|
||||||
for(;holding_reg_params.holding_data0 < MB_CHAN_DATA_MAX_VAL;) {
|
for(;holding_reg_params.holding_data0 < MB_CHAN_DATA_MAX_VAL;) {
|
||||||
// Check for read/write events of Modbus master for certain events
|
// Check for read/write events of Modbus master for certain events
|
||||||
mb_event_group_t event = mbc_slave_check_event(MB_READ_WRITE_MASK);
|
(void)mbc_slave_check_event(MB_READ_WRITE_MASK);
|
||||||
const char* rw_str = (event & MB_READ_MASK) ? "READ" : "WRITE";
|
ESP_ERROR_CHECK_WITHOUT_ABORT(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
||||||
|
const char* rw_str = (reg_info.type & MB_READ_MASK) ? "READ" : "WRITE";
|
||||||
// Filter events and process them accordingly
|
// Filter events and process them accordingly
|
||||||
if(event & (MB_EVENT_HOLDING_REG_WR | MB_EVENT_HOLDING_REG_RD)) {
|
if(reg_info.type & (MB_EVENT_HOLDING_REG_WR | MB_EVENT_HOLDING_REG_RD)) {
|
||||||
// Get parameter information from parameter queue
|
// Get parameter information from parameter queue
|
||||||
ESP_ERROR_CHECK(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
|
||||||
ESP_LOGI(TAG, "HOLDING %s (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
ESP_LOGI(TAG, "HOLDING %s (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
||||||
rw_str,
|
rw_str,
|
||||||
reg_info.time_stamp,
|
reg_info.time_stamp,
|
||||||
@ -191,24 +191,21 @@ static void slave_operation_func(void *arg)
|
|||||||
}
|
}
|
||||||
portEXIT_CRITICAL(¶m_lock);
|
portEXIT_CRITICAL(¶m_lock);
|
||||||
}
|
}
|
||||||
} else if (event & MB_EVENT_INPUT_REG_RD) {
|
} else if (reg_info.type & MB_EVENT_INPUT_REG_RD) {
|
||||||
ESP_ERROR_CHECK(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
|
||||||
ESP_LOGI(TAG, "INPUT READ (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
ESP_LOGI(TAG, "INPUT READ (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
||||||
reg_info.time_stamp,
|
reg_info.time_stamp,
|
||||||
(unsigned)reg_info.mb_offset,
|
(unsigned)reg_info.mb_offset,
|
||||||
(unsigned)reg_info.type,
|
(unsigned)reg_info.type,
|
||||||
(uint32_t)reg_info.address,
|
(uint32_t)reg_info.address,
|
||||||
(unsigned)reg_info.size);
|
(unsigned)reg_info.size);
|
||||||
} else if (event & MB_EVENT_DISCRETE_RD) {
|
} else if (reg_info.type & MB_EVENT_DISCRETE_RD) {
|
||||||
ESP_ERROR_CHECK(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
|
||||||
ESP_LOGI(TAG, "DISCRETE READ (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
ESP_LOGI(TAG, "DISCRETE READ (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
||||||
reg_info.time_stamp,
|
reg_info.time_stamp,
|
||||||
(unsigned)reg_info.mb_offset,
|
(unsigned)reg_info.mb_offset,
|
||||||
(unsigned)reg_info.type,
|
(unsigned)reg_info.type,
|
||||||
(uint32_t)reg_info.address,
|
(uint32_t)reg_info.address,
|
||||||
(unsigned)reg_info.size);
|
(unsigned)reg_info.size);
|
||||||
} else if (event & (MB_EVENT_COILS_RD | MB_EVENT_COILS_WR)) {
|
} else if (reg_info.type & (MB_EVENT_COILS_RD | MB_EVENT_COILS_WR)) {
|
||||||
ESP_ERROR_CHECK(mbc_slave_get_param_info(®_info, MB_PAR_INFO_GET_TOUT));
|
|
||||||
ESP_LOGI(TAG, "COILS %s (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
ESP_LOGI(TAG, "COILS %s (%" PRIu32 " us), ADDR:%u, TYPE:%u, INST_ADDR:0x%" PRIx32 ", SIZE:%u",
|
||||||
rw_str,
|
rw_str,
|
||||||
reg_info.time_stamp,
|
reg_info.time_stamp,
|
||||||
|
Reference in New Issue
Block a user