Seite 1 von 1

Advanced Timer mit Ausgabe Restzeit, beliebige Zeitbasis, etc.

Verfasst: So Jan 12, 2020 2:55 pm
von Robert_Mini
Hallo zusammen!

Zeit wieder einmal eine Custom Logik zu teilen. Damit wird auch der FR (mein eigener): viewtopic.php?f=9&t=1085 gelöst.

Funktion:
Der Baustein basiert auf den Standard-Timer-Bausteinen und ergänzt diese um eine Ausgabe der abgelaufenen Zeit bzw. verbleibenden Zeit.
Mittels Umrechnungsfaktor kann die Zeiteinheit der Ein-/Ausgänge angegeben werden. Zusätzlich kann man in der gleichen Zeiteinheit ein zyklisches Senden während aktivem Timer gesetzt werden.

Anwendungsbeidpiel:
Ich verwende solche Timer an mehreren Stellen, zB. Bewässerungslogik.
Während dem Ablauf des Timers (=Zeitprogramm), soll je Bewässerungskreis auch die abgelaufene Zeit in der Visu angezeigt werden.
Auch die verbeibende Zeit (Restdauer des Programmes) soll laufend aktualisiert werden.

Eingänge:
  • Start/Stop: Der Timer wird bei Empfang eines "True" gestartet.
  • Faktor Zeit: Damit werden die angegebenen Zeitgrößendie intern in Sekunden umgerechnet.
    • Faktor 1 für Sekunden
    • Faktor 60 für Minuten
    • Faktor 3600 für Stunden
    • Faktor 86400 für Tage
  • Dauer: Legt fest, wie lange der Timer aktiv sein soll.
  • Sendeintervall: Gibt an, wie oft die aktuellen Stati gesendet werden sollen.
    Hinweis: Soll auch der Ausgang "Timer aktiv" zyklisch gesendet werden, muss die Sendeoption auf "a" (Always" gesetzt werden).
Ausgänge:
  • Timer aktiv: Zeit an, ob der Timer aktiv ist
  • Zeit abgelaufen: Gibt jene Zeit aus, die bereits abgelaufen ist
  • Dauer verbleibend: Gibt jene Zeit aus, die bis zum Ablauf des TImers verbleibt.
Der Baustein:

Bild

Ein Grafana Ausschnitt, schön zu sehen, dass bei inaktivem Timer auch keine Werte gesendet werden:

Bild

Code: Alles auswählen

/**===========================================================
Timer mit Ausgabe abgelaufener Zeit und Restzeit
============================================================*/
{
  "Input": [
        ["Start/Stop","Timer starten mit Wert 1","$I_Timer","c"],
	    ["Faktor Zeit","Umrechungsfaktor [sec/Zeiteinheit] legt die Zeiteinheit für Dauer und Sendeintervall fest. zb 1 für Sekunden, 60 für Minuten, 3600 für Stunden","$I_Faktor","c"],
	    ["Dauer","Nachtbetrieb","$I_Dauer","c"],
	    ["Sendeintervall","Zyklisch Senden wenn Timer=True","$I_Interval","c"]
  ],
  "Output": [
		["Timer aktiv","Ausgang","$State","c"],
		["Zeit abgelaufen","Dauer","$Time","c"],
		["Dauer verbleibend","Restdauer","$Time_Left","c"]
  ],
  "Level": [
		["$I_Timer","bool",false],
		["$State","bool",false],
		["$I_Dauer","float",0],
		["$Dauer_sec","float",0],
		["$Time_sec","float",0.0],
		["$Time","float",0.0],
		["$Time_Left_sec","float",0.0],
		["$Time_Left","float",0.0],
		["$I_Interval","float",30.0],
		["$Interval_sec","float",30.0],
		["$I_Faktor","float",1.0],
		["$Konst1","float",1.0],
		["$Konst0","float",0.0],
        ["$Val_ok","bool",false]
  ],
  "Module": [
	  // Umrechnung in Sekunden
		["Polynomial", "$I_Faktor", "$Dauer_sec",["$Konst0","$I_Dauer"]],
		["Polynomial", "$I_Faktor", "$Interval_sec",["$Konst0","$I_Interval"]],
	  // Timer und Stopuhr in sec starten bzw. Zeit aktualisieren	
		["Monoflop","$I_Timer","-$I_Timer","$State","$Dauer_sec",2],
		["Stopwatch","$I_Timer", "$Time_sec"],
	  // Restzeit berechnen
		["Polynomial", "$Konst1", "$Time_Left_sec",["$Dauer_sec","-$Time_sec"]],
	  // Zyklischer Trigger, wenn Timer aktiv
		["Clocksignal","$I_Timer",0,"$Interval_sec"],
      //
	  // Ausgabewerte in Eingabeeinheit umrechnen
	    ["Limiter","$Time_Left","$Time_Left","$Val_ok",["$Konst0", "$Dauer_sec"]],
	    ["Ratio", "$Time_Left_sec", "$Time_Left", "$I_Faktor"],
	    ["Ratio", "$Time_sec", "$Time", "$I_Faktor"]
  ]
}
/** Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") 
die unter https://wrgt.news/TOLL zum Download zur Verfügung steht. */
Nutzungsrechte:
Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.

Viel Spaß damit und gerne Rückmeldung, wenn was fehlt oder euch die Sache gefällt.
Robert

Re: Advanced Timer mit Ausgabe Restzeit, beliebige Zeitbasis, etc.

Verfasst: So Jan 12, 2020 3:42 pm
von StefanW
Hervorragend!

Danke dass Du Deine tolle Arbeit mit uns teilst. Jetzt würde ich mir nur noch wünschen, dass sich noch viele weitere Autoren finden

lg

Stefan

Re: Advanced Timer mit Ausgabe Restzeit, beliebige Zeitbasis, etc.

Verfasst: Fr Apr 22, 2022 9:01 am
von Chiudalla
Robert_Mini hat geschrieben: So Jan 12, 2020 2:55 pm Ausgänge:
  • Timer aktiv: Zeit an, ob der Timer aktiv ist
  • Zeit abgelaufen: Gibt jene Zeit aus, die bereits abgelaufen ist
  • Dauer verbleibend: Gibt jene Zeit aus, die bis zum Ablauf des TImers verbleibt.
Bravo, Danke für den Code.

Gäbe es eine Möglichkeit die Ausgabe (in Float) zu Text (also String) zu konvertieiren? Hintergrund ist die Anzeige in einem MDT Glastaster, der nur String als Datentyp entgegen nimmt.

VIele Grüße
Mat

Re: Advanced Timer mit Ausgabe Restzeit, beliebige Zeitbasis, etc.

Verfasst: Fr Apr 22, 2022 9:06 am
von Robert_Mini
Hallo Mat!

Meines Wissens nach passiert automatisch, wenn du an den Float-Ausgang einen String verbindest.
Hast du das schon probiert?

lg
Robert