Serielle Schnittstelle mit System IO Port "String wird nicht immer sauber empfangen"

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von KingTrend.

    Serielle Schnittstelle mit System IO Port "String wird nicht immer sauber empfangen"

    Hallo Programmierprofis,

    ich bin ein totaler Neuling in der Schnittstellenprogrammierung, habe es trotztdem geschafft die Schnittstelle zu öffnen und Daten zu empfangen. Nur der empfangene String ist nicht immer sauber. Am Anfang und am Ende des Strings gibt es immer Sonderzeichen. Ich nehme an dass es irgend was mit ASCII, Esc und vbCr zu tun hat. Wenn ich die Daten mit einem Terminal empfange und stelle das Terminal auf ANSI ein, dann bekomme ich saubere Daten.
    Könnt Ihr mir verraten, wie ich diese ANSI einstellen kann oder liegt es an etwas ganz anderem?
    Danke im Voraus

    Dim rx As String
    If SerialPort1.IsOpen Then
    rx = SerialPort1.ReadExisting()
    TextInput.Text = rx

    Strings werden nicht suber empfangen

    Ich bin etwas weiter mit meinem Problem.
    Mittlerweile weiss ich dass es sich um Esc Sequenzen handelt, die ein Terminal (VT100) ansteuern.

    Meine Frage: Gibt es für VB2008.Net iergend ein Trick um diese Zeichen nicht darzustellen, sondern den Cursor auf eine bestimmte Position zu bringen? Oder gibt es gibt es VT100 Emulatoren, die man in sein Projekt einbinden kann?
    Danke
    Mit MID() oder Substring() machen, wenn du weißt ab wann dein String losgeht.

    Also mit der MID Funktion würde es so aussehen:

    VB.NET-Quellcode

    1. Dim rx As String
    2. If SerialPort1.IsOpen Then
    3. rx = SerialPort1.ReadExisting()
    4. TextInput.Text = MID(rx, startPosition, len(rx))


    Mit Substring habe ich mich bisher noch nicht beschäftigt, das es diesen Befehl erst ab dem .Net Framewpork gibt, aber evtl könnte es so gehen

    VB.NET-Quellcode

    1. Dim rx As String
    2. If SerialPort1.IsOpen Then
    3. rx = SerialPort1.ReadExisting()
    4. TextInput.Text = rx.Substring(startPosition, len(rx))
    Danke Dodo, dass Du Dich mit meinem Problem auseinander gesetzt hast. Die ESC Sequenzen kommen nicht regelmäßig, deswegen kann ich es nicht mit Mid und Substring machen. Ich habe es auch mit Replace getestet. geht auch nicht.

    ich habe einige Terminalemulatoren mit denen es funktioniert. Da muss ich VT100 einstellen und es funktioniert. Ich denke ich werde da irgendeinen Datei in mein Projekt implementieren müssen. Habe auch schon etwas gefunden VT100.BAS. Jetzt muss ich herausfinden wie das funktioniert. Falls Du mir da helfen könntest wäre ich sehr dankbar

    Gruß
    Mikii
    Sry aber mit VT100 oder so einem Terminal kenne ich mich leider auch nicht aus! Aber vielleicht ist es mal hilfreich wenn die BAS hier postest, damit man mal die Funktionen analyisieren kann.

    Edit: Kannst du diese ESC Sequenz im String sehen? Weil ansonsten kannst du aus existens der Sequenz prüfen und dann mit Substring arbeiten!
    Hallo Dodo,
    sorry, ich war jetzt etwas abwesend, deswegen keine schnelle Antwort.
    Ich kann die Esc-Sequenzen sehen. Das Problem ist, die kommen nicht immer alle zusammen. Deswegen kann mann schlecht einen Teil des Strings ausblenden. Ich denke mal, ich werde den String jedesmal durch eine Routine durchlaufen lassen müssen um zu erkennen ob eine Esc Sequenz empfangen wird und demnach dann den Coursor steuerun.
    In dieser BAS Vt100.bas Datei ist das schon realisiert. Kann ich diese datei in mein Projekt einbinden oder muss die erst umgeschrieben werden?
    Danke und Gruß
    Mikii

    Nicht Textbox sondern DB

    Hi,

    also bei mir hat

    Quellcode

    1. Dim rx As String
    2. If SerialPort1.IsOpen Then
    3. rx = SerialPort1.ReadExisting()
    4. TextInput.Text = Mid(rx, startPosition, Len(rx))

    Super funktioniert. Allerdings bleibt der Text nicht lange in der Box weil er sich halt immer wieder aktuallisiert.

    Deshalb würde ich Das ganze lieber in eine db schreiben. Weiß einer wie das geht?

    Vielen Dank im Voraus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KingTrend“ ()