Forum: PC-Programmierung VB2005 einzelne Bytes über port senden


von Wulf-rüdiger G. (wgoepf)


Lesenswert?

ich habe schon alle möglichen Varianten versucht, einzelne Bytes über 
den com-Port zu übertragen mit port.write(....), aber es kommen auf der 
anderen Seite immer zwei Bytes an.
in meinem Bsp soll zb 0x40,0x41,0x42 usw übertragen werden.
Die Werte liegen innerhalb einer Zeichenkette vor und ich kann sie auch 
separieren, aber die Übertragung klappt nicht.
Beim Einlesen funktioniert das byteweise einlesen mit port.readbyte.

von Peter (Gast)


Lesenswert?

zeig doch mal wie du es machst, ich vermute du erzeugt aus dem Text ein 
bytearray und das enthält dann den unicode Text.

von Wulf-rüdiger G. (wgoepf)


Lesenswert?

Ich habe einen string zB. "4056FA8099".
0x40....0xFA.....0x99 sollen als einzelne 8bit-Byte über die serielle 
Schnittstelle am angeschlossenen Gerät ankommen.

von Peter (Gast)


Lesenswert?

Zeig doch bitte mal das stück code was die umwandlung und das senden 
übernimmt. Ich zeige lieber jemand wo der Fehler liegt als das ich für 
ein den Code schreibe.

von Wulf-rüdiger G. (wgoepf)


Lesenswert?

Inhalt von telegramm="20304010". Die letzte Hex-Zahl 10(LF) soll nicht 
übertragen werden. Die help-u.a.-Variablen sind zur Fehlersuche. Hab es 
auch schon mit convert.ToByte versucht


Public Sub auswertung(ByVal uebergabe As String)
        Dim z = 0
        Dim laenge As Integer
        Dim einer As Char
        Dim help As Char
        Dim help1 As Char



        telegramm = uebergabe
        laenge = telegramm.Length
        einer = Convert.ToChar(telegramm.Substring(0, 2))
        If laenge > 0 Then


            While z < (laenge - 2)
                help = ((Convert.ToChar(telegramm.Substring(z, 2))))
                help1 = ((Convert.ToChar(telegramm.Substring(z, 2))))
                help1 = ((Convert.ToChar(telegramm.Substring(z, 2))))
                COMPort.Write((Convert.ToChar(telegramm.Substring(z, 
2))))

                z = z + 2
            End While
            telegramm = ""
            z = 0
        End If



    End Sub

von Peter (Gast)


Lesenswert?

kann ja nicht gehen ...


wenn du den String "203040" hast, welche ja scheinbar eine Hex 
darstellung enthählt muss du ihn ja erstmal von hex in byte umwandeln 
und nicht von String nach byte.

1. Zerlegen von "203040" in "20", "30", "40"
2. Umwandeln in byte und in ein arrray speichern
     dim byte = Convert.ToByte("20",16);
3. byte array mit write senden.

von Wulf-rüdiger G. (wgoepf)


Lesenswert?

Wenn ich anstatt Char-Variable Byte-Variable ( Convert.ToByte) verwende, 
kommt am Empfänger (für 0x20) 20 als Text bzw  50 und 48 sozusagen als 
ASCII-Zeichen.

von Peter (Gast)


Lesenswert?

verwendest du Convert.ToByte so wie ich es im beispiel geschrieben habe 
oder nicht? also mit dem 16 als paramter - die ist wichtig! ?

von Wulf-rüdiger G. (wgoepf)


Lesenswert?

Erst einmal Danke für Deine Mühe.
Die Beiträge haben sich gekreuzt. Das mit 16 habe ich nicht gemacht. 
Werdeich versuchen.

von Wulf-rüdiger G. (wgoepf)


Lesenswert?

Sorry, habe folgendes getestet:

 Dim test As Byte
   test = Convert.ToByte("20", 16)
   COMPort.Write(test)

Es kommt am Empfänger an als Text "32" als Byte 51 52
Er kovertiert als die Hex-Zahl 20 in Dezimalzahl 32 und schickt sie als 
Text (ASCII) zum Empfänger.
Das Problem ist m.E. der write-Befehl, der die Zeichen als Text 
interpretiert.
Oder mach ich etwas falsch?

von Peter (Gast)


Lesenswert?

> COMPort.Write(test)
müsste das problem sein, denn in der doku steht das bei write ein string 
gesendet wird. Du musst vorher ein bytearray anlegen. Un dann write mit 
anderen Paramter aufrufen.

http://msdn.microsoft.com/de-de/library/system.io.ports.serialport.write.aspx

bei einem parameter wird immer ein string gesendet.

von Wulf-rüdiger G. (wgoepf)


Lesenswert?

Nochmals Danke für Deine Hilfe, werde ich heute abend ausprobieren

von Wulf-rüdiger G. (wgoepf)


Lesenswert?

So nun hab ich es
mit COMPort.Write(RXArraytest, 0, 3) werden die ersten drei Bytes 
übertragen.
Damit können wir das abschliessen.
Nochmals vielen Dank

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.