| |

VB.NET - Ein- und UmsteigerAuswerten von SerialPort Kommunikation beschleunigen/verbessern | |  | Autor: HerrBlümchen | Datum: 10.03.09 00:16 |
| Hallo,
vielen Dank schon einmal für das lesen....
ich bin im Moment an folgendem Projekt zu gange :
Ein Microcontroller übernimmt eine Positionsregelung einer Kugel deren Position über das verstellen einer Platte geändert werden kann. ALLE Daten, d.h Reglerparamter für die X und Y Achse sowie die Kugelposition ( wird durch ein Touchplate aufgenommen ) , werden über die Serielle Schnittstelle (RS232) an den PC geschickt. Zur Auswertung habe ich eine Oberfläche geschrieben, die mir die Daten auswertet und Grafisch darstellt. Jetzt zu meinem Problem....
Der Datenstrom ist ziemlich groß bei 9600 baud. Das führt dazu, das der Empfangspuffer des PC´s sich bis zu einem gewissen grad füllt, was aber zu einer verzögerung der Datenanzeige führt. Ich möchte das ganze jedoch möglichst in Echtzeit , d.h. die Daten so aktuell wie möglich anzeigen.
Wenn ich daten empfange, wird folgender Code ausgeführt...
Private Sub cp_DataReceived(ByVal sender As Object, ByVal e As _
System.IO.Ports.SerialDataReceivedEventArgs) Handles cp.DataReceived
' Schreibt anhand des erhaltenen Funktionscodes an die entsprechende
' Eigenschaft den Übergebenen Wert
'setValues(&H30, cp.BytesToRead)
Do
If cp.ReadChar = 2 Then
Try
'strString = ""
Dim i As Integer = 0
Do
intChar(i) = cp.ReadByte
i += 1
Loop While ((intChar(i - 1) <> 3) And (i < 30))
Dim temp(3) As Byte
newFrame.bytFC = intChar(0)
temp(0) = intChar(4)
temp(1) = intChar(3)
temp(2) = intChar(2)
temp(3) = intChar(1)
newFrame.sngValue = System.BitConverter.ToSingle(temp, 0)
strString += "FC:(" & Hex(intChar(0)) & ")" & "Value : (" & _
CStr(newFrame.sngValue) & ")" & vbCrLf
' Schreibt anhand des erhaltenen Funktionscodes an die
' entsprechende Eigenschaft den Übergebenen Wert
setValues(intChar(0), newFrame.sngValue)
Catch ex As System.IndexOutOfRangeException
cp.DiscardInBuffer()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End If
Loop While (cp.BytesToRead = 0)
End Sub Im grund genommen werden solange die Empfangenen Zeichen abgefragt, bis Start- und Endbyte , das durch mein protokoll festgelegt ist, empfangen wurden. Anschliessend werden der Funktionscode der zur Zuordnung der Grösse verwendet wird und der Float wert umgerechnet und in "Newframe" gespeichert. Zusätzlich schreibt die methode "setvalues" die Werte in ein Array, damit die Daten später in einem Diagramm ausgegeben werden (oszilloskop ähnlich)
Das aktaualisieren der Anzeige lass ich über einen Timer ausführen.
Scheinbar braucht der PC für den Code zu lange. zumindest schafft er es nicht alles komplett abzuarbeiten bevor die Nächste nachricht kommt ( Ansonsten würde sich der Puffer ja nicht füllen). Gibt es eine schnellere Methode die Daten auswerten zu lassen um den zeitlichen versatz der Anzeige zu unterbinden ??
Wie wäre es mit einem Threat der durch das DataReceived Ereigniss des Ports ausgelöst wird. In ihn lager ich den obigen Code aus, sodas direkt das Nächste ereigniss ausgelöst werden kann, während dieser threat noch parallel am Signale auswerten ist ??
gruss Maggus |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevCoolbar 3.0 
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) TOP Entwickler-Paket 
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR...
Jetzt nur 979,00 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|