Navigation: CL-Studio Software >

Die Programmierung des Systems

 

 

 

 

 

Die Programmierung des Systems

 

Die Programmiersprache des Systems ist leicht zu erlernen und zur effektiven Programmierung des speziellen Anwendungsbereichs dieses Systems entwickelt. Diese Sprache ermöglicht es jedem Anwender ohne spezielle Programmierkenntnisse komplexe Anwendungsfunktionen zu realisieren. Für jedes Objekt kann ein Script erstellt werden, welches durch die Änderung von Zuständen bzw. Werten die mit den Objekten verbundenen Aktoren steuert. Zustände und Werte von Objekten und Variablen sowie Zeiten können mit vielfältigen Bedingungen abgefragt und durch Zuweisungen verändert werden.

 

Grundsätzlich kann man zwischen Anweisungen und Funktionen einer Programmiersprache unterscheiden.

Anweisungen beschreiben in der Programmzeile was getan werden soll.

Funktionen liefern z.B. für eine Zuweisung oder eine Bedingungsabfrage Werte zurück.

 

Scripte von Sensor-Objekten werden normalerweise immer ausgeführt, wenn eine Meldung von dem Sensor empfangen wird, beispielsweise also wenn eine Taste einer Fernbedienung gedrückt wird oder die aktuelle Temperatur eines Temperatursensors empfangen wird.  Dazu wird beim Anlegen eines Sensor-Objekts standardmässig automatisch die Checkbox Ausführen bei Empfang aktiviert.
 

Scripte von Aktoren werden üblicherweise immer in einem bestimmten Zeitintervall aktiviert, beispielsweise um den Aktor nach einer bestimmten Zeit auszuschalten oder zu bestimmten Situationen und Abhängigkeiten von den Zuständen mehrerer anderer Objekten oder Zeiten zu steuern. Nach Möglichkeit sollte das gewählte Zeitintervall für die Ausführung nicht kleiner als nötig gewählt werden. Üblicherweise reicht eine Minute, wenn jedoch Uhrzeitabfragen im Script vorkommen, bei denen keine ganzen Minuten sondern Sekunden abgefragt werden muss das Zeitintervall kleiner, normalerweise auf 5 Sekunden eingestellt werden. Bitte beachten Sie dabei, dass die normale Uhrzeit im 5-Sekundentakt aktualisiert wird, die Uhrzeitangabe in den Bedingungen also ebenfalls eine Uhrzeit im 5-Sekundenintervall sein muss.

 

