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
Room
Fü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.Module
erweitern, der in der BibliothekAC_ModuleBase
definiert ist. Der FunktionsbausteinAC.Module
stellt bereits zahlreiche Methoden und Eigenschaften zur Verfügung, die nicht überschrieben werden müssen.Die Deklaration beginnt mit dem Schlüsselwort
MODULE
gefolgt von dem Modulnamen und dem weiteren SchlüsselwortIMPLEMENTED_BY
sowie dem Funktionsbaustein, der das Modul implementiert. Dieser Funktionsbaustein ist im konkreten Fall der eben erstellte FunktionsbausteinRoom
. In den meisten Fällen wird nun die SektionMetaData
deklariert.Für detaillierte Informationen zu allen Parametern und Sektionen siehe: Moduleditor.
Da das Modul
Room
in 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 SektionToplevel
definieren. Diese Task ist in diesem BeispielStandard_Task
. Sie ist alsMEDIUM
-Task definiert und enthält die FlagsCREATE_IF_MISSING
undUPDATE_IOS
.Alle Icons und Texte, die als Platzhalter für die Beschreibungen und Icons verwendet werden (Parameter
Desc
,Icon_16
undIcon_32
) müssen in Textlisten und Bildersammlungen abgelegt sein. Deshalb legen Sie eine entsprechende TextlisteTL
und eine BildersammlungIP
im POU-Pool an, die die referenzierten Icons und Texte enthalten.Das Submodul
Switch
Erstellen 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 FunktionsbausteinSwitch
muss, wie alle Funktionsbausteine, die Module darstellen,AC.Module
erweitern. Außerdem implementiertSwitch
die SchnittstelleISwitch
, die Sie ebenfalls erzeugen müssen. Die SchnittstelleISwitch
wiederum 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 EingangsvariablexIn
des FunktionsbausteinsSwitch
verwenden. Des Weiteren benötigen Sie eine Referenzzeit, um die beiden Funktionen des Schalters zu unterscheiden: Das Drücken des Schalters für die ZeitdauertTimer
startet die Dimm-Funktion - bei einem kürzeren Drücken wird das Licht nur ein- oder ausgeschaltet. Die EingangsvariabletTimer
definieren Sie als Parameter des Moduls (SektionParameter
). Somit können Sie die Zeit später einfach bei der Verwendung der Module einstellen.Die Variablen
xIn
undtTimer
deklarieren Sie als Eingänge des FunktionsbausteinsSwitch
, wobei Sie beim ParametertTimer
einen Initialisierungswert von 500 ms einstellen.Die Textliste und Bildersammlung müssen Sie ebenfalls erweitern, um die Beschreibungen anzeigen zu können.
Das Submodul
SwitchSimple
Das 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
tTimer
werden nicht benötigt. Außerdem implementieren Sie nichtISwitch
sondernISwitchSimple
, das ebenfallsAC.IModule
erweitert.Das Submodul
Light
Wie zuvor für die Schalter müssen Sie auch für das Licht eine Moduldeklaration
Light
mit FunktionsbausteinLight
und SchnittstelleILight
angelegen.Damit Sie das Modul
Light
unterhalb eines Raums einfügen können, müssen Sie die Moduldeklaration vonLight
um die SektionSlots
erweitern. In dieser Sektion deklarieren Sie eine UntersektionSlot_Multi
, die SieLights
nennen und die die Module des TypsILight
aufnehmen kann. Die Anzahl der Lichter, die zu einem Raum hinzugefügt werden müssen oder können, geben Sie durchCardinality
an. Weiterhin definieren Sie die VariablenVariable
undVar_Count
und verknüpfen diese mit der ModuldeklarationpLights(POINTER TO ILight)
unduiNumberOfLights (UINT)
. Somit gewährleisten Sie, dass nur Module zum SlotLights
hinzugefügt werden können, deren Funktionsbausteine die SchnittstelleILight
implementieren.Beim Modul
Light
definieren Sie ebenfalls einen Slot, an dem ein Schalter eingefügt werden kann. Somit müssen Sie der Moduldeklaration vonLight
einen SlotSwitch
hinzufügen. Die zusätzlichen Parameter des ModulsLight
sind die Geschwindigkeit des DimmersrSpeed
und 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 FunktionsbausteinLight
hinzufügen.Das Submodul
LightSimple
Als letztes Modul erstellen Sie ein vereinfachtes Licht, das mit dem einfachen Schalter arbeitet. Dazu benötigen Sie eine Moduldeklaration und einen Funktionsbaustein
LightSimple
, derAC.Module
erweitert und die bereits vorhandene SchnittstelleILight
implementiert. Die Unterschiede zum ModulLight
sind Folgende: Der Ausgang soll vom TypBOOL
sein und den NamenxSwitchedOn
haben. Außerdem wird der ParameterrSpeed
nicht benötigt.Implementierung
Für die Implementierung der Funktion für das Modul
Switch
verwenden Sie die MethodeCallPrioMediumStart
vonAC.Module
und überschreiben diese mit einer eigenen Implementierung. Diese Funktion wird gewählt, da das Toplevel-ModulRoom
eine TaskMEDIUM
deklariert. Das bedeutet, dass die MethodeCallPrioMediumStart
des FunktionsbausteinsSwitch
automatisch 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 VariablexPushLong
angezeigt wird. Die VariablexPush
wird TRUE, wenn der Schalter nur kurz gedrückt wird. Für beide VariablenxPushLong
undxPush
werden sowohl im FunktionsbausteinSwitch
als 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 ParametersrSpeed
verwendet. 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
Room
zum Modulbaum hinzu. Im SlotLights
fügen Sie je einLight
und einLightSimple
hinzu, denen Sie jeweils einenSwitch
oder einSwitchSimple
zuordnen. 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