# Funktionsbaustein vs. Programm



## SPSstudent (8 Dezember 2009)

Ich programmiere gerade eine sehr kleine modulare Anlage, die aus mehreren Stationen (oder eher Modulen) besteht.
Es fließen mehrere Werkstücke durch die Stationen. Es kann natürlich vorkommen, dass eine Station mit der Weiterverarbeitung warten muss, bis die nächste Station frei ist oder bis überhaupt ein Teil von der vorherigen Station kommt.
Jetzt frage ich mich gerade, ob ich die Stationen als FB oder als Programm programmieren soll?

So wie ich das sehe, ist der einzige Unterschied, dass von einem FB mehrere Instanzen angelegt werden können, während ein Programm manuell kopiert werden müsste (was zu einer Fehlerquelle bei Änderungen führen kann).
Oder gibt es noch weitere Unterschiede? Eventuell wenn es um Verschachtelung von mehreren FBs/Programmen geht?

(Ein FB kann natürlich auch in den permanenten Speicher gelegt werden, aber das ist hier nicht relevant.)


----------



## Grubba (8 Dezember 2009)

Ein Unterschied liegt natürlich auch darin, dass Du Programme einem Task zuordnen kannst. Einem FB kannst Du direkt keinem Task zuordnen.


----------



## drfunfrock (8 Dezember 2009)

Programme sind isoliert voneinander, dh. sie haben keine gemeinsamen Variablen und laufen auf verschiedenen Tasks. 

Es ist zu empfehlen die Stationen/Prozesse auf FB's zu implementieren, in der Art, dass du einen FB hast, der die Kommunikation vom Programm zu den FB steuert, der dann in jedem FB instanziert wird, welcher einen Prozess abbildet. Das gibt dann einen FB im FB und spart Code.

Du solltest dir darüber klar sein, das FBs Objekte sind, die ihren internen Zustand behalten.


----------



## witkatz (8 Dezember 2009)

Ausserdem kann ein FB wie ein Datentyp behandelt und per VAR_IN_OUT an einen anderen FB übergeben werden. Im modularen Aufbau kann es z.B. nützlich sein, dass ein FB über die Variablenliste den Verweis auf Previous_FB und Next_FB bekommt.

Gruß,
witkatz


----------



## RobiHerb (11 Dezember 2009)

*Robustheit*

Ein FB ist von der "Robustheit" immer einem per Copy/Paste vervielfachtem Programm System vorzuziehen.

Man testet nach einer Änderung des FB diesen akribisch und kann dann sicher sein, dass man nirgendwo vergessen hat, die Änderung auch noch durchzuführen. Im Prinzip ist das eine Kapselung des potentiellen Fehlerproblems auf eine Stelle.

Das ist so wie in der Produktion, eine Serienfertigung, die man im Griff hat, ist einer Mannschaft von individuellen Handwerkern, die alle parallel ein gleiches Produkt herstellen, an Qualität überlegen.

Die Sache zahlt sich natürlich immer besser aus, je komplexer ein Programm wird, leider sind die Lehrprogramme sehr oft nur wenige Zeilen lang und man sieht sowieso alles auf einem Blick.


----------



## drfunfrock (11 Dezember 2009)

Wobei man sagen muss, es lohnt, wenn man die IO's von den FB entkoppelt. Daher man übergibt die IOs als Parameter, anstatt die direkt im FB zu verwenden. Dabei wird man entdecken, dass oftmals Code wiederverwendet werden kann. Sobald man gezwungen ist, Code zu kopieren, hat man mit hoher Wahrscheinlichkeit etwas falsch gemacht.


----------

