TIA TIA Addition von REAL Werten wird nach einiger Zeit ungenau

SPS-Andy

Level-2
Beiträge
60
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe folgendes Problem:
Über eine S0 Schnittstelle bekomme ich Impulse eines Energiezählers (1KW = 400imp)
Diese Impulse will ich mit einer ADD Real Funktion Addieren umso den Verbrauch Stündlich, Täglich etc. zu visualisieren (Visu Anzeige KW mit 3 Nachkommastellen)

Jetzt ist mir aufgefallen das wenn ich jeden Impuls (0,0025KW) Addiere nach einiger Zeit Fehler einschleichen und der Addierte Wert ab der 5 Nachkommastelle abweicht.
Die Abweichung ist zwar nur minimal, aber bin Trotzdem verunsichert, warum das so ist, denn wenn ich 0,0025 Addiere sollten Niemals mehr als 4 Nachkommastellen dabei herauskommen!?
Ich denke im Video sieht man besser was ich meine. (zum Testen Addieren mit Taktmerker)

[video]https://drive.google.com/file/d/1JUSTb90YCNM13_e_oUi4tKvDJxjmZWop/view?usp=sharing[/video]

Vorab schon mal vielen Dank für eure Hilfe!

PS: Ich habe dies auch schon mit anderen TIA Versionen und sogar mit Step7 getestet, bei allen das gleiche Phänomen. Aber falls es doch hilft Benutzte Software und CPU TIA V15.1 neustes Update und CPU S7-1511-F 1FK02 FW:2.6
 
Hallo Andy,

such' mal in der Online-Hilfe nach "Darstellung der Genauigkeit von Gleitpunktzahlen". Dort ist dieses leidige Thema kurz und bündig erläutert.

Zu deinem Zählerproblem.
Zähle am besten die Impulse, bis du 1kWh zusammen hast und incrementiere dann einen möglichst breiten Integerwert (LInt, DInt). Dann hast du mit den Rundungsfehler bei der Strichrechnung mit Realzahlen garantiert keine Probleme.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Onkel D,

Danke für Deine Schnelle Antwort.


Hatte dort nochmals gesucht und mit den Stichworten „Genauigkeit, Gleitpunktzahlen“ noch ein ähnliches Problem dem meinem gefunden.


Habe jetzt verstanden, dass das ein Rundungsproblem ist was besonders Problematisch ist, wenn man große Zahlen mit kleinen Addiert. Was ich noch nicht ganz verstehe ist, dass das bereits bei so „kleinen“ Zahlen auftritt die nicht an das Maximum der Auflösung eines REAL Wertes heranreichen.

Wie z.B. in meinem Video: Das 0,05 + 0,0025 = 0,05250001 ist und nicht 0,0525


Was mir durch die Recherche klar wurde ist, dass es hier wesentlich besser ist mit INT Werten zu arbeiten.
Aber wofür benötigt man dann überhaupt REAL Werte??
Benutzt Du noch REAL Werte in deinen Programmen?


Danke nochmals für die Hilfe und ein schönes Wochenende!
 
Aber wofür benötigt man dann überhaupt REAL Werte??
Deswegen:
Gleitpunkt wird in meinen Augen total überbewertet.
Ein INT ist genauer als ein 16Bit Real.
Ein DINT ist genauer als ein 32Bit Real.

Ein Gleitkommawert ist einfacher zu händeln als ein Ganzzahlwert plus manuelle Kommaverschiebung, aber dafür etwas ungenauer. Nicht mehr und nicht weniger.


Benutzt Du noch REAL Werte in deinen Programmen?
Ja, wenn REAL wirklich besser geeignet ist als (D)INT.
Das hängt aber meistens nicht am Komma, welches man oft nur in der Visualisierung verschieben muss.
 
Man kann auch, sofern die Steuerung es unterstützt, auf 64bit LREAL wechseln, die Genauigkeit nimmt dadurch stark. Das grundlegende Problem verschwindet dadurch natürlich nicht.

Und das Problem tritt auch immer nur beim Verrechnen von sehr unterschiedlich großen Zahlen in Erscheinung. Auch beim Vergleichen muss man aufpassen. Wenn du z.B. bei deinem Energiezähler darauf wartest, dass er genau 1000kWh erreicht, so kann es passieren, dass das nie passiert. beim Vergleichen von Fließkommazahlen sollte man immer mit einem Fenster arbeiten.

Aber im Allgemeinen würde ich erst einmal trotzdem erst einmal mit REAL rechnen, bei normalen physikalischen Größen und bei Reglern gibt es da doch meist kein Problem.
 
Zurück
Oben