Unterschied FB FC

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo interpretiere ich das nun richtig:

FC1 : Bsp. Out: mw2
FC2 : Lade mw2
Würde FC2 den Wert aus mw2 nich finden da die Daten gelöscht sind?
Wenn ich aber in FC1 schreibe Out: db2.dbw2 würde ich den doch ausserhalb von FC1 wiederfinden oder?

Fb1 : Bsp. Out: mw3
Was müsste ich nun machen wenn ich den mw3 haben möchte ohne einzugeben zu müssen dbx.dbw3?

Kann ich auch gnz normal die Daten aus einem Instanz db beispielsweise DB1 Wort 0 mit : DB1.DBW0 abrufen?
 
Zuletzt bearbeitet:
Hallo,
- es ist immer besser etwas an eigenem Beispiel zu erfragen.
- mit ungeraden Merkerwörtern solltest du dir erst gar nicht angewöhnen zu arbeiten (überlappende Speicherbereiche)
- du kannst auf die Daten eines Instanz-DB's (wie auf die eines beliebigen anderen DB's) zugreifen - ich persönlich halte das aber außerhalb des FB's für schlechten Stil.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
FC1 : Bsp. Out: mw2
FC2 : Lade mw2
Würde FC2 den Wert aus mw2 nich finden da die Daten gelöscht sind?
Das sind die globalen Speicher, die außerhalb (beim Aufruf) der FC angegeben werden. Somit findet FC2 die ausgegebenen Daten von FC1 auch wieder.
Nur die lokalen Daten, die innerhalb der FC verwendet werden (zu erkennen an der Raute #), werden mit der Beendigung der FC zum Überschreiben frei gegeben.
 
Vollkommen richtig was ihr beide sagt.
Ich mache das auch nicht so, klar MW 2, 4 ,6 usw
Auch Funktionen mit zu speichernde Daten lege ich in einen FB.
Jedoch wollte ich erfragen ob es möglich ist was Ihr ja beantwortet habt.
Die Raute ist ein super Hineweis.
Ich habe es mal ausprobiert und sehe keine Raute?
Habe ich was falsch gemacht?
Wie kann ich denn nun ausserhalb vom FB1 und FC1 auf die
In Variable (2567) zugreifen und auf die Merkerwörter ohne dies in einem DB separat zu speichern?

Ich bekomme nicht in meine Hirse welche daten verloren gehen?

Oder meint Ihr in etwa wenn ich anstelle 2567 eine PEW 256 in FB 1 abfrage und diese dann irgendwo abgespeichert werden? Etwa in EW 256 und das gleiche mit FC 1 mache, und auf EW 256 nicht zugreifen kann weil Daten temporär gespeichert und beim verlassen des FC1 gelöscht wird?
 

Anhänge

  • FB1.jpg
    FB1.jpg
    88,3 KB · Aufrufe: 29
  • FC1.jpg
    FC1.jpg
    87,9 KB · Aufrufe: 27
Zuletzt bearbeitet:
Ich habe das Gefühl, dass du die grundlegenden Sachen nicht verstanden hast bzw. nicht verstehst
Die Raute ist im Baustein zu sehen, nicht außerhalb deines Bausteins. die zahl 2567 ist eine konstante Zahl, keine Variable. Im Baustein wirst du auf die Variable mit #In2 zugreifen können.
Code:
L #In1
L #In2
+I
T #Out

Du übergibst zwei Werte für In1 und In2... Ob das jetzt ein fester konstanter Wert, ein Merkerwort, ein Eingangswort ist oder im Datenbaustein abgelegt ist, ist dem Baustein egal (Typ muss jedoch stimmen). Den Wert, den du an #Out übergibst, muss außerhalb des Bausteins gespeichert werden (z.B. in einem Merkerwort).

In deinem Beispiel macht ein FC mehr Sinn.
Wenn du Variablen im Baustein verwendest, die für den nächsten Aufruf wichtig sind, gehören die in den static Bereich rein, ergo brauchst du ein FB. Alternativ geht auch ein FC mit InOut Variablen.

Deine letzten zwei Sätze sind mir zu umständlich und kann den Gedankengang nicht ganz nachvollziehen. Kannst du dich da noch etwas klarer ausdrücken? Danke

EW - Eingangswort (wird zu Beginn eines Zykluses aktualisiert)
PEW - Prozesseingangswort (Wert wird zum Zeitpunkt der Abfrage ermittelt)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe vermutet wenn ich einen PEW 256 abfrage dan frage ich ihn in dem Moment des Abfragezeitpunktes ab wenn ich aber eine weile später den PEW 256 zum Zykluszeitpunkt
haben möchte da sich die Werte von PEW wieder geändert haben dachte ich frage ich den EW 256 ab da die Zyklusmäsige PEW Abfrage in einem EW abgelegt wird??
 
Die Raute ist ein super Hineweis.
Ich habe es mal ausprobiert und sehe keine Raute?
Habe ich was falsch gemacht?
Du hast keine Variablen im oberen Bereich bei IN, OUT usw. angelegt.
Das ist die Schnittstelle des Bausteins. Mit deren Hilfe werden beim Aufruf Daten von außerhalb des Bausteins, z.B. das MW2 auf die lokalen Variablen, das sind die, die Du dort oben angelegt hast, übergeben.
Dadurch kann man bei mehreren Aufrufen des Bausteins verschiedene globale Variablen an die gleichen lokalen Variablen zur immer gleichen Verarbeitung übergeben bzw. von diesen zurück bekommen.
 
Ich habe es versucht nachzubauen.
Kann mir nun jemand in Fup ergänzen wie ich diese Schnittstellen von einem anderem Baustein lesen /beschreiben kann?
 

Anhänge

  • FB Schnittstelle.jpg
    FB Schnittstelle.jpg
    189,7 KB · Aufrufe: 22
Zuviel Werbung?
-> Hier kostenlos registrieren
Ruf doch mal Deinen FB jetzt im OB1 auf.

Dann wirst Du 3 neue PINs sehen und zwar mit den Namen Deiner erstellten Variablen. Deswegen heißen sie Schnittstelle. Sie stellen die Verbindung von der "Außenwelt" zum "Innenleben" des FBs dar.

Direkt auf das "Innenleben" des FBs (den IDB) zuzugreifen geht zwar, löst hier aber sicher kontroverse Diskussionen aus, ob das einen guten Programmierstil darstellt oder nicht. Ich persönlich bin da eher Larrys Meinung:
- du kannst auf die Daten eines Instanz-DB's (wie auf die eines beliebigen anderen DB's) zugreifen - ich persönlich halte das aber außerhalb des FB's für schlechten Stil.
 
