Hallo zusammen,
ich weiß, bei Fragen zu Regex rollen einige wahrscheinlich schon mit den Augen
Folgende Situation:
Ich möchte die Daten von einer Platine, die per RS232 Adapter an den PC angeschlossen ist, in einer Rich Textbox darstellen, es handelt sich dabei quasi um das Menü, mit entsprechend programmierten Buttons wird dann gesteuert.
Da einige Werte (je nach geöffnetem Menü) in Echtzeit angezeigt werden, wird die Anfrage an die Platine alle 200 Millisekunden gesendet. Daher kommen auch die Daten von der Platine permanent an.
Nun zum eigentliche Problem: Es gibt zwei Zeilen, und die Platine sendet zwei Datenpakete PRO Zeile, also insgesamt 4. Allerdings haben diese Pakete keine "Ende-Kennung", sondern nur jeweils eine eigene Start-Kennung. Außerdem gibt es alle paar Minuten weiter Daten, die NICHT in der Textbox, sondern in einem Label dargestellt werden sollen.
Daher wollte ich Regex nutzen, um den Empfang übersichtlich zu machen und zu verarbeiten.
Ich habe nun folgenden Code, der aber nicht funktioniert: Die Rich-Textbox bleibt leer bzw. wenn ich mauell etwas tippe verschwindet das sofort wieder. Aber Daten werden nicht angezeigt.
Die Regex Funktion an sich (alles zwischen den Zeichen XX und YY anzeigen) sollte so stimmen. XX und YY habe ich hier der Übersichtlichkeit halber eingesetzt, ist im Code anders.
"zeinsa, zeinsb, zzweia, zzweib" stehen hier für die Datenpakete der Zeilen.
Ich habe den Code sowohl in einem Timer, als auch in "SerialPort1.DataReceived", als auch im TextChanged der Textbox selbst ausprobiert...alles ohne Erfolg.
Hat jemand eine Ahnung was ich falsch mache bzw. an was das liegen kann? Die Aktualisierung soll alle 500 MS erfolgen (testweise erstmal), daher hab ich auch den Timer entsprechend eingestellt.
Die "Imports" Funktion für RegularExpressions ist natürlich auch da...
Vielen Dank im Voraus
ich weiß, bei Fragen zu Regex rollen einige wahrscheinlich schon mit den Augen
Folgende Situation:
Ich möchte die Daten von einer Platine, die per RS232 Adapter an den PC angeschlossen ist, in einer Rich Textbox darstellen, es handelt sich dabei quasi um das Menü, mit entsprechend programmierten Buttons wird dann gesteuert.
Da einige Werte (je nach geöffnetem Menü) in Echtzeit angezeigt werden, wird die Anfrage an die Platine alle 200 Millisekunden gesendet. Daher kommen auch die Daten von der Platine permanent an.
Nun zum eigentliche Problem: Es gibt zwei Zeilen, und die Platine sendet zwei Datenpakete PRO Zeile, also insgesamt 4. Allerdings haben diese Pakete keine "Ende-Kennung", sondern nur jeweils eine eigene Start-Kennung. Außerdem gibt es alle paar Minuten weiter Daten, die NICHT in der Textbox, sondern in einem Label dargestellt werden sollen.
Daher wollte ich Regex nutzen, um den Empfang übersichtlich zu machen und zu verarbeiten.
Ich habe nun folgenden Code, der aber nicht funktioniert: Die Rich-Textbox bleibt leer bzw. wenn ich mauell etwas tippe verschwindet das sofort wieder. Aber Daten werden nicht angezeigt.
VB.NET-Quellcode
- SerialPort1.ReadExisting()
- Dim zeinsa As Regex = New Regex("(?<=XX).*(?=YY)")
- Dim match As Match = zeinsa.Match(SerialPort1.ReadExisting)
- If match.Success Then RichTextBox1.Text = match.Value
- Dim zeinsb As Regex = New Regex("(?<=XX).*(?=YY)")
- Dim match2 As Match = zeinsb.Match(SerialPort1.ReadExisting)
- If match2.Success Then RichTextBox1.Text &= match2.Value
- Dim zzweia As Regex = New Regex("(?<=XX).*(?=YY)")
- Dim match3 As Match = zzweia.Match(SerialPort1.ReadExisting)
- If match3.Success Then RichTextBox1.Text &= match3.Value
- Dim zzweib As Regex = New Regex("(?<=XX).*(?=YY)")
- Dim match4 As Match = zzweib.Match(SerialPort1.ReadExisting)
- If match4.Success Then RichTextBox1.Text &= match4.Value
- RichTextBox1.Text = match.Value & match2.Value & match3.Value & match4.Value ' ///nur testweise ausprobiert
Die Regex Funktion an sich (alles zwischen den Zeichen XX und YY anzeigen) sollte so stimmen. XX und YY habe ich hier der Übersichtlichkeit halber eingesetzt, ist im Code anders.
"zeinsa, zeinsb, zzweia, zzweib" stehen hier für die Datenpakete der Zeilen.
Ich habe den Code sowohl in einem Timer, als auch in "SerialPort1.DataReceived", als auch im TextChanged der Textbox selbst ausprobiert...alles ohne Erfolg.
Hat jemand eine Ahnung was ich falsch mache bzw. an was das liegen kann? Die Aktualisierung soll alle 500 MS erfolgen (testweise erstmal), daher hab ich auch den Timer entsprechend eingestellt.
Die "Imports" Funktion für RegularExpressions ist natürlich auch da...
Vielen Dank im Voraus