Gleitkommaberechnung ILC130 mit PCWORX

Upuaut

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes SPS Forum,

nun bin ich in PCWORX über etwas gestolpert, was ich nicht wirklich verstehe.
Um es zu veranschaulichen habe ich hier mal ein Screenshot angehängt.

Ich versuche gerade einen Zähler den ich nun schon mit verschiedenen Bausteinen (Building Automation Libary, Solar Libary) ausprobiert habe, zu realisieren (ILC130).
Eingentlich eine ganz einfache Aufgabe:
An xDigitalInput werden Impulse gezählt die in Verbindung mit dem Divisor von 500 an RMeterReadingTotal in Form eines Zählerstandes in 0,002 er Schritten gezählt werden.

Nun habe ich aber das Problem, das sobald ein Divisor > 1 eingesetzt wird, der Fließkommawert verfälscht gezählt wird (z.B. statt in 0,002er Schritten nur in 0,00189...er Schritten).
In meinem Beispiel wird nun statt 11535,180 die Zahl 11535,1796875 berechnet und dementsprechend wir der Zähler auch hochgezählt. Nach einiger Zeit habe ich eine große Abweichung im Zählerstand.

Nur wenn ich als Divisor 1 angeben (iPulseConfig) und anschließend über mein PHP Script durch 500 Teile, komme ich auf eine genaue Zahl.
Mit einem normalen DIV Baustein, habe ich das gleiche Phänomen.
Läßt sich das in PCWORX nicht anders realisieren? Habe ich einen Denkfehler?
CPU's an sich können ja eigentlich nicht mit Gleitkommazahlen rechnen und müssen diese auch erst umwandeln. Geht bei dieser Umwandlung etwas schief?
Wir reden hier ja nur von 3 Stellen hinter dem Komma...

LG
Upuaut
 

Anhänge

  • Counter.jpg
    Counter.jpg
    39,4 KB · Aufrufe: 21
Zuletzt bearbeitet:
Die Ungenauigkeit bei Gleitkommarechnung ist normal. Das Gleitkommaformat nach IEEE 754 (32 Bit, einfache Genauigkeit) kann erstens gar nicht alle Zahlen exakt darstellen (z.B. 0,1) und ist zweitens nur auf ca. 7 Dezimalstellen genau. (mehr Anzeigestellen suggerieren nur eine tatsächlich nicht vorhandene Genauigkeit) Drittens kann man nicht sehr kleine Zahlen zu sehr großen Zahlen addieren, z.B. 70.000,000 + 0,002 = 70.000,000 !

Deshalb macht man Zähler grundsätzlich als Ganzzahl. Man kann ja später den Zählerstand in Gleitkommazahl umrechnen.

siehe mal diesen IEEE 754 Umrechner

Harald
 
Zurück
Oben