Moin,
ich programmiere gerade eine Steuerungssoftwäre für einen Lock-In Amplifier (muss niemand wissen was es ist). Dieser lässt sich via EIA-232 steuern und auslesen.
Nun habe ich mir zunächst ein kleines Terminal Programm geschrieben um erstmal zu testen und funktioniert auch prima. Es werden Strings übergeben und mir Strings zurück geschickt, wenn ich z.B. "Q1" schicke wird mir der Spannungswert von Ausgang 1 zurückgegeben, also normaler ASCII.
Soweit so gut, nun möchte ich jedoch, da ich einige Werte auslesen möchte, eine Funktion machen an die ich den Steuerbefehl übergebe und als Rückgabe die Rückgabe des Gerätes haben.
Momentan habe ich es so, dass ich das DataReceived Event des SerialPorts nutze, nur das funktioniert ja nun nicht mit einer Funktion.
Also hier ma die Event Routine:
Der StringBuilder ist deswegen, da die Zeichen zum teil einzelnt kommen. Könnte es auch kürzer mit Thread.Sleep machen aber das find ich nicht so gut. Mit einer Schleife bis e.EventType.Eof funktioniert leidernicht, da der das Eof nicht erkennt.
Nunja also wie mache ich das nun wenn ich eine Funktion habe:
Mein Problem ist halt jetzt wie ich an die Daten komme, die ja in einem extra Event reladen werden.
Man könnte natürlich eine Do Schleife machen und warten bis in der Variablen was drin ist, aber das erachte ich als nicht performant.
ich programmiere gerade eine Steuerungssoftwäre für einen Lock-In Amplifier (muss niemand wissen was es ist). Dieser lässt sich via EIA-232 steuern und auslesen.
Nun habe ich mir zunächst ein kleines Terminal Programm geschrieben um erstmal zu testen und funktioniert auch prima. Es werden Strings übergeben und mir Strings zurück geschickt, wenn ich z.B. "Q1" schicke wird mir der Spannungswert von Ausgang 1 zurückgegeben, also normaler ASCII.
Soweit so gut, nun möchte ich jedoch, da ich einige Werte auslesen möchte, eine Funktion machen an die ich den Steuerbefehl übergebe und als Rückgabe die Rückgabe des Gerätes haben.
Momentan habe ich es so, dass ich das DataReceived Event des SerialPorts nutze, nur das funktioniert ja nun nicht mit einer Funktion.
Also hier ma die Event Routine:
VB.NET-Quellcode
- Private Sub LockIn_DataReceived(ByVal sender As System.Object, ByVal e As SerialDataReceivedEventArgs) Handles LockIn.DataReceived
- Dim rxString As New StringBuilder
- Dim LoopEnd As Boolean = False
- Do Until LoopEnd
- rxString.Append(LockIn.ReadExisting())
- If rxString.Length > 2 Then
- LoopEnd = (Asc(rxString.ToString.Substring(rxString.Length - 1)) = 13)
- End If
- Loop
- Invoke(New LockInCallback(AddressOf Callback), rxString.ToString())
- End Sub
Der StringBuilder ist deswegen, da die Zeichen zum teil einzelnt kommen. Könnte es auch kürzer mit Thread.Sleep machen aber das find ich nicht so gut. Mit einer Schleife bis e.EventType.Eof funktioniert leidernicht, da der das Eof nicht erkennt.
Nunja also wie mache ich das nun wenn ich eine Funktion habe:
Mein Problem ist halt jetzt wie ich an die Daten komme, die ja in einem extra Event reladen werden.
Man könnte natürlich eine Do Schleife machen und warten bis in der Variablen was drin ist, aber das erachte ich als nicht performant.