TIA For-Schleife in OB30

Marcel Weid

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen,

Ich möchte in einem bestimmten Takt einen Sensor auslesen. Nun habe ich mir gedacht dies in den OB30 mit einer bestimmten Taktrate zu versuchen. Ich lese also alle 70ms den Wert des Sensors und möchte diesen in einen Array schreiben, sodass ich in einem bestimmten Takt Werte von meinem Sensor bekomme. Nur läuft meine For-Schleife pro OB30 Takt komplett durch. Wollte aber pro Takt dass meine For-Schleife nur um 1 erhöht wird. Hat jemand eine Idee?



FOR "i" := 0 TO 36 BY 1 DO
"Durchfluss_DB"."THIS"["i"] := "Durchfluss_Real";
END_FOR;

Grüße

PS: Habe gerade gelesen dass die Schleife pro Takt komplett durchlaufen wird. Gibt es eine Möglichkeit die Takte mitzuzählen? Oder habt ihr eine elegantere Lösung?
 
Zuletzt bearbeitet:
Wenn du keine Abbruchbedingung hast, wird die For-Schleife immer komplett durchlaufen, sobald sie aufgerufen wird.

Du könntest es aber ohne die For-Schleife machen. Etwa so in der Richtung:

Code:
If i > 36 then
i := 0;
end_if;

"Durchfluss_DB"."THIS"["i"] := "Durchfluss_Real";

i := i++;

Das heisst, bei jedem Aufruf vom OB30 wird einfach eins hochgezählt. Sobald du bei deinem letzten Array-Element bist, wird "i" wieder auf 0 gesetzt und das Spiel beginnt von vorne.

"i" darf dafür aber keine Temp-Variable im OB30 sein. Sonst ist sie bei jedem Aufruf erstmal 0


-chris


EDIT: Korrekturen
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mhm hätte ich auch selbst drauf kommen können. Trotzdem danke :rolleyes:

Habe es jetzt so gelöst:

"Durchfluss_DB"."THIS"["i"] := "Durchfluss_Real";
IF "i" < 36 THEN
"i" := "i" + 1;
END_IF;

Mein Array wird pro Takt mit Werten gefüllt bis es voll ist. i auf 0 setzen mache ich einfach über einen Eingang.
 
Ok.
Sobald dein Eingang aber nicht kommt und somit "i" nicht auf 0 gesetzt wird, wird immer ins Array-Element 36 geschrieben. Weil dies der letzte Wert von "i" ist dann. Somit würde da nicht zwingend der Wert direkt nach dem Eintrag 35 stehen (zeitlich gesehen), sondern der letzte Wert vor deinem "reset"
 
Außerdem prüft man i VOR der Verwendung als Index und nicht erst danach, wenn eventuell schon wegen unzulässigem Wert auf einen nicht vorhandenen Speicherplatz geschrieben wurde/werden sollte.

Harald
 
Zurück
Oben