64 Bit Zahl interpretieren

arkeq

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

ich habe eine 64 Bit Zahl die ich über Modbus in 4 verschiedenen Registern bekomme.
Diese Zahl möchte ich jetzt in eine MD (32Bit) schieben.
Mir fehlt im Augenblick jeglicher Lösungsansatz.
Kann mir bitte jemand weiterhelfen?

PS: Ich verwende einen WAGO Controler 750-841.

Vielen Dank.
 
Zunächst solltest du wissen, was die 64-Bit bei dem Gerät bedeuten, was sie auf den Modbus schickt. Bei 64-Bit fallen mir ein:
1) Eine natürliche Zahl im Bereich 0 bis +2^64-1
2) Eine ganze Zahl im Bereich -2^63 bis +2^63-1
3) Ein doppelt genaue Fließkommazahl nach IEE754
4) Zeitstempel
5) etwas ganz Anderes.

Im Fall 1) müsstest du z.B.
- die niederwertigen 32 Bits in ein 32-Bit DWort kopieren.
- Prüfen, ob der Rest 0 ist, wenn nicht, ist der Werte mit 32-Bit nicht darstellbar. Überlauf behandeln.
Alles andere wird komplizierter.
 
Wenn zB das 37 Bit in der 64 Bit Integerzahl "1" ist kann man es eben nicht darstellen mit 32 Bit->Überlauf!
Bestenfalls kann man es in eine Gleitkommazahl wandeln.
 
In eine 32-Bit Zahl passen halt nur Werte bis 2^32-1.
Im einfachsten Fall wurde auf der Modbus-Seite nur ein "übertrieben" großer Datentyp gewählt, aber der Wert überschreitet im Normalfall nie 2^32-1.
Dann zeigt ein Überlauf einfach, dass jetzt etwas nicht normal ist. Vielleicht muß ein Bediener das Modbus-Gerät zurücksetzen, neu starten. Es hängt ganz von deiner Anwedung ab.

Wenn aber der Zahlenwert normalerweise tatsächlich größer werden kann/soll, dann legst du die oberen Stellen in einem eigenen UDINT ab.

Berechnungen müssen dann mit beiden Hälften durchgeführt werden Überträge berücksichtigt werden. Das wird dann schnell sehr umständlich. Ein Beispiel kann ich aus Zeitmangel nicht geben.
 
Zurück
Oben