Zuletzt bearbeitet:
Ok habe ich aufgefufen sehe zwar die 3 Pinne nicht aber habe verstanden was Du meinst.
Wäre super den Fehler rauszubekommen.
So also könnte ich diese 3 zusätzlichen "Pinne" immer mit mir belibigen Konstante, Wörter etc. beschalten?
 

Anhänge

  • FB Aufruf in OB1.jpg
    FB Aufruf in OB1.jpg
    298,5 KB · Aufrufe: 23
Ok habe ich aufgefufen sehe zwar die 3 Pinne nicht aber habe verstanden was Du meinst.
Wäre super den Fehler rauszubekommen.
So also könnte ich diese 3 zusätzlichen "Pinne" immer mit mir belibigen Konstante, Wörter etc. beschalten?
Im Bild sehe ich die 3 Pins zwar noch nicht, aber naja.

Weiter oben hast du direkt an die Addition das MW6 und 2567 direkt an die Eingänge der Addition gegeben und das Ergebnis ins MW8 schreiben lassen. Das machst Du jetzt an den 3 Pins des FB. Bei ner einfachen Addition macht das zwar noch nicht wirklich Sinn, aber lass mal im FB beide Werte addieren und zusätzlich das Ergebnis mit jedem einzelnen Eingangswert multiplizieren.
Dann kannst Du das immer wieder mit verschiedenen Eingangswerten machen.
Bei solch einfachen Operationen bräuchtest Du noch keinen Zwischenspeicher (=IDB). Deshalb würde dafür auch eine Funktion FC ausreichen.
Wenn aber Daten anfallen, die Du nur innerhalb dieses Bausteins, aber für den nächsten Zyklus, brauchst, wählst Du einen FB. Solche Daten sind z.B. Flankenmerker, Zustandsmerker für Ausgänge, die über Setzen und Rücksetzen eingestellt werden, Timer, Zähler, Zwischenergebnisse u.ä..
 
