Seite 1 von 2

Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Mo Apr 26, 2021 8:48 pm
von tger977
Hallo zusammen,

Ich wollte mich mal wieder am Logikeditor versuchen, aber leider scheitere ich wie schön öfters an Ansätzen und der m.E. leider nach wie vor geringen Standardbausteine. Wie kann ich von einem Objekt den Vorgängerwert gegen den aktuellen Wert vergleichen?

Wenn dieser Objektwert z.B. um einen Faktor größer 9 springt würde ich das gerne detektieren und eine Ausgabe des aktuellen Wertes verhindern und erstwieder neue Werte ausgeben wollen wenn der ursprüngliche Vorgängerwert wieder mit Faktor z.B. kleiner 2 wieder kommt.

Bsp.: Wertefolge 299, 3000, 3001, 303: hier soll die 3000 und 3001 nicht gesendet werden.

Danke, falls mir jemand Hinweise hat.

Re: Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Mo Apr 26, 2021 10:15 pm
von gbglace
Hmm so wie ich den Logikeditor hier erlesen habe müsstest am Ausgang der Logik den Eingangswert jedesmal nochmal in ein eigenes Objekt rausschreiben was nicht direkt von KNX /ModBus oder so beschrieben wird. Jenes kannst Du dann auch als Eingang nutzen und mit dem neu einlaufenden extern beschriebenen vergleichen. Ein extern beschriebenes ist dann ja schon nur mit neuem Wert in der Logik. Und der LE macht keine Aufrufe in einer Datenbank um Historien rauszuholen. Das ist da alles wie im KNX eventgetrieben und letzter Change als aktueller Zustand noch bekannt.

Re: Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Mo Apr 26, 2021 10:41 pm
von Robosoc
Also mit einem Standardbaustein alleine wird das auf jeden Fall nicht gehen, die Aufgabe ist aber auch schon ein wenig speziell.
Aber als Custom wird es glaub ich nicht so schwer.

Ich halte hier mal ein paar Gedanken fest, morgen kann ich sicher mal ein paar Zeilen Code besteuern, wenn nicht ein Anderer schneller ist.

Was passiert bei einem erstmaligen Start? Ist der eingehende Wert dann beispielsweise sicher bei 0 oder kann es da auch beliebig bei z.B. 400 losgehen? Bei einem späteren Neustart könnte die Persistenzoption ja aktiv sein, aber der erste initiale Start scheint mir nicht trivial.

Zählt das Ganze immer nur fortan hoch oder gibt es auch einen Reset? Kann es also z.B. sein, dass du irgendwann von 303 bewusst auf 0 oder irgendeinen anderen niedrigeren Wert als 303 gehen wirst?

Bisher verstandener Ablauf:
Differenz aus Ausgabewert und aktuellem Eingangswert, der die Logik triggert, bilden (polynomial)
Prüfung ob Differenz > 9, (Comperator)
wenn ja dann nichts machen
Wenn nein wird der aktuelle Eingangswert zum Ausgangswert (latch)

Eingang mit Parameter a
Ausgangswert mit Parameter c

Re: Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Di Apr 27, 2021 7:22 pm
von Robosoc

Code: Alles auswählen

/**
* 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.
*/
{
  "Input": [
      ["In","","$in","a"]
  ],
  "Output": [
      ["Out","","$out","c"]
  ],
  "Level": [
    ["$in","integer",0],
    ["$out","integer",0],
    ["$dif","integer",0],
    ["$konst1","integer",1],
    ["$treshold","integer",9],
    ["$gate","bool",false]
  ],
  "Module": [
      ["Polynomial", "$konst1", "$dif",["$in", "-$out"]],
      ["Comparator" , "$dif" , "$gate" , "$treshold"],
      ["Latch","$in","$out","-$gate",0]
  ]
}
Diese Customlogik erfüllt glaube ich Deine Zieldefinition, aber startet bei jeder echten Neuinitialisierung bei 0...Nun musst Du noch einmal überlegen, wie Du das genau definieren willst UND Du kannst Dir die Schwelle auch auf einen Eingang legen um diese ggf. besser über einen Parameter einstellen zu können.

Re: Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Di Apr 27, 2021 10:34 pm
von tger977
Wahnsinn, danke!!!

Ich kann mir das morgen oder übermorgen leider erst ansehen und testen. Die Erstinitalisierung ist völlig unproblematisch, da der Objektwert alle 2s gelesen und bei 1% Änderung sofort ein neuer Wert kommt.

Beim Lesen fällt mir auf dass du vmtl. die Differenz der Werte gegen die Schwelle vergleichst, ich brauche aber den Quotienten der Werte. Aber ich schau morgen mal selbst ob ich da die custom logik soweit verstehe...

Re: Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Di Apr 27, 2021 10:42 pm
von tger977
Robosoc hat geschrieben: Mo Apr 26, 2021 10:41 pm
Zählt das Ganze immer nur fortan hoch oder gibt es auch einen Reset? Kann es also z.B. sein, dass du irgendwann von 303 bewusst auf 0 oder irgendeinen anderen niedrigeren Wert als 303 gehen
Nein das ist der Leistungswert meiner PV Anlage, der schwankt im Bereich 0 bis ca. 7800. Leider kommen aber aufgrund von Modbus Inkonstistenzen auf die zu kurzzeitigen Sprüngen von Faktor 10 führen die ich eben "abfangen" möchte.

Re: Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Mi Apr 28, 2021 4:12 pm
von Robosoc
Differenz....Quotient...ist doch alles das Gleiche ......:doh: Sorry, das habe ich falsch interpretiert, aber wie Du schon schreibst ist es zunächst kein großes Thema den Polinomial-Baustein gegen etwas anderes einzutauschen.

Aber ein Quotient ist auch nicht ganz trivial, weil Du Dich dann zwangsweise mit dem "Division durch Null" Thema beschäftigen wirst müssen und da wäre ein wenig Frust für Dich als Custom-Logiken-Einsteiger möglich, daher weise ich Dich lieber noch einmal drauf hin:
viewtopic.php?f=31&t=1455&start=10

Da Du ja Modbs-Nutzer bist und daher eventuell V2.0 IP4 installiert hast, wäre es eventuell auch möglich den neuen Baustein "freie Formel" als Alternative zu verwenden, in dem die "Div durch 0"-Problematik ja abgefangen wird. Aber da ich die IP4 noch nicht installiert habe, kann ich Dir dazu noch keine Tipps geben.

Re: Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Mi Apr 28, 2021 4:18 pm
von Robosoc
tger977 hat geschrieben: Di Apr 27, 2021 10:34 pm Die Erstinitalisierung ist völlig unproblematisch, da der Objektwert alle 2s gelesen und bei 1% Änderung sofort ein neuer Wert kommt.
Vorsicht, dass schau Dir lieber auch noch einmal genauer an und versuche es genau zu verstehen. Der Code den ich vorbereitet habe geht nach dem initialisieren davon aus, dass Du bei 0 bist und als nächster valider Werte eine Wert kommt, der nicht größer als 9 ist. Aber wenn Du die Logik quasi am Tag mit Ertrag erstellst, dann würdes Du bis abends keinen Wert auf den Ausgang geben...und Dein Ausgang wirkt erst am nächsten Tag.

Aktivierst Du den Persistenz Modus, dann ist das Problem aber für die allermeisten Fälle vermutlich egal und betrifft nur den ersten Aktivierungstag. Aber aus meiner Sicht wäre es netter den Startwert durch einen weiteren Eingang vorgeben zu können, den Du dann im Doktormodus beschalten würdest.
Das wäre auch nur zwei oder drei weitere Zeilen Code.

Re: Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Mi Apr 28, 2021 4:20 pm
von Robosoc
Ich bin mir nicht sicher, ob Dir diese Geschichte am Ende ein zufriedenstellendes Bild bringt...denn ich könnte mir vorstellen, dass Du bei schnell fliegenden Wolken auch mal Tage und Zeiten hast, wo der Faktor 9 durch Wolkenverschattung auch auf natürliche Weise entsteht. Aber da ich keine PV Anlage betreibe und wenig Erfahrung damit habe, bin ich mir da nicht so sicher.

Re: Wie Differenz Vorgänger zu Aktuellem Wert gegen Schwelle/Faktor prüfen?

Verfasst: Mi Apr 28, 2021 7:06 pm
von StefanW
Hi Andi,

frag doch mal den Hersteller ob er nicht eine Firmware-Version hat, welche zumindest das (häufige) Wechseln des Exponenten unterlässt. Weil mit mathematischen und zeitlichen Zusammenhängen zwischen verschiedenen Registern kommt kein Modbus Gateway gut zurecht. Genau dafür gibt es ja die Möglichkeit mehrere Register zusammenfassen zu können, damit man große Werte bei toller Auflösung übertragen kann.

Da müssten ja auch andere Nutzer auf Probleme stoßen. Was sagen die einschlägigen Foren dazu?

lg

Stefan