Wie findet man eigentlich einen Fehler mit Core Dump?`

Zuviel Werbung?
-> Hier kostenlos registrieren
Das macht durchaus Sinn. fbMessageListener kann eine Instanz vom Typ FB_MessageListener sein. Zumindest den Typ FB_MessageListener kann man nicht direkt aufrufen.
Ach so ja. Ich kenne Twincat nicht.

Es scheitert bei stMsgEventInfo := fbMessageListener.stEventByIdx(i_nIndex := i);
Vielleicht liegt das Problem bei .stEventByIdx.
Und dies ist hier deklariert: stEventByIdx : ST_MessageEventInfo
Dann Frage ich, wie ist die Typ ST_MessageEventInfo deklariert ?
 
Der Compiler hätte hier schon mächtig dazwischen gegrätscht, wenn bei den Deklarationen was falsch ist. Ausschließen kann man nicht, dass es zwei ähnlich lautende Typen gibt und eine Verwechselung stattgefunden hat. Aber auch da gibt es Übersetzungsfehler, wenn man irgendwo eine falsche Deklaration richtig weiterverwenden will.

Natürlich hat der TE nicht alle Deklarationen gezeigt, aber die Übersetzungsfähigkeit des Projekts schließt schon mal 95% dieser Art von Fehler aus.
 
Der Compiler hätte hier schon mächtig dazwischen gegrätscht, wenn bei den Deklarationen was falsch ist.
Vielleicht gibt es nicht falsches bei den Deklarationen, aber es wird zum Laufzeit eine ungültigen Wert an einen Parameter übergeben.
Vielleicht versteckt irgendwo eine Verschiebung um 1.
Die Konstante MAX_NO_OF_MESSAGES lautet für mich als ob die Arrays entweder mit [0..(MAX_NO_OF_MESSAGES-1)] oder [1..MAX_NO_OF_MESSAGES] deklariert werden muss.

Passt es dass hier crascht es:
1764678978263.png

Und hier nicht:
1764679062715.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Konstante MAX_NO_OF_MESSAGES lautet für mich als ob die Arrays entweder mit [0..(MAX_NO_OF_MESSAGES-1)] oder [1..MAX_NO_OF_MESSAGES] deklariert werden muss.
Vom Namen her hast Du Recht.

Aber der TE hat die Deklaration gepostet:
// FB_MessageListener FUNCTION_BLOCK FB_MessageListener EXTENDS FB_ListenerBase2 VAR // .. _astActiveEvents : ARRAY[0..Param_General.MAX_NO_OF_MESSAGES] OF ST_MessageEventInfo; // List of active events // .. END_VAR
Also ist die reale Anzahl der Arrayfelder MAX_NO_OF_MESSAGES+1

Passt es dass hier crascht es:
1764678978263.png


Und hier nicht:
1764679062715.png
Es scheint eher anders herum zu sein, wenn ich den Postings glauben soll. So als ob die Deklaration wäre:

Code:
_astActiveEvents : ARRAY[0..0] OF ST_MessageEventInfo; // List of active events

Warten wir mal ab, ob der TE noch Unterstützung braucht.
 
Ich war kurz bei einem anderen Termin. Danke für die vielen Beiträge.

CheckBounds habe ich hinzugefügt. Der Ablauf springt nicht in die Bedinungen für die Über- bzw. unterschrittene Grenze.

Doppelte Deklaration gibt es auch nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Exception ist eigentlich sehr eindeutig: man muss in der HmiTask suchen bzw. was von dieser Task aufgerufen wird. Falls die HmiTask gar nicht deinen SPS-Code aufruft, dann brauchst du im SPS-Code auch gar nicht suchen. Dazu passen würde, dass bei der Exception bzw. im Core Dump die relevante Code-Stelle nicht angezeigt wird.

General protection fault weißt auch eher auf ein allgemeines System-Problem hin als auf fehlerhaften SPS-Code. Bei Division durch 0 oder Nullpointer lauten die Exceptions eher anders und man sieht sehr zuverlässig die fehlerhafte Code-Stelle.
 
Die Art der Exception passt da zwar nicht zu, weswegen mein Tipp auch nichts bringen wird, ich versuche es aber trotzdem.
Ich hatte nach einer Änderung an einer Bibliothek den Effekt, dass der SPS Dienst ohne Meldung abgestürzt ist und weder das HMI noch die Entwicklungsumgebung eine Verbindung aufbauen konnten. Bei einem Neustart des Rechners kam es dann zu einem Blue Screen. Irgendwann kan auch mal in Windows eine Exception Meldung wegen Stack Overflow.
Hier hatte Beckhoff empfohlen bei den Echtzeiteinstellungen die Stackgröße zu erhöhen und die Größe des Router Speichers auch, danach funktionierte das Programm. Ob letzteres auch notwendig war konnte ich bisher nicht testen.
Wie gesagt, Deine Exception hat vermutlich eine andere Ursache und muss anders gelöst werden, aber vielleicht hilft es doch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es lag wohl tatsächlich am Router-Speicher oder der Stackgröße. Ich habe auch einfach Beides erhöht.

Ich finde es etwas schade, dass das nicht gleich in der Exception als Lösung steht.

Vielen Dank noch mal an alle Die sich hier die Zeit genommen und versucht haben mit mir den Fehler auf den Grund zu gehen.
 
Zuletzt bearbeitet:
Es lag wohl tatsächlich am Router-Speicher oder der Stackgröße. Ich habe auch einfach Beides erhöht.

Ich finde es etwas schade, dass das nicht gleich in der Exception als Lösung steht.
Oder, wie in meinem Fall gar keine Meldung und ein Blue Screen zum Abschied.
Ich wollte die Tage mal einen Lösungsthread erstellen in dem ich meinn Fall und die Lösung schildere. Darf ich Deinen Fall da mit anfügen, weil bei Dir die Meldung ja eine völlig andere als bei mir ist, die Lösung aber wohl die Selbe.
 
Zurück
Oben