TIA Realwert Gültigkeit

eldon

Level-2
Beiträge
88
Reaktionspunkte
22
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Gibt es eine einfache Möglichkeit um einen empfangen Realwert auf Gültigkeit zu prüfen?
Es gibt ja Realwerte die keine Gleitkommazahl sind.

Hintergrund ist das ich mit libnodave Werte geschickt bekomme und die teilweise nicht gültig sind...

Beste Grüsse
 
Was Onkel Dagobert gemeint hat, ist wohl "The equality and inequality predicates are non-signaling so x = x returning false can be used to test if x is a quiet NaN." (gefunden bei Wikipedia)
Also die zu testende RealVariable mit sich selbst (!) vergleichen. Wenn dieser Vergleich False liefert, ist es ein Fall von "non-signaling" NaN.
Gruss, Heinileini
 
Ich hatte dieses Problem früher in der anderen Richtung, beim Auslesen von Int und DINT aus S5- oder S7-Steuerungen. Selten, aber doch bemerkbar, wenn man Werte aufzeichnet oder Min-Max-Werte ermittelt. Es lag daran, dass offensichtlich bei einem 2 oder 4-Byte-Wert die Bytes manchmal nicht in einem Rutsch im PC ankamen. Wenn man das wirklich sicher lösen will muß man die Werte vielleicht 2 Mal nacheinander auslesen und vergleichen oder gleichzeitig doppelt anfordern und vergleichen. Geht leider etwas auf die Performance und es besteht noch immer eine gewisse sehr geringe Wahrscheinlichkeit, dass es hintereinander falsch ankommt.
 
Hallo Ralle, in deinem Fall war das aber ein Problem mit der Konsistenz. Gegenüber dem Problem, um welches es hier geht, stellt bei Ganzzahlen jedes Bitmuster eine gültige Zahl dar. Das ist bei Realzahlen nicht der Fall.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Gibt es eine einfache Möglichkeit um einen empfangen Realwert auf Gültigkeit zu prüfen?
Es gibt ja Realwerte die keine Gleitkommazahl sind.

Hintergrund ist das ich mit libnodave Werte geschickt bekomme und die teilweise nicht gültig sind...

Beste Grüsse

Ich vermute mal, dass du da an der falschen Stelle suchst und du das gleiche Problem hast wie es Ralle beschreibt.
Bei größeren Datenmengen überträgt libnodave in mehreren Blöcken. Dadurch bekommst du Probleme mit der Konsistenz der Daten.

Das zweite mögliche Problem ist, dass die 1500er keinen Zykluskontrollpunkt hat und die Daten antizyklisch übertragen werden. D.h. irgendwann in deinem SPS-Zyklus werden die Daten mit den neuen Werten überschrieben. Auch dadurch gibt es Konsitenzprobleme.

Daher ist es bei Kommunikation nie verkehrt mit Puffern zu arbeiten. Also Daten empfangen und ggf. prüfen -> Puffer in anderen Datenbereich kopieren -> Puffer löschen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist bei ihm schon 6 Jahre her aber vielleicht trotzdem noch für andere interessent. Vermutlich wird es wie bei vielen solcher Fälle tatsächlich ein Konsistenzproblem sein.

Also ich hab viel Datenaustausch mit etlichen verschiedenen Plattformen gemacht und das Problem mit ungütigen Realzahlen ist mir nur einmal begegnet. Da wurde absichtlich eine ungültigte Realzahl übertragen zur Kennung, dass der Messwert ungültig ist. Kannte ich bis dahin auch noch nicht :)
 
Ohje, jetzt werden es alle als ein Konsistenzproblem ansehen. Ein "NaN" ergibt sich zum Beispiel aber auch bei ungültigen mathematischen Operationen, wie z.Bsp. das Ziehen einer Wurzel auf einer negativen Zahl im rationalen Zahlenbereich.
Da kommt dann der von @Heinileini angesprochene Vergleich der Real-Variablen mit sich selbst zur Erkennung ins Spiel.
 
Ich hatte einmal folgenden Fall:

  • Differenzdruckmessung über einem Lüfter (normerweise immer ein positiver Wert)
  • Messwert-Abgleich durch ein Offset softwareseitig durchgeführt
  • nicht beachtet, dass hierdurch bei Stillstand ein negativer Wert entstehen kann
  • Berechnung der Luftmenge aus dem Differenzdruck (Berechnung mit Quadratwurzel)
  • Messwert gedämpft (rekursive Berechnung) --> einmal NaN, immer NaN
  • Wochen später das Desaster nach einer Abschaltung der Anlage (neg. Differenzdruck)
 
Zuletzt bearbeitet:
Ich hatte einmal folgenden Fall:

  • Differenzdruckmessung über einem Lüfter (normerweise immer ein positiver Wert)
  • Messwert-Abgleich durch ein Offset softwareseitig durchgeführt
  • nicht beachtet, dass hierdurch bei Stillstand ein negativer Wert entstehen kann
  • Berechnung der Luftmenge aus dem Differenzdruck (Berechnung mit Quadratwurzel)
  • Messwert gedämpft (rekursive Berechnung) --> einmal NaN, immer NaN
  • Wochen später das Desaster nach einer Abschaltung der Anlage (neg. Differenzdruck)
Ja, der Klassiker ;)
Selbst wenn Du da keinen negativen Offset einstellst, kann der Differenzdruck bei stehender Anlage leicht negativ sein...
Aber zum Glück steht die Anlage ja eh ;)
Warum geht sie nicht wieder an, bestimmt der Klempner Schuld 😂
 
Ja, der Klassiker ;) ...
Naja Klassiker? Immerhin war das dem Zusammentreffen dreierlei Umständen geschuldet, Offset, Quadratwurzel und Rekursion.

... Aber zum Glück steht die Anlage ja eh ;)...
Ja, aber leider erst Wochen nach der Inbetriebnahme! Ich hatte einen Test-Wiederanlauf nach solch einer kleinen Änderung (Kalibrieren) leider nicht in Erwägung gezogen.

... Selbst wenn Du da keinen negativen Offset einstellst, kann der Differenzdruck bei stehender Anlage leicht negativ sein...
Normalerweise wird bei mir der normierte Messwert bei Min und Max begrenzt. Das Offset wird jedoch ggf. erst im Nachhinein aufaddiert. Vielleicht sollte ich das mal ändern.
 
Zurück
Oben