Real nach Integer wandeln

paula23

Level-2
Beiträge
235
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab schon viel gelesen, aber irgendwie war nicht das dabei was ich brauche. Meine CPU 315 bekommt über Bus Reale Werte, super musste ich nichts mehr tun, aber nun will das übergeordnete Leitsystem die Werte als Integer ( +32..... - -32......)

Wäre super wenn mir jemand helfen könnte.

Danke, Alex
 
Mit dem Befehl ROUND in STL (aber auch unter KOP und FUP zu finden) kannst Du Dein Real in ein DINT umrunden. Mit TRUNC kriegst Du den Ganzzahl Teil als DINT, meistens wird ROUND wahrscheinlich die bessere Wahl sein. Es gibt auch die CEIL und FLOOR Befehle, die die nächst höhere liegende bzw. nächst niedrigere Ganzzahl liefert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry ich habs noch nicht ganz, von Real nach DINT das ist verständlich aber dann weiter nach INT. Ich muss mich ja auch irgendwie auf min und max Werte beziehen um ein gescheites Verhältnis zu bekommen.

Danke, Alex
 
Hallo Alex,

in MD 10 ist der Real- Wert, in MW 20 der Int- Wert.
Zu beachten ist, dass der Real- Wert nicht den Max- Wert von 32767 überschreitet.

L MD 10
RND
T MW 20
 
real to int

Hi RMA war schneller 8)

Beispiel um den REAL-Wert auf den Double-Integer zu runden

Beispiel in AWL:

L MD 10
RND
T MD 14

Beispiel in SCL:

X1: REAL
X2: DINT
X2:=REAL_TO_DINT(X1)

Beispiel um den REAL-Wert auf den Double-Integer zu wandeln
Die Operation TRUNC wandelt eine Gleitpunkzahl in eine Ganzpunktzahl (32 Bit) um.

Beispiel in AWL:

L MD 34
TRUNC
T MD 38


Beispiel in SCL: --> gibt es nicht !

Gruß speakingstick
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich probier es gerade mal aus. Also Ihr sagt den Wert runden und dann halt nur 16-bet auslesen anstatt 32-bit und dann kann ich den Wert 1 zu 1übernehmen ? Ich glaub ich könnte damit leben.
Aber die Jungs von der Leitwarte wollen Ihn doch bestimmt noch Scalen und das funktioniert doch dann nicht bzw. ist nicht nötig.

Danke, Gruss Alex
 
paula23 schrieb:
Ich probier es gerade mal aus. Also Ihr sagt den Wert runden und dann halt nur 16-bet auslesen anstatt 32-bit und dann kann ich den Wert 1 zu 1übernehmen ? Ich glaub ich könnte damit leben.
Nur wenn du weißt, daß dein real zwischen -32768.0 und 32767 liegt.
paula23 schrieb:
Aber die Jungs von der Leitwarte wollen Ihn doch bestimmt noch Scalen und das funktioniert doch dann nicht bzw. ist nicht nötig.
[/quote="paula23"]
Funktionieren tut es immer noch, aber es ist ziemlich idiotisch. Noch idiotischer wird es, wenn du Genauigkeit verlierst. Beispiel: Du kriegst Werte, von, sagen wir einem Amperemet, 0.0 bis 100.0 A mit einer Kommastelle. Die 1. Bedingung ist erfüllt. Aber aus 55.6 A werden dann halt 55 A (trunc) oder 56 A (round). In so einem Fall solltest du mit den "Jungs" vereinbaren, daß du mit 10.0 multiplizierst (vor dem trunc) und sie durch 10 teilen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Prinzipiell funktioniert es, sogar besser und einfacher als ich dachte.
Aber wie schon richtig erwähnt, ich unterschlage die Kommastellen und ich habe ein paar Mengen wo ich Durchfluss kumuliere und reichen keine 32...

Ich glaub ich muss den Theoretikern die das angestiftet haben mal auf den Fuß treten.

Alex
 
Wenn man von einem DINT nur 16 bit nutzt und negative Zahlen hat fehlt das Vorzeichenbit welches bei einem DINT das 32te Bit und bei einem INT das 16te Bit ist. Darum musst Du wenn du negative Zahlen hast noch den wert wandeln bzw. das Vorzeichenbit umkopieren.
 
Zurück
Oben