Sonstiges Berechnungen mit hoher Genauigkeit (REAL)

wellenbrecher

Level-1
Beiträge
25
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss mit einer S7-315-2 (TIA-Portal) komplexe Formeln berechnen. Die genutzten Konstanten müssen die geforderte Genauigkeit haben, da sonst das Endergebniss zu stark verfälscht wird. Hier mal eine Teilaufgabe:

#ZW1 := 5.76342848E-21;
#ZW2 := 60000.0;
#ZW3 := -9.7207386E-16;

#ZW4:=#ZW3*#ZW2**3+#ZW1*#ZW2**4;

Ich habe mir schon die Bausteine von Siemens angeschaut, aber weiß nicht so richtig, wie ich damit rechnen kann.
(https://support.industry.siemens.co...-300400-cpu-verarbeitet-werden?dti=0&lc=de-WW)

Gibt es eine Möglichkeit mit einer so hohen Genauigkeit zu rechnen?

Vielen Dank.
 
Wie genau ist für dich denn "hohe Genauigkeit"?

Woher kommen in einer SPS so kleine Zahlen wie von dir genannt? Sind das Konstanten, oder werden diese in der SPS berechnet? Vielleicht lässt sich davon etwas vorberechnen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja das sind Konstanten. Den genauen physikalischen Prozess und die Formel verstehe ich auch nicht so wirklich. Ich muss sie ja auch "nur" anwenden. Die Konstante 5.76342848E-21 ist glaub ich die wichtigste und darf nicht gerundet werden. Die wird auch schon bei der Eingabe bzw. Zuweisung gerundet.
 
Vielleicht die Zehlen mit diesen kleinen Werten mal mit höherer Genauigkeit in dein Dint bringen.
Den Rest dann auch alles in vernünftige Dint Bereiche bringen und in Dint rechnen.

Hier solltest du durch entsrechende Faktoren dafür sorgen dass keine negativen Zahlen auftreten können.

Real ist ja nicht bekannt für große Genauigkeit!
 
Hallo,

wenn ich Deine Formel richtig verstehe, ist das Ergebnis eine Konstante.
Warum muss diese in einer SPS berechnet werden?

Es ist durchaus möglich, mithilfe von 32bit Integer (oder auch nur 8 oder 16bit Integer)
Arithmetik eine floating point Arithmetik mit 32bit oder 64bit oder falls notwendig auch
mehr Genauigkeit zu bauen. Das ist aber sehr aufwändig.
Es gibt (oder gab mal) auch double precision math auf Basis z.B. Z80 oder 6502.

mfg
Erdmann
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja das sind Konstanten. Den genauen physikalischen Prozess und die Formel verstehe ich auch nicht so wirklich. Ich muss sie ja auch "nur" anwenden. Die Konstante 5.76342848E-21 ist glaub ich die wichtigste und darf nicht gerundet werden. Die wird auch schon bei der Eingabe bzw. Zuweisung gerundet.

Überschlagsweise kommt doch irgendwas mit 0,x raus. Evtl. reicht da die Genauigkeit aus. Also erstmal Taschenrechner raus und nachrechnen.
Formel nicht verstehen zählt nicht. :p
 
Danke für die vielen Antworten. Nachgerechnet habe ich natürlich, mit Excel kommt ein genaueres Ergebnis raus. Das oben war ja nur eine Beispielrechnung, aber stimmt, evtl. kann ich die Konstanten außerhalb der SPS berechnen... da frag ich nochmal nach.

Wie meint ihr das mit "Werte mal mit höherer Genauigkeit in dein Dint bringen" bzw. "mithilfe von 32bit Integer (oder auch nur 8 oder 16bit Integer)
Arithmetik eine floating point Arithmetik ... zu bauen". Wie bringe ich z.B. 5.76342848E-21 in ein Dint?
 
In dem du die Kommastelle mit Faktoren so verschiebst, dass du die gewünschte Genauigkeit ohne Komma hast. Also bei deiner Zahl oben z Bsp. x10E29 dann konvertierst du die Zahl in ein DINT und kannst mit DINT rechnen, zum Schluss konvertierst du zurück in REAL und rechnest mit dem Faktor zurück. Du mußt halt mal ausprobieren wie du da hinkommst, da ja einmal 10E21 und einmal 10E16 vorkommt. Deswegen DINT da die Zahlen recht groß werden könnten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde das hier (und den zugehörigen Beitrag) Mal lesen: #37 Könnte schon die Lösung enthalten.

Außerdem steht in dem Thread, die Oscat-Lib hätte Funktionen dafür, also diese auch mal laden und in der zugehörigen PDF mit den Funktinsbeschreibungen danach suchen.
 
Wenn das 3 Konstanten sind, ist #Z4=-0,1352739206592, wenn ich mich nicht vertippt habe.
Wozu dann überhaupt in der SPS eine Konstante #Z4 ausrechnen?


PS: was ist denn das für ein Prozess? In Cern?
 
Hallo, nein es ist keine Konstante, ist nur ein Teil der Gleichung. Es ist npoch viel komplizierter. Hab heute nochmal nachgefragt. Es soll ein Massendurchfluss berechnet werden. Dazu muss die Reynolds-Zahl mit Hilfe einer Zielwertsuche berechnet werden. Keine Ahnung wie das gehen soll :-(

Könnte ich das mit einer 1500er SPS genauer berechnen, da gibt es doch LREAL. Hab ich aber noch nie probiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
LREAL ist auf jeden Fall viel exakter als wenn du REAL verwendest (in der OSCAT Library gibts schon ähnliche Funktionen, welche mit einem Datentyp bestehend aus 2 Real Zahlen rechnet).

Bei REAL Zahlen hast du bei Additionen und Subtraktionen das Problem, dass sich die Zahlen nicht beliebig in der Grösse unterscheiden dürfen. Siemens gibt eine Genauigkeit von 6 Stellen nach dem Komma an.

Als kleines Beispiel:

Beispiel: Der Zahl 400000 soll 0.2 addiert werden. 400 000 hat einen Exponenten von 18 --> 2[SUP]18[/SUP] * 2[SUP]-23[/SUP] *0.5 = 1/64 = 0.015625 für den maximalen Fehler, --> 7.8125%

Bei einer 64Bit Real-Zahl wäre der Fehler in diesem Beispiel bei ca. 1.455e-10 %.


Den grösst möglichen Fehler berechne ich jeweils anhand des kleinstwertigen Bit und des Exponenten. Dazu multipliziere ich die den Exponenten mit dem kleinstwertigsten Bit und erhalte die kleinste mögliche Änderung dieser Realzahl.

Um den Exponenten zu bestimmen, findest du via Google genügend Tools oder Herleitungen, wie du dies selber berechnen kannst. z.B. http://www.binaryconvert.com/convert_float.html?hexadecimal=4B189680
 
in #3 schreibst Du:
"Ja das sind Konstanten. Den genauen physikalischen Prozess und die Formel verstehe ich auch nicht so wirklich. Ich muss sie ja auch "nur" anwenden. Die Konstante 5.76342848E-21 ist glaub ich die wichtigste...."

Jetzt, dass es keine sind, also was nun?
Hallo, nein es ist keine Konstante,...

Du solltest Dir lieber die Aufgabenstellung genauer erklären lassen, und noch besser, diese hier posten. Ich bin sicher Dir wird geholfen werden.
Für mich schauen diese Zahlen von Ihrer Größenordnung sehr verdächtig seltsam aus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dazu muss die Reynolds-Zahl mit Hilfe einer Zielwertsuche berechnet werden

1. Verstehst du den Algorithmus für die Zielwertsuche der Reynolds-Zahl?
2. Hast du jemanden der dir den Algorithmus e
rklären und noch wichtiger verifizieren kann
3. Gibt es möglicherweise in C/C++/C#/VB/MatLab/etc. ein Beispiel bei euch das portiert werden könnte?

4. Zielwertsuche hört sich nach Newton-Verfahren oder sowas an? => Achtung mit numerischen Problemen
5. das könnte alles sehr(zu) lange auf der SPS rechnen - was sind deine Zeitvorgaben zur Findung der Zahl?
6. Du brauchst verifizierte Beispiele um deinen Implementation zu prüfen
7. Du solltest erstmal auf dem PC ein Testprogramm (C, VB, C#,...) dafür schreiben - in der SPS sind deine Analysemöglichkeiten zu beschränkt
 
Zuletzt bearbeitet:
Zielwertsuche kann im einfachsten Fall eine simple For-Next-Schleife sein.
Kann aber auch Regula Falsi oder Newton-Raphson sein[FONT=Tahoma, FreeSans, Verdana, sans-serif].
Und dann wird es lustig auf der SPS.
[/FONT]
 
Zurück
Oben