CODESYS - das IEC 61131-3 Programmiersystem

Willkommen im offiziellen CODESYS - Forum von 3S-Smart Software Solutions | A member of the CODESYS Group
Deutsche Version English version russian version 
Aktuelle Zeit: Mi Dez 11, 2019 10:39 pm

Alle Zeiten sind UTC




Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Jul 02, 2019 2:46 pm 
Offline

Registriert: Do Jan 24, 2019 9:15 am
Beiträge: 8
Hallo Zusammen,

Problem:
Bei einem Programmabsturz wird eine zuvor geschriebene Variable nicht persistent abgelegt.

Beschreibung:
Ich bin gerade dabei eine Checkpoint-Variable zu implementieren. Diese soll beim Programmabsturz widerspiegeln welcher Checkpoint/Codeabschnitt als letzter erreicht wurde. Damit möchte ich mögliche Code-Fehler (die zum Absturz führen) eingrenzen.
Die Variable ist angelegt, global als retain persistent (wurde auch als nur retain getestet). Wenn das Programm gestartet wird, dann wird diese als aller erstes einmalig ausgewertet und via CAN übertragen.
Ich habe nun auch eine Methode in der ich einen gezielten Programmabsturz verursachen kann. Mit dieser Methode habe ich nun getestet, ob das Programm nach einem Resetten auch wirklich den richtigen Wert eingetragen hat.
Dies ist leider nicht der Fall. Der letzte via CAN übertragene Wert ist ca. 5 Abschnitte alt. Die Variable wird also mehrfach in anderen Programmabschnitt geschrieben, dann wird sie ein letztes Mal gesetzt und gleich darauf wird das Programm gezielt festgefahren.
Wenn ich an C/C++ denke, dann kommt mir das Schlüsselwort volatile in den Sinn.
Ich habe auch nur einen Task, also Multiprocessing wird (vermutlich) nicht die Quelle des Problems sein.
Ich habe außerdem testweise zwischen der letzten Zuweisung und dem Absturz eine Schleife mit 1000 Durchläufen. Daher vermute ich, es liegt nicht an irgendwie Code-Sortierungs-Optimierung. (Zu betonen wäre hier außerdem, dieser Code soll auf einer operativen Anlage für Diagnosezwecke laufen. Nach jedem Schreiben einer Checkpoint Variable für 5 ms zu warten wäre nicht rechtfertigbar.)

Fragen:
Kann es sein, die Variable wird erst in einem Cache geschrieben, der nicht rechtzeitig durchgeschrieben wird?
Gibt es in Codesys eine Möglichkeit eine Variable als volatile* zu deklarieren? (* Volatile nicht im Sinne von flüchtig/nicht flüchtig, sondern wie in C, also immer hart auf den Speicher durchschreiben ohne Caching)
Gibt es eine andere mögliche Ursache für den Fehler?
Gibt es eine Art Flush-Methode zum aktiven Durchschreiben, über den Cache hinweg?
Gibt es eine Möglichkeit in einen anderes Bread Crumb Register zu schreiben, welches vielleicht besser geeignet ist für diese Anforderung?

Ich bitte um Hilfe.
Viele Grüße und Danke im Voraus


Nach oben
   
BeitragVerfasst: Do Jul 25, 2019 6:15 am 
Offline
Häufiger Nutzer
Häufiger Nutzer
Benutzeravatar

Registriert: Do Apr 07, 2005 1:22 pm
Beiträge: 198
Wohnort: Bei Ulm
Moin
Fundierte Antworten auf deine Fragen habe ich leider nicht.
Wenn ich müsste würde ich alle mit NEIN beantworten.

Aber hast du dir schon mal die Check Funktionen angeschaut ?
CheckBounds / CheckPointer / CheckPointerAligned

Gruß Erik

_________________
Wer Rechtschreibfehler findet darf sie behalten...


Nach oben
   
BeitragVerfasst: Fr Aug 16, 2019 2:32 pm 
Offline

Registriert: Do Jan 24, 2019 9:15 am
Beiträge: 8
Hallo Erik,
Danke für die Antwort.

Ich habe mein Problem mal versucht mit Memcpy zu lösen, aber irgendwie hat das auch nicht funktioniert.
Ich konnte keine weiteren nicht begründbare Abstürze nachverfolgen. Deshalb werde ich das Thema auch erst mal etwas ruhen lassen.
Jedoch, wenn die Abstürze wieder Thema werden, dann werde ich den Check Funktionen nachgehen.

Viele Grüße


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de