In jeder Zeile eines Programms darf nur eine Anweisung stehen, Kommentarzeilen müssen mit 2 Schrägstrichen (//) beginnen, diese werden dann bei der Generierung des Codes ignoriert.

 

In den Beispielen sind Programmanweisungen eingerückt, dies ist nicht erforderlich, aber aufgrund besserer Übersichtlichkeit unbedingt empfehlenswert.

 

Wenn während der Code-Erstellung Fehler auftreten, wird der fehlerhafte Quelltext mit einer entsprechenden Fehlermeldung angezeigt.

 

Anweisungsteile, die bei der Erklärung der Syntax in < spitzen Klammern > stehen sind optional und können  weggelassen werden.

 

Die Uhrzeit wird nicht jede Sekunde, sondern alle 5 Sekunden aktualisiert. Bei Zeitvergleichen ist also zu beachten, dass die Sekunden immer durch 5 teilbar sein müssen.

 

Wenn Schaltmodule eingeschaltet werden, kann die Einschaltdauer angegeben werden.

 

Die Elemente der Programmiersprache sind die

 

•  Objekte mit ihren Zuständen, Werten und Variablen. Zustände und Werte von Objekten (und somit die zugehörige Hardware) können abgefragt und verändert werden

 

•  Operatoren für logische Verknüpfungen und Vergleiche

 

•  Schlüsselwörter, die in der Programmiersprache definierte Bedeutungen haben

 

•  Anweisungen, die in der Programmzeile beschreiben was getan werden soll

 

•  Funktionen, die in der Programmzeile Werte liefern, z.B. für Vergleiche.

 

 

Objekte

 

Hardwareobjekte

 

sind Objekte, die bestimmter Hardware zugeordnet sind und zum Schalten, Messen, Regeln etc. benutzt werden. Man unterscheidet zwischen Sensoren und Aktoren.

 

Sensoren sind Eingabeelemente wie Taster von Fernbedienungen, Bewegungsmelder, Fensterkontakte, Temperatursensoren, Wassermelder, Rauchmelder usw. In den Scripts der Sensoren stehen üblicherweise Anweisungen um Aktionen auszuführen wenn eine Meldung von der zugehörigen Hardware empfangen wird. Eine Makroanweisung zu einem Taster könnte also z.B. einen Aktor schalten wird, das sieht z.B. so aus:

 

Stehlampe umschalten

 

Aktoren sind Empfangsmodule, an die Endgeräte wie Beleuchtung, Rollläden, Schalter, Markisen etc. angeschlossen werden. Wenn Scripts von Aktoren benutzt werden, werden diese normalerweise in bestimmten Zeitintervallen ausgeführt. So kann z.B. ein Licht immer nach einer bestimmten Zeitdauer ausgeschaltet werden durch folgendes Script:

 

wenn Badventilator eingeschaltet und

  Schaltdauer(Badventilator) groesser "00:10:00" dann

  Badventilator ausschalten

endewenn

 

 

Virtuelle Objekte

 

sind Objekte, die keiner Hardware zugeordnet und z.B. nur zur Bildschirm-Ein- oder Ausgabe benutzt werden.

 

Im Fenster Einstellungen können über den Button "Neues Objekt" virtuelle Objekte erstellt werden. Dabei wird der Name, die Bezeichnung und der Typ festgelegt: z.B. Name: Anzeige, Bezeichnung: Anzeige, Typ: Zeichen.

 

In einem Script kann dem virtuelle Objekt Anzeige dann ein Wert zugewiesen werden, z.B:

 

Anzeige:="aktuelle Temperatur ist " + WandthermostatWohnzimmer.Temperatur+" Grad C"

 

 

Variablen

 

Variablen dienen der Zwischenspeicherung von Werten. Variablen werden wie die Objektprogramme auf der Seite Programmierung der Objektdefinition definiert. Einer Variablen kann im Objektprogramm ein Wert zugewiesen werden. Dieser Wert kann der Inhalt einer anderen Variablen, ein Objektzustand oder eine Konstante sein. Die in einem Objektprogramm definierten Variablen können von allen anderen Objektprogrammen benutzt werden, wenn der Name des Objekts, in dem die Variable definiert wurde, der Variablen getrennt durch einen Punkt vorangestellt wird.

 

Beispiel:

Anzeige:=RaumthermostatWohnen.Temperatur

 

Für jede Variable muss ein Typ festgelegt werden. Es können die gleichen Typen wie für Objekte verwendet werden.

 

Typen sind z.B.: Licht, Schalter, Zeichen, Zahl

 

Zusätzlich zu diesen Typen können für Variablen auch Zeittypen (Uhrzeit, Datum) benutzt werden.

 

Bei Zuweisungen zwischen nicht gleichen Typen erfolgt die Zuweisung entsprechend der Reihenfolge der für diesen Typ definierten Zustände, unabhängig von der Bezeichnung des Zustands. Intern werden Zustande als Zahl entsprechend der Reihenfolge in der Definition des Typs behandelt. Bei Zuweisungen wird diese Zahl zugewiesen.

 

Es gibt eine vordefinierte Variable des Typs Uhrzeit für jedes Objekt. Der Name der Variablen ist CT. In dieser Variablen wird die jeweils letzte Änderungszeit eines Objekts gespeichert. Mit der Funktion STOPPUHR(Objektname.CT) kann ermittelt werden wie lange ein Objekt sich in seinem aktuellen Zustand befindet.

 

Bitte beachten:

Wenn Sie eine Variable vom Typ Zahl definieren, gibt es zwei unterschiedliche Typen von Zahlen:

 

Zahlen ohne Komma (Ganzzahl) und Zahlen mit Komma (Gleitkommazahl). Von welchem Typ die Zahl ist, wird durch den Startwert festgelegt. Wird als Startwert eine Zahl mit Komma angegeben (z.B. 1,0) so wird die Variable als Gleitkommazahl behandelt, andernfalls als Ganzzahl.

 

Es macht bei Rechenoperationen und Zuweisungen einen großen Unterschied wie eine Zahl definiert ist.

 

Wenn einer Ganzzahl eine Gleitkommazahl zugewiesen wird, werden die Kommastellen einfach abgeschnitten.

 

Wenn eine Rechenoperation nicht das gewünschte Ergebnis liefert, prüfen Sie wie die in der Anweisung verwendeten Zahlen definiert sind.

 

Beispiel:

Die Minimal und Maximal-Temperatur sollen täglich auf einer Anzeige ausgegeben werden.

 

Im Objektprogramm des Objekts TempAussen (das Thermometer im Garten) sind die Variablen MIN und MAX als Zahl definiert. Das Script des Objekts TempAussen lautet:

 

wenn TempWG > MAX dann

  MAX:=TempWG

  endewenn

 

wenn TempWG < MIN dann

  MIN:=TempWG

  endewenn

 

 

Zuweisungen

 

Zustände bzw. Werte von Objekten oder Variablen können durch Zuweisungen geändert werden.

Die grundsätzliche Form einer Zuweisung im Programm ist

Ziel := Quelle

wobei Ziel ein Objekt oder eine Variable sein kann. Quelle kann ein Objekt, eine Variable oder eine Konstante

sein kann. Bei Zuweisungen von Werten unterschiedlichen Typs wird soweit möglich automatisch eine

Konvertierung entsprechend des Typs des Ziels vorgenommen.

 

Bei Zuweisungen zwischen nicht gleichen selbst definierten Typen erfolgt die Zuweisung entsprechend der  Reihenfolge der für diesen Typ definierten Zustände, unabhängig von der Bezeichnung des Zustands. Zum Beispiel muss bei der Definition neuer Typen mit den Zuständen AUS/AN darauf geachtet werden, dass der Zustand AUS immer zuerst definiert wird, damit bei Zuweisung an andere AUS/AN - Objekte der richtige Zustand übertragen wird.

 

Bei der Verwendung von Schlüsselwörtern wie einschalten bei Zuweisungen oder ausgeschaltet in Wenn-Bedingungen ist es erforderlich, dass AUS immer als erster Zustand definiert wird, da intern mit der numerischen Reihenfolge der Zustände gearbeitet wird. Durch diese Verfahrensweise ist es möglich, auch Zuweisungen zwischen Typen mit unterschiedlicher Bezeichnung für gleiche Zustände durchführen zu können. Bei der Definition der Zustände von Fenstern und Türen muss offen als erster Zustand und zu als zweiter Zustand definiert werden, damit die entsprechenden Schlüsselwörter bei Zuweisungen und Bedingungen benutzt werden können.

 

Beispiele für Zuweisungen:

 

LichtBad:=SchalterBad hat die gleiche Wirkung wie

 

LichtBad wie SchalterBad

 

Licht1Garten einschalten hat die gleiche Wirkung wie

 

Licht1Garten:=an oder Licht1Garten:=1

 

Die besonderen Schlüsselwörter AN und AUS können bei einer Zuweisung mit dem Zuweisungsoperator := ohne Hochkommas verwendet werden.

 

Wird einem Objekt ein anderer Zustand als Text zugewiesen, so muss dieser in Hochkommas gesetzt werden und genau der Schreibweise der Typdefinition entsprechen, auch Groß - / Kleinschreibung muss berücksichtigt werden.

 

Weitere Beispiele für Zuweisungen:

 

Objekt einschalten für Zeitdauer

 

als Zeitdauer kann die Zeit in Hochkommas oder als Variable angegeben werden.

Stehlampe einschalten für "00:30:00"

oder

Gartenlicht einschalten für Dauer1

 

Dauer1 muss dabei eine Variable vom Typ Uhr oder Zeichen sein., also z.B. so definiert worden sein:

vardef Zeichen:Dauer1 = 00:30:00

          

 

Rechenfunktion bei Zuweisungen numerischer Werte

 

Bei Zuweisungen an ein Objekt bzw. eine Variable des Typs Zahl können die vier Grundrechenarten benutzt werden. Damit ist es z.B. möglich Eingabewerte von Sensoren für die weitere Verarbeitung zu verändern.

Beispiel:

NeuTemp:=AltTemp - 15

 

 

Rechenfunktion bei Zuweisungen von Uhrzeiten

 

Uhrzeiten können mit Hilfe der Operatoren + und - addiert bzw. subtrahiert werden.

Beispiel:

Aktionszeit:= Sonnenaufgang + "00:15:00"

 

 

Rechenfunktion bei Zuweisungen von Datumswerten

 

Es ist auch möglich ein Datum durch eine Rechenoperation zu ermitteln.

Das Datum 11 Tage nach dem aktuellen Tag kann man z.B. ermitteln mit der Anweisung:

 

Zukunft:=Datum+11

 

wobei die Variable Zukunft vom Typ Datum sein muss.

 

 

Verknüpfungsfunktion bei Zuweisungen von Texten

 

Mit Hilfe von Zuweisungen können zwei oder mehr Zeichenketten verbunden werden. Wenn in der Anweisung Operanden eines anderen Typs als Zeichenkette benutzt wird, werden diese soweit möglich automatisch konvertiert.

 

Beispiel:

Anzeige:="Licht in der Küche ist " + LichtKueche

 

Wenn das Objekt LichtKueche eingeschaltet ist erscheint in der Anzeige

Licht in der Diele ist an

 

Bei der Anweisung

AnzeigeBad:=Uhrzeit + " Uhr"

 

erschaint in der Anzeige:

22:30:00 Uhr

 

 

wenn - Bedingungen

 

In Wenn-Anweisungen wird aufgrund von Bedingungen entschieden, welche weiteren Anweisungen ausgeführt werden. Eine Bedingung ist entweder WAHR oder FALSCH.

 

 

 

Vergleichsoperatoren

 

=          oder     gleich

 

<>        oder     ungleich

 

<          oder     kleiner

 

>          oder     groesser

 

<= (kleiner oder gleich)

 

>= (größer oder gleich)

 

 

 

Logische Operatoren

 

UND (im Sinne von und zugleich), ODER (im Sinne von oder auch),

 

NICHT (zur Negation der nachfolgenden Bedingung)

 

 

 

Bedingungen sind folgendermaßen aufgebaut (Wörter in <>-Klammern sind optional):

 

WENN <NICHT> Bedingung <UND/ODER> Bedingung DANN

 

   Anweisungen

 

<SONST>

 

   Anweisungen

 

ENDEWENN

 

Die Wenn-Anweisung ist eine Anweisung, die sich über mehrere Zeilen erstreckt.

 

Mit der WENN-Anweisung ist es möglich, den weiteren Programmablauf von einer oder mehreren Bedingungen abhängig zu machen. Wenn-Anweisungen können auch verschachtelt werden, d.h. zwischen dem wenn und dem endewenn (bzw. SONST) können weitere Wenn-Anweisungen stehen. Jede Wenn-Anweisung muss mit einer endewenn-Anweisung beendet werden, ansonsten wird bei der Code-Generierung eine entsprechende Fehlermeldung ausgegeben.

 

 

Beispiel:

WENN LichtBad eingeschaltet UND

           SCHALTDAUER(LichtBad) groesser "00:00:30" DANN

  Ventilator einschalten

  ENDEWENN

 

Vor jeder Bedingung kann ein NICHT gesetzt werden, dann wird die Anweisung hinter dann ausgeführt wenn die Bedingung nicht zutrifft.

Bitte beachten:

Das Wort NICHT muss vor der eigentlichen Bedingung stehen, es darf nicht in der Bedingung stehen.

Beispiel:

Falsch wäre die umgangsprachliche Formulierung:

 

wenn LichtBad NICHT ausgeschaltet oder Tag NICHT=“Montag“ dann

 

es würde ein Syntaxfehler angezeigt.

Richtig ist:

 

wenn NICHT LichtBad ausgeschaltet oder NICHT Tag=“Montag“ dann

 

Bitte beachten:

Häufige Syntaxfehler in wenn-Anweisungen sind, dass das Wort dann vergessen wird oder dass die

Anweisung nicht mit einem endewenn abgeschlossen wird.

 

Da wenn-Anweisungen sich immer über mehrere Zeilen erstrecken, kann die Zeile für einen Syntaxfehler oft nicht bestimmt werden. Wenn in einem Script mit einer wenn-Anweisung ein Syntaxfehler ohne Fehlerbeschreibung auftritt, prüfen Sie alle Elemente der wenn-Anweisung um den Fehler zu finden.

 

Beispiel einer WENN-Anweisung:

 

WENN Temperatur < 21,5 DANN

 

Wenn die Operanden unterschiedlichen Typs sind, findet soweit möglich eine automatische Konvertierung statt.

Wenn einer der Operanden eine Konstante ist, muss diese als Operand2 stehen, damit eine korrekte Konvertierung durchgeführt werden kann.

 

Beispiel:

Richtig: 

wenn Uhrzeit = "15:15:00" dann

 

Falsch:

wenn "15:15:00" = Uhrzeit dann

 

 

Besondere Vergleichsbedingungen:

 

wenn Objekt eingeschaltet dann

hat die gleiche Wirkung wie

wenn Objekt = 1 dann

oder auch

wenn Objekt = "an" dann 

 

Schlüsselwörter für Bedingungen

 

Für Schalter: eingeschaltet, ausgeschaltet

Für Türen und Fenster: geoeffnet, geschlossen

 

Beispiel:

wenn Fenster geoeffnet dann 

 

 

Zeit-Vergleiche

 

Bei Zeitvergleichen mit Uhrzeiten ist zu beachten, dass die Uhrzeit im 5-Sekunden-Takt aktualisiert wird, die Sekunden der Uhrzeit bei der Prüfung auf Zeitgleichheit also immer durch 5 teilbar sein müssen.

 

wenn Uhrzeit = "HH:MM:SS" dann

 

bei dieser Bedingung ist zu beachten, dass die Uhrzeit in Hochkommas gesetzt werden muss.

Beispiel:

wenn Uhrzeit = "14:30:00" dann

 

Bei einem Datum:

 

wenn Datum = "TT.MM.JJJJ" dann

 

bei dieser Bedingung ist zu beachten, dass das Datum in Hochkommas gesetzt wird und die Jahreszahl 4-stellig angegeben wird.

Beispiel:

wenn Datum = "24.12.2023" dann

 

Bei Wochentagen:

wenn Wochentag = "Sonntag" dann

 

Der Wochentag wird in Hochkommas gesetzt und muss mit einem Großbuchstaben und nachfolgenden Kleinbuchstaben geschrieben werden.

 

Bei Prüfung auf den Tag eines Datums.

wenn Monatstag = 29 dann

 

Bei Monaten, die Anweisung

 

wenn Monat > 4 und Monat < 10 dann

 

bewirkt, dass die folgenden Anweisungen nur zwischen Mai und September ausgeführt werden.

 

 

Vergleichsoperator =* für Vergleiche mit Jokerzeichen

 

Bei Vergleichen von Uhrzeit und Datum mit einer Konstanten können auch Jokerzeichen verwendet werden.

Als Vergleichsoperator muss =* verwendet werden. Operand2 muss eine Konstante in Hochkommas sein.

 

Um Anweisungen jede volle und halbe Stunde auszuführen:

wenn Uhrzeit =* "**:00:00" oder Uhrzeit =* "**:30:00" dann

 

Um Anweisungen immer am Ersten eines Monats auszuführen:

wenn Datum =* "01.**.****" dann

 

 

Bedingung für Zeiträume

 

Manchmal ist es erforderlich Aktionen nur innerhalb bestimmter Zeiträume auszuführen.

Das ist möglich mit der Bedingungsanweisung :

 

wenn Uhrzeit/Datum zwischen "Zeitkonstante" und "Zeitkonstante" dann

 

Beispiel:

wenn Uhrzeit zwischen "09:00:00" und "11:30:00" dann

 

 

Vergleichsoperator =+ für Vergleiche mit Wochenmaske

 

Mit diesem Vergleichsoperator ist es möglich, Anweisungen nur an bestimmten Wochentagen ausführen zu lassen. Als Operand2 muss eine 7-stellige Konstante bestehend aus Nullen und Einsen in Hochkommas verwendet werden. Jede Stelle der Konstanten steht für einen Wochentag, beginnend mit Sonntag. Die Bedingung ist wahr wenn an der Stelle des aktuellen Wochentags eine Eins steht.

Beispiel:

Es soll geprüft werden, ob der aktuelle Tag ein Freitag, Samstag oder Sonntag ist, die Anwesung sieht so aus:

 

wenn Wochentag =+ "1000011" dann

 

 

 

 

 

 

 

Copyright © 2024 CL-control