Navigation: CL-Studio Software > Die Programmierung des Systems >

Makros

 

 

 

 

 

Makros

 

Makros sind Programme, die der Benutzer erstellen kann um die individuellen Anwendungsfunktionen seines Systems zu programmieren.

Jedes Objekt eines Moduls kann ein Makro beinhalten. Es können auch Objekte ohne Hardwarebezug (virtuelle Objekte) erstellt werden, für die ein Makro geschrieben wird.

Makros können durch Empfang vom Sensor eines Objekts, durch eine Änderung des Objektwerts oder in bestimmten Zeitintervallen aktiviert werden.

Welche Option der Ausführungsaktivierung benutzt werden soll, wird auf der Seite Makro der Objektdefinitionen festgelegt.

 

Makros können in bestimmten Zeitintervallen, durch den Empfang vom zugeordneten Hardwaresensor, durch Aufruf aus anderen Makros oder durch Bedienung über eine Visualisierung aktiviert werden.

 

In einem Makro kann die Funktion SELBST verwendet werden, um das aktuelle Objekt, das das Makro beinhaltet zu benutzen.

 

Beispiel um eine Beleuchtung immer nach maximal einer Stunde auszuschalten in einem Makro, das im Zeitintervall von 1 Minute aktiviert wird:

 

wenn SELBST eingeschaltet und Schaltdauer(SELBST) > "01:00:00" dann

  SELBST ausschalten

endewenn

 

Es gibt zwei spezielle Makrotypen, die jeweils beim Start und bei der Beendigung der ExecEngine ausgeführt werden.

 

Makros, deren Namen mit "INIT_" beginnen werden beim Start der ExecEngine vor allen anderen Makros ausgeführt.

 

Makros deren Namen mit "END_" beginnen werden beim Beenden der ExecEngine ausgeführt. Das geschieht allerdings nur wenn die ExecEngine "normal" beendet wird, d.h. durch Compilieren und Übertragen eines Projekts oder durch das Kontrollprogramm ExecEngineWin.

Da das Starten der END-Makros erst nach Beendigung der Makro-Ausführungssteuerung beginnt, dürfen in END-Makros keine WARTE-Anweisungnen verwendet werden. Bei Ausführung einer WARTE-Anweisung wird das End-Makro endgültig beendet, da es nach Ablauf der Wartzezeit nicht mehr durch die Ausführungssteuerung aktiviert werden kann. Das gilt nicht wenn das End-Makro im normalen Betrieb z.B. von einem anderen Makro aufgerufen wird.

Weiterhin dürfen in einem END-Makro keine Aktionen gestartet werden, die im Hintergrund ablaufen, wie das Versenden von Mails oder ein http-Request mit GETSITE. Diese Hintergrundaktivitäten können dann eventuell nicht mehr komplett ausgeführt werden weil das Programm sich vorher beendet.

 

Die END-Makros werden nicht ausgeführt wenn die ExecEngine nicht über ExecEngineWin oder die Übetragung einer Ausführungsdatei beendet wird, also z.B. durch einen Neustart der Zentrale, einen Betriebssystembefehl in der Konsole oder Webserverfunktionen.  

 

Kommentare und Bemerkungen in Makros beginnen mit zwei Schrägstrichen //, diese können am Anfang einer Zeile oder auch hinter einer Anweisung benutzt werden.
Beispiel:

// jetzt folgt die Berechnung

DWert1:=(a + b) / 2   // Durchschnittswert

 

Üblicherweise sind  Makros nicht länger als 0,1 bis 0,2 Sekunden aktiv. Bei sehr langen Makros, die mehr machen als nur einige Aktoren zu schalten und mehrere hundert Zeilen haben kann die Ausführungszeit aber auch deutlich länger sein. Das sollte möglichst vermieden werden um die Reaktionszeiten zum Schalten von Aktoren bei der Bedienung nicht zu hoch werden zu lassen.

Daher wird während der Ausführung überprüft, ob ein Makro aussergewöhnlich lange läuft und in dem Fall ein Eintrag in das Systemlog geschrieben. Das passiert standardmässig wenn ein Makro länger als 2 Sekunden aktiv ist. Dann sollte das Makro ggfs. entsprechend verändert werden bzw. die Funktionen auf mehrere Makros aufgeteilt werden. Falls das nicht gewünscht ist, kann die Standardzeit bei der eine solche Warnung geschrieben wird verändert werden.

Dazu wird ein Objekt des Typs Zahl mit dem Namen SCRIPTTIMEOUT erstellt und mit einem Startwert versehen, der die maximale Zeit in Sekunden angibt, die ein Makro aktiv sein darf bevor eine Meldung in das Systemlog geschrieben wird.

 

 

 

 

 

 

 

 

Copyright © 2023 CL-control