Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Single Werte bei Modbus, Delphi 7 und IEEE754 (https://www.delphipraxis.net/82837-single-werte-bei-modbus-delphi-7-und-ieee754.html)

HariboHunter 20. Dez 2006 12:51


Single Werte bei Modbus, Delphi 7 und IEEE754
 
Die HEX- Darstellung von Single Werten bei Modbus, Delphi7 und der IEEE754 Norm Unterscheidet sich ein wenig.
Da ich ein wenig gebraucht habe, um da durchzusteigen, hier ein kleiner Hinweis.

Legende:
M= Mantisse
S= Vorzeichen- Bit
E= Exponent

Modbus:

MMMM MMMM MMMM MMMM SEEE EEEE EMMM MMMM
Byte3 Byte4 Byte1 Byte2

Delphi (und C++):

MMMM MMMM MMMM MMMM EMMM MMMM SEEE EEEE
Byte4 Byte3 Byte2 Byte1

IEEE 754 Standard:

SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
Byte1 Byte2 Byte3 Byte4

---------------------------------------->>
Reihenfolge

Tschö

Muetze1 20. Dez 2006 13:24

Re: Single Werte bei Modbus, Delphi 7 und IEEE754
 
Scheint mir eher ein Problem der Byte Order zu sein (Motorola <-> Intel) als der Codierung an sich. Ich würde die Datenbytes richtig umkehren/drehen wenn eine solche Konvertierung an einer Schnittstellenseite nötig wird.

Der IEE754 Standard sieht es sogar genauso wie Delphi und C++. Der Standard geht von einer Standardansicht aus (LSB->MSB) und deine Darstellung ist schon die direkte "verdrehte" Intel Byte Order auf dem PC im Speicher. Der ModBus wiederrum überträgt es richtig, aber es wird nicht im Inteldesign vertauscht. Die letzte Tatsache würde bedeuten, der Wert wird byteweise eingelesen und nicht wordweise, dann sollte dies wieder mit deiner Delphi/C++ Darstellung übereinstimmen. Damit wäre dann auch gleichzeitig die IEE754 Darstellung erfüllt.

Schlingel 20. Dez 2006 16:29

Re: Single Werte bei Modbus, Delphi 7 und IEEE754
 
Hallo

... bei manchen Modbus - Geräten ist dieses Verhalten einstellbar. (SWAP = True / False)

Dein Freund ist übrigens auch die gleichnamige Delphi-Funktion Swap:

Die Funktion Swap vertauscht das höherwertige mit dem niederwertigen Byte eines 16-Bit-Wertes.


Gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz