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 Jan 16, 2019 12:14 am

Alle Zeiten sind UTC




Ein neues Thema erstellen  Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Feb 05, 2016 9:54 am 
Offline
Häufiger Nutzer
Häufiger Nutzer

Registriert: Di Jul 24, 2007 4:17 pm
Beiträge: 126
Hallo Leute

Wenn nun durch meine :roll: Dummheit :roll: mal der Index eines Array ÜBER und UNTER die Definitionsgrenzen hinausläuft und dann von dort Daten gelesen oder gar dorthin geschrieben werden, WELCHE DATEN WERDEN GELESEN und WO SCHREIBT DIE STEUERUNG HIN. Lt meinen Erfahrungen werden die Grenze nicht abgefragt. (werde ich in Zukunft EXPLIZIT jedes mal machen). Es soll da ja eine Funktion Checkbounds geben, aber die habe ich bisher nie verwendet. Hatte auch noch nie eine derart verzwickte Situation. ODER kann man einen Parameter setzen, daß die Steuerung bei einem derartigen Fehler GEKILLT wird. Lt. meine Erfahrungen führt das zu den selben Fehlern wie ein verbogener Pointer. :arrow: totale Katastrophe.

Mit bestem Dank
Mg

Nachtrag:
- Bachmann MX207 schreibt beim UNTERSCHREITEN auf irgendeine Speicherzelle innerhalb des Array (bei eindimensionalen Arrays)
... schreibt beim ÜBERSCHREITEN irgendwohin im gesamten Speicherabbild (außerhalb des dimensionierten Bereichs)
Nachtrag zum Nachtrag: sieht nur so aus. Der Zugriff ist eher undefiniert.
- Wago 750-880 irgendwohin im gesamten Speicherabbild (außerhalb des dimensionierten Bereichs)
- Wago 758-874 irgendwohin im gesamten Speicherabbild (außerhalb des dimensionierten Bereichs)


Nach oben
   
BeitragVerfasst: Mi Feb 10, 2016 8:42 am 
Offline

Registriert: Fr Mai 23, 2008 2:29 pm
Beiträge: 7
Hallo, auszug aus der CoDeSys-Hilfe
Zitat:
Funktion Checkbounds
Wenn Sie in Ihrem Projekt eine Funktion mit Namen CheckBounds definieren, können Sie damit Bereichsüberschreitungen in Arrays automatisch überprüfen! Der Name der Funktion ist festgelegt und darf nur diese Bezeichnung besitzen.

Beispiel für die Funktion CheckBounds:

FUNCTION CheckBounds : DINT
VAR_INPUT
index, lower, upper: DINT;
END_VAR

IF index < lower THEN
CheckBounds := lower;
ELSIF index > upper THEN
CheckBounds := upper;
ELSE CheckBounds := index;
END_IF

Das folgende Beispielprogramm zum Testen der CheckBounds-Funktion greift außerhalb der Grenzen eines definierten Arrays zu. Die Funktion CheckBounds gewährleistet, dass der Wert TRUE nicht an die Stelle A[10], sondern an der oberen noch gültigen Bereichsgrenze A[7] zugewiesen wird. Mit der CheckBounds-Funktion können somit Zugriffe außerhalb von Array-Grenzen korrigiert werden.

Test Programm für die CheckBounds Funktion:

PROGRAM PLC_PRG
VAR
a: ARRAY[0..7] OF BOOL;
b: INT:=10;
END_VAR

a[b]:=TRUE;

Achtung: Die in der CheckLib enthaltene CheckBounds-Funktion ist eine Beispiellösung! Prüfen Sie vor Verwendung der Bibliothek, ob die Funktion in Ihrem Sinne arbeitet oder implementieren Sie eine entsprechende CheckBounds-Funktion als Baustein direkt in Ihrem Projekt.

Gruß


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

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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