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.