Beispiel: Erste Schritte
Produkt: CODESYS Application Composer
Dieses Beispiel zeigt die ersten Schritte, wie Sie Module für den CODESYS Application Composer erstellen und verwenden. Dabei werden Sie einen Raum mit Lichtern und Schaltern realisieren.
Beschreibung
In dem Beispiel wird ein kleines Szenario aus der Gebäudeautomatisierung umgesetzt: Ein Raum soll mit Lichtern und den zugehörigen Schaltern ausgestattet werden. Die Schalter können dabei auch als Dimmer verwendet werden. Weiterhin sollen die Lichter verschiedene Helligkeitsstufen annehmen können.
Vorbereitende Arbeiten
Erzeugen Sie ein neues CODESYS-Projekt aus der Vorlage Standard Projekt mit Application Composer. Wählen Sie als Bibliothek
AC_ModuleBase.
Das Toplevel-Modul
RoomFügen Sie eine neue Moduldeklaration in den POU-Pool des Projekts ein. Geben Sie der Moduldeklaration und dem zugehörigen Funktionsbaustein den Namen
Room. Der Funktionsbaustein muss zudem den FunktionsbausteinAC.Moduleerweitern, der in der BibliothekAC_ModuleBasedefiniert ist. Der FunktionsbausteinAC.Modulestellt bereits zahlreiche Methoden und Eigenschaften zur Verfügung, die nicht überschrieben werden müssen.
Die Deklaration beginnt mit dem Schlüsselwort
MODULEgefolgt von dem Modulnamen und dem weiteren SchlüsselwortIMPLEMENTED_BYsowie dem Funktionsbaustein, der das Modul implementiert. Dieser Funktionsbaustein ist im konkreten Fall der eben erstellte FunktionsbausteinRoom. In den meisten Fällen wird nun die SektionMetaDatadeklariert.Für detaillierte Informationen zu allen Parametern und Sektionen siehe: Moduleditor.
Da das Modul
Roomin unserem Beispiel ein Toplevel-Modul ist, deklarieren Sie als nächstes die SektionToplevel. In dieser Sektion definieren Sie einen Namen für die globale Variablenliste, der den Instanznamen des Toplevel-Funktionsbausteins nach der Generierung enthält. Danach müssen Sie noch mindestens eine Task in der SektionTopleveldefinieren. Diese Task ist in diesem BeispielStandard_Task. Sie ist alsMEDIUM-Task definiert und enthält die FlagsCREATE_IF_MISSINGundUPDATE_IOS.
Alle Icons und Texte, die als Platzhalter für die Beschreibungen und Icons verwendet werden (Parameter
Desc,Icon_16undIcon_32) müssen in Textlisten und Bildersammlungen abgelegt sein. Deshalb legen Sie eine entsprechende TextlisteTLund eine BildersammlungIPim POU-Pool an, die die referenzierten Icons und Texte enthalten.Das Submodul
SwitchErstellen Sie eine Moduldeklaration und einen zugehörigen Funktionsbaustein mit dem Namen
Switch. Dieses Modul stellt kein Toplevel-Modul dar und benötigt deshalb keine SektionToplevel. Auch der FunktionsbausteinSwitchmuss, wie alle Funktionsbausteine, die Module darstellen,AC.Moduleerweitern. Außerdem implementiertSwitchdie SchnittstelleISwitch, die Sie ebenfalls erzeugen müssen. Die SchnittstelleISwitchwiederum erweitertAC.IModule, fügt diesem allerdings keine neuen Methoden oder Eigenschaften hinzu.Weiterhin benötigt der Schalter ein Eingangssignal, um zu erkennen, wann er gedrückt ist. Dieses Signal deklarieren Sie in der Sektion
IO, wobei Sie die EingangsvariablexIndes FunktionsbausteinsSwitchverwenden. Des Weiteren benötigen Sie eine Referenzzeit, um die beiden Funktionen des Schalters zu unterscheiden: Das Drücken des Schalters für die ZeitdauertTimerstartet die Dimm-Funktion - bei einem kürzeren Drücken wird das Licht nur ein- oder ausgeschaltet. Die EingangsvariabletTimerdefinieren Sie als Parameter des Moduls (SektionParameter). Somit können Sie die Zeit später einfach bei der Verwendung der Module einstellen.Die Variablen
xInundtTimerdeklarieren Sie als Eingänge des FunktionsbausteinsSwitch, wobei Sie beim ParametertTimereinen Initialisierungswert von 500 ms einstellen.
Die Textliste und Bildersammlung müssen Sie ebenfalls erweitern, um die Beschreibungen anzeigen zu können.
Das Submodul
SwitchSimpleDas zweite Schaltermodul, das Sie erstellen, ist ein einfacher Schalter mit nur zwei Zuständen: Ein oder Aus. Dazu müssen Sie eine Moduldeklaration und einen Funktionsbaustein erzeugen, die sich vom bereits vorhandenen Schalter nur in folgenden Punkten unterscheiden: Der Parameter und die Variable
tTimerwerden nicht benötigt. Außerdem implementieren Sie nichtISwitchsondernISwitchSimple, das ebenfallsAC.IModuleerweitert.
Das Submodul
LightWie zuvor für die Schalter müssen Sie auch für das Licht eine Moduldeklaration
Lightmit FunktionsbausteinLightund SchnittstelleILightangelegen.Damit Sie das Modul
Lightunterhalb eines Raums einfügen können, müssen Sie die Moduldeklaration vonLightum die SektionSlotserweitern. In dieser Sektion deklarieren Sie eine UntersektionSlot_Multi, die SieLightsnennen und die die Module des TypsILightaufnehmen kann. Die Anzahl der Lichter, die zu einem Raum hinzugefügt werden müssen oder können, geben Sie durchCardinalityan. Weiterhin definieren Sie die VariablenVariableundVar_Countund verknüpfen diese mit der ModuldeklarationpLights(POINTER TO ILight)unduiNumberOfLights (UINT). Somit gewährleisten Sie, dass nur Module zum SlotLightshinzugefügt werden können, deren Funktionsbausteine die SchnittstelleILightimplementieren.
Beim Modul
Lightdefinieren Sie ebenfalls einen Slot, an dem ein Schalter eingefügt werden kann. Somit müssen Sie der Moduldeklaration vonLighteinen SlotSwitchhinzufügen. Die zusätzlichen Parameter des ModulsLightsind die Geschwindigkeit des DimmersrSpeedund die maximale HelligkeituiMaxValue. Abschließend müssen Sie noch einen Ausgang definieren, der die Helligkeit des Lichts repräsentiert. Alle Parameter, Slots und Ausgänge müssen Sie auch als Variablen zum FunktionsbausteinLighthinzufügen.
Das Submodul
LightSimpleAls letztes Modul erstellen Sie ein vereinfachtes Licht, das mit dem einfachen Schalter arbeitet. Dazu benötigen Sie eine Moduldeklaration und einen Funktionsbaustein
LightSimple, derAC.Moduleerweitert und die bereits vorhandene SchnittstelleILightimplementiert. Die Unterschiede zum ModulLightsind Folgende: Der Ausgang soll vom TypBOOLsein und den NamenxSwitchedOnhaben. Außerdem wird der ParameterrSpeednicht benötigt.
Implementierung
Für die Implementierung der Funktion für das Modul
Switchverwenden Sie die MethodeCallPrioMediumStartvonAC.Moduleund überschreiben diese mit einer eigenen Implementierung. Diese Funktion wird gewählt, da das Toplevel-ModulRoomeine TaskMEDIUMdeklariert. Das bedeutet, dass die MethodeCallPrioMediumStartdes FunktionsbausteinsSwitchautomatisch in jedem Zyklus der Task aufgerufen wird. Die Hauptfunktion des Schalters ist die Unterscheidung zwischen Schalten und Dimmen. Nach dem Drücken des Schalters startet ein Timer mit einer Zeit, die durch Anwenderparameter vorgegeben werden kann. Wenn der Timer abgelaufen ist und der Schalter immer noch gedrückt ist, wird die Dimmerfunktion verwendet, was durch die VariablexPushLongangezeigt wird. Die VariablexPushwird TRUE, wenn der Schalter nur kurz gedrückt wird. Für beide VariablenxPushLongundxPushwerden sowohl im FunktionsbausteinSwitchals auch in der Schnittstelle Eigenschaften hinzugefügt, so dass sie vom Eltern-Lichtfunktionsbaustein benutzt werden können.Auch der Funktionsbaustein
Lightüberschreibt die MethodeCallPrioMediumStart. Abhängig vom Wert der zugehörigen Eingangsvariablen wird das Licht auf „An" oder „Aus" gedimmt oder einfach nur geschaltet. Für den Dimmer wird der Geschwindigkeitswert des deklarierten ParametersrSpeedverwendet. Nach Erreichen des Maximum oder Minimum des Dimmwerts wird das Dimmen beendet. Wenn das Licht in einem gedimmten Zustand ist und der Schalter gedrückt wird, wird das Licht ausgeschaltet.Eine mögliche Implementierung können Sie dem Beispielprojekt entnehmen.
Das Konfektionieren
Das Erstellen des Modulbaums nehmen Sie in der Ansicht Module vor. Dazu fügen Sie, nach dem Einlesen der Module, zunächst das Toplevel-Modul
Roomzum Modulbaum hinzu. Im SlotLightsfügen Sie je einLightund einLightSimplehinzu, denen Sie jeweils einenSwitchoder einSwitchSimplezuordnen. Danach können Sie die Parameter und E/As der Modulinstanzen einstellen. Zum Testen bietet es sich an, die Ein- und Ausgänge mit Variablen einer globalen Variablenliste zu verknüpfen.Zum Schluss erzeugen Sie das Projekt mit dem Befehl Composer → Erzeugen. Nach dem Download auf ein Gerät können Sie das Beispiel nach Belieben testen. Hierbei können Sie auch die Zusammenstellung des Raums variieren, ohne dass der Code oder die Module angefasst werden müssen. Und auch die Werte der Parameter der Modulinstanzen können Sie ändern und deren Auswirkungen überprüfen. Das Ändern der Parameterwerte kann sowohl offline als auch online erfolgen.

Systemvoraussetzungen und Einschränkungen
Programmiersystem | CODESYS Development System Version 3.5.17.0 oder höher |
Laufzeitsystem | CODESYS Control Win Version 3.5.17.0 |
Zusatzkomponenten | CODESYS Application Composer |
Hinweis
DOWNLOAD Projekte