Große Arrays in Funktionen führen zum Absturz der Steuerung

Betrifft welche Produkte?
ETCHC, ETCHM

Wie sieht die Reaktion aus?
Steuerung stürzt ab, Watchdog nicht mehr aktiv, Wiederanlauf nicht möglich

Wann tritt das Problem auf?
Legt man größere Arrays (z. B. ARRAY[0..150] OF STRING) als Varaiablen einer Funktion an und führt diese im Programm aus, kommt es zu einem Absturz der Steuerung

Diagnosemöglichkeiten?
CoDeSys geht Offline, LED'S an der Steuerung blinken in einem spezielen Muster, Watchdog nicht mehr aktiv

Kurzfristige Maßnahmen/Empfehlungen?
1. FB oder PRG verwenden, da die Variablen nicht auf dem Stack liegen.
2. Nur einen Pointer auf das Array an die Funktion übergeben.

Bewertung:
Grundsätzlich sollte eine Programmierung, wie hier geschehen, nicht ausgeführt werden. Funktionen haben die Eigenschaft alle Variablen über den Stack zu übergeben. Hier in dem Beispiel werden also für die eine Variable 150*16 = 2400 Bytes auf dem Stack abgelegt, was den Stack von 3000 Bytes auf jeden Fall sprengen und damit zu einem Absturz der Steuerung führen wird, weil die PLC-Task im Leerlauf ca. 1000 Bytes verbraucht. Wobei die Auswirkungen des Absturzes undefiniert sind. Es kann durchaus sein, dass die Steuerung noch einige Zeit weiterläuft, bevor es zu einer Exception kommt, die dann zum kompletten Absturz führt.

URL zur Verlinkung dieses AKB-Artikels: https://www.lenze.com/de-de/go/akb/200704942/0/
Contact form