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

Ergebnis 1 bis 10 von 10

Thema: Funktionsbaustein aufrufen

  1. #1
    Registriert seit
    26.05.2009
    Ort
    Sächsische Schweiz Osterzgebirge
    Beiträge
    27
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Cool


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo;
    Ich möchte einen Funktionsbaustein unter bestimmten Bedingungen aufrufen. Wie stelle ich das am besten an?
    Meine Programmiersprache ist ST.

    z.B. Taster S1 wird gedrückt Funktionsbaustein Beleuchtung wird abgearbeitet.

    Vielen Dank
    Zitieren Zitieren Funktionsbaustein aufrufen  

  2. #2
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Code:
    Deklaration
    
    fbBeleuchtung : FB_Beleuchtung;
    
    
    Programmteil
    
    IF S1 THEN
        
        fbBeleuchtung(input1:=Wert1,
                            input2:=Wert2,
                            output=>Wert3);
    
    END_IF
    So etwa?

  3. #3
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    Ist jetzt zwar nicht direkt die Antwort auf Deine Frage, aber anstelle einen FB mal aufzurufen oder nicht, würde ich einem FB doch lieber einen Eingang Enable spendieren.

    Vorteile:

    - der Code wird übersichtlicher

    - der Baustein kann beim wegnehmen des Enable Signals kontrolliert irgendwelche Aktionen ausführen und befindet sich danach in einem definierten Zustand (oder auch beim Start, je nachdem)

  4. #4
    Spoon ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.05.2009
    Ort
    Sächsische Schweiz Osterzgebirge
    Beiträge
    27
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Das musst du mir etwas näher erklären.
    Da ich noch ganz am anfang stehe.

  5. #5
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    Na dann mal los:

    Wenn Du den FB nur bei einer bestimmten Bedingung aufrufen willst, ist es eigentlich sinnvoller, dem FB dafür einen eigenen Eingang zu spendieren.

    Angenommen, der Baustein soll das Licht bei Schalter_1 einschalten. Wie der Baustein das macht, ist ja erstmal egal. Das sähe dann ja ungefähr so aus:
    Code:
    IF Schalter_1 THEN
     MyLightFB;
    END_IF;
    Angenommen, dieser FB würde 20 mal verwendet. Dann müsstest Du 20 mal die IF Abfrage mit irgendeinem Schalter machen.

    Wenn Du den FB mit einem Freigabe-Eingang versiehst, könnte das so aussehen:
    Code:
    MyLightFB(Freigabe := Schalter_1);
    Das ist schöner und übersichtlicher.

    Im FB selber kann man das dann so programmieren:
    Code:
    IF Freigabe THEN
     ... hier sind dann die eigentlichen Zeilen, die was mit dem Licht anstellen 
    END_IF;
    So wird die Abfrage, die vorher von Aussen gesteuert wurde, nur in den FB hinein verlagert.

  6. Folgender Benutzer sagt Danke zu Grubba für den nützlichen Beitrag:

    Spoon (04.02.2010)

  7. #6
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    So, Tochter ist fertig gewickelt, dann mal eben zu Teil 2:

    Angenommen, der FB soll Licht beim Ein-und Ausschalten hoch und runterdimmen.

    Er soll beim Eingang Freigabe=True hochdimmen, bei Eingang Freigabe=False runterdimmen.

    Über diesen Eingang kann der FB erkennen was er tun soll, und intern alles dafür notwendige abarbeiten. Wenn er mit dem hoch und runterdimmen fertig ist, überspringt er intern alle unwichtigen Schritte, damit keine Rechenzeit verschwendet wird.

    Wenn der FB von aussen bedingt aufgerufen würde, müsstest Du von aussen dafür Sorge tragen, das der FB mit seiner internen Arbeit fertig ist, und ihn dann überspringen. Auch das müsstest Du für jeden Aufruf separat auswerten. Dann doch lieber diese Arbeit einmal in den FB packen und dann beliebig oft ohne zusätzlichen Programmieraufwand aufrufen.

    Alle Klarheiten beseitigt?

  8. #7
    Spoon ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.05.2009
    Ort
    Sächsische Schweiz Osterzgebirge
    Beiträge
    27
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Das ist ja richtig klasse. Vielen Dank.

    Aber jetzt kommt gleich die nächste Frage.

    Wie ist da folgendes zu verstehen:

    FB_Test(Eingang:=True);

    Wird der Baustein durch diesen Befehl aufgerufen und die Variable Eingang auf True gesetzt?

    Hab das mal in einem Programm so stehen gesehen.

  9. #8
    Registriert seit
    12.02.2008
    Ort
    Westfalen (Dort wo's Schwarzbrot gibt)
    Beiträge
    417
    Danke
    8
    Erhielt 87 Danke für 72 Beiträge

    Standard

    Wie ist da folgendes zu verstehen:

    FB_Test(Eingang:=True);

    Wird der Baustein durch diesen Befehl aufgerufen und die Variable Eingang auf True gesetzt?
    Ganz genau.

  10. #9
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Ich habe es mir angewöhnt, einen FB nur einmal im Programm oder FB mit Parametern aufzurufen. Meist am Ende des Codes oder zusätzlich in einer Aktion verpackt.
    Während des Programms verwende ich ausschließlich die einzelnen zu verändernden In/Outputs.
    Sieht das in etwa so aus:
    Code:
    ...
    IF bVar1 THEN
       myFB.Enable := TRUE;
    ELSE
       myFB.Enable := FALSE;
    END_IF
    ...
    myFB.Input1 := ...;
    ...
    Output := myFB.Output1;
    ...
    ...
    (* Ende des Codes *)
    myFB(iParameter1 := 123
        iParameter2 := 456);
    Vorteil finde ich ist, dass der FB in jedem Fall ausgeführt wird. Unabhängig von irgendwelchen Bedingungen.

  11. Folgender Benutzer sagt Danke zu trinitaucher für den nützlichen Beitrag:

    frigidolf (18.03.2015)

  12. #10
    Registriert seit
    04.12.2009
    Ort
    Unterföhring
    Beiträge
    15
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    das habe ich auch schon gemerkt, dass das ganz praktisch ist. Dadurch ist man sicher, dass Funktionsblöcke immer ausgeführt werden bzw. nicht mehrfach. v.A. bei MotionControl-Bausteinen hat mir das den Quelltext immer erheblich gekürzt

    Gruß, Alois

Ähnliche Themen

  1. Antworten: 14
    Letzter Beitrag: 08.02.2011, 14:39
  2. Antworten: 3
    Letzter Beitrag: 11.08.2010, 22:09
  3. Funktionsbaustein in S40
    Von Arne30 im Forum Sonstige Steuerungen
    Antworten: 2
    Letzter Beitrag: 24.07.2006, 15:05
  4. Funktionsbaustein Lauflicht
    Von maxi im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 24.04.2006, 07:11
  5. Funktionsbaustein in S5 ???
    Von Tom1971 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 06.04.2006, 18:48

Lesezeichen

Berechtigungen

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