Expt Funktion für lreal??

Sascha
2010-01-05
2010-01-11
  • Sascha - 2010-01-05

    Hallo zusammen

    Ich habe ein kleines Problem. ich würde gerne im CoDeSys 2,36^4,25 berechnen. Normalerweise noch nicht so dramatisch.

    rPower := EXPT(rExponent,rBase);
    

    Nun hätte ich aber als Ergebnis gerne ein LREAL. Die Eingabeparameter können auch LREAL's sein. Hat irgendjemand einen Baustein geschrieben, mit dem das Möglich ist? Oder habe ich eine andere Möglichkeit diese Rechnung durchzuführen mit LREAL's?

    Gruß Sascha

     
  • gravieren - 2010-01-05

    Hi

    Hat deine Steuerung überhaupt LREAL ?

    Schau dir doch mal w www.OSCAT.DE w an.

     
  • Sascha - 2010-01-05

    Danke für die schnelle Antwort

    gravieren hat geschrieben:
    Hi
    Hat deine Steuerung überhaupt LREAL ?

    Ich verwende den Baustein nachher mit einem Beckhoff CX9010. Dieser verträgt LREAL.

    gravieren hat geschrieben:
    Schau dir doch mal w www.OSCAT.DE w an.

    Auch da habe ich schon rein geschaut. Leider habe ich da auch nur Funktionen mit REAL gefunden. Ich habe auch schon versucht mir selber einen Baustein zu schreiben, doch leider sind meine Mathekenntnisse am Anschlag gewesen . Wie lang die Berechnung dauert ist fast egal, da die Werte nur bei Änderungen von "aussen" (eingreifen eines Admins) neu berechnet werden müssen. Da kann man auch mal ein paar Sekunden verkraften theoretisch.

    Gruß Sascha

     
  • gravieren - 2010-01-05

    Hi

    Auch da habe ich schon rein geschaut.

    O.K.

    Leider habe ich da auch nur Funktionen mit REAL gefunden.

    ?

    OSCAT V3.20 Dokumentation --> Seite 93.

     
  • gravieren - 2010-01-05

    Hi

    Nun hätte ich aber als Ergebnis gerne ein LREAL.

    O.K. --> Wandeln in LREAL

    Ist die Genauigkeit den notwendig.

    Die Eingabeparameter können auch LREAL's sein.

    können oder müssen ?

    Ich babe mal 2.36 hoch 4.25 berechnen lassen (Wago 750-841)

    Ergebnis 38.44819

    Suche doch mal im Internet noch Ergebnissen.

    Vergleiche diese.

    http://www.chemie-master.de/FrameHandle ... =chem.calc

    Hier 38.44820000376124

    Ist es dir zu ungenau ?

     
  • Sascha - 2010-01-05

    Hallo Zusammen

    Ok mein Beispiel war vielleicht etwas flüchtig. Klar weiß ich, dass ich Zahlen von REAL in LREAL wandeln kann. Mir ist auch bekannt, dass REAL schon sehr genaue Werte liefert. Leider reicht mir die Genauigkeit nicht aus. Ich habe momentan einen Tiefpassfilter 6. Ordnung, der bei kleineren ungenauigkeiten instabil wird. Es reichen da schon ungenauigkeiten an 12. Nachkommastelle. Leider wird dieser Tiefpassfilter für die Anlage benötigt. Bis jetzt wurden einfach feste Werte hinterlegt um den Regler stabil zu halten. Nur will ich jetzt die Werte bei Änderungen der Parameter berechnen lassen um die ganze Anlage genauer zu bekommen. Es gibt zwar in der Oscat.lib die Funktionen REAL2, aber nur für die "normalen" Rechenoperationen (soweit ich gesehen habe) und die kann ich auch mit LREAL rechnen (+,-,*,/).

    Aber danke trotzdem für eure Hilfe.

    Gruß Sascha

     
  • Rolf-Geisler - 2010-01-05

    Hi,

    ist halt leider so, dass das Potenzieren und Logarithmieren in CoDeSys nur ein REAL liefern, und das bietet nur 6 verläßliche Stellen der Ziffernfolge. LREAL ist daher schon richtig für hohe Genauigkeit. Nicht umsonst bieten die PC-Programmiersprachen schon seit Jahren Double Precision ...

    Für Dein Problem bleibt Dir wahrscheinlich nur, den Exponent über einen Umweg zu berechnen: natürlichen Logarithmus der Basis mit dem Exponent multiplizieren, und das ganze wieder zurückwandeln über e^Multiplikationsergebnis.

    Für den natürlichen Logarithmus und e^x gibt es Exponentialreihen, die man in LREAL ausprogrammieren kann. Sie arbeiten nur noch mit ganzzahligen Potenzen und sind damit relativ leicht zu handhaben.

    Du musst die Berechnung in einer Schleife laufen lassen und nach jedem Durchlauf prüfen, ob die gewünschte Genauigkeit schon erreicht ist. Das ist für mich aber schon zu lange her, kann nicht mehr sagen, wie das Abbruchkriterium auszusehen hat. Das Internet hilft dazu vielleicht weiter.

    Hoffe, der Ansatz ist für Dich praktikabel.

    Gruss Rolf

     
  • Sascha - 2010-01-11

    Rolf_Geisler hat geschrieben:
    Für Dein Problem bleibt Dir wahrscheinlich nur, den Exponent über einen Umweg zu berechnen: natürlichen Logarithmus der Basis mit dem Exponent multiplizieren, und das ganze wieder zurückwandeln über e^Multiplikationsergebnis.
    Für den natürlichen Logarithmus und e^x gibt es Exponentialreihen, die man in LREAL ausprogrammieren kann. Sie arbeiten nur noch mit ganzzahligen Potenzen und sind damit relativ leicht zu handhaben.
    Du musst die Berechnung in einer Schleife laufen lassen und nach jedem Durchlauf prüfen, ob die gewünschte Genauigkeit schon erreicht ist. Das ist für mich aber schon zu lange her, kann nicht mehr sagen, wie das Abbruchkriterium auszusehen hat. Das Internet hilft dazu vielleicht weiter.
    Hoffe, der Ansatz ist für Dich praktikabel.
    Gruss Rolf

    Hallo Rolf

    Das ist ziemlich genau das, was ich suchte. Vielen dank für deinen Lösungsansatz. Ich hoffe ich bekomme dadurch die Berechnung hin.

    Gruß Sascha

     

Log in to post a comment.