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.
zeig doch mal wie du es machst, ich vermute du erzeugt aus dem Text ein bytearray und das enthält dann den unicode Text.
Ich habe einen string zB. "4056FA8099". 0x40....0xFA.....0x99 sollen als einzelne 8bit-Byte über die serielle Schnittstelle am angeschlossenen Gerät ankommen.
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.
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
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.
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.
verwendest du Convert.ToByte so wie ich es im beispiel geschrieben habe oder nicht? also mit dem 16 als paramter - die ist wichtig! ?
Erst einmal Danke für Deine Mühe. Die Beiträge haben sich gekreuzt. Das mit 16 habe ich nicht gemacht. Werdeich versuchen.
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?
> 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.
Nochmals Danke für Deine Hilfe, werde ich heute abend ausprobieren
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.