Timer kommen in das Hauptprogramm, aber werden die dann immer wieder neu instanziert?
Du kannst bis zu 32 Instanzen des Timerbausteins im Programm haben, also 32 Timer.
Zeiten von 30s brauchen mindestens ein MW, dann geht es aber.
Das stimmt so nicht. Es kommt immer auf den eingestellten Zeitbereich des Timers an. Da kann der max Zeitwert mit einem Byte am Eingang 255ms, 255s oder 4h15m sein.
Ich würde gerade in ST, wenn der Bausteinausgang mehrfach verwendet wird, immer den Ausgang freilassen. Stattdessen den Ausgang an der jeweiligen Stelle zuweisen.
zB:
T01 (
EN := I01,
RE := ,
ST := ,
I1 := T#10s,
I2 := ,
Q1 => ,
QV => );
M15:= T01Q1;
.
.
.
Q04:= T01Q1 AND M14;
IF T01QV >= T#8s THEN
M12:= TRUE;
END_IF;
Und schließlich muss ich beim Beenden des Impulses einige Variablen abändern. Gibt es dazu Möglichkeiten, oder muss ich das in eine Variable ausgeben und diese dann durch sinnvolle Bit-Verknüpfungen an diverse andere Variablen und Ausgänge weitergeben?
Hier würde ich eine fallende Flanke verwenden, d.h. Wenn der T1Q1 weg geht ist der Flankenmerker im nächsten Zyklus einmal TRUE.
Und noch eine Frage: Kann ich die Zeit für einen Timer so definieren: MB21 := T#20s0ms;
Das geht so nicht. Du kannst den Zeitbereich auf min:sek einstellen und dem Byte eine 20 zuweisen.
MB21 := 20;
T01 (
EN := I01,
RE := ,
ST := ,
I1 := MB21,
I2 := ,
Q1 => ,
QV => );
wäre korrekt.
Gruß Thomas