Funktionsbausteine

redscorpion

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

Ich hab da mal ne Frage zu FB´s , da ich noch anfänger bin fällt mir dies noch ein wenig schwer !

Kann mir jemand erklären wie man einen FB aufbaut was sind Temp Variablen ? ist das ein Zwischenspeicher ? und wann nimmt man diese her ? IN-Out ! IN und Out wie gehe ich so einen Baustein an ?

wann ist es nützlich einen FB zu erstellen ?

Wenn ich einen FB habe kann ich den auch in einem FC aufrufen und muss ich diesen dann auch im OB nochmals aufrufen.

Hoffe mir kann jemand eine erklärung geben. Damit ich das auch mal verstehe .

Danke euch schon mal im Voraus.

PS: Wer Rechtschreibfehler findet darf diese behalten :D
 
ein paar Punkte kann ich ja mal beisteuern.

Temp-Variablen
Ist ein Speicher Bereich der zur Laufzeit des Baustein verwendet wird und
kann Sinnvoller Weise, als Zwischenspeieher verwendet werden.
Dieser Speicher ist Temponär und liefert nach verlassen des Baustein keine
gesicherte Werte mehr. Da der selbe Speicherbereich auch von anderen Bausteinen
verwendet werden kann.

IN/OUT/IN_OUT
Diese Variablen bezeichnet Mann als Schnittstelle und dient zur Komunikation nach
außerhalb des Bausteins.
'IN' nutzt man um Variablen oder Werte einzulesen die nicht im Baustein verändert
werden sollen oder müssen als Beispiel einen Eingang oder einen Wert z.b. eine Zeit.
'OUT' nutzt mann um Ergebnise oder Zustände nach außen des Baustein führen zu
können, als bestes Beispiel Wäre da ein Ausgang.
'IN-OUT' sind Variablen die eingelesen werden sollen und auch im Baustein verändert
werden und wieder ausgegeben werden sollen. Dh könnte z.b. wieder ein Ausgang oder
Merker sein. Mann kann auch sagen dieser Bereich dient zum Weiterreichen.

Stat Bereich
Dieses ist das Gedächtnis des Baustein, hier wird der Zustand von Variablen gespeichert.
Du bist übrigens nicht gezwungen Temponäre Variablen zu verwennden, wenn du Zwischen-
ergebnisse zu Diagnosezwecke beobachten möchtest kannst du die auch in den STAT Bereich
legen.

Baustein angehen
dazu solltest du dir erstmal im klaren sein was du bezwecken möchtest, dann halte
ich es für sinnvoll, die Schnittstelle zu defnieren, Variablen zu Deklarieren. Welche
Variablen darfst du nach dem Aufruf wieder vergessen, welche brauchst du für den
erneuten aufruf. Vermeide es außerhalb des Baustein, Variablen aus der instanz zu
bearbeiten, damit der Baustein in sich gekapselt ist.

Aufrauf
Zu einen Funktionsbaustein gehört eine Instanz, der Instanz DB, hier werden alle Variablen
abgelegt bis auf die Temponären. Somit kannst du den gleichen Baustein öfter im Programm
verwenden ohne beim aufruf dem Speicherbereich im ganzen neu zu Deklarieren.
 
In Step 7 gibt es 2 Bausteinarten mit denen man grundsätzlich programmiert, der eine ist der FC und der andere der FB.

Die Unterschiede einfach: FC ein Baustein ohne Gedächtnis, der FB mit Gedächtnis (=Instanz-Datenbaustein [IDB])
Beim FC müssen IN- OUT- IN_OUT-Variablen von außen beschaltet werden, beim FB nicht, da die Variablen, bis auf die TEMP-V. im IDB einen Speicherplatz haben und bei der Parametrierung einen Startwert erhalten.

Beide Beusteinarten können IN-, OUT-, IN_OUT- und Temp-Variablen enthalten. Der FB hat zusätzlich noch die STAT-Variablen mit denen man programmieren kann.

