Funktionsbausteine und strukturiertes Programmieren
Eins SPS-Programm beginnt meist klein. Ein paar Eingänge, ein paar Ausgänge, eine Handvoll Verknüpfungen – alles in einem einzigen Block, und es läuft. Doch sobald die Anlage wächst, wächst auch das Programm. Plötzlich stehen hunderte Netzwerke untereinander, dieselbe Logik taucht an fünf Stellen leicht abgewandelt auf, und wer einen Fehler sucht, scrollt minutenlang. Genau hier setzt strukturiertes Programmieren an: Die Gesamtaufgabe wird in überschaubare, wiederverwendbare Bausteine zerlegt – mit klaren Schnittstellen, eigenem Speicher und definierten Aufgaben.
Dieser Beitrag zeigt, welche Bausteinarten es gibt, worin sich Funktion und Funktionsbaustein unterscheiden, wie eine saubere Schnittstelle aufgebaut ist und wie sich ein einmal geschriebener Baustein beliebig oft wiederverwenden lässt.
Vorwissen
- Was ist eine SPS? – Aufbau und Funktionsweise
- Zyklischer Programmablauf (EVA-Prinzip)
- Adressierung von Eingängen, Ausgängen und Merkern
Lernziele
Nach diesem Beitrag kannst du:
- die vier wichtigsten Bausteinarten OB, FC, FB und DB voneinander unterscheiden
- erklären, warum ein Funktionsbaustein einen Instanz-Datenbaustein braucht und eine Funktion nicht
- den Aufbau einer Bausteinschnittstelle mit IN, OUT, IN_OUT, STAT und TEMP beschreiben
- begründen, welche Variablen dauerhaft gespeichert werden und welche zyklisch verloren gehen
- einen wiederverwendbaren Baustein planen und seinen Mehrwert in der Praxis einordnen
1. Warum strukturieren? Vom Monolithen zum Baustein
Stell dir ein Programm vor, in dem die komplette Steuerung einer Förderanlage in einem einzigen Block steht: Bandsteuerung, Störungsauswertung, Zählung der Teile, Ansteuerung von drei Antrieben – alles hintereinander. Solange alles funktioniert, fällt das nicht weiter auf. Problematisch wird es, sobald jemand etwas ändern, einen Fehler finden oder die Anlage um ein viertes Band erweitern soll.
Ein soche monolithisches Programm – also ein Programm „aus einem Guss“ ohne innere Gliederung – hat drei typische Schwächen. Die Wartung ist mühsam, weil zusammengehörige Logik über das ganze Programm verstreut sein kann. Die Fehlersuche dauert, weil man nicht eingrenzen kann, in welchem Teil das Problem steckt. Und die Teamarbeit leidet, weil zwei Personen kaum gleichzeitig am selben großen Block arbeiten können.
Die Lösung heißt Modularisierung: Die Gesamtaufgabe wird in kleinere, in sich abgeschlossene Einheiten aufgeteilt. Jede Einheit erledigt genau eine klar umrissene Teilaufgabe und lässt sich für sich allein verstehen, testen und wiederverwenden.
Eine gute Analogie ist der Werkzeugkasten. Niemand baut ein Universalwerkzeug, das gleichzeitig schraubt, schneidet und misst. Stattdessen hat man für jede Aufgabe ein passendes, spezialisiertes Werkzeug. Genauso ist es beim Programmieren: Statt eines Blocks, der alles kann, baut man viele kleine Bausteine, die jeweils eine Sache richtig gut können. Wer schon einmal mathematische Funktionen genutzt hat, kennt das Prinzip – man gibt Werte hinein, bekommt ein Ergebnis heraus und muss nicht wissen, was innen genau passiert.
Beim Entwurf gibt es zwei Denkrichtungen. Beim Top-Down-Ansatz beginnt man bei der Gesamtaufgabe und zerlegt sie schrittweise in immer kleinere Teilaufgaben. Beim Bottom-Up-Ansatz baut man zuerst die kleinen, allgemein nutzbaren Bausteine und setzt daraus die größere Lösung zusammen. In der Praxis mischt man beides: grob von oben planen, bewährte Bausteine von unten einsetzen.
Eine Anlage soll um eine baugleiche fünfte Förderstrecke erweitert werden. Das bestehende Programm ist monolithisch aufgebaut. Welche Aussage trifft die Hauptschwierigkeit am besten?
- a) Die Logik der vier bestehenden Strecken ist verstreut und muss für die fünfte mühsam herauskopiert und angepasst werden.
- b) Die Erweiterung ist unmöglich, weil die CPU keine weiteren Strecken verarbeiten kann.
- c) Monolithische Programme lassen sich grundsätzlich nicht erweitern.
- d) Die Erweiterung erfordert zwingend einen Hardwaretausch.
Richtig: a)
Der eigentliche Nachteil ist organisatorisch: Wiederkehrende Logik steckt verstreut im großen Block, statt in einem wiederverwendbaren Baustein zu liegen. a und d behaupten technische Grenzen, die hier nicht das Problem sind. c ist falsch, weil sich auch ein monolithisches Programm erweitern lässt – nur eben aufwendig.
Was beschreibt den Top-Down-Ansatz beim Programmentwurf am genauesten?
- a) Man schreibt zuerst die fertige Bedienoberfläche.
- b) Man baut zuerst alle kleinen Hilfsbausteine und setzt daraus die Lösung zusammen.
- c) Man geht von der Gesamtaufgabe aus und zerlegt sie schrittweise in kleinere Teilaufgaben.
- d) Man programmiert in der Reihenfolge, in der die Signale physikalisch eintreffen.
Richtig: c)
Top-Down bedeutet, von der großen Aufgabe zur kleinen zu gelangen. b beschreibt das Gegenteil, nämlich Bottom-Up. a und d sind keine Entwurfsstrategien, sondern willkürliche Reihenfolgen.
2. Bausteinarten: OB, FC, FB und DB
Die Programmiernorm für SPS unterscheidet mehrere Bausteinarten, die sich in ihrer Aufgabe und in ihrem Umgang mit Daten unterscheiden. Vier davon trifft man ständig.
Der Organisationsbaustein (OB) ist der Einstiegspunkt des Programms. Das Betriebssystem der SPS ruft ihn auf, und von dort aus werden die anderen Bausteine gestartet. Der zyklische Hauptbaustein (oft OB1) bildet den Einstieg in den normalen Programmlauf – wie dieser Zyklus im Detail abläuft, ist im Vorwissen-Beitrag zum zyklischen Programmablauf beschrieben. Für uns reicht hier: Der OB ist der Aufrufer ganz oben, der die eigentliche Arbeit an die nachfolgenden Bausteine verteilt.
Die Funktion (FC) ist ein Baustein ohne Gedächtnis. Sie bekommt Werte übergeben, verarbeitet sie und liefert ein Ergebnis zurück. Nach dem Durchlauf behält sie nichts. Ruft man dieselbe FC im nächsten Zyklus wieder auf, beginnt sie wieder bei null. Typisch für reine Berechnungen oder Umrechnungen.
Der Funktionsbaustein (FB) ist ein Baustein mit Gedächtnis. Er kann sich Werte über den Zyklus hinaus merken. Das ist nötig, sobald ein Baustein einen Zustand halten muss – etwa eine Selbsthaltung, einen Zählerstand oder eine laufende Zeit. Dieses Gedächtnis liegt nicht im FB selbst, sondern in einem zugeordneten Datenbaustein.
Der Datenbaustein (DB) speichert Daten, enthält aber keine Logik. Man unterscheidet zwei Arten. Ein globaler DB steht allen Bausteinen offen und dient als gemeinsamer Datenspeicher, etwa für Rezepturen oder Anlagenparameter. Ein Instanz-DB gehört fest zu einem bestimmten FB-Aufruf und enthält dessen gemerkte Werte.
Bausteine rufen einander auf, und das auch verschachtelt: Der OB ruft einen FB, dieser ruft eine FC, die wiederum eine weitere FC nutzt. So entsteht eine Aufrufhierarchie, in der jede Ebene eine klar abgegrenzte Aufgabe übernimmt.
Die folgende Darstellung zeigt diese Hierarchie und ordnet jedem FB seinen Instanz-DB zu.
Ein Baustein soll lediglich eine Temperatur von Grad Celsius in Kelvin umrechnen und das Ergebnis zurückliefern. Welche Bausteinart ist dafür die passende und sparsamste Wahl?
- a) Ein FB, weil jede Berechnung ein Gedächtnis benötigt.
- b) Ein globaler DB, weil dort die Umrechnung gespeichert wird.
- c) Ein OB, weil Berechnungen immer im Einstiegsbaustein erfolgen.
- d) Eine FC, weil keine Werte über den Zyklus hinaus gemerkt werden müssen.
Richtig: d)
Eine reine Umrechnung braucht keinen gemerkten Zustand, also genügt die gedächtnislose FC. a ist falsch, weil eine Berechnung gerade kein Gedächtnis erfordert. b verwechselt Datenspeicher mit Logik. c ist falsch, weil der OB nur Einstieg und Aufrufer ist.
Worin liegt der entscheidende Unterschied zwischen einem globalen DB und einem Instanz-DB?
- a) Der globale DB ist für alle Bausteine zugänglich, der Instanz-DB gehört fest zu einem bestimmten FB-Aufruf.
- b) Der globale DB enthält Logik, der Instanz-DB nur Daten.
- c) Der Instanz-DB ist immer größer als der globale DB.
- d) Beide sind identisch und unterscheiden sich nur im Namen.
Richtig: a)
Der globale DB ist gemeinsamer Speicher, der Instanz-DB ist das private Gedächtnis genau eines FB-Aufrufs. b ist falsch, weil kein DB Logik enthält. c trifft keine allgemeingültige Aussage zur Größe. d ist schlicht falsch.
Warum benötigt ein FB einen zugeordneten Datenbaustein, eine FC dagegen nicht?
- a) Weil der FB komplizierter aufgebaut ist und mehr Rechenzeit braucht.
- b) Weil eine FC keine Eingangsparameter haben darf.
- c) Weil das Betriebssystem FCs grundsätzlich nicht aufruft.
- d) Weil der FB seine gemerkten Werte über den Zyklus hinaus irgendwo ablegen muss.
Richtig: d)
Der FB hat ein Gedächtnis, und dieses Gedächtnis liegt im Instanz-DB. a ist keine korrekte Begründung. b ist falsch, auch FCs haben Eingangsparameter. c ist falsch, FCs werden ganz normal aufgerufen.
3. FC vs. FB – der Unterschied liegt im Gedächtnis
Der wichtigsten Unterschied zwischen Funktion und Funktionsbaustein lässt sich auf ein Wort bringen: Gedächtnis. Um zu verstehen, was das konkret bedeutet, lohnt ein Blick auf die Arten von lokalen Variablen, die ein Baustein verwenden kann.
Statische Variablen behalten ihren Wert über den Zyklus hinaus. Schreibt der Baustein in einem Zyklus eine 5 hinein, steht im nächsten Zyklus immer noch die 5 da – solange, bis sie überschrieben wird. Temporäre Variablen dagegen sind flüchtig. Sie existieren nur während des aktuellen Durchlaufs und sind beim nächsten Aufruf wieder undefiniert. Sie dienen als Zwischenspeicher für Werte, die man nur kurz innerhalb einer Berechnung braucht.
Eine FC kennt nur temporäre lokale Variablen. Sie hat keinen Platz für statische Werte und damit kein Gedächtnis. Ein FB dagegen kann statische Variablen führen – und genau dafür braucht er den Instanz-DB. Dort werden die statischen Werte zwischen den Zyklen aufgewahrt. Ohne diesen zugeordneten Datenbaustein gäbe es keinen Ort, an dem der FB sich etwas merken könnte.
Wann nimmt man was? Die Faustregel ist einfach. Sobald ein Baustein sich etwas über den Zyklus hinaus merken muss, wird es ein FB. Geht es nur um eine Berechnung, deren Ergebnis sofort weitergereicht wird, genügt eine FC.
Typische FC-Aufgaben sind reine Berechnungen und Umrechnungen: eine Skalierung von Rohwerten, eine Einheitenumrechnung, eine mathematische Formel. Typische FB-Aufgaben sind alle Funktionen mit Zustand: eine Selbsthaltung, ein Zähler, der seinen Stand behält, eine Zeitfunktion, die mitläuft, oder eine Ablaufsteuerung, die sich ihren aktuellen Schritt merkt.
Ein FB lässt sich übrigens mehrfach verwenden. Ruft man denselben FB an mehreren Stellen auf, bekommt jeder Aufruf seinen eigenen Instanz-DB. Man spricht von Mehrfachinstanz oder mehreren Instanzen desselben Bausteins. So steuert ein einziger FB „Antrieb“ gleichzeitig drei verschiedene Motoren – jeder Motor hat dank eigenem Instanz-DB sein eigenes, unabhängiges Gedächtnis.
In einem Baustein soll ein Zwischenergebnis nur kurz innerhalb der laufenden Berechnung gehalten und danach verworfen werden. Welche Variablenart ist dafür richtig?
- a) Eine statische Variable, damit der Wert sicher erhalten bleibt.
- b) Eine temporäre Variable, weil der Wert nur während des Durchlaufs gebraucht wird.
- c) Eine globale Variable im Instanz-DB.
- d) Eine Eingangsvariable, weil Berechnungen immer am Eingang stattfinden.
Richtig: b)
Ein nur kurz benötigtes Zwischenergebnis gehört in eine flüchtige temporäre Variable. a wäre Speicherverschwendung und verschleiert die Absicht. c und d passen funktional nicht zur Aufgabe.
Ein FB „Antrieb“ steuert in einem Programm drei Motoren. Wie viele Instanz-DBs werden dafür benötigt?
- a) Einer, der von allen drei Aufrufen gemeinsam genutzt wird.
- b) Keiner, weil ein FB kein Gedächtnis hat.
- c) Drei, weil jeder Aufruf seinen eigenen Zustand braucht.
- d) Sechs, je zwei pro Motor.
Richtig: c)
Jede Instanz des FB braucht ihren eigenen Instanz-DB, damit die drei Motoren unabhängige Zustände führen. a würde die Zustände vermischen. b ist falsch, ein FB hat sehr wohl Gedächtnis. d hat keine sachliche Grundlage.
Welche Aussage über die FC ist korrekt?
- a) Sie behält ihre lokalen Werte zwischen zwei Zyklen.
- b) Sie kennt nur temporäre lokale Variablen und hat kein Gedächtnis.
- c) Sie besitzt einen eigenen Instanz-DB.
- d) Sie darf keine Ausgangsparameter haben.
Richtig: b)
Die FC ist gedächtnislos und arbeitet nur mit flüchtigen temporären Variablen. a und c beschreiben den FB, nicht die FC. d ist falsch, eine FC kann sehr wohl Ausgangsparameter liefern.
4. Die Bausteinschnittstelle: IN, OUT, IN_OUT, STAT, TEMP
Jeder Baustein wird über seine Schnittstelle mit der Außenwelt verbunden. Die Schnittstelle ist der Deklarationsteil, in dem festgelegt wird, welche Werte hineingehen, welche herauskommen und welche lokalen Daten der Baustein intern verwendet. Eine saubere Schnittstelle ist der eigentliche Schlüssel zur Wiederverwendbarkeit – wer den Baustein nutzt, muss nur wissen, was vorne hinein- und hinten herauskommt, nicht aber, was innen passiert.
Die Schnittstelle gliedert sich in mehrere Abschnitte:
- IN – Eingangsparameter. Werte, die der Baustein von außen erhält und nur liest. Beispiel: ein Startsignal, ein Sollwert.
- OUT – Ausgangsparameter. Werte, die der Baustein berechnet und nach außen zurückgibt. Beispiel: ein Ansteuersignal, ein Statusbit.
- IN_OUT – Durchgangsparameter. Werte, die der Baustein hineinbekommt, verändert und wieder zurückgibt. Sinnvoll bei größeren Datenmengen, die nicht kopiert, sondern direkt bearbeitet werden sollen.
- STAT – statische lokale Variablen. Sie bilden das Gedächtnis des Bausteins und behalten ihren Wert über den Zyklus hinaus. Genau diese STAT-Variablen sind die Datenbasis des Instanz-DB: Was hier deklariert wird, belegt dauerhaft Platz im zugeordneten Datenbaustein und bleibt zwischen den Zyklen erhalten. STAT gibt es nur beim FB, nicht bei der FC.
- TEMP – temporäre lokale Variablen. Sie liegen flüchtig im Lokaldatenbereich und werden mit jedem Aufruf neu angelegt. Im Gegensatz zu den STAT-Variablen belegen sie keinen Platz im Instanz-DB; ihr Inhalt geht am Ende des Durchlaufs verloren und ist beim nächsten Aufruf undefiniert.
Damit wird der Zusammenhang aus Kapitel 3 greifbar: Das „Gedächtnis“ eines FB sind genau seine STAT-Variablen, die im Instanz-DB dauerhaft abgelegt werden. Die TEMP-Variablen dagegen dienen nur als kurzlebiger Zwischenspeicher und überdauern den Zyklus nicht.
Beim Aufruf eines Bausteins unterscheidet man zwei Begriffe. Die formalen Parameter sind die Platzhalter, die in der Schnittstelle deklariert wurden – etwa ein Eingang mit Namen „Startsignal“. Die aktuellen Parameter sind die konkreten Werte oder Adressen, die man beim Aufruf an diese Platzhalter übergibt – etwa der Eingang E0.0. Der formale Parameter ist also die Beschriftung der Klemme, der aktuelle Parameter das Kabel, das man tatsächlich anschließt.
Für die Datentypen genügt fürs Erste ein grober Überblick. BOOL ist ein einzelnes Bit, also wahr oder falsch – typisch für Signale und Zustände. INT ist eine Ganzzahl, etwa für Stückzahlen. REAL ist eine Gleitkommazahl für Messwerte mit Nachkommastellen. TIME ist ein Zeitwert für Dauern und Verzögerungen. Welcher Datentyp an einen Parameter passt, legt die Schnittstelle fest.
Die folgende Darstellung zeigt einen Baustein als Symbol: Eingänge links, Ausgänge rechts, die lokalen Daten im Inneren.
Ein Zählerstand soll in einem FB über die Zyklen hinweg erhalten bleiben. In welchem Abschnitt der Schnittstelle wird die zugehörige Variable deklariert, und wo liegt sie physisch?
- a) Als TEMP-Variable, sie liegt dauerhaft im Instanz-DB.
- b) Als IN-Parameter, sie wird bei jedem Aufruf neu vorgegeben.
- c) Als TEMP-Variable, sie liegt flüchtig im Lokaldatenbereich.
- d) Als STAT-Variable, sie liegt im Instanz-DB und bleibt erhalten.
Richtig: d)
Werte, die über den Zyklus hinaus erhalten bleiben sollen, gehören zu den STAT-Variablen, die im Instanz-DB liegen. a verwechselt TEMP mit STAT. b würde den Wert jedes Mal überschreiben. c beschreibt zwar TEMP korrekt, aber TEMP überdauert den Zyklus gerade nicht.
Was unterscheidet einen formalen von einem aktuellen Parameter?
- a) Der formale Parameter ist der Platzhalter in der Schnittstelle, der aktuelle Parameter der beim Aufruf übergebene konkrete Wert oder die Adresse.
- b) Der formal Parameter ist immer eine Zahl, der aktuelle immer ein Bit.
- c) Beide bezeichnen dasselbe und sind austauschbar.
- d) Der aktuelle Parameter steht in der Schnittstelle, der formale wird beim Aufruf übergeben.
Richtig: a)
Der formale Parameter ist die deklarierte Klemmenbeschriftung, der aktuelle das tatsächlich angeschlossene Signal. b trifft keine sinnvolle Unterscheidung. c ist falsch, beide haben verschiedene Rollen. d vertauscht die beiden Begriffe.
Ein Baustein soll eine größere Datenstruktur entgegennehmen, deren einzelne Werte verändern und das Ergebnis zurückgeben, ohne die Daten zu kopieren. Welcher Parametertyp passt am besten?
- a) IN, weil die Daten nur gelesen werden.
- b) OUT, weil am Ende ein Ergebnis herauskommt.
- c) IN_OUT, weil die Daten hinein-, verändert und wieder zurückgehen.
- d) TEMP, weil es sich um lokale Daten handelt.
Richtig: c)
Ein Durchgangsparameter passt genau zu Daten, die hineingegeben, bearbeitet und zurückgegeben werden. a erlaubt kein Verändern. b deckt nur die Rückgabe ab. d wäre lokal und nicht von außen übergebbar.
5. Wiederverwendung in der Praxis: Bibliotheken und ein Beispielbaustein
Der eigentliche Gewinn des strukturierten Programmierens zeigt sich bei der Wiederverwendung. Ein gut geschriebener FB wird einmal erstellt, getestet und freigegeben – und danach beliebig oft eingesetzt. Jeder weitere Einsatz bekommt nur einen neuen Instanz-DB; die Logik bleibt dieselbe.
Solche bewährten Bausteine sammelt man in Bibliotheken. Eine Bibliothek ist ein Vorrat geprüfter Bausteine, aus dem man sich für neue Projekte bedient. Das spart nicht nur Zeit, sondern erhöht auch die Zuverlässigkeit: Ein Baustein, der sich in zehn Anlagen bewährt hat, enthält erfahrungsgemäß weniger Fehler als frisch geschriebener Code. Wer Bausteine an Kunden weitergibt, kann sie zudem schützen, sodass die Funktion nutzbar ist, der innere Aufbau aber nicht eingesehen werden kann.
Das durchziehende Beispiel ist ein FB Förderband-Steuerung. Seine Aufgabe: ein Band starten und stoppen, eine Selbsthaltung für das Startsignal führen und eine Störung melden, wenn der Antrieb nicht anläuft. Die Schnittstelle könnte so aussehen:
IN: Start (BOOL), Stopp (BOOL), Antrieb_laeuft (BOOL, Rückmeldung)
OUT: Band_ein (BOOL), Stoerung (BOOL)
STAT: Selbsthaltung (BOOL), Anlaufzeit (TIME)
Geschrieben wird dieser FB genau einmal. Hat eine Anlage drei Förderbänder, ruft man den FB dreimal auf – mit drei Instanz-DBs, etwa iDB_Band1, iDB_Band2 und iDB_Band3. Jedes Band führt damit seine eigene Selbsthaltung und seinen eigenen Störungszustand, völlig unabhängig von den anderen. Würde man stattdessen die Logik dreimal von Hand kopieren, hätte man dreifachen Pflegeaufwand: Jede Änderung müsste an drei Stellen nachgezogen werden, und jede Stelle wäre eine neue Fehlerquelle.
Die Grundlage für diese Wiederverwendbarkeit ist die herstellerübergreifende Programmiernorm ÖNORM EN 61131-3, die den Aufbau von Bausteinen, die Datentypen und die Programmiersprachen einheitlich festlegt. Dadurch lässt sich das Prinzip des strukturierten Programmierens unabhängig vom konkreten Fabrikat anwenden, auch wenn die Bedienoberflächen der Programmierwerkzeuge verschieden aussehen.
Die folgende Darstellung zeigt, wie der eine FB „Förderband-Steuerung“ dreimal aufgerufen wird und jeder Aufruf seinen eigenen Instanz-DB ansteuert.
Eine Anlage hat fünf baugleiche Pumpen. Ein FB „Pumpe“ ist bereits geschrieben und getestet. Wie setzt man ihn am sinnvollsten ein?
- a) Den FB fünfmal kopieren und jede Kopie einzeln pflegen.
- b) Den FB fünfmal aufrufen, jeweils mit eigenem Instanz-DB.
- c) Den FB einmal aufrufen und alle fünf Pumpen über einen gemeinsamen Instanz-DB steuern.
- d) Für jede Pumpe einen neuen FB von Grund auf schreiben.
Richtig: b)
Ein einziger FB wird fünfmal instanziiert, jede Instanz mit eigenem Datenbaustein – minimaler Pflegeaufwand bei voller Unabhängigkeit. a verfünffacht den Pflegeaufwand. c würde die Zustände vermischen. d verwirft den ganzen Vorteil der Wiederverwendung.
Welchen Vorteil bietet eine geprüfte Bausteinbibliothek bei der Inbetriebnahme einer neuen Anlage?
- a) Sie ersetzt die Verschaltung der Ein- und Ausgänge vollständig.
- b) Sie macht eine Risikobeurteilung der Anlage überflüssig.
- c) Bewährte Bausteine sind bereits getestet, sodass sich die Arbeit auf Verschaltung und Besonderheiten konzentriert.
- d) Sie sorgt dafür, dass keine Instanz-DBs mehr benötigt werden.
Richtig: c)
Getestete Bausteine verkürzen die Inbetriebnahme, weil die Grundfunktion gesichert ist. a ist falsch, verschaltet werden muss weiterhin. b vermischt Programmierung mit Sicherheitsthemen. d ist falsch, jede Instanz braucht weiterhin ihren DB.
Warum ist die ÖNORM EN 61131-3 für das strukturierte Programmieren von Bedeutung?
- a) Sie schreibt vor, welcher Hersteller verwendet werden muss.
- b) Sie legt Bausteinaufbau, Datentypen und Programmiersprachen herstellerübergreifend einheitlich fest.
- c) Sie bestimmt die maximale Anzahl an Instanz-DBs pro Anlage.
- d) Sie regelt ausschließlich die elektrische Sicherheit der SPS.
Richtig: b)
Die Norm vereinheitlicht die Programmierwelt über Fabrikatsgrenzen hinweg. a ist falsch, sie schreibt keinen Hersteller vor. c ist erfunden. d verwechselt die Programmiernorm mit Sicherheitsnormen.
Abschlusstest
Frage 1: Ein Programm enthält einen Baustein, der lediglich zwei Ganzzahlen addiert und die Summe zurückgibt. Welche Bausteinart und welche lokalen Variablen sind hier angemessen?
- a) Ein FB mit STAT-Variablen, weil jede Rechnung gespeichert werden muss.
- b) Ein OB, weil Additionen im Einstiegsbaustein erfolgen.
- c) Ein globaler DB, weil Summen dort abgelegt werden.
- d) Eine FC, die das Zwischenergebnis bei Bedarf in einer TEMP-Variable hält.
Richtig: d)
Eine reine Addition braucht kein Gedächtnis, also eine gedächtnislose FC mit höchstens einer flüchtigen TEMP-Variable. a wäre überdimensioniert. b und c verwechseln Speicher- bzw. Einstiegsbausteine mit Berechnungslogik.
Frage 2: In einem FB ist eine Variable als STAT deklariert. Was bedeutet das für ihren Speicherort und ihre Lebensdauer?
- a) Sie liegt im Instanz-DB und behält ihren Wert über den Zyklus hinaus.
- b) Sie liegt flüchtig im Lokaldatenbereich und ist nach dem Durchlauf verloren.
- c) Sie wird bei jedem Aufruf vom Bediener neu vorgegeben.
- d) Sie existiert nur, solange der Aufruf läuft, und belegt keinen DB-Platz.
Richtig: a)
STAT-Variablen bilden die Datenbasis des Instanz-DB und überdauern den Zyklus. b und d beschreiben TEMP-Variablen. c beschreibt einen Eingangsparameter.
Frage 3: Worin liegt der grundlegende Unterschied zwischen FC und FB?
- a) Die FC hat ein Gedächtnis, der FB nicht.
- b) Der FB hat ein Gedächtnis über STAT-Variablen im Instanz-DB, die FC hat keines.
- c) Die FC darf nur einmal pro Programm aufgerufen werden.
- d) Der FB kann keine Eingangsparameter haben.
Richtig: b)
Der FB merkt sich Zustände im Instanz-DB, die FC ist gedächtnislos. a kehrt die Verhältnisse um. c und d sind frei erfunden.
Frage 4: Ein FB „Antrieb“ wird in einem Programm viermal aufgerufen, aber alle vier Aufrufe verweisen versehentlich auf denselben Instanz-DB. Welche Folge ist zu erwarten?
- a) Die Zustände der vier Antriebe überschreiben sich gegenseitig.
- b) Die vier Antriebe arbeiten exakt unabhängig voneinander.
- c) Der FB lässt sich gar nicht erst aufrufen.
- d) Jeder Antrieb bekommt automatisch einen eigenen DB zugewiesen.
Richtig: a)
Ein gemeinsamer Instanz-DB für mehrere Aufrufe vermischt deren Gedächtnis. b beschreibt den korrekten Fall mit getrennten DBs. c ist falsch, der Aufruf funktioniert technisch. d trifft nicht zu, die Zuordnung muss man selbst vornehmen.
Frage 5: Welche Variablenart eignet sich für ein Zwischenergebnis, das nur innerhalb eines einzelnen Bausteindurchlaufs gebraucht wird?
- a) STAT, damit der Wert dauerhaft bleibt.
- b) IN, weil es von außen kommt.
- c) TEMP, weil der Wert nur kurzzeitig im Lokaldatenbereich benötigt wird.
- d) OUT, weil es ein Ergebnis ist.
Richtig: c)
Ein kurzlebiges Zwischenergebnis gehört in eine flüchtige TEMP-Variable. a verschwendet Speicher im Instanz-DB. b und d passen funktional nicht, da der Wert weder von außen kommt noch nach außen gegeben wird.
Frage 6: Was bezeichnet man beim Bausteinaufruf als aktuellen Parameter?
- a) Den deklarierten Platzhalter in der Schnittstelle.
- b) Den Datentyp der Variable.
- c) Die laufende Nummer des Bausteins.
- d) Den konkreten Wert oder die Adresse, die beim Aufruf an den Platzhalter übergeben wird.
Richtig: d)
Der aktuelle Parameter ist das tatsächlich angeschlossene Signal. a beschreibt den formalen Parameter. b und c sind unbeteiligte Eigenschaften.
Frage 7: Welche Aussage zum Organisationsbaustein ist korrekt?
- a) Er speichert die Anlagenparameter für alle Bausteine.
- b) Er wird vom Betriebssystem aufgerufen und bildet den Einstiegspunkt, von dem aus weitere Bausteine gestartet werden.
- c) Er enthält das Gedächtnis aller FBs.
- d) Er darf keine anderen Bausteine aufrufen.
Richtig: b)
Der OB ist der vom Betriebssystem aufgerufene Einstieg und verteilt die Arbeit. a beschreibt einen globalen DB. c ist falsch, das Gedächtnis liegt in den Instanz-DBs. d widerspricht der Aufgabe des OB.
Frage 8: Ein Durchgangsparameter (IN_OUT) wird typischerweise wofür eingesetzt?
- a) Für eine größere Datenstruktur, die hineingegeben, verändert und zurückgegeben wird.
- b) Für ein einzelnes Startsignal, das nur gelesen wird.
- c) Für ein Statusbit, das nur ausgegeben wird.
- d) Für ein flüchtiges Zwischenergebnis innerhalb des Bausteins.
Richtig: a)
IN_OUT passt zu Daten, die der Baustein hereinbekommt, bearbeitet und zurückgibt. b ist ein reiner IN-Parameter. c ist ein reiner OUT-Parameter. d wäre eine TEMP-Variable.
Frage 9: Warum wird derselbe FB für drei baugleiche Antriebe nur einmal geschrieben, aber dreimal aufgerufen?
- a) Weil ein FB technisch nur dreimal existieren darf.
- b) Weil drei Aufrufe schneller laufen als ein einzelner.
- c) Weil so die Logik nur an einer Stelle gepflegt wird, jeder Aufruf aber über seinen eigenen Instanz-DB einen unabhängigen Zustand führt.
- d) Weil jeder Antrieb eine eigene Programmiersprache benötigt.
Richtig: c)
Eine Logikquelle, drei unabhängige Gedächtnisse – das ist der RN der Wiederverwendung. a ist erfunden. b trifft keine sinnvolle Aussage über Laufzeit. d ist falsch.
Frage 10: Welche Aussage über TEMP-Variablen trifft zu?
- a) Sie belegen dauerhaft Platz im Instanz-DB.
- b) Sie behalten ihren Wert über mehrere Zyklen.
- c) Sie liegen flüchtig im Lokaldatenbereich und sind beim nächsten Aufruf undefiniert.
- d) Sie sind nur in einer FC, nie in einem FB erlaubt.
Richtig: c)
TEMP-Variablen sind flüchtig und überdauern den Durchlauf nicht. a und b beschreiben STAT-Variablen. d ist falsch, sowohl FC als auch FB können TEMP-Variablen nutzen.
Frage 11: Eine Bibliothek bewährter Bausteine wird in einem neuen Projekt eingesetzt. Welcher Effekt ist realistisch?
- a) Die Verschaltung der Anlage entfällt vollständig.
- b) Die Anlage benötigt keine Instanz-DBs mehr.
- c) Die Programmiernorm wird dadurch außer Kraft gesetzt.
- d) Die Inbetriebnahme wird kürzer, weil die Bausteine bereits getestet sind.
Richtig: d)
Getestete Bausteine senken den Aufwand bei der Inbetriebnahme. a ist falsch, verschaltet wird weiterhin. b und c sind sachlich nicht haltbar.
Frage 12: Welcher Datentyp eignet sich für eine Verzögerungszeit in einem Funktionsbaustein?
- a) BOOL
- b) INT
- c) REAL
- d) TIME
Richtig: d)
Zeitdauern und Verzögerungen werden mit dem Datentyp TIME geführt. BOOL ist ein einzelnes Bit, INT eine Ganzzahl, REAL eine Gleitkommazahl – keiner davon ist der spezialisierte Zeittyp.
Glossar
- Modularisierung
- Aufteilung einer großen Programmieraufgabe in kleinere, abgeschlossene Bausteine mit jeweils einer klar umrissenen Teilaufgabe.
- Organisationsbaustein (OB)
- Einstiegspunkt eines SPS-Programms, der vom Betriebssystem aufgerufen wird und von dem aus die weiteren Bausteine gestartet werden.
- Funktion (FC)
- Baustein ohne Gedächtnis, der übergebene Werte verarbeitet und ein Ergebnis zurückgibt, ohne zwischen den Zyklen etwas zu behalten.
- Funktionsbaustein (FB)
- Baustein mit Gedächtnis, der Werte über den Zyklus hinaus merken kann und dafür einen zugeordneten Instanz-Datenbaustein nutzt.
- Datenbaustein (DB)
- Baustein, der ausschließlich Daten speichert und keine Logik enthält; als globaler DB allen Bausteinen zugänglich, als Instanz-DB fest einem FB-Aufruf zugeordnet.
- Instanz-Datenbaustein
- Datenbaustein, der das Gedächtnis genau eines FB-Aufrufs enthält und in dem dessen statische Variablen abgelegt werden.
- Mehrfachinstanz
- mehrere Aufrufe desselben FB, die jeweils einen eigenen Instanz-DB und damit einen unabhängigen Zustand besitzen.
- Bausteinschnittstelle
- Deklarationsteil eines Bausteins, der festlegt, welche Werte hineingehen (IN), herauskommen (OUT), durchlaufen (IN_OUT) und welche lokalen Daten (STAT, TEMP) verwendet werden.
- Statische Variable (STAT)
- lokale Variable eines FB, die ihren Wert über den Zyklus hinaus behält und die Datenbasis des Instanz-DB bildet.
- Temporäre Variable (TEMP)
- flüchtige lokale Variable im Lokaldatenbereich, die mit jedem Aufruf neu angelegt wird und am Ende des Durchlaufs verloren geht.
- Formaler Parameter
- in der Schnittstelle deklarierter Platzhalter eines Bausteins.
- Aktueller Parameter
- konkreter Wert oder konkrete Adresse, die beim Aufruf an einen formalen Parameter übergeben wird.
- Bibliothek
- Sammlung geprüfter, wiederverwendbarer Bausteine, aus der für neue Projekte ausgewählt wird.
