Insider Preview IP 1 zur V 4.8 - veröffentlicht

Verehrte Nutzer des Timberwolf Servers. Wir haben die IP1 zur nächsten Hauptversion 4.8 für alle Modelle des Timberwolf Servers freigegeben.

Bild

Diese neue Version enthält eine neue Funktion zum selektiven Löschen von Datenpunkten in ein oder mehreren Zeitserien sowie 16 Verbesserungen und wichtige Fehlerkorrekturen


Insbesondere die neuen Funktionen zum selektiven Löschen in Zeitserien sind sehr wichtig, weil damit erstmals ein Bereinigen sowie ein Kürzen von Zeitserien möglich wird. Damit kann massiv Speicherplatz reduziert werden, womit auch Backup / Restore kürzer wird. Zudem können damit Datenschutzanforderungen umgesetzt werden.

Foren Diskussion: viewtopic.php?t=6070

Release Notes im Wiki: https://elabnet.atlassian.net/wiki/x/AYCEyw


WICHTIG: Dies ist die eine neue Insider Preview im Zyklus 4.8. Mit Installation der letzten Hauptversion 4.5 wurde der Bezug für Insider Versionen zurückgesetzt. Mitglieder im Insider Club müssen daher in der Systemaktualisierung erst den Bezug von Insider Versionen wieder freischalten, damit das Update angezeigt wird.

[Gelöst] [1.5.3] Logik nach letztem Aufruf verzögert nochmal triggern

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Antworten

Ersteller
Robert_Mini
Beiträge: 3910
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1283 Mal
Danksagung erhalten: 2224 Mal

[1.5.3] Logik nach letztem Aufruf verzögert nochmal triggern

#1

Beitrag von Robert_Mini »

Hallo zusammen!

Ich fürchte das ist wieder eine Spezialfrage für @S. Kolbinger, vielleicht fällt aber auch jemand anderem eine Idee zu meinem Problem ein.
Hintergrund: Impulszähler, der eine Leistung ausgibt. Nach dem letzten Impuls (Gerät aus), bleibt aber eine Leistungswert <> 0 stehen. Damit wollte ich ein Timeout ergänzen, nach dem der Ausgang auf 0 gesetzt wird.
Das Monoflop wird mit jedem neuen Wert re-getriggert. Kommt kein Impuls mehr, läuft der Timer dann x sec. ab und triggert auch die Logik nochmal.
Entgegen meinen Erwartungen wird aber beim letzten Aufruf der Ausgang des Timers nicht auf 0 gesetzt (was zeitgleich die Ausgänge Leistung 1/2 auf 0 setzen würde).

Irgendwo hab ich da einen Knopf im Hirn....

Danke für eure Hilfe
Robert

Code: Alles auswählen

/**=====================================================================
Umrechnung von Impulsen in Leistung.               - update 22.1.2020
Ausgang 1 wird mit jedem Impuls aktualisiert
Ausgang 2: wird nur nach Überschreitung von Min. Intervall neu 
berechnet, kürzere Impulse werden gemessen/gezählt und gemittelt.
======================================================================*/
{
  "Level": [
    ["$In","bool",false],
	["$In_Last","bool",false],
	["$Delta","bool",false],
    ["$Output","bool",false],
    ["$TimeHigh","float",0.0],
    ["$TimeLow","float",0.0],
    ["$Time","float",0.0],
	["$TimeLast","float",0.0],
    ["$Umrechnung","float",3600.0],	
    ["$dt_min","float",5.0],	
    ["$Leistung1","float",0.0],
	["$Leistung2","float",0.0],
	["$Leistung2A","float",0.0],
	["$Zaehler","integer",0.0],
	["$Konst1","float",1.0],
    ["$Konst0","float",0.0],
	["$KonstTrue","bool",true],
	["$Timeout","float",30.0],
	["$Timeout_Wait","bool",true]
  ],
  "Module": [   
    ["Stopwatch","$In","$TimeHigh"],
	["Stopwatch","-$In","$TimeLow"],
	// Impuls mit altem Wert vergleichen (anderer Trigger? zB intern)
	["Polynomial","-$Konst1","$Delta",["$In", "$In_Last"]],
	// Letztes dt übernehmen
	["Multiplexer",["$TimeHigh","$TimeLow"],"$Time","$In"],
	// Leistung1 berechnen
	["Ratio", "$Umrechnung", "$Leistung1", "$Time"],
	// Anzahl Impuls erhöhen und Impulsdauer zum gespeicherten Wert addieren
	["Polynomial","$Konst1","$Zaehler",["$Zaehler", "$Konst1"]],
    ["Polynomial","$Konst1","$TimeLast",["$Time", "$TimeLast"]],
	// Prüfen, ob dt > dt_min
	["Comparator","$TimeLast" ,"$Output" , "$dt_min"],	
	// Leistung2 berechnen
	["Ratio", "$Umrechnung", "$Leistung2A", "$TimeLast"],
	["Polynomial","$Zaehler","$Leistung2A",["$Konst0", "$Leistung2A"]],
	// Leistung 2 nur übernehmen, wenn dt > dt_min
	["Multiplexer",["$Leistung2","$Leistung2A"],"$Leistung2","$Output"],
	// Zaehler = 0; Summe Impulsdauer = 0
    ["Multiplexer",["$Zaehler","$Konst0"],"$Zaehler","$Output"],
    ["Multiplexer",["$TimeLast","$Konst0"],"$TimeLast","$Output"],
	//
	// Timeout für Leistung 0, re-trigger mit letztem neuen Impuls
	["Monoflop","$Delta","-$KonstTrue","$Timeout_Wait","$Timeout",1],
	["Multiplexer",["$Konst0","$Leistung1"],"$Leistung1","$Timeout_Wait"],
	["Multiplexer",["$Konst0","$Leistung2"],"$Leistung2","$Timeout_Wait"],
	// (In_Last = In)
  	["Polynomial","$Konst1","$In_Last",["$In"]]
  ],
  "Output": [
    ["Leistung1","Leistung","$Leistung1","c"],
    ["Leistung2","Leistung","$Leistung2","c"],
    ["TimeHigh","Zeit Zustand EIN","$TimeHigh","c"],
    ["TimeLow","Zeit Zustand AUS","$TimeLow","c"],
	["Time","Time","$Time","c"],
	["TimeLast","Time","$TimeLast","c"],
	["Zaehler","Zaehler","$Zaehler","c"],
	["Zaehler","Zaehler","$Zaehler","c"]
  ],
  "Input": [
    ["Impulssignal","Eingang Impulssignal alternierend 1-0-1-0","$In","c"],
    ["Min. Interval","Minimaler Impulsabstand für Leistungsauswertung und Senden","$dt_min","c"],
    ["Umrechnungs- Faktor","tbd","$Umrechnung","c"],
	["Timeout","Timeout für Leistung 0","$Timeout","c"]
  ]
}
Zuletzt geändert von Robert_Mini am So Mai 03, 2020 11:12 am, insgesamt 2-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Robert_Mini
Beiträge: 3910
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1283 Mal
Danksagung erhalten: 2224 Mal

#2

Beitrag von Robert_Mini »

Hallo @S. Kolbinger!

Das ist der Fall, der mich seit Wochen (jedes mal wenn ich wieder dran gehe) auf die Palme treibt.

Code abgespeckt - funktioniert.
Input Timeout auf 20sec setzen, dann Input Impulseingang true - false setzen => Output Zaehler zeigt einen Wert an. Nach Ablauf Timout von 20sec wird die Logik vom Timer getriggert und der Zaehler auf 0 gesetzt.

Code: Alles auswählen

/**=====================================================================*/
{
  "Level": [
    ["$In","bool",false],
	["$In_Last","bool",false],
	["$Delta","bool",false],
    ["$Output","bool",false],
    ["$TimeHigh","float",0.0],
    ["$TimeLow","float",0.0],
    ["$Time","float",0.0],
	["$TimeLast","float",0.0],
    ["$Umrechnung","float",3600.0],	
    ["$dt_min","float",5.0],	
    ["$Leistung1","float",0.0],
	["$Leistung2","float",0.0],
	["$Leistung2A","float",0.0],
	["$Zaehler","integer",0.0],
	["$Konst1","float",1.0],
    ["$Konst0","float",0.0],
	["$KonstTrue","bool",true],
	["$Timeout","float",60.0],
	["$Timeout2","float",61.0],
	["$Timeout_Wait","bool",true],
	["$Timeout_Wait2","bool",true]
  ],
  "Module": [   
    // Impuls mit altem Wert vergleichen (anderer Trigger? zB intern)
	["Polynomial","-$Konst1","$Delta",["$In", "$In_Last"]],
	["Polynomial","$Konst1","$Zaehler",["$Zaehler", "$Konst1"]],
	// Timeout für Leistung 0, re-trigger mit letztem neuen Impuls
	["Monoflop","$Delta","$Konst0","$Timeout_Wait","$Timeout",1],
//
	["Multiplexer",["$Konst0","$Zaehler"],"$Zaehler","$Timeout_Wait"],
	// (In_Last = In)
  	["Polynomial","$Konst1","$In_Last",["$In"]]
  ],
  "Output": [
	["TimeOut_Wait","Verzögerung vor 0 setzen","$Timeout_Wait","c"],
	["Zaehler","Verzögerung vor 0 setzen","$Zaehler","c"],
	["New Trigger","Zaehler","$Delta","c"]
  ],
  "Input": [
    ["Impulssignal","Eingang Impulssignal alternierend 1-0-1-0","$In","a"],
	["Timeout","Timeout für Leistung 0","$Timeout","c"]
  ]
}
Code Original - funktioniert NICHT.
Parameter siehe Screenshot unten.
Input Impulseingang true - false setzen => Output Leistung1 zeigt zB 500 an, nach Ablauf Timout von 20sec wird die Logik vom Timer getriggert, aber sämtliche Ausgänge NICHT aktualisiert!!! D.h. Ausgänge Leistung1 + 2 werden nicht auf 0 gesetzt (Hintergrund: kommt länger als x sec. kein Impuls => Leistung 0 anzeigen!).

Ich habe die Zeile (immer vor dem Modul) mit zusätzlichen "//" in Spalte 1 markiert, die die gleiche Logik, wie in der abgespeckten Form oben darstellen. Dazwischen gibt es weitere Module, aber das Prinzip wird dadurch nicht beeinflusst!!

Code: Alles auswählen

/**=====================================================================
Umrechnung von Impulsen in Leistung.               - update 22.1.2020
Ausgang 1 wird mit jedem Impuls aktualisiert
Ausgang 2: wird nur nach Überschreitung von Min. Intervall neu 
berechnet, kürzere Impulse werden gemessen/gezählt und gemittelt.
======================================================================*/
{
  "Level": [
    ["$In","bool",false],
	["$In_Last","bool",false],
	["$Delta","bool",false],
    ["$Output","bool",false],
    ["$TimeHigh","float",0.0],
    ["$TimeLow","float",0.0],
    ["$Time","float",0.0],
	["$TimeLast","float",0.0],
    ["$Umrechnung","float",3600.0],	
    ["$dt_min","float",5.0],	
    ["$Leistung1","float",0.0],
	["$Leistung2","float",0.0],
	["$Leistung2A","float",0.0],
	["$Zaehler","integer",0.0],
	["$Konst1","float",1.0],
    ["$Konst0","float",0.0],
	["$KonstTrue","bool",true],
	["$Timeout","float",60.0],
	["$Timeout2","float",61.0],
	["$Timeout_Wait","bool",true],
	["$Timeout_Wait2","bool",true]
  ],
  "Module": [   
    ["Stopwatch","$In","$TimeHigh"],
	["Stopwatch","-$In","$TimeLow"],
//	// Impuls mit altem Wert vergleichen (anderer Trigger? zB intern)
	["Polynomial","-$Konst1","$Delta",["$In", "$In_Last"]],
	// Letztes dt übernehmen
	["Multiplexer",["$TimeHigh","$TimeLow"],"$Time","$In"],
	// Leistung1 berechnen
	["Ratio", "$Umrechnung", "$Leistung1", "$Time"],
	// Anzahl Impuls erhöhen und Impulsdauer zum gespeicherten Wert addieren
	["Polynomial","$Konst1","$Zaehler",["$Zaehler", "$Konst1"]],
    ["Polynomial","$Konst1","$TimeLast",["$Time", "$TimeLast"]],
	// Prüfen, ob dt > dt_min
	["Comparator","$TimeLast" ,"$Output" , "$dt_min"],	
	// Leistung2 berechnen
	["Ratio", "$Umrechnung", "$Leistung2A", "$TimeLast"],
	["Polynomial","$Zaehler","$Leistung2A",["$Konst0", "$Leistung2A"]],
	// Leistung 2 nur übernehmen, wenn dt > dt_min
	["Multiplexer",["$Leistung2","$Leistung2A"],"$Leistung2","$Output"],
	// Zaehler = 0; Summe Impulsdauer = 0
    ["Multiplexer",["$Zaehler","$Konst0"],"$Zaehler","$Output"],
    ["Multiplexer",["$TimeLast","$Konst0"],"$TimeLast","$Output"],
	//
//	// Timeout für Leistung 0, re-trigger mit letztem neuen Impuls
	["Monoflop","$Delta","$Konst0","$Timeout_Wait","$Timeout",1],
//	//
	["Multiplexer",["$Konst0","$Leistung1"],"$Leistung1","$Timeout_Wait"],
	["Multiplexer",["$Konst0","$Leistung2"],"$Leistung2","$Timeout_Wait"],
//	// (In_Last = In)
  	["Polynomial","$Konst1","$In_Last",["$In"]]
  ],
  "Output": [
    ["Leistung1","Leistung","$Leistung1","c"],
    ["Leistung2","Leistung","$Leistung2","c"],
    ["TimeHigh","Zeit Zustand EIN","$TimeHigh","c"],
    ["TimeLow","Zeit Zustand AUS","$TimeLow","c"],
	["Time","Time","$Time","c"],
	["TimeLast","Time","$TimeLast","c"],
	["Zaehler","Zaehler","$Zaehler","c"],
	["TimeOut_Wait","Verzögerung vor 0 setzen","$Timeout_Wait","c"],
	["TimeOut_Wait2","Verzögerung vor 0 setzen","$Timeout_Wait2","c"],
	["New Trigger","Zaehler","$Delta","c"]
  ],
  "Input": [
    ["Impulssignal","Eingang Impulssignal alternierend 1-0-1-0","$In","c"],
    ["Min. Interval","Minimaler Impulsabstand für Leistungsauswertung und Senden","$dt_min","c"],
    ["Umrechnungs- Faktor","tbd","$Umrechnung","c"],
    ["Timeout","Timeout für Leistung 0","$Timeout","c"]
  ]
}
Bild
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

S. Kolbinger
Elaborated Networks
Elaborated Networks
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 560 Mal

#3

Beitrag von S. Kolbinger »

Hi Robert,

ich habe das mal auf meinem System nachgestellt.

Hier sieht man, dass beim letzten triggern (nach Ablauf des Timeouts), der Wert für $Time gleich 0 ist:
Bild

Jetzt verwendest du diesen Wert als Divisor in deiner Logik:

Code: Alles auswählen

["Ratio", "$Umrechnung", "$Leistung1", "$Time"],
Bei einem Fehler (wie hier: "Division durch 0") bricht die Ausführung der Logik an dieser Stelle ab!

Eine Überarbeitung der Fehlerbehandlung und -meldung seteht noch auf der Liste :whistle:
Zuletzt geändert von S. Kolbinger am Fr Feb 28, 2020 5:01 pm, insgesamt 1-mal geändert.
Gruß,
Stefan K.

Ersteller
Robert_Mini
Beiträge: 3910
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1283 Mal
Danksagung erhalten: 2224 Mal

#4

Beitrag von Robert_Mini »

OMG!!!
Du bist ein Genie. Ich muss das noch durchdenken, aber damit kann ich das Modul Leistungsberechnung fertigstellen.

Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Antworten

Zurück zu „Logikengine & Logik-Editor“