jaja, die ganzen Zahlenformate, bitte um rat

Flo-1-

Level-1
Beiträge
53
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo, schöne weihnachtsfeiertage erstmal.

also, ich bastel hier gerade an einer bandsteuerung, und ich habe die arithmetik für so was noch nie gemacht. ich habe auch schon gegoogelt, allerdings nichts ordentliches gefunden.

ich habe eine geschwindigkeitsvorgabe INT 0...1000
ich muss ein vom bediener eingestellten aufschlag dazu addieren und ausgeben. der aufschlag wird in 0,00...100,00 % skalliert.

also muss ich mir meinen sollwert von INT auf REAL umwandeln, um ihn mit dem Realwert aus dem OP zu verrechnen. das rechnen is alles nicht das problem, aber wie gekomme ich die REAL wieder in INT zurück? über STRUNC und dann von DINT in BCD und dann von BCD in INT? das kann es doch nicht sein oder? ich habe auch schon gedacht, ich nehme mir von dem DINT-wert die letzten 2 byte, da hätt ich doch auch den wert allerdings ohne vorzeichen, oder?

arbeite im step 7 v5.3 das ganze soll auf ner 315-2dp ablaufen

ich habe heir auch das buch von hans berger liegen, allerdings hat er im kapittel 12 = umwandlungsfunktionen eine schöne skizze, was es alles für umwandlungsfunktionen gibt. allerdingskeine möglichkeit von dint ->int?

ich hatte auch schonmal mit

L Realwert
RND
T int

da bekomm ich 365 anstatt 859 raus

danke für die bemühungen im vorraus, mfg, flo
 
Zuletzt bearbeitet:
Wenn sich die DINT im Bereich zwischen -32768 und +32767 befindet, kann einfach das niederwertige Wort verwendet werden. Das Vorzeichen ist da automatisch mit dabei. Wenn dieser Bereich überschritten wird, dann liegt sowieso ein Problem vor.
Wie sieht denn die komplette Sequenz incl. der verwendeten Werte und Zahlenformate bis jetzt aus? Was schreibt denn das OP für Werte, wirklich Real oder z.B. Proz * 100 (d.h. 10000 für 100%) als Int? Wenn die geforderte Genauigkeit sowieso nur 0 .. 1000 ist, haben die 0,01% keine Auswirkung. 0,1% Genauigkeit genügt dann.
Wenn Real vorliegt:
Code:
L Proz
L 10.0
*R
RND
L Geschw
+I
Jetzt sollte der neue Wert im Akku stehen. Es muss jetzt noch eine Bereichsprüfung stattfinden, damit dieser nicht größer als 1000 oder kleiner als 0 ist (vermute ich mal).
 
Fürs wandeln von Real auf INT gibt es doch auch die Funktion "Round" oder ?

Rundet die Kommastellen einfach auf oder ab und gibt die Realzahl als Integer aus.....wenn ich mich nicht ganz irre !

EDIT: Sorry steht ja eh schon da ,nur hab ichs halt überlesen ;-)
 
Moin,

habe gerade euer Thema verfolgt. Ich habe es bis jetzt auch immer so gemacht, wie in der 1 Frage beschrieben.

....." Real --> Dint --> BCD --> INT "

Ist diese Umrechnung falsch, oder einfach nur lang und umständlich ???

Gruss Daniel
 
Moin,

habe gerade euer Thema verfolgt. Ich habe es bis jetzt auch immer so gemacht, wie in der 1 Frage beschrieben.

....." Real --> Dint --> BCD --> INT "

Ist diese Umrechnung falsch, oder einfach nur lang und umständlich ???

Gruss Daniel
Wenn sie richtig durchgeführt wird, liefert sie schon das richtige Ergebnis. Sie ist aber auf jeden Fall umständlich. Wenn der Wertebereich eingehalten wird, genügt Real --> Dint (Int stimmt dann implizit).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn sie richtig durchgeführt wird, liefert sie schon das richtige Ergebnis. ....

genau so ist es.
das ergebnis liegt immer rechtsbündig im akku.

nehmen wir an du hast 2 var vom typ dint mit dem wert 90 und 100

nun rechnest du
l var90
l var100
*D
T mw 100

das ist kein problem, da das ergebnis 9000 ist. 9000 passt locker in ein wort.
 
aber hat das einen grund das siemens den umwandlungsbaustein von dint in int nicht vorgibt? weil andersrum exestiert er ja, von int in dint.

denn da könnte man ja das gleiche argument bringen, da ich ja in int bis 32... gehen kann, und wenn ich dint will, häng ich einfach nen leeres word davor.

mfg
 
Es ist ganz einfach: wenn eine Int in Dint konvertiert wird, dann muss das Vorzeichen erweitert werden. D.h. es müssen die Bits 31 - 16 auf den Wert des Vorzeichenbits Bit 15 gesetzt werden. Dies ist bei einer negative Zahl 1 und bei einer positiven Zahl 0. Bei der Konvertierung von Dint nach Int genügt es, wenn das höherwertige Wort eingfach ignoriert wird. Bedingung: Der Wertebereich von -32768 bis +32767 wird nicht überschritten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
aber hat das einen grund das siemens den umwandlungsbaustein von dint in int nicht vorgibt? weil andersrum exestiert er ja, von int in dint.

denn da könnte man ja das gleiche argument bringen, da ich ja in int bis 32... gehen kann, und wenn ich dint will, häng ich einfach nen leeres word davor.

mfg
Dummerchen.
Das "leere Wort" hängt ja automatisch davor, wenn du ein INT lädst.
der Akku ist ja 32Bit (allso DINT) breit !
 
Zurück
Oben