POU – Programmstruktur und Sprachelemente

Programmiercode auf Bildschirm

POUs für Programmstruktur und verschiedene Sprachelemente sinnvoll anwenden, das sind zentrale Elemente die für gutes Programmieren bzw. eine gute Applikationssoftware wichtig sind. Die Wiederverwendbarkeit von eurem Code hängt zum Beispiel stark von den verwendeten Sprachelementen ab. Ebenso kann die Programmstruktur positive, sowie negative Auswirkung auf den Entwicklungsprozess eurer Applikationssoftware nehmen. Gleiches gilt für den Servicefall. Deshalb ist es wichtig die Unterschiede zu kennen.

Beginnen wir mit dem ersten Schritt. Jede Applikation braucht Programmbausteine die eure Abläufe, Zustandsmaschinen, etc. enthalten.

In CODESYS ist die Erstellung eures ersten Anwenderprogramms ein Kinderspiel. CODESYS fügt dies nämlich bereits beim Erstellen eines Projektes für euch hinzu. Hierbei handelt es sich um das PLC_PRG. Dieses ist vergleichbar mit dem OB1 in Step7. Wollt Ihr nun euren Applikations-Code erstellen, könnt Ihr diesen prinzipiell im PLC_PRG unterbringen. Zunächst müsst Ihr euch nicht einmal um den Aufruf des PLC_PRGs kümmern. Denn das Laufzeitsystem übernimmt, im zyklischen Betrieb, die Abarbeitung. CODESYS fügt den Aufruf des PLC_PRG automatisch dem MainTask (siehe Bild unten) hinzu.

PLC_PRG als POU hinzugefügt zum Taskmanager
PLC_PRG – Aufruf im Taskmanager

 

Beim Projekt-Assistent ist bei mir für das PLC_PRG automatisch die Programmiersprache ST hinterlegt. Wollt Ihr eine andere Implementierungssprache nutzen? Dann könnt Ihr einfach das Programm löschen und ein neues, in der von euch gewünschten Sprache, erstellen. Oder Ihr entscheidet euch bereits beim Projekt-Assistent für eine andere Sprache.

Standartsprachen für das PLC_PRG
Standartsprachen – PLC_PRG

Anmerkung: Wenn Ihr euer neues Programm ebenfalls PLC_PRG nennt, so wir es ebenfalls automatisch aufgerufen.

POU – Program Organization Unit

So nun zu der Bedeutung von POU – Program Organization Unit (engl.) oder POE – Programm-Organisationseinheit (dt.).  Das Anwenderprogramm wird prinzipiell in einem POU erstellt. So werden die kleinsten Programmelemente in CODESYS bezeichnet. Ich werde im Folgenden hauptsächlich die englische Bezeichnung POU verwenden.

Ein POU kann aus einem Programm, einer Funktion oder einem Funktionsbaustein bestehen. Die Bedeutung und Funktionsweise werde ich nun im Einzelnen erläutern. Was aber alle POUs gemeinsam haben ist der prinzipielle Aufbau bestehend aus:

Deklarationsteil: Variablen und Schnittstellen, sowie die Bezeichnung der Einheit

Anweisungsteil: Beinhalten den Code und greift auf die Ressourcen des Deklarationsteils zu.

Außerdem muss ein Programm innerhalb eures Projekts eindeutig durch seinen Namen gekennzeichnet sein. D.h. innerhalb des Namensraums darf der Programmname nur einmal vorkommen.

Funktion (FC)

Fangen wir mit der Funktion (FC) an. Dieses Sprachelement dürfte einigen von euch aus anderen Programmiersprachen geläufig sein. Eine Funktion liefert zu beliebig vielen Eingängen ein Ausgangssignal. Innerhalb eures Funktionscodes könnt Ihr diese Eingänge mit beliebigen Parametern, Konstanten oder anderen Funktionen zu eurem Ausgangssignal verknüpfen. Da die Funktion „kein Gedächtnis“ besitzt, werdet Ihr bei jedem Aufruf, mit den gleichen Eingangssignalen, das gleiche Ergebnis erhalten. Die Funktion eignet sich bestens für mathematische Berechnungen, wie z.B. Skalierungen von Analogwerten.

Funktionsbaustein (FB)

Beim zweiten POU handelt es sich um den Funktionsbaustein (FB). Der FB hat eine ähnliche Funktionsweise wie die Funktion. Es werden beliebig viele Eingangssignale zu einem Ausgangssignal verknüpft. Allerdings hat der FB einen internen Datensatz („Gedächtnis“). Die Berechnungen können auf diese gespeicherten Variablen/Werte zugreifen und weiterverarbeiten. Dies bedeutet, dass bei den gleichen Eingangssignalen, euer Ergebnis vom vorherigen Aufruf abweichen kann. So könnt Ihr z.B. in euren FB einen Analogwert skalieren, und durch die Betrachtung der vorherigen Werte eine Glättung des Ausgangssignals vornehmen.

Der Funktionsbaustein kann nicht direkt in anderen POUs aufgerufen werden. Allerdings ist die Einbindung in eurem Anwenderprogramm dennoch sehr einfach. Hierfür müsst Ihr im Deklarationsteil eures Programmes zunächst einmal eine (oder mehrere) Instanz des Bausteins anlegen. Danach könnt Ihr die Instanz dann in eurem Code aufrufen. Hier ist zu beachten, dass jede Instanz des FBs einen eigenen Datenbereich hat. Wie genau das funktioniert, werde ich euch in einem späteren Artikel, an einem praktischen Beispiel demonstrieren.

Programm (PRG)

So, nun zum dritten und mächtigsten POU: Das Programm (PRG). Genauso wie der FB, kann euer Programm interne Variablen, Eingangssignale und Ausgangssignale besitzen. Mit einem PRG könnt Ihr den Funktionsablauf eurer Maschine realisieren. Hierzu werden einfach mehrere Funktionsbausteine innerhalb eines Programms aufgerufen und realisieren, durch Ihre Einzel-Funktionen, euer Anwenderprogramm. Innerhalb des Programms könnt Ihr die verschiedensten Signale eurer FBs und Funktionen auswerten und dann auf die Konfigurierte Hardware zugreifen. Zum Beispiel zum Ansteuern von Aktoren oder auslesen von Sensorwerten. Euer Laufzeitsystem kann über Tasks (siehe Taskmanager oben) verschiedene Programme direkt aufrufen.

Schlusswort

Jetzt kennt Ihr die drei Programmorganisationseinheiten und Ihre speziellen Eigenschaften. Was ich hier noch mit Anbringen möchte, ist die Strukturelle Zusammensetzung innerhalb eures CODESYS Projektes. Wie schon erwähnt, kann euer CODESYS Projekt aus mehreren Steuerungssystemen bestehen. Jede einzelne SPS wiederum besitzt nun mehrere Ressourcen. Hierzu gehören unter anderem die sogenannten Tasks, welche ich eingangs schon erwähnt hatte. Darin werden die Laufzeiteigenschaften der SPS verwaltet. Im Laufzeitsystem kann z.B. ein Programm zyklisch aufgerufen werden, oder die Priorisierung der einzelnen Aufrufe kann angepasst werden. Das Taskmanagement einer Steuerung zu verstehen und den richtigen Umgang damit, ist einer der nächsten Punkte die wir zusammen betrachten werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website benutzt Cookies und Google Analytics. Wenn du die Website weiter nutzt, gehen wir von deinem Einverständnis aus Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen