ich wieder und immer noch mit meinen eigenen Kopf
Also ich hoffe das ich nie mit programmieren Geld verdienen müsste, dann würde ich verhungern.
Also hier wieder meine Idee, ich möchte weiterhin nicht in den Sender den Vergleich machen. Sorry Bümpi, ich hoffe Du hast Verständnis
Code: Alles auswählen
**! ============================================================
**! OBJEKT EM_SC_AU_6_4222
**! ============================================================
**! OBJEKT-TYP : EAGeraet
**! BEZEICHNUNG : Aussenbeleuchtung Hofeinfahrt
**! STARTWERT :
**! ------------------------------------------------------------
**! AUSFÜHRUNGSINTERVALL : nein
**! AUSFÜHRUNG BEI EINGABE : nein
**! AUSFÜHRUNG BEI ÄNDERUNG : nein
**!
**! ============================================================
**! VARIABLENDEFINITIONEN
**! ============================================================
**! NAME TYP STARTWERT
**! ------------------------------------------------------------
**! Zustand Zeichen
**! Standardzeit Zeichen
**! Timerzeit Zeit
**! AuszeitNeu Zeit
**! AuszeitAlt Zeit
**Standardzeit festlegen
Standardzeit := "01:00:00"
**wenn ausgeschaltet werden soll, dann gehezu "weiter"
wenn EM_SC_AU_6_4222.Zustand = "0" dann
gehezu weiter
endewenn
**wenn die Lampe ausgeschaltet ist, dann gehezu "weiter"
wenn EM_SC_AU_6_4222 ausgeschaltet dann
gehezu weiter
endewenn
**wenn die Lampe eingeschaltet ist und Zusatnd "um", dann gehezu "weiter"
wenn EM_SC_AU_6_4222 eingeschaltet und EM_SC_AU_6_4222.Zustand = "um" dann
gehezu weiter
endewenn
**wenn die Lampe eingeschaltet ist
wenn EM_SC_AU_6_4222 eingeschaltet dann
**neue Ausschaltzeit berrechnen
AuszeitNeu := Zeit + Zustand
**prüfen ob die neue Zeit länger ist als die alte Zeit
wenn AuszeitNeu <= AuszeitAlt dann
verlassen
endewenn
endewenn
**ab hier mit dem Standard Code weiter
weiter:
**Aktor setzen
wenn EM_SC_AU_6_4222.Zustand = "um" dann
wenn EM_SC_AU_6_4222 = 0 dann
EM_SC_AU_6_4222.Zustand := Standardzeit
AuszeitAlt := Zeit + EM_SC_AU_6_4222.Zustand
EM_SC_AU_6_4222 einschalten für EM_SC_AU_6_4222.Zustand
warte("00:00:01")
EM_SC_AU_6_4222 einschalten für EM_SC_AU_6_4222.Zustand
warte("00:00:01")
EM_SC_AU_6_4222 einschalten für EM_SC_AU_6_4222.Zustand
gehezu a
sonst
AuszeitAlt := Zeit
EM_SC_AU_6_4222 ausschalten
warte("00:00:01")
EM_SC_AU_6_4222 ausschalten
warte("00:00:01")
EM_SC_AU_6_4222 ausschalten
warte("00:00:03")
EM_SC_AU_6_4222 ausschalten
gehezu b
endewenn
sonst
wenn EM_SC_AU_6_4222.Zustand = "0" dann
AuszeitAlt := Zeit
EM_SC_AU_6_4222 ausschalten
warte("00:00:01")
EM_SC_AU_6_4222 ausschalten
warte("00:00:01")
EM_SC_AU_6_4222 ausschalten
warte("00:00:03")
EM_SC_AU_6_4222 ausschalten
gehezu c
sonst
wenn EM_SC_AU_6_4222.Zustand = "1" dann
EM_SC_AU_6_4222.Zustand := Standardzeit
AuszeitAlt := Zeit + EM_SC_AU_6_4222.Zustand
EM_SC_AU_6_4222 einschalten für EM_SC_AU_6_4222.Zustand
warte("00:00:01")
EM_SC_AU_6_4222 einschalten für EM_SC_AU_6_4222.Zustand
warte("00:00:01")
EM_SC_AU_6_4222 einschalten für EM_SC_AU_6_4222.Zustand
gehezu d
sonst
AuszeitAlt := Zeit + EM_SC_AU_6_4222.Zustand
EM_SC_AU_6_4222 einschalten für EM_SC_AU_6_4222.Zustand
warte("00:00:01")
EM_SC_AU_6_4222 einschalten für EM_SC_AU_6_4222.Zustand
warte("00:00:01")
EM_SC_AU_6_4222 einschalten für EM_SC_AU_6_4222.Zustand
gehezu e
endewenn
endewenn
endewenn
a:
gehezu ende
b:
gehezu ende
c:
gehezu ende
d:
gehezu ende
e:
gehezu ende
**Programmende
ende:
Aufruf wieder mit
Code: Alles auswählen
EM_SC_AU_6_4222.Zustand := "um"
starte(EM_SC_AU_6_4222)
Ich dachte das hier die Ausschaltzeit zurückgeben wird, aber wie Du mir ja schon mal erklärt hast, wird die Zeitdifferenz "nur" zurückgeben.STOPPZEIT(EM_SC_AU_1_4211.ct)
Da hast Du natürlich recht. Sorry!!!Hier vergleichst du ja die Ausschaltzeit (Zukunft/ZeitPUNKT) mit der bereits zurückgelegten Laufzeit (Vergangenheit/ZeitDAUER) des Aktors und nicht mit der (momentan noch) verbleibenden künftigen Laufzeit. Damit das "aufgeht" müsstest du irgendwas verwenden wie:
Schönen Abend.
Bitte mir den Kopf nicht abreisen, Bümpi.
MfG
Maik