Forum: PC-Programmierung Mit VB serielle Schnittstelle auslesen/auswerten


von PeterNoPlan (Gast)


Lesenswert?

Hallo alle! Ich bin nue in der Welt der Mikrocontroller programmierung 
und hab natürlich ein paar Probleme mich zurechtzufinden.

Ich hab ein Assembler Programm was dauerhaft den Text: "TEST! " (Mit 
einem Leerzeichen am Ende) über die serielle Schnittstelle an den Pc 
sendet. das funktioniert soweit gut.

Jetzt empfange ich die Daten mit Hilfe des DataRecieved Handlers:
1
Private Sub cPort_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles cPort.DataReceived
2
        Dim B(100) As Byte
3
        Dim D, I As Integer
4
        Dim Str As String = ""
5
6
        D = cPort.Read(B, 0, 5)
7
        For I = 0 To D - 1
8
            If B(I) = 13 Then
9
                Str = Str + vbCrLf
10
            Else
11
                Str = Str + Chr(B(I))
12
            End If
13
        Next
14
        MsgBox(Str)
15
    End Sub

Allerdings bekomme ich meistens nicht den erwarteten String: "TEST! ", 
sondern verschiedene Strings wie "ST! TE". Das liegt denke ich an der 
Stopbit erkennung doch wie bekomm ich eindeutige ergebnisse? (Ich möchte 
im Endeffekt Zahlenwerte (Drehzahlmesser) über die Schnittstelle an den 
PC versenden)

von Peter II (Gast)


Lesenswert?

nein das liegt daran, das du nicht immer alles gleich bekommst. Du musst 
dir die String schon zusammensetzen.

Im schlimmensten fall wird also funktion cPort_DataReceived je zeichen 
aufgefufen.

von PeterNoPlan (Gast)


Lesenswert?

Danke Peter II!

Aber wie bekomm ich das jetzt am Besten hin?

von Ralf (Gast)


Lesenswert?

> Aber wie bekomm ich das jetzt am Besten hin?
M.E. zwei Möglichkeiten:
1) Soweit ich weiss kann man mit dem Threshold-Wert einstellen, ab wie 
vielen Bytes im Buffer das Event ausgelöst wird. Wenn also die 
Nachrichten eine fixe Länge haben, wär das eine Option.
2) Wenn das letzte Zeichen der Nachrichten immer gleich ist, dann ist 
das dein "Nachrichten"-Trenner.

Ralf

von PeterNoPlan (Gast)


Lesenswert?

Danke Ralf!

Also ich habe mir gedacht, dass ich mit der funktion 
ComPort.ReadExisting() einfach den Buffer auslese und dann das letzte 
teilstück rausfiltere. Ich denke das sollte funktionieren.

Vielen Dank für die Hilfe!

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.