Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
so, ich habe nochmal einen anderen versuch gestartet. mach dieses progrämmchen das was ich von ihm möchte? ich hoffe nämlich ich komme langsam dahinter. ich möchte ja auch etwas selber machen und nicht mein ganzen haus durch forum programmieren lassen ;-)
Gefrierschrank Gefrierfreigabe=AUS if („BHKW“ or Gefrierfreigabe) then write („Gefrierschrank“,EIN) endif if after(„BHKW“==AUS, 3600000u64) then Gefrierfreigabe=EIN endif (1 Std. ohne BHKW Truhe an) if after(„BHKW“ or Gefrierfreigabe, 7200000u64) then Gefrierfreigabe=AUS endif (nach 2 Std Laufzeit Truhe Freigabe zurücksetzen)
nochmal eine frage die zeile sperren=AUS wird die nicht in jedem durchlauf ausgeführt? dann würde es ja nicht funktionieren oder?
Das ist in diesem Fall (oberste Ebene) eine Deklaration mit Initialwertzuweisung, sprich die Variable wird angelegt, vom Typ der Konstante und mit dem Wert vorbelegt.
Nein, er bleibt nicht hängen, sondern entscheidet immer wieder von neuem, welche Zeile Deines Programms ausgeführt wird!
Das erlebe ich auch so
In jedem Zyklus wird geprüft ob sich "rechts" was geändert hat. Wenn ja, wird die Zeile abgearbeitet, wenn nein, nicht.
Mit Zuweisungen ist das aber so eine Sache, denn in tieferen Ebenen werden sie jedes Mal ausgeführt, auch wenn sich rechts nichts geändert hat (üblicherweise ändern sich z.B. Konstanten nicht).
dann ist mir das auch klar, warum es nicht durchlaufen wird. danke für den hinweis. habe ich es denn im meinem "gefrierprogramm" richtig umgesetzt? aufgetautes senkt nämlich die akzeptant bestimmt ganz schnell ;-)
Ich bin mir noch nicht sicher was du damit machen möchtest.
Der Gefrierschrank geht an, wenn das BHKW läuft oder du die Freigabe zum Kühlen gibst.
if after(„BHKW“==AUS, 3600000u64) then Gefrierfreigabe=EIN endif
Hier wird eine Stunde nachdem das BHKW aus ging die Gefrierfreigabe erteilt.
if after(„BHKW“ or Gefrierfreigabe, 7200000u64) then Gefrierfreigabe=AUS endif Nach 2 Stunden wird die Gefrierfreigabe wieder entzogen.
Ich denke du möchtest mit dem BHKW deinen Gefrierschrank aktivieren und 2 Stunden nachdem das BHKW aus ging wieder ausschalten, oder?
Würd ich in etwa so machen (Aber Steffi schreibt das immer noch schöner): Variablendefinition + Startwert Gefrierfreigabe=AUS
Handling ob Gefrierschrank geht oder nicht: if (Gefrierfreigabe==EIN) then write („Gefrierschrank“,EIN) endif if (Gefrierfreigabe==AUS) then write („Gefrierschrank“,AUS) endif
if („BHKW“==EIN) then Gefrierfreigabe=EIN endif if after(„BHKW“==AUS, 7200000u64) then Gefrierfreigabe=AUS
Eine Stunde ohne BHKW: if delay(„BHKW“==AUS, 3600000u64) then Gefrierfreigabe=EIN
Hab da aber auch noch 2 Probleme:
Wird die delay von einem BHKW==EIN auch getriggert?
Wenn das BHKW 1 Stunde nicht lief und die Gerierfreigabe auf EIN geht, wann soll Sie dann wieder aus gehen?
So, und jetzt kommt die Steffi und macht den Code in schön.
die truhe soll spannung haben wenn das bhkw läuft. läuft das bhkw nicht soll nach 1 stunde die truhe spannung bekommen, damit nichts auftaut. wenn die truhe 2 stunden strom hatte soll die spannung wieder ausgehen. entweder bis die stunde wieder rum ist oder das bhkw läuft.
[highlight=epc]
sperren=AUS
bewegung = („Bewegung Bad“ or „Bewegung Küche“ or „Bewegung WC“)
if bewegung and !sperren then write("Zirkulation",EIN); sperren=EIN endif
if after(sperren,180000u64) then write("Zirkulation",AUS); endif
if after(sperren, 1380000u64) then sperren=AUS endif
[/highlight]
Mir würde folgende Änderung mehr zusagen, da dann die Pumpe nur 1x eingeschaltet wird.
Falls die Pumpe nur über den eibPC gesteuert wird, sollte noch eine Startbedingung für die Pumpe existieren, damit sie nicht endlos weiter läuft, wenn der eibPC nach dem Einschalten einen Reset macht.
Den Timer in den Aktor zu verlegen würde hier mehr Sicherheit bringen (also Zeile 4 raus und ein 3 min. Treppenhauslicht in den Aktor).
dann ist mir das auch klar, warum es nicht durchlaufen wird.
Wobei der Grund, warum es nicht (bzw. eben nur einmal) durchlaufen wird nicht darin liegt, dass es eine dem EibPC irgendwie bekannte Initialwertzuweisung (im Sinne eines eigenen Befehls) ist, sonder eben einfach nur daran, dass sich die Konstante "EIN" niemals ändert! Würde sie sich ändern, würde die Zeile erneut durchlaufen.
Ebenso wird eine Zeile X=Y+3*Pi nur ein einzigesmal durchlaufen, sofern sich Y, 3 und Pi niemals ändert.
....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!
if (Gefrierfreigabe==EIN) then write („Gefrierschrank“,EIN) endif if (Gefrierfreigabe==AUS) then write („Gefrierschrank“,AUS) endif
if („BHKW“==EIN) then Gefrierfreigabe=EIN endif if after(„BHKW“==AUS, 7200000u64) then Gefrierfreigabe=AUS if delay(„BHKW“==AUS, 3600000u64) then Gefrierfreigabe=EIN
die ersten beiden zeilen sind klar, ebenso die dritte. in der vierten schaltet er aber nicht sofort ab. die truhe soll ja mlöglichst nur mit dem vom bhkw erzeugten strom laufen. in der fünften schaltest du nach 1 std die freigabe nach dem ausschalten des bhkw ein. das ist ok aber wo schaltest du es dann nach zwei stunden wieder aus? ich hatte das mit meiner letzten zeile ja so
if after(„BHKW“ or Gefrierfreigabe, 7200000u64) then Gefrierfreigabe=AUS endif
ich dachte damit stelle ich sicher, dass die truhe immer zwei stunden läuft. danach wartet die truhe wieder auf das bhkw oder bekommt nach 1 std wieder für zwei stunden strom
Wobei der Grund, warum es nicht (bzw. eben nur einmal) durchlaufen wird nicht darin liegt, dass es eine dem EibPC irgendwie bekannte Initialwertzuweisung (im Sinne eines eigenen Befehls) ist, sonder eben einfach nur daran, dass sich die Konstante "EIN" niemals ändert! Würde sie sich ändern, würde die Zeile erneut durchlaufen.
Ebenso wird eine Zeile X=Y+3*Pi nur ein einzigesmal durchlaufen, sofern sich Y, 3 und Pi niemals ändert.
Also, für das Verständnis:
[highlight=epc]
if ( x ) then sperren = EIN endif
if ( sperren ) then blah endif
[/highlight]
kann nicht kompiliert werden, denn auch wenn 'sperren' in Zeile 1 eindeutig vom Typ 1b1 ist, kennt der Kompiler die Variable nicht.
[highlight=epc]
sperren = EIN
if ( x ) then sperren = EIN endif
if ( sperren ) then blah endif
[/highlight]
Mit der 'Zuweisung' in der obersten Ebene wird die Variable Deklariert, vom Typ 1b1. Jetzt kennt sie der Kompiler, ist also offensichtlich ein Unterschied.
In diesem Beispiel sieht man auch, dass 'sperren = EIN' ausgeführt wird, auch wenn sich "rechts" nichts ändert, oder ändern sich Konstanten etwa? Die Erklärung "rechts muss sich was ändern" ist also zumindest unvollständig und hilft dann nicht bei der Erklärung.
Um des lieben Friedens willen: Wenn rechts ein variabler Teil steht, wird die Anweisung öfters ausgeführt, auch wenn es eine Deklaration ist
ich finde die Erklärung von Uwe! super.
Ich hab noch keine Formulierung gefunden, dies einfacher und verständlichen beschreibt.
Eine Variable muss deklariert werden um sie verwenden zu können.
sperren=EIN
Schließlich muss der EibPC wissen, mit welchem Startwert er anfangen soll.
Vielleicht kann man es sich so vorstellen, dass sich sperren beim Start von "undefiniert" in EIN "ändert".
Deshalb würde
if sperren then ...
1x ausgeführt werden
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar