TIA Zahlen umwandeln ...

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,

ich möchte gerne eine DINT-Zahl mit einer Realzahl multiplizieren und das Ergebnis runden.

Beispiel:

Die Zahl 97650 soll mit 0,001 multipliziert werden, um als Ergebnis 97,7 zu erhalten.

Wie gehe ich hier am besten vor - zuerst die Ganzzahl wandeln und dann mit der Realzahl multiplizieren und runden? :confused:

Lieben Dank ...
 
Hi,

eigentlich ganz einfach:

L 97650 // DINT
DTR // Double to Real
L 0,001 // Faktor
*R // Multiplikation
RND // Runden
T MD10 // Transferie irgendwo hin (Format Real)




T
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

eigentlich ganz einfach:

L 97650 // DINT
DTR // Double to Real
L 0,001 // Faktor
*R // Multiplikation
RND // Runden
T MD10 // Transferie irgendwo hin (Format Real)

Danke Move,

so hatte ich es eigentlich auch gemacht. Dann habe ich wohl in der Beobachtungstabelle einen Wurm drin ...

Ich hatte hier Dezimal eingestellt; das ist dann wohl falsch, oder?
 
eigentlich ganz einfach:
Ja, die Aufgabe klingt zunächst sooo einfach ;)
Es sollte allerdings nicht 97 sondern 97,7 rauskommen - also runden auf 1 Nachkommastelle --> das geht so nicht. Genau genommen geht das wegen der ungenauen Darstellung von REAL-Zahlen sogar manchmal gar nicht. :cool:

Ist der Multiplikator immer 0.001? Dann könnte man abgekürzt so umrechnen: zunächst 50 addieren (für das Runden der letzten Ziffer), dann durch 100 teilen (unerwünschte Ziffern abschneiden), dann in REAL wandeln und danach durch 10.0 teilen. Doch bei der Division durch 10.0 kann es passieren, daß nicht x.7 sondern z.B. x.6993 rauskommt.

Harald
 
Ja, die Aufgabe klingt zunächst sooo einfach ;)
Es sollte allerdings nicht 97 sondern 97,7 rauskommen - also runden auf 1 Nachkommastelle --> das geht so nicht. Genau genommen geht das wegen der ungenauen Darstellung von REAL-Zahlen sogar manchmal gar nicht. :cool:

Ist der Multiplikator immer 0.001? Dann könnte man abgekürzt so umrechnen: zunächst 50 addieren (für das Runden der letzten Ziffer), dann durch 100 teilen (unerwünschte Ziffern abschneiden), dann in REAL wandeln und danach durch 10.0 teilen. Doch bei der Division durch 10.0 kann es passieren, daß nicht x.7 sondern z.B. x.6993 rauskommt.

Harald

Hi Harald,

vielleicht noch etwas mehr Erklärungen zu dieser "leichten" Aufgabe ... :p

Es handelt sich im Grunde um die Positionsangabe eines ServoMotors. Dieser verfährt von 0mm bis max. 300mm. Anstatt 300 wird in dem DB des zugehörigen FB's jedoch 30000 angezeigt, was auch im System NICHT umgestellt werden kann!

Die Positionsangabe soll auf einem Display normiert dargestellt werden; eben max. zweistellig mit einer Nachkommastelle - entsprechend auf- oder abgerundet ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Spirit,

nach dem multipliziert der Zahl 97650 mit 0,001 und anschließend runden auf einen Kommastelle ergibt 97,6. Der Befehl ROUND vom TIA macht das korrekt.

Im Bild ist ein Beispiel zu sehen.

HaraldRound.jpg
 
... Dieser verfährt von 0mm bis max. 300mm. Anstatt 300 wird in dem DB des zugehörigen FB's jedoch 30000 angezeigt, was auch im System NICHT umgestellt werden kann!

Die Positionsangabe soll auf einem Display normiert dargestellt werden; eben max. zweistellig mit einer Nachkommastelle - entsprechend auf- oder abgerundet ...
Wäre da nicht die Skalierung des Wertes im HMI und die Verschiebung des Kommas in der Anzeige an die richtige Stelle auch völlig ausreichend?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wäre da nicht die Skalierung des Wertes im HMI und die Verschiebung des Kommas in der Anzeige an die richtige Stelle auch völlig ausreichend?

Hallo hucki,

hm - es soll allerdings auch mit diesen "skalierten Werten" in der Schrittkette gearbeitet werden ... würde das dann trotzdem funktionieren?

Wie verschiebe ich denn das Komma?
 
Ich würde da schon mal auf keinen Fall mit Real zahlen Arbeiten, positionier Aufgaben
immer in Integer Format. Ehrlich gesagt würde ich mir einfach merken das ich mit
2 Nachkommastellen arbeite. Meistens kann man die Scalierung auch im Umrichter
einstellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hm - es soll allerdings auch mit diesen "skalierten Werten" in der Schrittkette gearbeitet werden ... würde das dann trotzdem funktionieren?
Nein, natürlich nicht.

In der SPS sind ja auf diesem Weg nur die Originaldaten vorhanden.
Kommt halt darauf an, ob die Schrittkette auch mit diesen arbeiten kann?
(Bis dato war ja nur von der Anzeige die Rede.)




Wie verschiebe ich denn das Komma?
In den allgemeinen Eigenschaften eines EA-Felds gibt's beim Format eine Angabe zu den Dezimalstellen.
Z.B. für den INT eines PT100 (TIA):
Dezimalstelle markiert.jpg

Gab's auch schon bei WinCC flex:
WinCC flex - Dezimalpunkt verschieben.jpg

So brauchen (D)INT nicht extra in Real umgerechnet werden.
;)
 
Zuletzt bearbeitet:
In der SPS sind ja auf diesem Weg nur die Originaldaten vorhanden.
Kommt halt darauf an, ob die Schrittkette auch mit diesen arbeiten kann?
(Bis dato war ja nur von der Anzeige die Rede.)


Gab's auch schon bei WinCC flex:
Anhang anzeigen 36015

So brauchen (D)INT nicht extra in Real umgerechnet werden.
;)

Lieben Dank!

... bin zur Besinnung gekommen und mache es nun so - wie schon von rN vorgeschlagen - dass ich mit den DINT-Werten rechne. :p

Und zur Darstellung auf dem Display wähle ich den Weg über Skalieren und Verschieben des Kommas.
 
Zurück
Oben