Forum: Mikrocontroller und Digitale Elektronik assert failed: xMBMasterRTUReceiveFSM in FreeRTOS mit Modbus Master von ESP IDF


von Michael U. (michaeluray)


Angehängte Dateien:

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?

: Bearbeitet durch User
von DerEinzigeBernd (Gast)


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.

von Michael U. (michaeluray)


Lesenswert?

So wie ich das verstehe, kommt das Problem dann direkt aus der Library 
von Expressif?

https://github.com/espressif/esp-modbus/blob/master/freemodbus/modbus/rtu/mbrtu_m.c#L250

von Michael U. (michaeluray)


Lesenswert?

So wie es aussieht hatte dies ein anderer Task verursacht welcher zu 
wenig Stack zugewiesen bekam.

https://forums.freertos.org/t/assert-failed-xmbmasterrtureceivefsm-mbrtu-m-c-235-with-modbus-master-from-esp-idf/16127/4?u=michael.uray

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.