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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo zusammen
Ich habe ein kleines Problem. ich würde gerne im CoDeSys 2,36^4,25 berechnen. Normalerweise noch nicht so dramatisch.
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
Hi
Hat deine Steuerung überhaupt LREAL ?
Schau dir doch mal w www.OSCAT.DE w an.
Danke für die schnelle Antwort
Ich verwende den Baustein nachher mit einem Beckhoff CX9010. Dieser verträgt LREAL.
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
Hi
O.K.
?
OSCAT V3.20 Dokumentation --> Seite 93.
Hi
O.K. --> Wandeln in LREAL
Ist die Genauigkeit den notwendig.
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 ?
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
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
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