Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 5 von 5

Thema: Anfängerfrage zu FBs in ST

  1. #1
    Registriert seit
    18.12.2013
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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
    Zitieren Zitieren Anfängerfrage zu FBs in ST  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    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);
    Geändert von Ralle (18.12.2013 um 11:48 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    JemandAnders ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.12.2013
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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

  4. #4
    Registriert seit
    15.08.2011
    Beiträge
    383
    Danke
    2
    Erhielt 73 Danke für 71 Beiträge

    Standard

    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

  5. #5
    JemandAnders ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.12.2013
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!
    Dann war doch alles richtig
    Vielen Dank nochmal für die Erklärung!

    Gruß
    Joachim

Ähnliche Themen

  1. Test von FBs
    Von Pumpernickel im Forum Programmierstrategien
    Antworten: 4
    Letzter Beitrag: 26.10.2011, 08:34
  2. Antworten: 14
    Letzter Beitrag: 03.08.2011, 16:31
  3. FBs indirekt aufrufen
    Von spsfreak12345 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 09.08.2010, 09:36
  4. Wertübergabe zw. FBs
    Von Jackjackson im Forum Simatic
    Antworten: 163
    Letzter Beitrag: 28.11.2008, 17:24
  5. Laufzeitmessung eines FBs
    Von TonyMono im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 05.07.2006, 17:53

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •