Hallo,
aktuell versuche ich Werte von meinem Arduino Uno über den SerialPort an den PC zu senden und dort zu verarbeiten.
Bei der Übertragung tritt das Problem auf, dass der erste Schub an Daten problemlos in einer Übertragung läuft. Die anschließenden Schübe werden in einem regelmäßigen Muster (wobei auch hier gilt, dass jede Regel ihre Außnahme hat) in 2-3 Übertragungen unterteilt. Es handelt sich ungefähr um 90 bis 110 Byte an Werten pro Schub. Dies führt leider zu einem Problem in der weiteren Verarbeitung der übertragenen Daten in meinem VB.Net Programm.
Bisher ausgeschlossen habe ich, dass es am Arduino liegt, die Daten im seriellen Monitor der Arduino Software jedesmal ohne Probleme im selben Schub übertragen werden. Ebenso habe ich die Verarbeitung bereits mal ausgelagert in einen externen Thread, aber auch damit keinen Erfolg erziehlt. An der Baudrate habe ich ebenfalls gearbeitet, aber bei der Menge sollte es kein Problem sein und es führt auch zu keiner Änderung im Verhalten. Wenn ich das Programm beim Debuggen kurz anhalte und mir die einzelnen werde anschaue, dann schafft es das Programm auch ohne Probleme alle Schübe abzuarbeiten, aber ohne die Unterbrechung treten die oben beschriebenen Verhaltensweisen auf.
Meine Verarbeitung in VB sieht wie folgt aus:
Testweise setzte ich folgenden Code auf dem Arduino ein:
Das Ergebnisse nach einem Durchlauf sieht dann so aus: (Bitte entschuldigt meine Zeichenfähigkeiten)
Ich hoffe, dass jemand eine Idee bzw. einen Ansatz hat. Danke im Voraus für eure Mühe.
Edit:
Ich habe es jetzt einfach mal mit 100+ Werten versucht und auch da klappt die erste Übertragung ohne Probleme
aktuell versuche ich Werte von meinem Arduino Uno über den SerialPort an den PC zu senden und dort zu verarbeiten.
Bei der Übertragung tritt das Problem auf, dass der erste Schub an Daten problemlos in einer Übertragung läuft. Die anschließenden Schübe werden in einem regelmäßigen Muster (wobei auch hier gilt, dass jede Regel ihre Außnahme hat) in 2-3 Übertragungen unterteilt. Es handelt sich ungefähr um 90 bis 110 Byte an Werten pro Schub. Dies führt leider zu einem Problem in der weiteren Verarbeitung der übertragenen Daten in meinem VB.Net Programm.
Bisher ausgeschlossen habe ich, dass es am Arduino liegt, die Daten im seriellen Monitor der Arduino Software jedesmal ohne Probleme im selben Schub übertragen werden. Ebenso habe ich die Verarbeitung bereits mal ausgelagert in einen externen Thread, aber auch damit keinen Erfolg erziehlt. An der Baudrate habe ich ebenfalls gearbeitet, aber bei der Menge sollte es kein Problem sein und es führt auch zu keiner Änderung im Verhalten. Wenn ich das Programm beim Debuggen kurz anhalte und mir die einzelnen werde anschaue, dann schafft es das Programm auch ohne Probleme alle Schübe abzuarbeiten, aber ohne die Unterbrechung treten die oben beschriebenen Verhaltensweisen auf.
Meine Verarbeitung in VB sieht wie folgt aus:
VB.NET-Quellcode
- Private Sub DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
- Dim cntByte As Integer = SerialPort1.BytesToRead - 1
- Dim inByte(cntByte) As Byte
- Dim outByte As New List(Of String)
- Dim start As Integer = 0
- Dim count As Integer = 0
- Dim Position As Integer = 0
- SerialPort1.Read(inByte, 0, cntByte + 1)
- Do
- Position = Array.FindIndex(inByte, Function(x) x = 13)
- count = If(Position = -1, cntByte - start, Position - start)
- If Position = -1 Then
- If count > 0 Then
- outByte.Add(System.Text.Encoding.Default.GetString(inByte, start, count))
- End If
- Else
- outByte.Add(System.Text.Encoding.Default.GetString(inByte, start, count))
- inByte(Position) = 0
- start = Position + 1
- End If
- Loop Until Position = -1
- End Sub
Testweise setzte ich folgenden Code auf dem Arduino ein:
Das Ergebnisse nach einem Durchlauf sieht dann so aus: (Bitte entschuldigt meine Zeichenfähigkeiten)
Ich hoffe, dass jemand eine Idee bzw. einen Ansatz hat. Danke im Voraus für eure Mühe.
Edit:
Ich habe es jetzt einfach mal mit 100+ Werten versucht und auch da klappt die erste Übertragung ohne Probleme
Gruß K4RTOFF3L
Das Problem zu erkennen ist wichtiger, als die Lösung zu erkennen, denn die genaue Darstellung des Problems führt zur Lösung. - Albert Einstein
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „K4RTOFF3L“ ()