Real -> Word

Cope

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Hab folgendes Problem:
(Standard- CPU 315/2DP & Step7-Version K5.3.3.0)

Ein Netzanalysator (als DP-Slave) liefert als Messwerte- über ProfibusDP- nur REAL- Zahlen. Insgesammt habe ich 175 solche Messwerte, die über einige SFC14 ("DPRD_DAT")- Aufrufe eingelesen und in einen Datrenbaustein geschoben werden müssen. Ziel ist ein bereits existierender Datenbaustein, in dem nicht mehr viel Platz und nur WORD- Variablen vorhanden sind. Der Datenbaustein überträgt sehr viele Daten an ein RS3- System, und sollte keinesfalls neu eingespielt werden. Ergo habe ich nicht die Möglichkeit, auf INT umzustellen.

Also:
Gibt es eine Möglichkeit, um REAL in WORD umzuwandeln?

Hilfe!!!

Cope.:confused:
 
Ein möglicher Befehl wäre RND+.
Der wandelt in eine Ganzzahl. Du musst dann nur aufpassen, dass du keinen Überlauf bekommst ...
Falls du aber die REAL-Funktionalität erhalten willst, dann gibt es keine Möglichkeit ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Deine REAL-Zahlen im INT-Bereich (–32 768 bis +32 767) liegt, sollte folgendes funktionieren:

Code:
      L     DB10.DBD    0               // REAL-Zahl
      RND   
      T     MD   100                    // DINT-Zahl
      L     MW   102                    // INT-Zahl
      T     DB12.DBW    0

Gruß Kai
 
Vorzeichenbit ist verschwunden

Wenn Deine REAL-Zahlen im INT-Bereich (–32 768 bis +32 767) liegt, sollte folgendes funktionieren:

Code:
      L     DB10.DBD    0               // REAL-Zahl
      RND   
      T     MD   100                    // DINT-Zahl
[COLOR=red]U M100.7[/COLOR]
[COLOR=red]= M102.7[/COLOR]
      L     MW   102                    // INT-Zahl
      T     DB12.DBW    0
Hallo, das Vorzeichenbit steht bei DINT im Bit15 !
 
warum sollst du den db nicht neu einspielen können?

sind darin parameter die ansonsten überschrieben werden?
damit musst du auch rechnen wenn dir die cpu stirbt.

deshalb bei backups immer die aktuellen db werte im projekt speichern.
wenn vorher keine gepfuscht hat, dann sagt dein bausteinvergleich das im db nur einige werte verschieden sind.

dann im projekt den online-partner offnen (nicht erreichbare teilnehmer!!!) der butto für den online partner ist weiter rechts.

den db rechts anklicken, kopieren und im richtigen projekt einfügen und überschreiben.

wenn vorher keiner gepfuscht hatte und die variablentypen gleich waren hast du im projekt einen db mit symbolik und den aktuellen werten aus der sps.


aber auch wenn das nicht hinhaut, dann mach dir deinen wunsch db, wenn er fertig ist, dann kopier die daten mit einem profisorischen sfc20 hinein, lösche den alten und benenne den neuen um...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Werner,

das Vorzeichenbit ist nicht verschwunden, mein Programmcode funktioniert auch ohne Deine Ergänzung. :)

Code:
      L     DB10.DBD    0               // REAL-Zahl
      RND   
      T     MD   100                    // DINT-Zahl
      L     MW   102                    // INT-Zahl
      T     DB12.DBW    0

Gruß Kai
 

Anhänge

  • VAT_1.jpg
    VAT_1.jpg
    173,1 KB · Aufrufe: 39
  • VAT_2.jpg
    VAT_2.jpg
    172,4 KB · Aufrufe: 26
  • VAT_3.jpg
    VAT_3.jpg
    174,2 KB · Aufrufe: 19
  • VAT_4.jpg
    VAT_4.jpg
    175,6 KB · Aufrufe: 17
  • VAT_5.jpg
    VAT_5.jpg
    175,6 KB · Aufrufe: 18
Zuletzt bearbeitet:
... das Vorzeichenbit ist nicht verschwunden, mein Programmcode funktioniert auch ohne Deine Ergänzung ...

Genau, weil nämlich (vorausgesetzt der Wertebereich passt) immer alle "vorderen" Bits bei einer negativen Zahl gesetzt sind.

Es hätte sogar auch funktioniert :
L DB10.DBD 0 // REAL-Zahl
RND
L w#16#FFFF
UW
T DB12.DBW 0
 
Es geht auch noch kürzer: :)

Code:
      L     DB10.DBD    0               // Gleitpunktzahl (32 Bit)
      RND   
      T     DB12.DBW    0               // Ganzzahl (16 Bit)

Gruß Kai
 

Anhänge

  • VAT_20.jpg
    VAT_20.jpg
    152,1 KB · Aufrufe: 13
  • VAT_21.jpg
    VAT_21.jpg
    158 KB · Aufrufe: 9
  • VAT_22.jpg
    VAT_22.jpg
    154,7 KB · Aufrufe: 7
  • VAT_23.jpg
    VAT_23.jpg
    155,4 KB · Aufrufe: 7
  • VAT_24.jpg
    VAT_24.jpg
    155 KB · Aufrufe: 9
Zuviel Werbung?
-> Hier kostenlos registrieren
Oder in Typecast ST/SCL:

Code:
myINT := REAL_TO_INT(myReal);

Auch hier ist es wichtig das der Wertebereich von myReal zwischen –32768 und +32767 liegt
 
32770

Hallo,
das Problem mit dem Vorzeichen wird bei positivem Überlauf ernst.
Dann ist 100,01% plötzlich negativ! Deswegen muß jeder Überlauf irgendwie abgefangen werden.
 
das Problem mit dem Vorzeichen wird bei positivem Überlauf ernst.Dann ist 100,01% plötzlich negativ! Deswegen muß jeder Überlauf irgendwie abgefangen werden.

Es gibt ein Problem bei positivem und negativem Überlauf. :idea:

Code:
      L     DB10.DBD    0               // Gleitpunktzahl (32 Bit)
      RND                               // Runden zur Ganzzahl
      T     DB12.DBW    0               // Ganzzahl (16 Bit)

Code:
Gleitpunktzahl (32 Bit)  =>  Ganzzahl (16 Bit)
 
                  32767  =>    32767
 
[COLOR=red]                  32768  =>  - 32768[/COLOR]
 
                - 32768  =>  - 32768
 
[COLOR=red]                - 32769  =>    32767[/COLOR]

Gruß Kai
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Pruefung is Pflicht

Hallo,

die Vorzeichenpruefung ist grundsaetzlich Pflicht. Gerade bei Typenwandlung von einem Datentyp mit groesseren Wertebereich zu kleineren Wertebereich muss der Bereich geprueft werden (selbst wenn die zu erwartenden Werte nicht die Grenzen ueberschreiten sollten), da es immer zu nicht bedachten Fehlern kommen kann, immerhin sind wir alle nur Menschen und die Kiste macht immer nur exakt was ihr gesagt wird. Es ist nur minimaler Arbeitsaufwand und kann euch schnell ein paar tausend Euro sparen.
Gerade Programmmieranfaenger sollten imme wieder auf solche Sachen hingewiesen werden.

Gruss Mathias
 
Zurück
Oben