Byteweise auslesen von DINT-Werten

schneijo

Level-2
Beiträge
69
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

mir werden über die Profibusschnittstelle von einem Gerät Werte im DINT-Format in einem Datenbaustein zur Verfügung gestellt.

Leider kann ich die Werte nicht direkt weiterverarbeiten, da ich sie im Wort- bzw. im Unsigned-INT-Format bräuchte.

Kann mir jemand sagen, wie ich mir die untersten zwei Byte aus den DINT-Werten rausnehme?

Vielen Dank

Grüße schneijo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du in AWL nicht so klar kommst, kannst du eine MOVE Box in KOP oder FUP benutzen.

Links: Rechts:

DINT WORD

Die Variabeln kannst du auch beide in den selben DATENBAUSTEIN schmeißen.
 
Hallo Harald,

vielen Dank für die schnelle Antwort ...

Wenn ich also den DINT-Wert lade und auf ein Wort schreibe fliegen automatisch die oberen beiden bytes weg.

Und der Rest stimmt dann?

Ich gehe hier über eine temporäre Variable. Passt das so?


L "Empfdaten".diIstleistung // DINT-Wert
T #wTemp1

L #wTemp1
T "12CF001".wDigitalsignal // Wort


VG schneijo
 
Wenn ich also den DINT-Wert lade und auf ein Wort schreibe fliegen automatisch die oberen beiden bytes weg.

Und der Rest stimmt dann?
Exakt

Ich gehe hier über eine temporäre Variable. Passt das so?


L "Empfdaten".diIstleistung // DINT-Wert
T #wTemp1

L #wTemp1
T "12CF001".wDigitalsignal // Wort
Ja, passt so. Die temporäre Variable kannste auch weglassen.

AWL ist mir lieber - da gibt es was zu lernen ...
AWL ist mir auch lieber, weil Text. AWL/Text kann man hier einfacher als Beispielcode bringen als KOP/FUP.
Am besten noch in einer CODE-Box mithilfe der
Code:
-Tags[/URL]. Da gehen sogar Einrückungen.
[CODE]
     L     "Empfdaten".diIstleistung        // DINT-Wert
     T     "12CF001".wDigitalsignal         // Wort

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der DINT-Wert zu groß für eine INT ist, kommt allerdings Mist dabei raus, also aufpassen oder vorher eine Wertebereichsprüfung machen!
 
F1 ---> Datentyp

WORD
(Wort)
16
Dualzahl

Hexadezimalzahl

BCD
Dezimalzahl ohne Vorzeichen
2#0 bis
2#1111_1111_1111_1111
W#16#0 bis W#16#FFFF

C#0 bis C#999
B#(0,0) bis B#(255,255)
L 2#0001_0000_0000_0000

L W#16#1000
L word#16#1000
L C#998
L B#(10,20)
L byte#(10,20)
DWORD
(Doppelwort)
32
Dualzahl


Hexadezimal-
zahl

Dezimalzahl ohne Vorzeichen
2#0 bis
2#1111_1111_1111_1111_
1111_1111_1111_1111
DW#16#0000_0000 bis DW#16#FFFF_FFFF
B#(0,0,0,0) bis
B#(255,255,255,255)
2#1000_0001_0001_1000_
1011_1011_0111_1111

L DW#16#00A2_1234
L dword#16#00A2_1234
L B#(1, 14, 100, 120)
L byte#(1,14,100,120)
INT
(Ganzzahl)
16
Dezimalzahl mit Vorzeichen
-32768 bis 32767
L 1
DINT
(Ganzzahl, 32 Bit)
32
Dezimalzahl mit Vorzeichen
L#-2147483648 bis L#2147483647
L L#
 
Zuletzt bearbeitet von einem Moderator:
Wenn der DINT-Wert zu groß für eine INT ist, kommt allerdings Mist dabei raus, also aufpassen oder vorher eine Wertebereichsprüfung machen!

Naja ... in dem Fall ja nicht so ganz ...
Die Sequenz :
Code:
L #my_DWORD_Var
T #my_INT_Var
... ist ja im Grund identisch mit :
Code:
L #my_DWORD_Var
L dw#16#FFFF
UD
T #my_INT_Var
... und überträgt somit ja dann auch nur gnadenlos die Inhalte des niederwertigen Word's. Das ein L#33000 dann in einem INT als etwas vollkommen anderes interpretiert wird (in dem fall als negative Zahl) ist dann ja ein anderes Thema. Damit wäre aber gemäß der Beschreibung des TE nicht zwangsläufig zu rechnen ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja ... in dem Fall ja nicht so ganz ...
Die Sequenz :
Code:
L #my_DWORD_Var
T #my_INT_Var
... ist ja im Grund identisch mit :
Code:
L #my_DWORD_Var
L dw#16#FFFF
UD
T #my_INT_Var
... und überträgt somit ja dann auch nur gnadenlos die Inhalte des niederwertigen Word's. Das ein L#33000 dann in einem INT als etwas vollkommen anderes interpretiert wird (in dem fall als negative Zahl) ist dann ja ein anderes Thema. Damit wäre aber gemäß der Beschreibung des TE nicht zwangsläufig zu rechnen ...

Gruß
Larry

Na Larry, dann freu dich auf den nächsten Thread, der fragt, warum der in die Int-Var kopierte Wert denn nun nicht mehr stimme! Wäre ganz sicher nicht das erste Mal. :ROFLMAO:
 
Zurück
Oben