Forum: PC-Programmierung union in visual basic


von timo (Gast)


Lesenswert?

Hallo.

Ich bin hier langsam am verzweifeln. Vielleicht könnt ihr mir ja
helfen.

Ich habe eine Schnittstelle über RS232 zwischen einem ATmega und einem
PC realisiert. Diese funktioniert auch soweit.
Ich möchte nun float-Werte (in VB single-Werte) byte-weise übertragen.
in C ist dieses Vorhaben nun wirklich kein Problem, hier geht es über
eine union.

In VB greife ich auf eine tabelle zu, welche die Floats(Single) Werte
in einer Spalte aufführt. Ich kann aber in VB die 4 Bytes des
single-Wertes nicht extrahieren. Dazu fehlt mir ein Befehl oder die
passsende Idee.

Kann mir vielleicht jemand helfen?

habe schon das gesamte I-Net abgesucht..... und kein Glück gehabt :-(

THX,

von Wolfram (Gast)


Lesenswert?

>In VB greife ich auf eine tabelle zu, welche die Floats(Single) Werte
>in einer Spalte aufführt. Ich kann aber in VB die 4 Bytes des
>single-Wertes nicht extrahieren. Dazu fehlt mir ein Befehl oder die
>passsende Idee.

Übertrage sie doch einfach als Text. Also "1.234".

Wer sagt dir dass dein PC und dein ATMega die gleiche Anzahl von Bytes
 haben? Ok. das kann noch sein...
Aber die gleiche Anordnung der Bytes im Speicher? Da wird es aber schon
sehr problematisch.
Wenn du etwas mehr Kontrolle über die Kommunikation haben willst, warum
schreibst du das Kommunikationsmodul auf dem PC nicht in C, als DLL oder
COM-Objekt und die Oberfläche in VB. Dann muss man sich auch keine
Sorgen mehr machen ob man bei Zeichenketten mit 8bit oder 16Bit Zeichen
zu tun hat und kann die einzelnen Bytes bequem wieder zu Zahlen
zusammensetzen. Du kannst dann Events an deine Oberfläche schicken wenn
etwas passiert.
Es mag beim ersten Mal schwieriger sein aber es lohnt sich in jedem
Fall. Der Code wird durch die saubere Trennung zwischen Oberfläche und
Kommunikation wesentlich überischtlicher und leichter zu warten.

von Chris (Gast)


Lesenswert?

VB hat in der .Net-Version die Unterstützung von Unions (unter anderem
Namen) bekommen. Siehe z.B.:

http://www.devx.com/vb2themax/Tip/18825

oder

http://www.microsoft.com/germany/msdn/library/net/vbnet/ByteweiseZerlegungInVBNET.mspx?mfr=true

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.