-> Hier kostenlos registrieren
Hallo liebe SPS-Gemeinde,
ich versuche gerade mich in die SPS-Programmierung einzuarbeiten und bräuchte mal eure Hilfe
Aus einem meiner Bücher habe ich folgendes Beispiel, das einen Blinktaktgeber mit einstellbarer Puls- und Pausendauer darstellen soll:
Und hier meine erste Frage:
In der letzten Zeile kommt AND vor OR, also mit Klammerung so: OUT := TIMER_1.Q OR (OUT AND NOT TIMER_2.Q);
Oder liege ich hier falsch?
So, und hier gleich meine zweite Frage:
Die Implementierung scheint doch ein Problem zu haben wenn ich ENABLE auf 0 setze und OUT gerade auf 1 steht.
Dann würde OUT doch für immer auf 1 bleiben, oder? Und das wäre für ein Blinklicht z.B. nicht so toll ...
Also so, oder?
Eine Lösung wäre doch einfach OUT zusätzlich mit ENABLE zu verUNDEN, also:
OUT := ENABLE AND (TIMER_1.Q OR (OUT AND NOT TIMER_2.Q));
Oder?
Wenn ich jedoch möchte, dass die letzte Blinkperiode noch zu Ende geführt wird, dann könnte ich das doch auch so machen:
Also ohne dem ENABLE in der IN-Zuweisung von TIMER_2, oder?
Das würde dann so aussehn, oder?
Und was sagen die Experten unter euch dazu?
Danke und Grüße,
Daniel.
ich versuche gerade mich in die SPS-Programmierung einzuarbeiten und bräuchte mal eure Hilfe
Aus einem meiner Bücher habe ich folgendes Beispiel, das einen Blinktaktgeber mit einstellbarer Puls- und Pausendauer darstellen soll:
Code:
FUNCTION_BLOCK SBLINK
VAR_INPUT
ENABLE:BOOL;
TIMEHIGH:TIME;
TIMELOW:TIME;
END_VAR
VAR_OUTPUT
OUT:BOOL;
END_VAR
VAR
TIMER_1:TON;
TIMER_2:TON;
END_VAR
Code:
TIMER_1 (IN := ENABLE AND NOT OUT, PT := TIMELOW);
TIMER_2 (IN := ENABLE AND OUT, PT := TIMEHIGH);
OUT := TIMER_1.Q OR OUT AND NOT TIMER_2.Q;
Und hier meine erste Frage:
In der letzten Zeile kommt AND vor OR, also mit Klammerung so: OUT := TIMER_1.Q OR (OUT AND NOT TIMER_2.Q);
Oder liege ich hier falsch?
So, und hier gleich meine zweite Frage:
Die Implementierung scheint doch ein Problem zu haben wenn ich ENABLE auf 0 setze und OUT gerade auf 1 steht.
Dann würde OUT doch für immer auf 1 bleiben, oder? Und das wäre für ein Blinklicht z.B. nicht so toll ...
Also so, oder?
Code:
___________________________________________________
ENABLE: ______| |_______
: :
: :
: :
TIMER_1.Q: __________________||__________________________||__________________
:<--[T_L]-->: : <--[T_L]-->: :
: : : : :
: : : : :
TIMER_2.Q: _________________________________||_______________________________
: : <---[T_H]---> : <---[T_H]-:
: : : : :
: :______________: :___________________
OUT: __________________| |____________| :
Eine Lösung wäre doch einfach OUT zusätzlich mit ENABLE zu verUNDEN, also:
OUT := ENABLE AND (TIMER_1.Q OR (OUT AND NOT TIMER_2.Q));
Oder?
Wenn ich jedoch möchte, dass die letzte Blinkperiode noch zu Ende geführt wird, dann könnte ich das doch auch so machen:
Code:
TIMER_1 (IN := ENABLE AND NOT OUT, PT := TIMELOW);
TIMER_2 (IN := OUT, PT := TIMEHIGH);
OUT := TIMER_1.Q OR OUT AND NOT TIMER_2.Q;
Das würde dann so aussehn, oder?
Code:
___________________________________________________
ENABLE: ______| |_______
: :
: :
: :
TIMER_1.Q: __________________||__________________________||__________________
:<--[T_L]-->: : <--[T_L]-->: :
: : : : :
: : : : :
TIMER_2.Q: _________________________________||__________________________||___
: : <---[T_H]---> : <---[T_H]--->:
: : : : : :
: :______________: :______________:
OUT: __________________| |____________| : |____
Und was sagen die Experten unter euch dazu?
Danke und Grüße,
Daniel.
Zuletzt bearbeitet: