Seite 2 von 2

Re: Zwei Werte synchron aufaddieren

Verfasst: Mo Feb 21, 2022 11:20 pm
von terseek
Eine wirklich richtige Lösung wird es aber weder mit dem Tiefpass noch mit jeder anderen potentiell denkbaren nachgeschalteten Logik.

Ich denke ein Ansatz könnte sein herauszufinden, welcher der beiden Werte zuerst vom Sensor gesendet wird. Dann müßte man das Eintreffen des zweiten Wertes als Trigger für die Addition verwenden.

Re: Zwei Werte synchron aufaddieren

Verfasst: Di Feb 22, 2022 6:36 am
von Robosoc
Einfachste Lösung : Tiefpass, würde ich damit wohl machen.

Alternative im Custom Code: Du könntest ermitteln, ob das aktuelle Ergebnis des Codes ( bevor Du ihn auf den Ausgang schreibst) größer als z.B. 0,5 % vom vorherigen Ergebniswert abweicht) und wenn ja, änderst Du den Ausgang nicht. Ob dafür die Sprunghöhen ausreichend sind, bin ich mir aber nicht sicher.

Re: Zwei Werte synchron aufaddieren

Verfasst: Di Feb 22, 2022 6:41 am
von Robosoc
Zugschlus hat geschrieben: Mo Feb 21, 2022 10:47 pm Dabei war das neue Wiki wirklich hilfreich
Sehr schön, freut mich zu hören!

Re: Zwei Werte synchron aufaddieren

Verfasst: Di Feb 22, 2022 2:43 pm
von Zugschlus
Robosoc hat geschrieben: Di Feb 22, 2022 6:36 am Alternative im Custom Code: Du könntest ermitteln, ob das aktuelle Ergebnis des Codes ( bevor Du ihn auf den Ausgang schreibst) größer als z.B. 0,5 % vom vorherigen Ergebniswert abweicht) und wenn ja, änderst Du den Ausgang nicht. Ob dafür die Sprunghöhen ausreichend sind, bin ich mir aber nicht sicher.
Man könnte auch alles was mehr als 5 hPa von der letzten Messung abweicht als offensichtlichen Messfehler ignorieren. Dann ignoriert man bei einem Ausreißer zwei Werte (die beiden Flanken, nach dem zweiten Leseprozess sind die beiden Werte wieder zusammen passend), der dritte passt wieder, wird genommen und am Ende sieht das so aus als würden da einfach zwei Werte fehlen.

Beispiel:
ZeitpunktWert AWert BSummeErgebnis
19901991akzeptiert
29909999abgelehnt
39809989akzeptiert
49807987akzeptiert
In dieser SItuation ist 2 eine Fehlmessung, der tatsächliche Wert sei 989, Wert A wurde zuerst gelesen und zeigt noch in die 990er-Range, wärhend der später gelesene Wert B schon die zu 989 passende 9 enthält. Der Sprung von 991 auf 999 wäre dann zu groß, der Wert wird abgelehnt, der nächste Wert 989 passt zu 991 und wird wieder genommen.

Ich versuch das mal.

Grüße
Marc

Re: Zwei Werte synchron aufaddieren

Verfasst: Di Feb 22, 2022 4:25 pm
von Robosoc
Ja, eas meinte ich ja und entspricht etwa den 0,5%

Aber bei dem Fehler ganz rechts in Deinem Screenshot könnte es schon sein, dass es nicht mehr funktioniert. Da hast Du einen vergleichsweise lang anliegenden Fehlerwert, der zu klein ist, während der eigentlich korrekte Messwert steigt...aber probiere es mal...zumindest ist es eine gute CustomCode Übung.

Re: Zwei Werte synchron aufaddieren

Verfasst: Di Feb 22, 2022 4:33 pm
von Robosoc
Zu deinem Customcode hätte ich noch zwei Hinweise...aber nichts Falsches oder so.

Du hast bei den Ein- und Ausgängen den Namen (Parameter 1)und die Beschreibung/Tooltipp (Parameter2) gleich gewählt...das ist irgendwie sinnlos...wenn ich meine den Tooltipp nicht zu brauchen , lasse ich ihn tatsächlich leer = "", ansonsten fülle ich ihn gerne auch mit längerem Text, der mir den gewünschten Inthalt des Wertes genauer erklärt. Aber so wie Du es jetzt gemacht hast funktioniert es natürlich, ich war mir bloß nicht sicher, ob Du den Zweck des zweiten Parameters kanntest.

Du hast jeden Ein- und Ausgang mit dem Verhalten a definiert. Das ist an sich auch nicht falsch und du kannst es ja in der GUI überschreiben. Aber das birgt eine Gefahr. Solltest Du das Verhalten in der GUI umdefiniert haben und den CustomCode nachträglich mal ändern oder die Zelle kopieren, verlierst Du die in der GUI definierten Verhalten...deshalb würde ich dringend empfehlen das Triggerverhalten bereits im Code korrekt zu definieren.

Re: Zwei Werte synchron aufaddieren

Verfasst: Mi Jul 20, 2022 12:01 pm
von Zugschlus
Zugschlus hat geschrieben: Di Feb 22, 2022 2:43 pm Ich versuch das mal.
So sieht das jetzt aus:

Code: Alles auswählen

{
  "_Meta": { // Optional
    "Description": "",
    "Version": "1.00",
    "Icon": "" // format: "data:image/svg+xml;base64,ENCODED_FILE"
  },
  "Input": [
    ["Summand","Summand","$VAR<Summand!>","ai"],
    ["Differenz","Differenz","$diff","ai"]
  ],
  "Output": [
    ["LimLow","LimLow","$LimLow","a"],
    ["LimHigh","LimHigh","$LimHigh","a"],
    ["CompRes","CompRes","$CompRes","a"],
    ["Luftdruck","Luftdruck","$Out","c"],
    ["Summe","Summe","$Summe","a"],
    ["Dummy","Dummy","$Dummy","a"],
    ["Valid","Valid","$Valid","a"]
  ],
  "Module": [
    ["Polynomial","$ConstOne","$Summe",["$VAR<Summand!>"]],
    ["CalcFormula",["$Summe","$diff"],"$LimLow","$SubFormel"],
    ["CalcFormula",["$Summe","$diff"],"$LimHigh","$AddFormel"],
    ["Limiter","$Out","$Dummy","$Valid",["$LimLow","$LimHigh"]],
    ["Latch","$Summe","$Intermed","$Valid",0],
    ["Multiplexer", ["$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Summe", "$Intermed"],"$Out","$Out"]
  ],
  "Level": [
    ["$VAR<Summand!>","float",0],
    ["$diff","float",0],
    ["$Summe","float",0],
    ["$LimLow","float",0],
    ["$LimHigh","float",0],
    ["$CompRes","float",0],
    ["$AddFormel","string","X1+X2"],
    ["$SubFormel","string","X1-X2"],
    ["$Dummy","float",0],
    ["$Valid","bool",true],
    ["$Intermed","float",0],
    ["$Out","float",0],
    ["$ConstOne","float",1]
  ]
}
Bild

Das funktioniert jetzt seit Februar, und in der Zeit in der es funktioniert hat, habe ich wohl vergessen wie das Ding funktioniert. Also, bloß nicht anfassen ;-)

Grüße
Marc