-> Hier kostenlos registrieren
Guten Morgen,
hier erstmal der Code:
IF fb_TON_Hydro.Q THEN
fb_TON_Hydro(IN:=FALSE);
nSchrittSuche := GVL.iSchritt + 1;
//Sucht nächsten Schritt, der ausgeführt werden kann
WHILE GVL.aHydroProgramm[1][nSchrittSuche] <= 0 AND GVL.iSchritt <= iSchrittgrenze DO
nSchrittSuche:=nSchrittSuche+1;
END_WHILE
//Schritt soll auf den nächsten Schritt gesetzt werden, der ausgeführt werden kann
GVL.iSchritt:=nSchrittSuche;
In Spalte 1 meines Arrays "GVL.aHydroProgramm" ist die Anzahl der Sekunden aufgeführt, die das Programm in GVL.iSchritt verweilen soll. Nun kommt es aber vor, dass ich zum Beispiel nur Schritt 1 und Schritt 4 ausführen möchte, weshalb ich die Variable nSchrittSuche eingeführt habe. Die Variabe prüft in einer Schleife ob der jeweils nächste Schritt eine Laufzeit eingetragen hat. Mein Array "GVL.aHydroProgramm" hat lediglich 10 Zeilen, also auch nur 10 Schritte. Nun ist mir aber aufgefallen, dass meine While-Schleife falsch ist. An der Variable GVL.iSchritt ändere ich innerhalb der Schleife ja nichts und damit wird nSchrittSuche ja irgendwann einen Wert annehmen, der über der Zeilenanzahl des Arrays liegt, wenn die andere Bedingung der While-Schleife auch erfüllt ist. Mit der Abfrage "GVL.aHydroProgramm[1][nSchrittSuche] <= 0" frage ich also einen Wert ab, den ich gar nicht geschrieben habe. Jetzt ist mir aber aufgefallen, dass GVL.iSchritt wiederholt auf 61 gesetzt wird.
Kann mir jemand erklären, was passiert, wenn ich einen Wert abfrage der außerhalb meines Arrays liegt und wieso GVL.iSchritt ausgerechnet auf 61 gesetzt wird?
Geschrieben ist das ganze in TWINCat 3
hier erstmal der Code:
IF fb_TON_Hydro.Q THEN
fb_TON_Hydro(IN:=FALSE);
nSchrittSuche := GVL.iSchritt + 1;
//Sucht nächsten Schritt, der ausgeführt werden kann
WHILE GVL.aHydroProgramm[1][nSchrittSuche] <= 0 AND GVL.iSchritt <= iSchrittgrenze DO
nSchrittSuche:=nSchrittSuche+1;
END_WHILE
//Schritt soll auf den nächsten Schritt gesetzt werden, der ausgeführt werden kann
GVL.iSchritt:=nSchrittSuche;
In Spalte 1 meines Arrays "GVL.aHydroProgramm" ist die Anzahl der Sekunden aufgeführt, die das Programm in GVL.iSchritt verweilen soll. Nun kommt es aber vor, dass ich zum Beispiel nur Schritt 1 und Schritt 4 ausführen möchte, weshalb ich die Variable nSchrittSuche eingeführt habe. Die Variabe prüft in einer Schleife ob der jeweils nächste Schritt eine Laufzeit eingetragen hat. Mein Array "GVL.aHydroProgramm" hat lediglich 10 Zeilen, also auch nur 10 Schritte. Nun ist mir aber aufgefallen, dass meine While-Schleife falsch ist. An der Variable GVL.iSchritt ändere ich innerhalb der Schleife ja nichts und damit wird nSchrittSuche ja irgendwann einen Wert annehmen, der über der Zeilenanzahl des Arrays liegt, wenn die andere Bedingung der While-Schleife auch erfüllt ist. Mit der Abfrage "GVL.aHydroProgramm[1][nSchrittSuche] <= 0" frage ich also einen Wert ab, den ich gar nicht geschrieben habe. Jetzt ist mir aber aufgefallen, dass GVL.iSchritt wiederholt auf 61 gesetzt wird.
Kann mir jemand erklären, was passiert, wenn ich einen Wert abfrage der außerhalb meines Arrays liegt und wieso GVL.iSchritt ausgerechnet auf 61 gesetzt wird?
Geschrieben ist das ganze in TWINCat 3