Simatic Prozent 0-100%

Anaconda55

Level-1
Beiträge
301
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ich habe einen DInt.

Ich gebe einen wert in Prozent vor von 0 bis 100. Danach soll sich DInt anpassen.


Sprich wenn DINt 4545 ist und ein Wert DInt 100 vorgegeben ist soll er 4545 transferieren. Wenn 5 vorgegeben wird soll er 5% von 4545 ausgeben.

Vielen Dank.
 
Hallo,

100% = 4545
1% = 454,5 (= 4545 / 100)
5% = 2272,5

Code:
      L     #X                          //Eingabewert 0..100% DINT
      DTR   
      L     4.545000e+002
      *R    
      RND   
      T     #Y                          //Ausgabewert 0..4545 DINT

#X ist der Eingabewert von 0..100% und #Y der Ausgabewert von 0 bis 4545 als DINT.

Gruss Daniel
 
Code:
L #Wert100Proz // Wert bei 100 Prozent
DTR            // Als Real behandeln
L 100.0  
/R             // Ein Prozent ausrechnen
L #X           // Gewünschte Prozentzahl ..
DTR            // .. auch als Real behandeln
*R             // Wert ausrechen
RND            // In DInt wandeln
T #Y           // und zurückgeben
 
Ja dann Rainer doch schon fast alles berücksichtigt. Du brauchst doch nur noch die 100 % Angabe in eine Variable ändern!
 
Kann es sein, dass du vielleicht aus dem Wertebereich für DINT (+/- 2.000.000.000 und 'nen Keks) herausläufst ? Das sieht für mich fast so aus ...
 
Denk dir einfach, der gegebene "100%-Wert" sei schon mit 100 multipliziert.

Also: x1 =4545 = 100%
Ein Prozent davon wäre 45,45. Das ist natürlich im Dint nicht darstellbar,
daher denkst Du einfach, 4545 wäre schon ein Prozent, also hast du insgeheim schon mit 100 multipliziert.

Jetzt willst du wissen, wieviel 17% von deiner Größe sind.
Du multiplizierst also das eine Prozent mit 17 und schon hast du fast den richtigen Wert, du musst nur noch durch 100 teilen. Dabei gehen Nachkommastellen verloren.

Und da der Jochen schneller war, entschuldige ich hiermit für die wohl überflüssige Erläuterung. :)


Nachtrag: Die 150 Millionen sind etwas hart an der Grenze vom Dint-Bereich, ich hoffe das war nur ein Testwert.
 
Zuletzt bearbeitet:
Denk dir einfach, der gegebene "100%-Wert" sei schon mit 100 multipliziert.

Also: x1 =4545 = 100%
Ein Prozent davon wäre 45,45. Das ist natürlich im Dint nicht darstellbar,
daher denkst Du einfach, 4545 wäre schon ein Prozent, also hast du insgeheim schon mit 100 multipliziert.

Jetzt willst du wissen, wieviel 17% von deiner Größe sind.
Du multiplizierst also das eine Prozent mit 17 und schon hast du fast den richtigen Wert, du musst nur noch durch 100 teilen. Dabei gehen Nachkommastellen verloren.

Und da der Jochen schneller war, entschuldige ich hiermit für die wohl überflüssige Erläuterung. :)


Nachtrag: Die 150 Millionen sind etwas hart an der Grenze vom Dint-Bereich, ich hoffe das war nur ein Testwert.

Warum normierst du den Bereich nicht einfach um? (zB: X : 100.000, wenn du mit ganzzahligen % arbeitest kommt das auf die letzten Stellen eh nicht an)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nachtrag: Die 150 Millionen sind etwas hart an der Grenze vom Dint-Bereich, ich hoffe das war nur ein Testwert.
Wenn als erstes diese Zahl dividiert wird, haben wir noch über den Faktor 14 Luft bis zum Limit. Dies ist meiner Meinung nach eine ausreichende Sicherheit. Ich gehe davon aus, dass die Datentypen etwas durcheinandergewürfelt wurden. Aber das sehen wir ja, wenn vielleicht mal der Code eingestellt wird.
 
Also so läuft es nun:

L DBD [AR1,P#4.0] // hole Ziel-Geschw.
L 100
/R
L #Override
*R
T #Geschwindigkeit // und zurückgeben
 
Zurück
Oben