-> Hier kostenlos registrieren
Hallo zusammen,
ich programmiere gelegentlich in ST in CODESYS 3.5, in der Regel mit der Laufzeitumgebung für Raspberry PI, aber nachdem ich natürlich kein perfekter Mensch bin, passieren mir Fehler.
Leider ist es mir in letzter Zeit 2x passiert, dass ich in Funktionsblöcken bei der Verwendung von Arrays versehentlich ein Element außerhalb des deklarierten Bereichs beschrieben habe, z. B.
Dann habe ich durch einen Programmfehler beispielsweise
geschrieben.
Das führte dann dazu, dass andere Variablen, z. B. der Array-Index noch weiter abwichen, dann beim nächsten Schreibzugriff wurde der Fehler noch größer, bis irgendwann die Laufzeitumgebung stoppte. In anderen Fällen lief es weiter, aber in unterschiedlichen Bereichen des Programms (völlig unabhängig von dem fehlerhaften Funktionsblock) passierten seltsame Dinge.
Das hat mich jedes mal extrem viel Zeit bei der Fehlersuche gekostet, was schlecht ist.
Noch schlimmer wäre es gewesen, wenn mir diese Fehler nicht aufgefallen wären.
Nun, es ist ja nicht so ungewöhnliches, dass solche Fehler passieren. In anderen Programmiersprachen, mit denen ich arbeite, beendet sich in solchen Fällen das Programm mit einem Fehler, also in dem moment, in dem ein Programmteil in einen nicht für sich selbst deklarierten Speicherbereich zu schreiben versucht, oder es ist zumindest konfigurierbar, dass so ein Abbruch passiert.
(Es sei denn, man arbeitet in C und mit Pointern, aber mehrere Dekaden von Sicherheitslücken und Programmfehlern durch Pointer sollte die meisten Programmierer von dieser Last befreit haben)
Leider finde ich in CODESYS keine besagte Option, wie man Speichersicherheit zur Laufzeit erzwingen kann. Gibt es da sowas?
Oder gibt es in CODESYS andere Möglichkeiten, dass einem sowas "definiert um die Ohren fliegt", anstatt wie bei mir zu irgendeinem Zeitpunkt die Laufzeitumgebung zu beenden, weil sich der Fehler so stark fortgepflanzt hatte oder anstatt dass falsche Werte plötzlich in anderen Programmteilen auftreten?
Zugegebenermaßen hat mich das aktuelle Standardverhalten von CODESYS doch sehr stark "verwundert" oder eher irritiert.
ich programmiere gelegentlich in ST in CODESYS 3.5, in der Regel mit der Laufzeitumgebung für Raspberry PI, aber nachdem ich natürlich kein perfekter Mensch bin, passieren mir Fehler.
Leider ist es mir in letzter Zeit 2x passiert, dass ich in Funktionsblöcken bei der Verwendung von Arrays versehentlich ein Element außerhalb des deklarierten Bereichs beschrieben habe, z. B.
Code:
var
test: ARRAY[0..9] OF REAL;
end_var
Dann habe ich durch einen Programmfehler beispielsweise
Code:
test[10]:=12345;
Das führte dann dazu, dass andere Variablen, z. B. der Array-Index noch weiter abwichen, dann beim nächsten Schreibzugriff wurde der Fehler noch größer, bis irgendwann die Laufzeitumgebung stoppte. In anderen Fällen lief es weiter, aber in unterschiedlichen Bereichen des Programms (völlig unabhängig von dem fehlerhaften Funktionsblock) passierten seltsame Dinge.
Das hat mich jedes mal extrem viel Zeit bei der Fehlersuche gekostet, was schlecht ist.
Noch schlimmer wäre es gewesen, wenn mir diese Fehler nicht aufgefallen wären.
Nun, es ist ja nicht so ungewöhnliches, dass solche Fehler passieren. In anderen Programmiersprachen, mit denen ich arbeite, beendet sich in solchen Fällen das Programm mit einem Fehler, also in dem moment, in dem ein Programmteil in einen nicht für sich selbst deklarierten Speicherbereich zu schreiben versucht, oder es ist zumindest konfigurierbar, dass so ein Abbruch passiert.
(Es sei denn, man arbeitet in C und mit Pointern, aber mehrere Dekaden von Sicherheitslücken und Programmfehlern durch Pointer sollte die meisten Programmierer von dieser Last befreit haben)

Leider finde ich in CODESYS keine besagte Option, wie man Speichersicherheit zur Laufzeit erzwingen kann. Gibt es da sowas?
Oder gibt es in CODESYS andere Möglichkeiten, dass einem sowas "definiert um die Ohren fliegt", anstatt wie bei mir zu irgendeinem Zeitpunkt die Laufzeitumgebung zu beenden, weil sich der Fehler so stark fortgepflanzt hatte oder anstatt dass falsche Werte plötzlich in anderen Programmteilen auftreten?
Zugegebenermaßen hat mich das aktuelle Standardverhalten von CODESYS doch sehr stark "verwundert" oder eher irritiert.