assert failed: xMBMasterRTUReceiveFSM in FreeRTOS mit Modbus Master von ESP IDF

OP #7242886
Lesenswert?

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?
Angehängte Dateien:
Gast #7242907
Lesenswert?

Die interessante Stelle ist die hier:

freemodbus/modbus/rtu/mbrtu_m.c:235

(( eSndState == STATE_M_TX_IDLE ) || ( eSndState == STATE_M_TX_XFWR ))

Das bedeutet, daß eSndState einen anderen als die beiden angegebenen 
Werte hat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren