Variblen

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

Moderator: Co-Administratoren

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Variblen

Beitrag von Manuel.P » 13.12.2015, 14:22

Hallo alle zusammen,
ich bin in Sachen CL Studio absoluter Anfänger und aktuell total überfordert. Nachdem ich bereits mich durch 1000 Verschiedene Themen gelesen haben und immer noch nicht schlauer bin stelle ich meine Frage nun jetzt mal hier.
Bis jetzt habe ich immer über die WebUI programmiert, was auch eigentlich gut geklappt hat. da ich die Möglichkeiten mal erweitern wollte habe ich mir nun cl Studio heruntergeladen. Jedoch komme ich damit nicht so ganz klar. Einfache Sachen wie einem Taster zusagen welche Lampe er schalten soll ist kein Problem jedoch komplexere Sachen sind das Problem.
Z.B. habe ich in der WebUI so programmiert das wenn ich den Taster "Verlassen" drücke, das dann alle Türen gesperrt werden und die Lichter nach einer bestimmten Reihenfolge ausgehen. nach 1 Minute Flur nach 2 Minuten Hof Licht nach 5 Minuten fährt das Tor zu. Ich habe bis jetzt mit Systemvariablen gelöst gehabt. Vorallem soll nach dem nächsten drücken des Taster "Verlassen" die Sperrung der Türen und auch einige Lichter wieder eingeschaltet werden. Daher habe ich mich jetzt bei CL Studio mit dem Thema Variablen befasst und auch ein Beispiel programmiert, jedoch will schon das einfache Beispiel nicht klappen.
Ich habe im Makro des Taster eine Variable angelegt die ich "Licht" genannt habe und Standard auf 0 steht.
nun habe ich dort folgendes programmiert:
wenn Taster = "kurz" dann
Licht:=1
endewenn
wenn Taster = "lang" dann
Licht:=0
endewenn
noch schöner wär es, wenn der Taster nur mit Tastendruck kurz die zustände wechseln würde. Eventuell könnte man ja es ja so Lösen jedoch habe ich mich damit noch nicht befasst, da es anderes ja noch nicht Mals funktioniert
wenn Taster = "kurz" und Licht= 0 dann
Licht:=1
endewenn
wenn Taster = "kurz" und Licht=1dann
Licht:=0
endewenn

im Makro des Aktors habe ich folgendes reingeschrieben

wenn Licht = 1 dann
Waschhalle_Licht einschalten
endewenn
wenn Licht = 0 dann
Waschhalle_Licht ausschalten
endewenn

wo ist mein fehler bitte hälft mir :(
danke schon mal !!!!

Benutzeravatar
Herbert_Testmann
Beiträge: 11062
Registriert: 17.01.2009, 11:30
Danksagung erhalten: 7 Mal

Re: Variblen

Beitrag von Herbert_Testmann » 13.12.2015, 15:59

hallo

bei der Fehlersuche in HomePuter ist es immer sinnvoll, die Anwendung VisuWin zu nutzen. Dort kannst Du recht einfach den Status der Geräte sehen.

Bei Tastern ist es wichtig, dass in dem Fenster der Modulauswahl die tasten des Tasters registriert werden.

Nach jeder Änderung hast Du das Projekt natürlich an die CCU übertragen ??

Bei jedem Objekt gibt es den haken "History schreiben"
In den Globalen Einstellungen gibt es einen "Hauptschalter" für Historydaten schreiben
Dadurch entsteht eine Textdatei, in der die Zuständer der Objekte geloggt werden, bei denen der haken gesetzt ist. Dann kann man sich entweder über das WebInterface die Textdatei auf den PC laden und rein sehen, oder mit dem Programm HistoryCL (Freeware) die daten als Diagramm darstellen.
Auch dort kann man sehen, ob ein Taster gedrückt wurde und ein Aktor geschaltet hat.

So weit die Diagnosemöglichkeiten.

Ich würde in den taster ein makro schreiben, dass einfach einen Aktor schaltet. Damit wäre erst mal klar, ob der Taster erkannt wird.

Code: Alles auswählen

wenn Taster_Anw = "kurz" dann
Aktor := 1
sonst
Aktor := 0
endewenn
Kurz drücken schaltet an, lang drücken schaltet aus.

Die variable würde ich nicht "Licht" nennen. Einfach weil das mit vordefinierten Gruppennamen oder anderen Objekten kollidieren könnte.
Wie wäre es mit "varLicht"

Code: Alles auswählen

wenn Taster_Anw = "kurz" und varLicht = 0
dann 
varLicht := 1
sonst
varLicht := 0
endewenn
Das sollte die Troggel Funktion realisieren

Das makro im Aktor nutzt nichts, weil es nicht gestartet wird. Die makros müssen immer in dern auslösenen Teil rein, in dem Fall also in die varLicht

Code: Alles auswählen

wenn varLicht = 1 dann
Waschhalle_Licht einschalten
sonst
Waschhalle_Licht ausschalten
endewenn
---
Dieses Schreiben wurde maschinell erstellt und ist ohne Unterschrift gültig

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Variblen

Beitrag von Manuel.P » 13.12.2015, 16:46

Ich muss doch die Variable im Makro vom Taster schreiben, da ich ja mehrere Aktoren damit Steuern will mit einer Variable
Ich habe jetzt im Makro vom Taster "Verlassen" folgendes geschrieben:

wenn Taster_Verlassen = "kurz" dann
Verlassen einschalten
Verlassen1 einschalten für "00:01:00"
Verlassen2 einschalten für "00:02:00"
Verlassen3 einschalten für "00:03:00"
Verlassen5 einschalten für "00:05:00"
endewenn
wenn Taster_Verlassen = "lang" dann
Verlassen ausschalten
Verlassen1 ausschalten
Verlassen2 ausschalten
Verlassen3 ausschalten
Verlassen5 ausschalten
endewenn

nun wollte ich im Makro der Lampe folgendes schreiben

wenn Taster_Verlassen.Verlassen="aus" dann
Test_Lampe einschalten
endewenn
wenn Taster_Verlassen.Verlassen1="aus" dann
Test_Lampe ausschalten
endewenn

damit will ich erreichen, das wenn ich nach Hause komme und den Taster drücke die Lampe sich einschaltet, wenn ich gehe und den Taster lang drücke, soll die Variable Verlassen1 für 1 Minute eingeschaltet sein, wenn die Variable nach 1 Minute ausgeht, soll die Lampe auch ausgehen. Klappt auch, jedoch kann ich jetzt wenn Verlassen aus ist die Lampe nicht ausschalten und wenn Verlassen1 aus ist nicht mehr einschalten. ich benötige eine Anweisung wie bei der Web UI nur bei Änderung ausführen. Die Beim Status Änderung nur den Befehl weiter gibt und dann trotzdem normal geschaltet werden kann.

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Variblen

Beitrag von Manuel.P » 13.12.2015, 16:51

Noch eine kurze Frage. Ich würde gerne das ich nicht unterscheiden muss zwischen land und kurzem Tasten druck sondern immer kurzer Tasten druck nehmen kann kann ich das so umsetzen ?

wenn Taster_Verlassen = "kurz" und Verlassen = "aus" dann
Verlassen einschalten
Verlassen1 einschalten für "00:01:00"
Verlassen2 einschalten für "00:02:00"
Verlassen3 einschalten für "00:03:00"
Verlassen5 einschalten für "00:05:00"
endewenn
wenn Taster_Verlassen = "kurz" und Verlassen="an" dann
Verlassen ausschalten
Verlassen1 ausschalten
Verlassen2 ausschalten
Verlassen3 ausschalten
Verlassen5 ausschalten
endewenn

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

Re: Variblen

Beitrag von Familienvater » 13.12.2015, 17:45

Hi,

1. Du musst von der WebUI-Denke wegkommen:
Wenn Du eine Variable änderst, dann wird NICHTS deswegen getriggert, kein anderes Makro, wo diese Variable drin benutzt wird.

2. Deine Wenn's machen genau das, was sie sollen, aber Du hebelst sie selbst aus (das Beispiel macht das gleiche wie Dein Code):

Code: Alles auswählen

a:=1
wenn a=1 dann
  a:=2
endewenn
wenn a=2 dann
  a:=1
endewenn
Was passiert, wenn dieses Makro läuft? a wird auf 1 gesetzt, dann stimmt die Bedingung für das erste Wenn und es wird auf 2 gesetzt. Der Code läuft weiter, und die 2. Bedingung passt auch, deswegen wird es wieder auf 1 gesetzt, es hat alles funktioniert.
Deswegen gibt es Befehle wie SONST, oder VERLASSEN, die man in der Hilfe nachschauen kann.

Der Familienvater

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Variblen

Beitrag von Manuel.P » 13.12.2015, 18:03

Das ist mein Haupt Problem es hat noch nicht so Richtig klick gemacht.
was ist den in CL Studio vergleichbar mit "bei Änderung auslösen" in der WEB UI.
Ich setze eine Variable auf Aus diese soll das Licht ausschalten. wenn ich jedoch jetzt manuell das licht einschalten will funktioniert dies nicht da die Variable immer noch den ausschalt Befehl sendet. in der WEB UI konnte man ja einstellen das die Variable nur bei der Änderung den Befehl gesendet hat ??? :oops:

Benutzeravatar
Herbert_Testmann
Beiträge: 11062
Registriert: 17.01.2009, 11:30
Danksagung erhalten: 7 Mal

Re: Variblen

Beitrag von Herbert_Testmann » 13.12.2015, 18:40

Hallo

ich habe im Moment nicht die Geduld eine mehrschichtige Verschachtelung zu durchdenken.

Geundsätzlich ist es so, wie ich oben schon mal schieb. Du setzt in einem makro (im Taster) die Variable.
Soll durch die Veränderung etwas passieren, dann schreibst Du ein makro in das Objetzt der Variable und stellst "bei Aktualisierung" ein. Sobald sich die variable verändert, wird das makro gestartet. Dort kannst Du ein weiteres makro aufrufen, um alle Lichter nacheinander aus zu schalten oder das direkt im makro der variable tun.

Bitte lass uns das Schritt für Schritt entwickeln, wenn Du Hilfe brauchst.

Für den Taster, lang oder kurz ...

Code: Alles auswählen

Wenn Taster_Verlassen ="kurz" oder Taster_Verlassen = "lang" dann
...



Ich bin mir nicht sicher, ob das Setzen einer Variable überhaupt notwengig ist. BZW, ob man micht alles in den Taster schreiben kann.

Code: Alles auswählen

Wenn Taster_Verlassen ="kurz" oder Taster_Verlassen = "lang" dann
Wenn Verlassen = 0 dann
licht1 ausschalten
warte ("00:00:10")
licht2 ausschalten
warte ("00:00:10")
licht3 ausschalten
...
Verlassen := 1
sonst
licht5 einschalten
warte ("00:00:10")
Tür_unten auf
...
Verlassen := 0
endewenn
endewenn
PS Wenn "Verlassen" eine lokale Variable im Objekt Taster ist, kannst Du da natürlich kein makro rein schreiben. Wenn Du ein makro beim Ändern der variable ausführen Willst, dann musst Du ein neues Objekt "Verlassen" anlegen, in das man dann auch ein makro schreiben kann.

Bei meinem letzten Beispiel oben reicht aber auch eine lokale Variable im Taster.
---
Dieses Schreiben wurde maschinell erstellt und ist ohne Unterschrift gültig

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Variblen

Beitrag von Manuel.P » 13.12.2015, 21:22

Perfekt du hast mich echt geholfen. Es klappt schon mal. zwar noch ausbaufähig aber es wird. habe es jetzt so realisiert

Code: Alles auswählen

wenn Taster_Verlassen = "kurz" dann
Verlassen einschalten
Zentrale_Licht einschalten
Flur_Licht einschalten
Dispo_1 ausschalten
Dispo_2 ausschalten
Warte 60 Sekunden
Zentrale_Licht ausschalten
Warte 60 Sekunden
Flur_Licht ausschalten
Warte 60 Sekunden
Hoflicht_neue_Halle ausschalten
Hoflicht_Waschhalle ausschalten
endewenn

wenn Taster_Verlassen = "lang" dann
Verlassen  ausschalten
Zentrale_Licht einschalten
Dispo_1 einschalten
endewenn
Das klappt beim Schalter hast du mich falsch verstanden. Ich wollte es so realisieren das beim 1 Tastendruck verlassen eingeschaltet wird beim nächsten Tasten druck wieder ausgeschaltet. Kann ich das mit einer Und Verknüpfung machen ? in dem ich bei jedem Tastendruck und die Variable Verlassen aktiv ist bzw nicht aktiv ist?
oder hast du eine bessere Idee ?
danke :)

