FC und FB

Moderatoren: Matthias, Weiss_MHJ

Antworten
Headrich
SPSTreff-User
Beiträge: 6
Registriert: 09 Mai 2019, 07:26
Wohnort: SLN

FC und FB

Beitrag von Headrich »

Hallo zusammen

So langsam bin ich echt verzweifelt.
Ich suche jetzt schon mehrere Tage eine verständlich Erklärung wo genau der Unterschied zwischen FC und FB liegt.
Alles was ich weiss ist das ein FB eine eigenes Gedächtnis (einen DB) hat und der FC nicht.
Doch was genau heisst das und wann braucht man dieses??
Ich les immer das durch den eigenen Speicherbereich Daten über mehrere Zyklen der SPS speichert.
Aber ist das nicht im FC auch der Fall wenn ich einfach einen Merker nehme und ein SR Glied ???

Vielleicht kann mir jemand mal ein Beispiel nennen wo ein FB mit DB zwingend erforderlich ist weil ein FC nicht ausreichen würde

Dafür wäre ich echt dankbar !!!

Danke im Vorraus
Nicht lange Nachdenken !
MACHEN

Benutzeravatar
Weiss_MHJ
Site Admin
Beiträge: 673
Registriert: 13 Apr 2010, 16:34
Kontaktdaten:

Beitrag von Weiss_MHJ »

Hallo,

eigentlich haben Sie den Hauptunterschied schon erwähnt. Es ist der dem FB zugehörige Instanz-DB, also dessen "Gedächtnis" in welchem die "privaten" Daten des FBs liegen.
Sie haben zwar Recht, wenn Sie sagen, dass bei einer FC bei der Verwendung von Merkern die Daten ebenfalls erhalten bleiben, allerdings ist dies auch der große Nachteil der FC. Denn wenn die FC mehrmals im Projekt aufgerufen wird, dann arbeitet diese immer mit den gleichen Merkern, somit
wird dies meist nicht funktionieren, außer man übergibt bei jedem Aufruf andere Merker und arbeitet innerhalb der FC nur mit den Parametern.

Ein klassisches Beispiel ist die Schrittkette eines Anlagenteils der mehrmals in einer Anlage vorhanden ist, weshalb die Schrittkette mehrmals aufgerufen wird.
Bei einem FB verwenden Sie als Schrittmerker Bit-Variablen innerhalb der statischen Lokaldaten des FBs, die dann im Instanz-DB abgelegt sind.
Wenn die Schrittkette x-Mal im Programm zu verwenden ist und somit der FB x-Mal aufgerufen wird, dann übergibt man jeweils immer einen anderen Instanz-DB und die benötigten E/A-Daten.
Mehr ist nicht zu tun.
Auch wenn man den FB in einem anderen Projekt verwendet, muss man sich keine Gedanken machen, ob die im FB verwendeten Operanden schon in einem anderen Programmteil verwendet werden, denn der FB arbeitet ja nur mit den "privaten" Daten aus dem Instanz-DB.

Realisiert man das Ganze mit einer FC, dann ist es ungünstig, in der FC direkt z.B. auf Merker zuzugreifen. Denn dann kann die FC
nicht mehrmals verwendet werden. Somit würde man die in der FC als Schrittmerker verwendeten Merker als Parameter übergeben und in der FC nur noch mit den Parametern arbeiten. Das geht, hat aber den Nachteil, dass man bei jedem Aufruf der FC diese Parameter zusätzlich versorgen muss, sprich man muss jedes Mal andere Merker übergeben.
Ist die FC in einem anderen SPS-Programm zu verwenden, dann muss man zunächst nachsehen, welche Merker noch frei sind und diese dann an die Parameter der FC übergeben.

Fazit:
Die Verwendung eines FBs ist oftmals die elegantere Lösung, insbesondere dann, wenn man den Baustein mehrmals im SPS-Programm aufrufen möchte oder dieser auch in anderen Programmen zum Einsatz kommen soll.

Anmerkung:
Ich habe im Text von "privaten" Daten des FBs gesprochen. Im Sinne von OOP ist dies natürlich nicht korrekt, es erläutert aber den Sachverhalt am Besten.

Gruss

Headrich
SPSTreff-User
Beiträge: 6
Registriert: 09 Mai 2019, 07:26
Wohnort: SLN

Beitrag von Headrich »

Vielen Dank für die schnelle und ausführliche Antwort.
Was mir allerdings noch schleierhaft ist , warum ich das Ganze nicht mit FC (ohne Merker) und mit einem globalen DB machen kann.
Dieses mehrfache Aufrufen ist mir ein bisschen rätselhaft.
Gibts denn ein konkretes Beispiel wie zb ein Motor oder ein Zylinder ??

Sorry das ich auf der Leitung stehe
Nicht lange Nachdenken !
MACHEN

Antworten