Ok alles verstanden aber warum sehe ich diese 3 Pinne nicht ?
Weil der Aufruf noch nicht aktualisiert ist. Eventuell mußt Du den OB1 noch mal neu öffnen, um über das Kontextmenü aktualisieren zu können.
Und der FB muss natürlich nach dem Anlegen der Variablen auch gespeichert worden sein.
 
Nein macht er nicht, habe alles aktualisiert.
Kann es daran liegen das es eine Lite Version ist?
 

Anhänge

  • Schnittstellen von FB 1 in DB1 übernommen.jpg
    Schnittstellen von FB 1 in DB1 übernommen.jpg
    127,2 KB · Aufrufe: 38
Zuletzt bearbeitet:
Im Bild sehe ich die 3 Pins zwar noch nicht, aber naja.

Weiter oben hast du direkt an die Addition das MW6 und 2567 direkt an die Eingänge der Addition gegeben und das Ergebnis ins MW8 schreiben lassen. Das machst Du jetzt an den 3 Pins des FB. Bei ner einfachen Addition macht das zwar noch nicht wirklich Sinn, aber lass mal im FB beide Werte addieren und zusätzlich das Ergebnis mit jedem einzelnen Eingangswert multiplizieren.
Dann kannst Du das immer wieder mit verschiedenen Eingangswerten machen.
Bei solch einfachen Operationen bräuchtest Du noch keinen Zwischenspeicher (=IDB). Deshalb würde dafür auch eine Funktion FC ausreichen.
Wenn aber Daten anfallen, die Du nur innerhalb dieses Bausteins, aber für den nächsten Zyklus, brauchst, wählst Du einen FB. Solche Daten sind z.B. Flankenmerker, Zustandsmerker für Ausgänge, die über Setzen und Rücksetzen eingestellt werden, Timer, Zähler, Zwischenergebnisse u.ä..

Hallo!
FCs und FBs sind mir schon klar, aber ich bin mir noch nicht sicher, wann ich was wirklich einsetzen soll.

Wenn ich einen Baustein habe, der nur intern Daten verarbeitet und nicht von außen zugegriffen werden soll (auch nicht von Visu), dann nehm ich natürlich einen FB (wenn Stat-Daten benötigt werden).

Aber wie sieht es aus, wenn ich Signale aus anderen Bausteinen abfragen muss?

Beispiel Schrittkette:

STEP ist eine interne Variable, die erhalten bleiben muss. -> Also erstelle ich einen FB.
In der Schrittkette wird aber abgefragt, ob Bedingungen aus anderen Bausteinen erfüllt sind. -> Für globale Daten erstelle ich einen Datenbaustein ("GDB"), in dem alle globalen Variablen drinnen stehen.

Variablen auf die von einer Visu zugegriffen wird, schreibe in auch in den "GDB", damit STAT Daten wirklich Interne Variablen sind.
(Auch wenn sie nur gelesen werden, es sei denn es handelt sich um fertig getestete FBs (FB283,...), wo sich die Schnittstelle nicht mehr verändert)


Habt Ihr bessere Vorschläge, wie man den Programmaufbau möglichst übersichtlich und modular hinbekommt?

mfG
Michael
 
Zuletzt bearbeitet:
Zurück
Oben