Entwickler-Ecke
Basistechnologien - 2 UInt16 zu einer Single
Steve90211 - Do 29.04.10 16:42
Titel: 2 UInt16 zu einer Single
Hallo
Ich habe das Problem über einen Modbus einen Real auszulesen.
Da der Modbus keine Real mag habe ich einfach die Gleitkommazahl (32bit) in 2 Words (a 16bit) Zerlegt und übertrage einfach diese.
Nun ist mein Problem, das ich die in C Sharp nicht wieder zusammen und dann in eine real/float/Single bekomme. :(
Einfach mal das 2te Word nach links schieben (<< 16) und dann das Erste dazuaddieren und mit
(Single)MyUInt32 zu einer Single machen klappt ja schon aber dann habe ich nur eine sehr große Ganzzahl und nicht meine real ... *gruebel*
Habt ihr da ne idee wie das klappen könnte?
Evtl. die real bitweise setzen!? (und wenn ja dann wie?)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| UInt16 word1 = 28836; UInt16 word2 = 16709; UInt32 erg = (UInt32)((word2 << 16) + word1); Single erg2 = (Single)erg; |
Kha - Do 29.04.10 17:07
:welcome: !
Die Daten kommen doch sicher aus einem Stream, dann würde ich BinaryReader.ReadSingle vorschlagen.
Ansonsten: Die ushorts in bytes aufteilen und damit BitConverter.ToSingle füttern.
Wie hast du die Werte überhaupt zerlegt?
Steve90211 - Fr 30.04.10 09:13
Kha hat folgendes geschrieben : |
| :welcome: ! |
Danke :)
Kha hat folgendes geschrieben : |
Die Daten kommen doch sicher aus einem Stream, dann würde ich BinaryReader.ReadSingle vorschlagen.
Ansonsten: Die ushorts in bytes aufteilen und damit BitConverter.ToSingle füttern.
Wie hast du die Werte überhaupt zerlegt? |
Und auch danke für die Antwort. :)
Die Daten kommen je nachdem wie ich mich noch entscheide per OPC-Server zum PC oder ich nutze die MBT.dll (Modbus TCP).
In der DLL bekomme ich meine Daten als Array of Byte ...
Da könnte ich mir dann evtl ne Function ääähh Methode machen, die mit
BitConverter gleich Single ausspuckt ... (oder später mit GetBytes zerlegen ...)
Zerlegen war recht einfach. Ich habe in meiner Steuerung (Wago SPS) einen Merker (real 32) z.b. auf Adresse 100 angelegt. Und dann 2 Merker (UINT mit 16 bit) auf Adresse 200 & 201 Abgefragt.
Wenn man bedenkt, dass im Speicher eh schon alles richtig steht und nur anders interpretiert werden muss, is das ganz schön viel Gefummel bis das passt. ^^
EDIT:
Wie nicht anders zu erwarten KLAPPT alles :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!