Benutzeravatar
Herbert_Testmann
Beiträge: 11062
Registriert: 17.01.2009, 11:30
Danksagung erhalten: 7 Mal

Re: Variblen

Beitrag von Herbert_Testmann » 13.12.2015, 22:38

Hallo

das mit dem ein mal drücken AN und noch mal drücken AUS nennt sich TROGGELN und das hatte ich schon 2 mal beschrieben.

Code: Alles auswählen

wenn Taster_Verlassen = "kurz" und Verlassen = aus dann
Verlassen einschalten
sonst
Verlassen ausschalten
Bei langem Tastendruck wird in diesem Beispiel immer aus geschaltet.

das ist für Deinen Bedarf allerdings zu kurz gedacht. Ich hatte in meinem Beispiel oben schon eine Variante, die immer im Wechsel ein und Aus schaltet (hoffe ich)
Sieh Dir das Beispiel noch mal an.
---
Dieses Schreiben wurde maschinell erstellt und ist ohne Unterschrift gültig

Manuel.P
Beiträge: 290
Registriert: 13.12.2015, 14:04
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Variblen

Beitrag von Manuel.P » 13.12.2015, 23:48

Ah gut der begriff hat mich nichts gesagt ;)
es wird so langsam so schwer ist es nicht, aber halt extrem viel am Anfang bis man sich mal durch gekämpft hat.
hast du noch en Typ für mich, ich würde gerne, das wenn ich einen Taster betätige sowohl an der Station wie auch auf meinem Tablet das dann eine Audiodatei wiedergegeben wird. z.B ein Klingelton oder halt andere Sachen die ich dann mir noch überlegen muss
:)
hast du dazu eine einfache Lösung ??

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“