Ich habe einen ESP32 laufen, welcher den Modbus Master aus dem ESP IDF
betreibt.
Aus irgendeinem Grund kommt es nach einiger Zeit (5-15 Minuten) im
Betrieb zu folgender Meldung und der ESP startet neu.
assert failed: xMBMasterRTUReceiveFSM mbrtu_m.c:235 (( eSndState ==
STATE_M_TX_IDLE ) || ( eSndState == STATE_M_TX_XFWR ))
Bis dahin verläuft die Auslesung soweit ohne Probleme.
Hier noch ein längere Auszug aus dem seriellen Log:
1 | I (1914922) count_task: RAM left 123640; mb_master_hwm: 1508, count_task_hwm: 20, mqtt_ssl_main_hwm: 6276
|
2 | I (1915262) MASTER_TEST: Characteristic #0 Data_channel_0 (kW) value = 4531.000000 (0x458d9800) read successful. Restarted: 0
|
3 | I (1915762) MASTER_TEST: Characteristic #0 Data_channel_0 (kW) value = 4531.000000 (0x458d9800) read successful. Restarted: 0
|
4 | I (1916262) MASTER_TEST: Characteristic #0 Data_channel_0 (kW) value = 4531.000000 (0x458d9800) read successful. Restarted: 0
|
5 | I (1916762) MASTER_TEST: Characteristic #0 Data_channel_0 (kW) value = 4531.000000 (0x458d9800) read successful. Restarted: 0
|
6 |
|
7 | assert failed: xMBMasterRTUReceiveFSM mbrtu_m.c:235 (( eSndState == STATE_M_TX_IDLE ) || ( eSndState == STATE_M_TX_XFWR ))
|
8 |
|
9 | Backtrace:0x40081c02:0x3ffd00700x40089559:0x3ffd0090 0x400909b5:0x3ffd00b0 0x400e0751:0x3ffd01d0 0x400e1545:0x3ffd0200 0x400e15b4:0x3ffd0230 0x4008cdad:0x3ffd0260
|
10 | 0x40081c02: panic_abort at C:/Users/Michael.Uray/esp/esp-idf/components/esp_system/panic.c:402
|
11 |
|
12 | 0x40089559: esp_system_abort at C:/Users/Michael.Uray/esp/esp-idf/components/esp_system/esp_system.c:128
|
13 |
|
14 | 0x400909b5: __assert_func at C:/Users/Michael.Uray/esp/esp-idf/components/newlib/assert.c:85
|
15 |
|
16 | 0x400e0751: xMBMasterRTUReceiveFSM at C:/Users/Michael.Uray/esp/esp-idf/components/freemodbus/modbus/rtu/mbrtu_m.c:235 (discriminator 2)
|
17 |
|
18 | 0x400e1545: usMBMasterPortSerialRxPoll at C:/Users/Michael.Uray/esp/esp-idf/components/freemodbus/port/portserial_m.c:94
|
19 |
|
20 | 0x400e15b4: vUartTask at C:/Users/Michael.Uray/esp/esp-idf/components/freemodbus/port/portserial_m.c:142
|
21 |
|
22 | 0x4008cdad: vPortTaskWrapper at C:/Users/Michael.Uray/esp/esp-idf/components/freertos/port/xtensa/port.c:131
|
23 |
|
24 | ELF file SHA256: 375376b08aba9e70
|
25 |
|
26 | Rebooting...
|
Die Modbus Master Funktion entspricht in etwa dem Beispiel vom ESP IDF
mit einigen kleineren Änderungen.
Es laufen darauf auch noch ein Websocket-/Webserver, Modbus Client und
MQTT in eigenen Tasks, falls dies eine Rolle spielen sollte, deren
Aufrufe sehen so aus:
1 | void app_main()
|
2 | {
|
3 | const static char *TAG = "main";
|
4 |
|
5 | esp_err_t err = nvs_flash_init();
|
6 | if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND)
|
7 | {
|
8 | // NVS partition was truncated and needs to be erased
|
9 | // Retry nvs_flash_init
|
10 | ESP_ERROR_CHECK(nvs_flash_erase());
|
11 | err = nvs_flash_init();
|
12 | }
|
13 | ESP_ERROR_CHECK(err);
|
14 |
|
15 | wifi_app_main();
|
16 |
|
17 | led_setup();
|
18 | ws_server_start();
|
19 |
|
20 | xTaskCreate(&nvs_main, "nvs_main", 2000, NULL, 9, NULL);
|
21 | xTaskCreate(&server_task, "server_task", 2000, NULL, 9, NULL);
|
22 | xTaskCreate(&server_handle_task, "server_handle_task", 4000, NULL, 6, NULL);
|
23 | xTaskCreate(&count_task, "count_task", 2000, NULL, 2, NULL);
|
24 | xTaskCreate(&mb_master_main, "mb_master_main", 3500, NULL, 9, &mb_master_main_th);
|
25 | xTaskCreate(&mb_slave_main, "mb_slave_main", 3500, NULL, 9, NULL);
|
26 | xTaskCreate(&mqtt_ssl_main, "mqtt_ssl_main", 1024 * 8, NULL, 9, &mqtt_ssl_main_th);
|
27 | }
|
Was könnte denn der Auslöser für dieses Problem sein, bzw. wie könnte
man es eingrenzen?