IN-, OUT- und IN_OUT-Variablen nimmt man, um einen Baustein von Außen mit Werten zu beschalten. Imtern kann der Baustein dann mit der symbolischen Beschschritung der Variable arbeiten (z. B. IN = "Start", dann trägt man von Außen an den Eingang "Start" seinen Operanten (M10.0) an und intern verknüpft man nur noch den "Start" mit der gewünschten Funktion). IN- Variablen können nur Werte in den Baustein geben. Ein setzen/rücksetzen intern ist nicht möglich und hat keinen Einfluss auf die IN-Variable. Bei der OUT-Variablen verhällt sich das genauso, nur das hier der Wert zählt der intern gesetzt wird. Die IN_OUT_Variable kann beides, d. h. sie übernimmt das Eingangssignal, es kann intern verarbeitet werden und anschließend wird der Zustand wieder nach außen übergeben.

Temp-Variablen sind lediglich lokale und für den momentanen Aufruf gültige Hilfvariablen. Achtung: Die CPU hat eine gewisse Anzahl von Temp-Variablen-Speicherstellen zur Verfügung und nutzt diesen immer wieder. Es muss daher sichergestellt sein, das die Temp-Variable intern immer mit einem definierten Signal / Wert beschrieben wird. Der Speicher ist nicht zwangläufig NULL.

Beim FB kann man anstatt mit den Temp-Variablen zu arbeiten auch die STAT-Variablen nutzen, diese gehören nur zu dem aktuellen Bausteinaufruf und sind im nächsten Zyklus wieder vorhanden!

Kleines Beispiel für eine Anwendung:
Für eine Flanke (FP / FN) wird ein Flankenhilfsmerker benötigt, beim FB kann dieser eine STAT-Variable sein, beim FC muss es eine IN_OUT-Variable sein!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hy MCerv,

Würde mich freuen wenn du mir ein Beispiel z.B. machen könntest von einem Frequenzumrichter Movidrive oder so , welche , wenn man in auf und ab fahren möchte ? welche IN , OUT , Temp und oder Stat Variablen man braucht. Und eine erklärung warum das so zu machen ist.
Würde mich freuen
Sorry aber das kappier ich noch nicht so.

Danke

Gruß
Robert
 
Hallo Robert,

ich weiss ja nicht, wie tief du in der Materie drinsteckst, deshalb beschreibe ich dir mal meine Vorgehensweise bei einem Step 7 Programm, in dem ich mehrere Movidrives verfahre. (Obwohl ich als Instandhalter nicht so der Profi bin)

Antrieb im Hardwaremanager definieren, (GSD Datei kannst du dir bei SEW runterladen), dabei werden E/A Adressen definiert (3 words, z.Bsp. 272-277)
Ich bleibe bei diesem Beispiel und rufe in einem FC, in dem ich diesen Antrieb ansteuern möchte, die SFC 14 und 15 auf. (Hilfe erkärt die Parameter) Dabei wir bei Laddr aus 272 (Hardwaremanager dezimal) ein 110 (Hex) und bei record den Bereich eines Datenbaussteines angeben, ab welchem die Daten des FU in diesen DB geschrieben werden bzw. die Daten von dem FU ausgelesen werden (UDT für DB auch von SEW). Somit kommuniziert der FU mit Hilfe der SFC 14/15 über den DB mit der S7. Jetzt kannst du die entsprechenden DB Adressen in deinem Anwenderprogramm auslesen bzw Befehle an den FU schicken.

Ich hoffe, ich hab dich nicht gelangweilt und konnte dir etwas helfen. Wenn du willst, schicke ich dir auch gerne mein Projekt.

Grüße
Harri
 
@redscorpion,
wenn du nicht gerade eine aktuelle Anwendung mit einer SEW Antriebstechnik hast, ist das
ein ungünstiger Strohhalm, an den du dich da klammerst. Ich finde den Übungsansatz von
Michael in Beitrag #5 viel geeigneter um etwas zu lernen.
Versuche doch einn einfachen Binäruntersetzer (Stromstoßschalter) zu erstellen, das ist völlig
ausreichend um den Sinn und die Möglichkeiten eines FB's zu ergründen.
Vielleicht schreibst du ihn erstmal als FC und später als FB, um die unterschiede zu begreifen.
Du lädst deine Ansätze bzw Lössungn hier hoch und wir helfen dir auf die sprünge.
 
Hallo

