mikrocontroller.net

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


Autor: Wulf-rüdiger Göpfert (wgoepf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wulf-rüdiger Göpfert (wgoepf)
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wulf-rüdiger Göpfert (wgoepf)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wulf-rüdiger Göpfert (wgoepf)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

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

Autor: Wulf-rüdiger Göpfert (wgoepf)
Datum:

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

Autor: Wulf-rüdiger Göpfert (wgoepf)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

bei einem parameter wird immer ein string gesendet.

Autor: Wulf-rüdiger Göpfert (wgoepf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmals Danke für Deine Hilfe, werde ich heute abend ausprobieren

Autor: Wulf-rüdiger Göpfert (wgoepf)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.