Anfängerfrage zu FBs in ST

JemandAnders

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

ich arbeite mich gerade in CoDeSys ein. Ein wenig Mikrocontroller in C kann ich programmieren.
Jetzt habe ich eine Verständnisfrage zur Verwendung von FBs in ST:

Code:
(*Setze Timer auf 5 min / Im Deklarationsteil: Warte_5min:TP;*)
IF Warte_5min.Q=FALSE THEN (*Ausgang vom Timer Pulse Low? Timer nicht aktiv? *)
    Warte_5min(IN := TRUE, PT:= T#5m);
END_IF
Warte_5min; (*Baustein muss auch nochmal ausgeführt werden, sonst zählt Timer nicht hoch*)

Jetzt bin ich davon ausgegangen, dass wenn ich "Warte_5min(IN := TRUE, PT:= T#5m);" aufrufe, dass dann der Timer bzw. .ET hochgezählt wird und ich Warte_5min.Q einfach abfragen kann. Das klappt allerdings nur, wenn ich den Baustein nochmal unten aufrufe (siehe Kommentar). Ist das richtig oder mache ich irgendwo einen Fehler?

Gruß
Joachim
 
Der Timer-Baustein muß ja immer bearbeitet werden, um seinen Zustand auch "ausgeben" zu können.
Daher ist es in deinem Fall besser, du rufst den "Warte_5_Minuten" immer auf und schreibst an "IN" nicht True, sondern eine Variable.

Code:
Warte_5min(IN := MY_BOOL, PT := T#5m);
My_Bool := NOT Warte_5Min.Q;

Ich weiß gerade nicht, ob es gut ist sein eingehen Output direkt in IN zu schreiben, daher würde ich das auf eine Variable (hier: My_Bool) legen und diese dann an den FB schreiben.
Auf diese Weise erhältst du alle 5 Minuten für einen Zyklus lang ein True. Darauf kannst du dann reagieren.

PS: Hab es mal probiert, geht:

Code:
Warte_5min(IN := NOT Warte_5Min.Q, PT := T#5m);
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke! Das funktioniert.
Ich war der Meinung, dass der Timer auch so läuft, wenn ich ihn einmal zum Starten aufrufe.
Der "Bausteingedanke" bei ST ist mir immernoch nicht so ganz bewusst.

Gruß
Joachim
 
Hallo Zusammen!

Den eigenen FB-Ausgang auf den eigenen FB-Eingang zu legen ist unproblematisch und eine vollkommen übliche Vorgehnesweise.

Zum "Baustein-Gedanken" von Joachim:
Ein FB in einer Soft-SPS ist nichts anderes als eine Methoe in C.
Der Baustein wird nur abgearbeitet, wenn er auch aufgerufen wird. Die zyklische Abarbeitung einer SPS kann einem da das Leben erleichtern (kann, muss aber nicht;)).
Die meisten Programmierer gehen mit FB-Instanzen so vor, dass sie zwischen Wertübergaben und -abfargen sowie Aufrufen unterscheiden.
D.h. eine Übergabe/Abfrage erfolgt "."-Operator wie in Ralle's Beispiel:
Code:
Warte_5min.Q
Der Aufruf der Instanz mit () zur Abarbeitung der FBs findet am Anfang oder Ende der aufrufenden POU statt:
Code:
Warte_5min();

Gruß,
mac203
 
Zurück
Oben