Bytebeisser
Level-2
- Beiträge
- 13
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo,
mittlerweile funktioniert mein Programm aber ich verstehe nicht, warum es vorher nicht ging. Deswegen bitte ich um Erleuchtung.
Zum Problem:
Ein Unterprogramm sollte alle X Sekunden vom Hauptprogramm aus aufgerufen werden.
Statt lang drumrum zu reden, hier die beiden Programmieransätze (Anmerkung: Aus dem Gedächtnis aufgeschrieben, mittlerweile habe ich alles nochmal geändert, z.B. ist der Timer nicht mehr global sondern Bestandteil des Hauptprogramms)
Timerdeklaration
Hauptprogramm
Unterprogramm - funktionierend
Unterprogramm - NICHT funktionierend
Der einzige Unterschied liegt in der Art, wie ich im Unterprogramm den Timer inaktiv gesetzt habe (bzw. glaubte, in so zu setzen).
Tatsächlich konnte ich nämlich sehen, dass der Timer immer Aktiv war.
Warum ist das so?
Ich hätte vermutlich noch ein paar mehr Verständnisfragen zu ST und der "Gleichzeitigeit" darin. Aber eins nach dem anderen.
mittlerweile funktioniert mein Programm aber ich verstehe nicht, warum es vorher nicht ging. Deswegen bitte ich um Erleuchtung.
Zum Problem:
Ein Unterprogramm sollte alle X Sekunden vom Hauptprogramm aus aufgerufen werden.
Statt lang drumrum zu reden, hier die beiden Programmieransätze (Anmerkung: Aus dem Gedächtnis aufgeschrieben, mittlerweile habe ich alles nochmal geändert, z.B. ist der Timer nicht mehr global sondern Bestandteil des Hauptprogramms)
Timerdeklaration
Code:
VAR_GLOBAL
timer:ton;
intervallzeit : time:=T#5s;
END_VAR
Hauptprogramm
Code:
schreib_timer(in:=TRUE,pt:=intervallzeit);
IF schreib_timer.Q = TRUE THEN
UNTERPROGRAMM();
END_IF;
Unterprogramm - funktionierend
Code:
PROGRAMM Unterprogramm
VAR
END_VAR
// irgendwelche Anweisungen
schreib_timer(in := FALSE);
Unterprogramm - NICHT funktionierend
Code:
PROGRAMM Unterprogramm
VAR
END_VAR
//irgendwelche Anweisungen
schreib_timer.Q := FALSE; // diese Anweisung funktioniert offensichtlich nicht so, wie erwartet
Der einzige Unterschied liegt in der Art, wie ich im Unterprogramm den Timer inaktiv gesetzt habe (bzw. glaubte, in so zu setzen).
Tatsächlich konnte ich nämlich sehen, dass der Timer immer Aktiv war.
Warum ist das so?
Ich hätte vermutlich noch ein paar mehr Verständnisfragen zu ST und der "Gleichzeitigeit" darin. Aber eins nach dem anderen.