Mal eine grundsätzliche Frage zum Ablauf

Betrieb der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

Antworten
vanGogh1967
Beiträge: 5
Registriert: 31.10.2019, 19:54

Mal eine grundsätzliche Frage zum Ablauf

Beitrag von vanGogh1967 » 21.03.2020, 10:25

Hallo!
Ich habe mal eine grundsätzliche Frage zum Ablauf von Makros in der Homputer Studio (CL) Software.

Wie verarbeitet das Programm die einzelnen Programmzeilen in einem Makro, wenn z.B. ein weiteres Makro aufgerufen wird. Wird dann erst das aufgerufene Makro abgearbeitet und erst danach geht es im "Haupt"makro weiter oder laufen die Makros parallel ab?

Hintergrund ist: ich habe ganz viele Aktoren, die zu unterschiedlichen Zeiten geschaltet werden müssen (an oder aus). Es gibt ein Makro, dass sekündlich die Uhrzeit mit diversen Schaltzeiten abgleicht. Ist die Bedingung erfüllt, werden unterschiedliche Makros aufgerufen, weil in diesen weitere Bedingungen für andere Aktoren stehen, die in verschiedenen Abhängigkeiten ein- oder ausgeschaltet werden. Die Schaltzeiten, die mit der Uhrzeit abgeglichen werden, verändern sich über den Tag mehrmals, weswegen Tipps mit Zeittabellen etc. nicht hilfreich sind!

Die Programmierung, die ich habe, funktioniert, das ist soweit alles okay. Ich möchte nur schauen, ob ich sie optimieren kann, um Ressourcen zu schonen, unnötige Funksignale zu vermeiden, die Zentrale (CCU2) nicht unnötig zu belasten.

Deswegen geht es mir nur darum, WIE verarbeitet die Zentrale/Software die Programmierung. Wenn ich ein Makro habe, das 1x pro Sekunde ausgeführt wird, in diesem Makro bis zu 20 Aktoren direkt geschaltet werden (je nach Erfüllung von Bedingugen) und 10 Makros aufgerufen werden (in denen wiederum auch wieder Aktoren geschaltet werden, wenn bestimmte Kriterien erfüllt werden), kann man da vielleicht Optimierungen schaffen?

Gruß
Stephen

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: Mal eine grundsätzliche Frage zum Ablauf

Beitrag von dondaik » 21.03.2020, 10:33

wie wäre es wenn man das ganze mal einstellt .... so hört sich das für mich sehr wirr an - sorry, die ccu arbeit Serial ... eine makro jede sekunde auszuführen - welchen sinn hat das ?
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

vanGogh1967
Beiträge: 5
Registriert: 31.10.2019, 19:54

Re: Mal eine grundsätzliche Frage zum Ablauf

Beitrag von vanGogh1967 » 21.03.2020, 11:22

Den Code hier zu posten, würde den Rahmen hier etwas sprengen, der ist ziemlich lang und ich arbeite mit vielen Variablen, sodaß schwer nachzuvollziehen ist, was wann warum passiert.

Deswegen geht es mir ja auch nur um die grundsätzliche Arbeitsweise, damit ich das besser anpassen bzw. optimieren kann.

Warum Makro im Sekundentakt? Naja, weil ich exakte Schaltungen benötige und im Zweifelsfall auch eine sofortige Umsetzung veränderter Variablen.

Beispiel Beleuchtung Indoor-Soccer-Platz. Über VisuWin stelle ich eine Uhrzeit "von"- "bis" für einen gebuchten Soccer-Platz ein -z.B. von 16:00 bis 17:00 Uhr, daraus ergeben sich verschiedene abhängige Schaltzeiten für verschiedene Aktoren:
- Zusatzbeleuchtung einschalten um 15:45:00 Uhr
- Platzbeleuchtung einschalten um 15:55:00 Uhr
- Zusatzbeleuchtung ausschalten um 15:55:10 Uhr (da nun die Platzbeleuchtung ausreicht)
- akustisches Signal schalten um 16:59:00 Uhr für 20 Sekunden (Hinweis auf Buchungsende)
- Zusatzbeleuchtung einschalten um 17:04:00 Uhr (damit die Gäste nicht im Dunkeln stehen, wenn die Platzbeleuchtung ausschaltet)
- 2. akustisches Signal schalten um 17:04:20 Uhr für 40 Sekunden (Hinweis, dass Platzbeleuchtung gleich ausgeht)
- Platzbeleuchtung ausschalten um 17:05:00 Uhr
- Zusatzbeleuchtung ausschalten um 17:20:00 Uhr

