Sorry der Messwert wird in 2 INT16 aufgeteilt (Messwert :76,864t) Diser wird in die 2 Int Aufgeteilt nach der definition vom INT16
1 Frage:
Warum sollten also Negative Zahlen auf dem Low Byte kommen?
Wenn ein DINT einfach mitten drin zwischen dem Bit 15 und Bit 16 durchgeschnitten wird, dann erhält man 2
WORD (2 "Bitstrings"). Wenn man nun behauptet, dass das L-Word ein vorzeichenbehafteter INT16 wäre und versucht, von dem INT16 nach DINT32 zu konvertieren oder mit dem INT16 zu rechnen,
dann wird das Bit 15 als Vorzeichenbit interpretiert, was es aber gar nicht ist (sondern einfach nur ein Bit mit der Wertigkeit 32768, welches beliebig 0 oder 1 sein kann).
Beim Konvertieren von INT zu DINT erhalten alle neu hinzukommenden Bits 16 bis 31 den Wert des Bits 15. Was hier aber falsch ist --> alle Bits müssen 0 werden, egal welchen Wert das Bit 15 hat.
(Übrigens meinst du nicht ein Low Byte, sondern das Low-Word, was aus 2 Byte besteht.)
2. Frage:
wird sich der Sensorhersteller nicht an die Definition eines INT halten?
Nein, offensichtlich nicht. Der hat genauso ungenügend durchdacht oder zumindest falsch formuliert einfach hingeschrieben, daß die untersten 16 Bit eines DINT ein INT16 sind. Tatsächlich ist das aber lediglich eine Ansammlung von 16 Bits (ein "Bitstring") -->ein WORD16, was man zum rechnen bestenfalls als UINT16 interpretieren darf.
Mit diesem Fehler ist der Sensorhersteller aber nicht allein. Selbst der Siemens-"Fachman", der den Vorschlag #4 gemacht hat, hat das nicht genügend durchdacht und ganz offensichtlich auch nicht ausreichend getestet.
Die oberen 16 Bit darf man als INT16 bezeichen, weil sie tatsächlich den Aufbau eines INT haben, der bei der Division DINT/65536 entsteht. Man darf auch den INT16 nach DINT konvertieren und erhält dabei einen DINT mit dem selben Wert, den der INT16 hat, und darf den dann mit 65536 multiplizieren, um die ursprünglichen oberen 16 Bit des DINT zu erhalten.