Guten Morgen liebe Experten!
Ich muss mich mal mit einem Visual-Basic 2010 Problem an euch wenden.
Ich möchte Messwerte von der seriellen Schnittstelle auf den PC
übertragen und sie dort weiterverrbeiten. Aber ich weiß nicht so recht,
wie ich es am besten anstelle.
Ich habe noch nicht so viel mit VB2010 gearbeitet, daher habe ich mir
erstmal ein Buch zugelegt, um einen Einstieg zu erleichtern. Das habe
ich auch schon soweit durchgearbeitet und denke, ich komme bis jetzt
ganz gut zurecht.
Also habe ich mir ein Programm geschrieben, welches die serielle
Schnittstelle öffnet und auch Daten senden und empfangen kann. Doch
jetzt gibt es zwei Möglichkeiten, die serielle Schnittstelle abzufragen:
1) Mittels Timer, der in Intervallen den Empfangspuffer abfragt und die
Daten in eine Variable kopiert, oder
2) Mittels
1 | Private Sub sp_SerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles sp_SerialPort.DataReceived
|
was ja scheinbar bei jedem empfangenen Zeichen aufgerufen wird.
Was ist hier nun besser? Ich weiß auch nicht genau, wie es am besten
weitergeht. Ich habe also eine Variable, einen String, an dem ich alle
neuen Daten mit
1 | StrInputValue = StrInputValue & sp_SerialPort.ReadExisting
|
anhängen kann. (Ich komme aus der C-Programmierung, da ist es für mich
schon etwas ungewöhnlich, dass der String beliebig länger werden kann,
ohne dass ich dem Puffer eine feste Länge zuordnen muss)
Aus diesem String möchte ich ja jetzt Datensätze extrahieren. Ein
Datensatz besteht z.B. aus
für 1293mV oder
für 24,7°C. Diese Messwerte möchte ich jetzt halt in einem extra
Fenster anzeigen. Aber wie hole ich das jetzt am besten aus dem String
raus?
Der String kann ja z.B. sein:
1 | "XXXU1293\n\rT24.7\n\rXXXXXXU23X\rXTX4.7\n\r
|
Da wäre jetzt ein korrekter Datensatz drin, aber auch Müllwerte (kann ja
mal vorkommen) - ich möchte natürlich nur die "guten" Werte haben.
Nachdem ich den Wert aus dem String herausgeholt habe, sollte die Daten
natürlich auch wieder gelöscht werden, damit der String nicht unendlich
lang wird.
Soviel erstmal zu meinem Vorhaben - ich würde mich über ein paar
Denkanstöße freuen.
Und noch was anderes: Wie mache ich eine korrekte Abfrage nach dem
Inhalt eines Strings, der ein "," enthält, das klappt bei mir nicht. Die
Abfrage:
1 | ElseIf cbo_StopBits.Text = "1,5" Then
|
2 | sp_SerialPort.StopBits = IO.Ports.StopBits.OnePointFive
|
3 | ...
|
funktioniert nicht. Die 1,5 stehen halt in einer ComboBox und können vom
User ausgewählt werden.
Gruß und danke!