Die Schaltzeiten werden über ein Makro aber erst berechnet (und in Variablen geschrieben), wenn der Kunden eincheckt und bezahlt (Button in VisuWin "Check In"). Dies könnte aber auch erst um 16:02 Uhr geschehen (was aber nichts an der Buchungszeit 16:00-17:00 und den sich daraus ergebenen Schaltzeiten ändert). Nur in dem Fall müssen die entsprechenden Aktoren sofort schalten (deswegen u.a. der 1-Sekunden-Takt).

Jetzt gibt es aber für z.B. den 1. Punkt "Zusatzbeleuchtung einschalten um xx:xx:xx" noch weitere Kriterien, die geprüft werden müssen:
- ist die Zusatzbeleuchtung überhaupt notwendig oder reicht das Tageslicht zur Ausleuchtung (Abgleich mit SONNENUNTERGANG)
- ist ein Nebenplatz belegt und beleuchtet, dann wäre die Zusatzbeleuchtung auch nicht notwendig, weil ausreichend Licht vorhanden ist
Diese Kriterien werden in einem weiteren Makro geprüft und entschieden. Deswegen wird um 15:45:00 nicht die Zusatzbeleuchtung direkt eingeschaltet, sondern das Makro zur Prüfung aufgerufen, in dem entschieden wird, ob sie geschaltete werden muß oder nicht.

Ich hoffe, ich habe es einigermassen verständlich beschrieben.

Gruß Stephen

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: Mal eine grundsätzliche Frage zum Ablauf

Beitrag von dondaik » 21.03.2020, 13:31

nettes projekt,
doch denke ich nicht das es die sekundengenaue abfrage / schaltzeit braucht ... auch würde mir das gehupe auf den geist gehen :-)
auch das schalten "wenn kunde eintrift " ist für mich unnötig .... die spielzeiten sind starr also startet das spiel um 16:00 ... zur not ziehe ich es manuell vor und dann beginnn die 60 minuten .... das kenne ich aus der squash halle auch so - die zusazbeleuchtung regelt ein helligkeitssensor umd einem timer bei der beleuchtung.. was auch für das nachleuchten gilt.
für mich sind da zuviel "spielereien" ..... :-) :-) .. also grob kunde beginnt - licht ein bis zur nächsten vollen stunde ... fertig ...:-)
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

vanGogh1967
Beiträge: 5
Registriert: 31.10.2019, 19:54

Re: Mal eine grundsätzliche Frage zum Ablauf

Beitrag von vanGogh1967 » 21.03.2020, 14:53

Warum das ein oder andere erforderlich ist, ergibt sich bei uns durch räumliche Gegebenheiten und organisatorische Abläufe. Außerdem muss es mitarbeiterfreundlich sein (man könnte auch sagen "Idiotensicher"). Da die Soccerplätze räumlich getrennt und nicht einsehbar sind, kann das Licht erst beim CheckIn (damit verbunden ist auch der Bezahlvorgang) freigeschaltet werden, da die Spieler sonst einfach auf den Platz gehen würden.
Lieb, dass Du Dir Gedanken darüber machst, wie man es anders lösen könnte, aber das war leider nicht meine Frage.
Ich möchte nur Verständnis bekommen, wie die CCU bzw. die Programmausführung grundsätzlich arbeitet, um daraufhin mein Feintuning abzustimmen.

Ich habe jetzt zum Beispiel, weil Du natürlich recht hast, dass nicht alles sekündlich geprüft und geschaltet werden muss, in verschiedene Makros ausgelagert. Habe jetzt welche, die minütlich arbeiten, andere alle 10 oder 30 Minuten, dann gibt es auch eins, was nur stündlich läuft. Wie ist denn das mit sowas zum Beispiel. Es wird Uhrzeiten geben, wo alle Makros zur gleichen Zeit laufen würden, zur vollen Stunde etwa, weil da minütlich, 10-minütlich, 30- und 60 minütig "zusammentreffen". Läuft dann alles gleichzeitig ab oder wie bewältigt die CCU das?

