# Definition Logikbaustein "Tag Mehrfachimpuls" ################################################################################################################ # Alex Dobusch Gebäudeautomation (c) # http://www.dobusch.ch/hslogic # Version 1.000 # 20.07.2006 # ID 11605 # Der Baustein darf ohne Veränderung frei verwendet werden. Für den Baustein an sich darf jedoch ohne meine # Zustimmung keine Vergütung verlangt werden. # Wird die Programmierung verändert, muss mein (c) entfernt werden, oder auf die Änderung hingewiesen werden. # # Trotz sogfältiger Prüfung können Fehler nicht ausgeschlossen werden. # Prüfen Sie daher den Baustein, denn ich kann keinerlei Haftung für ein Fehlverhalten übernehmen. # Änderungswünsche an hslogic@dobusch.ch ################################################################################################################ # 20.07.2006 Baustein erstellt ################################################################################################################ ################################################# ### 5000 Definition für HS-Experte ################################################# # 5000|Bezeichnung|Remanent|Anz.Eingänge|.n.|Anzahl Ausgänge|.n. # Bezeichnung # | Remanent # | | Anz.Eingänge|.n. # | | | Anzahl Ausgänge|.n. # | | | | #5000|"Alex Dobusch Gebäudeautomation\Tag-Mehrfachimpuls"|0|3|"Sperren"|"Tick (sek.)"|"Impulsanzahl"|1|"Impuls" # Debug 5000|"Alex Dobusch Gebäudeautomation\Tag-Mehrfachimpuls"|0|3|"Sperren"|"Tick (sek.)"|"Impulsanzahl (1..48)"|3|"Impuls"|"Debug Datum/Uhrzeit"|"Debug Meldung" ################################################# ### 5001 Definition des Bausteins ################################################# # 5001|Anzahl Eingänge|Ausgänge|Zeitspeicher|Speicher|Berechnung bei Init # Anzahl Eingänge # | Ausgänge # | | Zeitspeicher # | | | Speicher # | | | | Berechnung bei Init # | | | | | #5001|3|1|1|2|1 # 3 Eingänge, 1 Ausgänge, 1 Timer, 2 Speicher, Berechnung bei Initialisierung # Debug 5001|3|3|1|2|1 # 3 Eingänge, 3 Ausgänge, 1 Timer, 2 Speicher, Berechnung bei Initialisierung ################################################# ### 5002 Definition der Eingänge EN[x] ################################################# # 5002|Index Eingang|Default Wert|Datenformat 0=numerisch 1=alphanummerisch # Index Eingang # | Default Wert # | | Datenformat # | | | 5002|1|0|0 # Sperren 5002|2|5|0 # Tick 5002|3|4|0 # Impulsanzahl ################################################# ###5003 Definition des Speichers SN[x] ################################################# #5003|Index Speicher|Initwert|Remanent # Index Speicher # | Initwert # | | Remanent # | | | 5003|1|0|0 # Zeitberechnung 5003|2|0|0 # Zeit zwischen den Impulsen ################################################# ### 5004 Definition der Ausgänge AN[x] ################################################# # 5004|Index Ausgang|Initwert|Runden binär|Typ (1-send/2-sbc)|Datenformat 0=numerisch 1=alphanummerisch # Index Ausgang # | Initwert # | | Runden binär # | | | Typ # | | | | Datenformat # | | | | | 5004|1|0|1|1|0 # Impuls 5004|2|""|0|1|1 # Debug: Datum/Uhrzeit des Aufrufs 5004|3|""|0|1|1 # Debug: Meldung ################################################# ### 5012 Definition der Formelzeile(n) ################################################# # 5012|Ende nach Ausführen|Bedingung|Formel|Zeitformel|Ausgang|Zeitspeicher|Speichervariable|Negierter Ausgang # Ende nach Ausführen # | Bedingung # | | Formel # | | | Zeitformel # | | | | Ausgang # | | | | | Zeitspeicher # | | | | | | Speichervariable # | | | | | | | Negierter Ausgang # | | | | | | | | # 5012|0|"EC[1] and EN[1]"|"1"|""|1|0|0|2 # Debug 5012|0|""|"__import__('time').strftime('%d.%m.%y %H:%M',__import__('time').localtime())"|""|2|0|0|0 #---------------------------------------------------------- # Gesperrt #---------------------------------------------------------- # Debug 5012|0|""|"'106 Gesperrt, Tick <= 0 oder Impulsanzahl nicht zwischen 1 und 48'"|""|3|0|0|0 5012|1|"(EN[1]!=0) or (EN[2]<=0) or (EN[3]<1) or (EN[3]>48)"|"0"|"0"|1|1|0|0 # Bedingung: Wenn 'Gesperrt(E1)' oder 'Tick(E2)' kleiner eins oder 'Impulsanzahl(E3)' nicht zwischen 1 und 48 # Formel: Timer 'Impuls(Zeit1)' anhalten, impuls löschen und abbrechen # Beende die Berechnung, führe keine weiteren Zeilen aus. # Debug 5012|0|""|"'114 Gesperrt geändert und Zeit noch nicht abgelaufen'"|""|3|0|0|0 5012|1|"(EC[1]!=0) and (OC[1]==0) and (EI==0)"|""|""|0|0|0|0 # Bedingung: Wenn 'Gesperrt(E1)' nicht geändert wurde und 'Impuls(Zeit1)' nicht abgelaufen und nicht Init # Formel: # Beende die Berechnung, führe keine weiteren Zeilen aus. #---------------------------------------------------------- # Zeitberechnung #---------------------------------------------------------- 5012|0|"EI or EC[3]"|"86400/EN[3]"|""|0|0|2|0 # Bedingung: Wenn Init oder 'Impulsanzahl(E3)' gesetzt # Formel: Berechne Zeit zwischen den Impulsen in Sekunden und speichere in 'Zeit zwischen den Impulsen(Speicher2)' 5012|0|""|"(__import__('time').localtime()[3]*3600+__import__('time').localtime()[4]*60+__import__('time').localtime()[5])%SN[2]"|""|0|0|1|0 # Bedingung: # Formel: Berechne Tageszeit (zwischen den Impulsen) in Sekunden und speichere in 'Zeitberechnung(Speicher1)' # Debug 5012|0|""|"'133 Zeitberechnung weniger als 60 Sekunden -> Impuls ' + str(SN[1]) + ' ' + str(SN[2])"|""|3|0|0|0 # Schaltzeiten erreicht dann bis 5 Min vor nächstem Impuls schlafen 5012|1|"SN[1]<60"|"1"|"SN[2]-SN[1]-300"|1|1|0|0 # Bedingung: Wenn 'Zeitberechnung(Speicher1)' weniger als 60 Sekunden, z.Bsp. Zeit von 00:00 bis 00:01 # Formel: Setze 'Impuls(A1)' auf eins und Starte 'Impuls(Zeit1)' mit Wert 'Zeit zwischen den Impulsen(Speicher2)' - 5 Minuten # Beende die Berechnung, führe keine weiteren Zeilen aus. # Debug 5012|0|""|"'142 Warten bis Zeit zwischen den Impulsen - 1 Stunde ' + str(SN[1]) + ' ' + str(SN[2])"|""|3|0|0|0 # nächsten Timer Interval berechnen und Timer neu starten 5012|1|"SN[1]<(SN[2]-300)"|""|"SN[2]-SN[1]-300"|0|1|0|0 # Bedingung: Wenn 'Zeitberechnung(Speicher1)' weniger als 'Zeit zwischen den Impulsen(Speicher2)' - 5 Minuten (Normalerweise nur bei Init der Fall) # Formel: Warten bis 'Zeit zwischen den Impulsen(Speicher2)' - 5 Minuten # Beende die Berechnung, führe keine weiteren Zeilen aus. # Ansonsten nächsten Timer Interval berechnen 5012|0|""|"(SN[2]-SN[1])/2"|""|0|0|1|0 # Bedingung: # Formel: Zeit bis 'Zeit zwischen den Impulsen(Speicher2)' halbieren und in 'Zeitberechnung(Speicher1)' speichern 5012|0|"SN[1]