modbus master tcp destroy function works not correctly
Posted: Thu Feb 22, 2024 2:14 pm
Hardware:
Board: ESP32-S3 Dev Module
Ethernet: W5500 SPI Ethernet Modul
Description:
Hello, I am trying to make solution with one Master and more then 5 Slaves, for example 20. I read thet the Modbus implementation von ESP connected to all slaves at the beginning and then starting a modbus communication. Becose of low number of sockets, it is recommendet to connect not more then 5 slaves.
My decision is to connect slave number 1 then disconnect and go to slave N2 and so own. Based on example from Espressif:
To connect i use:
______________________________________________________________________________________________________________
void mb_master_start_dm()
{
vTaskDelay(100);
mb_tcp_addr_type_t ip_addr_type;
ip_addr_type = MB_IPV4;
int ip_cnt = master_get_slave_ip_stdin(slave_ip_address_table);
if (ip_cnt) { ESP_LOGI(TAG, "Configured %d IP addresse(s).", ip_cnt); }
else
{
ESP_LOGE(TAG, "Fail to get IP address from stdin. Continue.");
// return ESP_ERR_NOT_FOUND;
}
mb_communication_info_t comm_info = { 0 };
comm_info.ip_port = MB_TCP_PORT;
comm_info.ip_addr_type = ip_addr_type;
comm_info.ip_mode = MB_MODE_TCP;
comm_info.ip_addr = (void *)slave_ip_address_table;
volatile esp_netif_t *pp_netif = NULL;
ntwrk_get_active_netif(&pp_netif);
comm_info.ip_netif_ptr = pp_netif; //(void*)get_example_netif();
ESP_ERROR_CHECK(master_init_mb_master_dm(&comm_info));
vTaskDelay(50);
}
______________________________________________________________________________________________________________
and
______________________________________________________________________________________________________________
static esp_err_t master_init_mb_master_dm(mb_communication_info_t *comm_info)
{
void *master_handler = NULL;
esp_err_t err = mbc_master_init_tcp(&master_handler);
MB_RETURN_ON_FALSE((master_handler != NULL), ESP_ERR_INVALID_STATE, TAG, "mb controller initialization fail.");
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mb controller initialization fail, returns(0x%lx).", (uint32_t)err);
err = mbc_master_setup((void *)comm_info);
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mb controller setup fail, returns(0x%lx).", (uint32_t)err);
err = mbc_master_set_descriptor(&device_parameters, num_device_parameters);
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mb controller set descriptor fail, returns(0x%lx).", (uint32_t)err);
ESP_LOGI(TAG, "Modbus master stack initialized...");
err = mbc_master_start();
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mb controller start fail, returns(0x%lx).", (uint32_t)err);
vTaskDelay(5);
return err;
}
______________________________________________________________________________________________________________
For disconnect i call:
______________________________________________________________________________________________________________
static esp_err_t master_destroy(void)
{
esp_err_t err = mbc_master_destroy();
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mbc_master_destroy fail, returns(0x%lx).", (uint32_t)err);
ESP_LOGI(TAG, "Modbus master stack destroy...");
return err;
}
______________________________________________________________________________________________________________
i fixed a problem with sockets that would be not removed.
after some successful connects, communications and disconnects i am getting a core panic:
I (724264) MB_TCP_MASTER_PORT: Connecting to slaves...
-I (724264) MB_TCP_MASTER_PORT: Connected 1 slaves, start polling...
Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0).
Core 0 register dump:
PC : 0x4037cb38 PS : 0x00060234 A0 : 0x80382e78 A1 : 0x3fcd4620
0x4037cb38: esp_cpu_compare_and_set at C:/Users/Mykyta/esp_n/esp-idf/components/esp_hw_support/cpu.c:406
Has someone a solution to this problem?
Board: ESP32-S3 Dev Module
Ethernet: W5500 SPI Ethernet Modul
Description:
Hello, I am trying to make solution with one Master and more then 5 Slaves, for example 20. I read thet the Modbus implementation von ESP connected to all slaves at the beginning and then starting a modbus communication. Becose of low number of sockets, it is recommendet to connect not more then 5 slaves.
My decision is to connect slave number 1 then disconnect and go to slave N2 and so own. Based on example from Espressif:
To connect i use:
______________________________________________________________________________________________________________
void mb_master_start_dm()
{
vTaskDelay(100);
mb_tcp_addr_type_t ip_addr_type;
ip_addr_type = MB_IPV4;
int ip_cnt = master_get_slave_ip_stdin(slave_ip_address_table);
if (ip_cnt) { ESP_LOGI(TAG, "Configured %d IP addresse(s).", ip_cnt); }
else
{
ESP_LOGE(TAG, "Fail to get IP address from stdin. Continue.");
// return ESP_ERR_NOT_FOUND;
}
mb_communication_info_t comm_info = { 0 };
comm_info.ip_port = MB_TCP_PORT;
comm_info.ip_addr_type = ip_addr_type;
comm_info.ip_mode = MB_MODE_TCP;
comm_info.ip_addr = (void *)slave_ip_address_table;
volatile esp_netif_t *pp_netif = NULL;
ntwrk_get_active_netif(&pp_netif);
comm_info.ip_netif_ptr = pp_netif; //(void*)get_example_netif();
ESP_ERROR_CHECK(master_init_mb_master_dm(&comm_info));
vTaskDelay(50);
}
______________________________________________________________________________________________________________
and
______________________________________________________________________________________________________________
static esp_err_t master_init_mb_master_dm(mb_communication_info_t *comm_info)
{
void *master_handler = NULL;
esp_err_t err = mbc_master_init_tcp(&master_handler);
MB_RETURN_ON_FALSE((master_handler != NULL), ESP_ERR_INVALID_STATE, TAG, "mb controller initialization fail.");
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mb controller initialization fail, returns(0x%lx).", (uint32_t)err);
err = mbc_master_setup((void *)comm_info);
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mb controller setup fail, returns(0x%lx).", (uint32_t)err);
err = mbc_master_set_descriptor(&device_parameters, num_device_parameters);
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mb controller set descriptor fail, returns(0x%lx).", (uint32_t)err);
ESP_LOGI(TAG, "Modbus master stack initialized...");
err = mbc_master_start();
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mb controller start fail, returns(0x%lx).", (uint32_t)err);
vTaskDelay(5);
return err;
}
______________________________________________________________________________________________________________
For disconnect i call:
______________________________________________________________________________________________________________
static esp_err_t master_destroy(void)
{
esp_err_t err = mbc_master_destroy();
MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG, "mbc_master_destroy fail, returns(0x%lx).", (uint32_t)err);
ESP_LOGI(TAG, "Modbus master stack destroy...");
return err;
}
______________________________________________________________________________________________________________
i fixed a problem with sockets that would be not removed.
after some successful connects, communications and disconnects i am getting a core panic:
I (724264) MB_TCP_MASTER_PORT: Connecting to slaves...
-I (724264) MB_TCP_MASTER_PORT: Connected 1 slaves, start polling...
Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0).
Core 0 register dump:
PC : 0x4037cb38 PS : 0x00060234 A0 : 0x80382e78 A1 : 0x3fcd4620
0x4037cb38: esp_cpu_compare_and_set at C:/Users/Mykyta/esp_n/esp-idf/components/esp_hw_support/cpu.c:406
Has someone a solution to this problem?