Danke!

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: Mal eine grundsätzliche Frage zum Ablauf

Beitrag von dondaik » 21.03.2020, 16:12

die CCU bewältigt alles immer "hintereinander" .... hat man einen PI mit RM hat sie da aber jede menge zeit ... auch wenn man sagt das solche schaltzeiten ( alles zu einer zeit ) vermieden werden sollten.
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: Mal eine grundsätzliche Frage zum Ablauf

Beitrag von Familienvater » 22.03.2020, 12:47

Hi,

um es einfach zu machen:
In HPCL passiert alles nach einander, und nichts parallel. Je nach Aufruf-Methode des "Makros" wird das Makro "Inline" ausgeführt, oder in die Ausführungswarteschlange gestellt, und wird ausgeführt, wenn alles andere erledigt ist. Bei "Inline" muss man aber aufpassen, weil es Befehle gibt, die die Ausführung "unterbrechen", dann wird zurück zum aufrufenden Objekt gewechselt. Befehle, die eine Verzögerung bewirken sind u.a. WARTEN, GETSITE oder auch Sprung mit GEHEZU im Code nach oben, wird nach unten gesprungen, tritt keine "Verzögerung" auf.

Die sekündliche Ausführung ist mit einer Event-Basierten Programmierung theoretisch vermeidbar, aber wird deswegen nicht einfacher. Es gibt ja eigentlich immer ein Event, was als Auslöser dient. Entweder es klickt jemand in der WebUI auf "jetzt geht es los", dann können auf Basis dieses Events die notwendigen Zeiten "berechnet" werden, und die sequentiell in einem gestarteten Makro für diesen Platz abgewartet werden. Wird in einem Text-Objekt eine Zeit geändert/eingetragen, dann ist dies auch eine "Änderung", die ein Event triggern kann, und auch dort kann wieder dynamisch eine Wartezeit berechnet werden, nach welcher Wartezeit die erste Aktion auszuführen ist. Das Problem an dem Event-Basierten Ansatz ist, das im Falle eines Neustarts des Projekts "im laufenden Betrieb" sehr viel Logik notwendig ist, um die (nicht mehr wartenden) Makros wieder an der richtigen Stelle im Code auf das Warte zu hängen, aber das Problem gibt es theoretisch auch bei der sekündlichen Ausführung, das aktuelle Objekt-Werte etc. regelmäßig "gesichert" werden müssen, um diese bei einem Restart des Projekts als Initial-Werte wieder einzulesen, sonst kann es nämlich passieren, das die zyklische Ausführung einem kurzerhand alle Lichter ausschaltet, weil ja kein Platz gebucht ist, und dann stehen die Leute im Dunkeln.
Eigentlich wäre es am besten, das ganze mit dynamischen Hardware-Timern zu machen, wenn es keine Wired-Aktoren sind (da gehen keine dynamischen Timer). Wenn man mit Hardware-TImern arbeitet, muss man aber idealerweise das ganze in HPCL doppelt abgesichert machen, so das einmal die dynamische Einschaltdauer mit SETZEWERT und zusätzlichem EINSCHALTEN FÜR gemacht wird. Damit schaltet der Aktor "sicher" nach der gesetzten Dauer von selbst ab, auch wenn HPCL nicht mehr laufen würde, andererseits ändert sich der Zustand durch das "Einschalten für" in HPCL auch "sicher", selbst wenn die gefunkte Statusmeldung über das Ausschalten vom Aktor versumpfen würde. Es kann aber auch zu extra Funkverkehr kommen, weil der Aktor sich selbst ausgeschaltet hat, und HPCL zusätzlich auch noch "zeitgleich" eine Ausschaltmeldung schickt.

Noch mal zu der "unschönen" zyklischen Programmierung:
Ich vergleiche das gerne mit der Funktion einer Haustürklingel, Du rennst doch auch nicht jede Sekunde an die Türe, und schaust, ob da jemand steht, Du sitzt bequem rum, und wartest, bis es klingelt.

Der Familienvater

Antworten

Zurück zu „homeputer Studio / Standard: allgemeine Fragen“