Page 1 of 1

Totalausfall des RTS Loder durch C++

Posted: 29 Jan 2017, 10:46
by Ingo
Hallo,

gestern war der Tag der Tage, Nichts ging mehr, kein Ansprechen der (SPS) durch LogiCad. Kein Verbindungsaufbau möglich. Also der Totale Obergau also.

Problem des ganzen, wir hatten eine C Routine geschrieben, welche einen Segmentationfault ausgelöst hat. Dadurch wurde der gesamte RTSLoader gekillt, ein zugriff über logi.cad3 war nicht mehr möglich.
Problemlösung, da ein Neustart der SPS nicht zum erfolg führte
anlegen der sicherheitskopie vom verzeichnis /opt/RTS/PLC
entfernen der darin befindlich *.so Dateien, anschließend ließ sich der RTSLoader problemlos neu starten.

Leider gab es dafür keine Fehlermeldung die man hätte Protokolieren können, also bleibt nur das was ich hier geschrieben habe.
Schön wäre gewesen, wenn beim RTSLoader start geprüft wird, ob ein problem vorlag (abnormalen beenden) und dann eine automatische Problembehebung ausführt.

gruß Ingo

Re: Totalausfall des RTS Loder durch C++

Posted: 29 Jan 2017, 22:24
by volker
Hallo Ingo,
Danke für diese Meldung. Wir geben das an logi.cals weiter und schauen mal, ob da was machbar ist. Übrigens ein ganz ähnliches Phänomen hatte ich mal beim Erstellen unseres Messemodells, konnte es aber damals nicht nachvollziehen. Es gab danach folgende Theorie: Wenn Du im Editor eine neue Version der Steuerungssoftware schreibst und dann diese in der compilierten Form auf die Steuerung schreibst, dann sollte der RevPi Core für eine gewisse Zeit nicht gebootet werden, denn das Wegschreiben auf die eMMC kann unter Umständen nicht sofort erfolgen. Leider konnte ich damals keine Abschätzungen über diese Zeit bekommen, aber sie dürfte eigentlich nicht im Minuten- , sondern im Sekundenbereich liegen. Da der Effekt nie wieder auftauchte, haben wir damals keinen Ansatz gefunden, andere Ursachen in Betracht zu ziehen. Vielleicht hilft das und vielleicht könnte das auch Euren Crash erklären?

Re: Totalausfall des RTS Loder durch C++

Posted: 30 Jan 2017, 09:40
by Walter
Hallo,

Bei der Verwendung von C-Bausteinen muss der Anwender für die korrekte Verwendung sorgen. Im C-Code werden auch elementare Funktionen des Betriebssystems angesprochen, welche - wie eine Division durch Null - in einem C-Baustein vom RTS nicht abgefangen werden und in einem Segmentation Fault enden können. Für das Thema Auslesen der Systemzeit des Raspberry Pi habe ich Ingo eine Mail mit einem Beispielprojekt gesendet. Gerne kann der relevante C-Code Teil dann auch hier im Form gepostet werden.

Re: Totalausfall des RTS Loder durch C++

Posted: 30 Jan 2017, 10:34
by Axel
Hallo,
Walter, mit Sicherheit sind Segmentationfaults also Zugriffsfehler auf Speicherbereiche, kein erstrebenswerter Zielzustand, nichts desto trotz sollte aber ein Weg vorhanden sein, welcher verhindert das der RTSLoader in einer Endlosschleife an einen solchen Problem den Geist aufgibt und mit Logi.cad3 mitteln nicht zu beheben ist.



mfg Axel

Re: Totalausfall des RTS Loder durch C++

Posted: 07 Feb 2017, 10:23
by Walter
Hallo Axel,

du hast natürlich recht, dass man das Zielsystem logi.RTS nicht durch eigenen C-Code unbedienbar machen können sollte.
Wir schöpfen hier die uns zur Verfügung stehenden Möglichkeiten aus, können aber solche Zustände (bei Einbindung selbst geschriebenem C-Codes) leider nicht in 100% der Fälle abfangen.
Wenn solche Zustände mit selbst geschriebenem C-Code auftreten, bitten wir diesen Code uns zur Verfügung zu stellen. Wir werden dann prüfen, ob wir im Produkt eine Möglichkeit realisieren können den Ausfall des Systems durch diesen Code zu verhindern.

mfg
Walter