nochmals zu den FB´s zurück, ich dachte ich stelle nun ein paar Bilder ein, habe z.B. den Beispiel Baustein von SEW Seite gezogen, und meinen eigenen Baustein mit dem ich nachher die Achse auf die Bestimte position fahren möchte.
Brauch ich überhaupt noch einen Baustein oder kann ich dies im SEW Baustein aufruf anparametrieren.

Netzwerk 1 Bild ist Baustein Beispiel

zweites Bild ist dann mein Baustein den ich denke noch zum verfahren zu brauchen.

Danke

Danke

FB1 SEW_Netzwerk 1.pngFB1 SEW_Netzwerk 2 und 3.pngMeine Ansteuerung FB2.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
am Rande:
Code:
U "irgendwas"
L "SollPosition

die SollPositiuon wird IMMER geladen, unabhängig von der U Abfrage. ( eventuell drüberspringen... SPB...)

In deinem Baustein schwirrt immer wieder ein Lade-Befehl zwischen den Abfragen. So wird das nicht funktionieren.

Der SEW Baustein rangiert dir die FU-Daten in einen stat/temp Bereich desgleichen. Die Ansteuerung musst selber erledigen
 
Hallo,

ich hätte zu diesem Thema mit der Schnittstelle, wo man "in", "out" usw. angibt, auch eine Frage. Ich nehme mal jetzt ein Beispiel. Ich habe zwei Zylinder, die Werkstücke auf ein Förderband werfen. Diese Werkstücke werden über das Förderband hindurch über mehrere Sensoren, die die Werkstücke überprüfen, bis an die Endstelle des Förderbandes gebracht. Beide sollen abwechselnd Werkstücke auf das Förderband werfen, also wenn die Endstelle erreicht ist.
Jetzt kann ich doch eine Funktion für beide Schreiben? Was mache ich mit den in, out, ...?
Habe das irgendwie nicht ganz verstanden.

Gruß
 
Ich versuch das mal mit möglichst wenigen Sätzen zu beantworten.

Um einen Baustein mehrfach für die gleiche Funktion nutzen zu können, dürfen innerhalb des Bausteins keine Ausgänge, Merker oder Timer direkt adressiert werden.

Man arbeitet also innerhalb des Bausteins mit "lokalen" Variablen.
Um den Baustein mit der "globalen" Außenwelt zu verbinden, nutzt man die Schnittstelle des Bausteins. Ganz grob formuliert:
IN: Für Eingangsvariablen, die abgefragt aber nicht geändert werden sollen. Z.B. Eingänge von Sensoren
IN_OUT: Für Variablen die lesend und schreibend bearbeitet werden sollen. Z.B. Merker
OUT: Für Ausgangvariablen, ganz klassisch z.B. für den Ventilausgang.

Man deklariert an der Schnittstelle also Lokalvariablen, mit denen man im Bausteincode "lokal" arbeitet. Beim Bausteinaufruf schreibt man die entsprechenden "globalen" Variablen dran.
 
@rosiger Nagel , das habe ich doch. Leider habe ich es nicht verstanden. Am besten und einfachsten ist es, wenn ich zu sowas Beispiele habe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
schöns beispiel:
Hier mal ein ganz einfaches Beispiel mit beiden Varianten.

der größte vorteil hierbei ist, du kannst den FC2 tausend mal aufrufen und jedes mal neue variablen dranschreiben.
auf sew bezogen: einmal den baustein geschrieben und du kannst 10servos (10x aufgerufen) damit steuern. die relevanten variablen werden ja von außen angelegt.
 
Wirklich super Forum. Ich will auch mal ein Danke bekommen, leider bin ich Anfänger und kann so leider auch niemanden helfen :sad:

Hier werden ja FC1 und FC2 gleichzeitig aufgerufen. Kann ich das so programmieren, dass erst FC1 und dann FC2 aufgerufen wird?
 
Zuletzt bearbeitet:
Wirklich super Forum. Ich will auch mal ein Danke bekommen, leider bin ich Anfänger und kann so leider auch niemanden helfen :sad:

Hier werden ja FC1 und FC2 gleichzeitig aufgerufen. Kann ich das so programmieren, dass erst FC1 und dann FC2 aufgerufen wird?

Das wird doch im Aufruf im OB1 schon erledigt.
Zuerst call FC1 , dann call FC2

Oder habe ich es falsch gelesen?


bike
 
Zurück
Oben