vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: Textzeilen über RS232 einlesen- wie Zeilenende erkennen? 
Autor: Ralf364
Datum: 10.02.13 00:13

Hallo Zardoz,

gerade deine Antwort gesehen, vielen Dank!

Wie ich schon geschrieben habe, daß mit dem Zeilenumbruch habe ich inzwischen hinbekommen.
Das seltsame Verhalten, wenn ich die Stringvariablen zusammensetzen will kann ich mir aber überhaupt nicht erklären, vielleicht weißt du ja eine Antwort.

Gruß Ralf
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Textzeilen über RS232 einlesen- wie Zeilenende erkennen? 
Autor: Ralf364
Datum: 09.02.13 20:49

Hallo,

ich lese Befehlszeilen über die serielle Schnittstelle ein und möchte sie je nach Anfangskennung in verschiedenen Stringvariablen speichern.
Das Darstellen in einer Textbox klappt einwandfrei, da wird nach jeder Zeile automatisch ein Zeilenumbruch eingefügt. Ich möchte die Zeilen aber in verschiedenen Variablen speichern und komme einfach nicht drauf, wie ich das Zeilenende erkenne.

Das Zeichen für den Zeilenumbruch ist doch "CrLF", aber wie erkenne ich den Befehl?

Wäre schön, wenn mir da jemand auf die Sprüge helfen würde.

Vielen Dank!

Gruß Ralf


Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
        Case comOverrun:   MsgBox "Datenverlust!"
        Case comRxOver:    MsgBox "Datenverlust!"
        Case comEvReceive: RS232string = MSComm1.Input
            Me.Text3 = Me.Text3 + RS232string
End Select
 
Private Sub Command3_Click()
    With MSComm1
    .CommPort = 1
    .Settings = "9600,n,8,1"
    .RThreshold = 1                       
    .SThreshold = 1
    .InputLen = 0                     
    End With
    MSComm1.PortOpen = True
    MSComm1.DTREnable = False
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textzeilen über RS232 einlesen- wie Zeilenende erkennen? 
Autor: Zardoz
Datum: 09.02.13 23:58

Hallo Ralf,
der Zeilenumbruch besteht aus den Zeichen Chr$(13) und Chr$(10).
Die Konstante dazu heisst vbCrLf. Du kannst mit Instr danach
suchen, oder gleich mit Split den String zerlegen.
Siehe dazu:
http://www.vbarchiv.net/commands/cmd_instr.html

http://www.vbarchiv.net/commands/cmd_split.html

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textzeilen über RS232 einlesen- wie Zeilenende erkennen? 
Autor: Ralf364
Datum: 10.02.13 00:09

Hallo,

das Erkennen des Zeilenendes habe ich inzwischen hinbekommen.

Allerdings habe ich ein sehr seltsames Problem, das ich mir einfach nicht erklären kann.

Das hier funktioniert nicht, da wird nichts ausgegeben:
Dim RS232string, Zeile As String
 
Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comOverrun:   MsgBox "Datenverlust!"
        Case comRxOver:    MsgBox "Datenverlust!"
        Case comEvReceive
            While MSComm1.InBufferCount >= 1
                RS232string = MSComm1.Input
                If RS232string = vbCr Then
                    RS232string = MSComm1.Input
                    If RS232string = vbLf Then
                        MsgBox "Textzeile:" & " " & Zeile
                    End If
                Else
                    Zeile = Zeile & RS232string
                End If
            Wend
    End Select
End Sub
Das funktioniert, da erhalte ich die Zeile aber umgekehrt:
Dim RS232string, Zeile As String
 
Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comOverrun:   MsgBox "Datenverlust!"
        Case comRxOver:    MsgBox "Datenverlust!"
        Case comEvReceive
            While MSComm1.InBufferCount >= 1
                RS232string = MSComm1.Input
                If RS232string = vbCr Then
                    RS232string = MSComm1.Input
                    If RS232string = vbLf Then
                        MsgBox "Textzeile:" & " " & Zeile
                    End If
                Else
                    Zeile = RS232string & Zeile   '!!!!!!!!!!!!!!!
                End If
            Wend
    End Select
End Sub
Wieso um alles in der Welt klappt das nicht mit "Zeile = Zeile & RS232string". Die Variable RS232string ist richtg belegt, also wenn ich das dorchklicke sind da die entsprechenden Zeichen enthalten, sie wird aber einfach nicht an die Variable "Zeile" angefügt. Habe alles Mögliche probiert, es klappt einfach nicht.
Ich kann natürlich die obere Variante nehmen und die Zeichenfolge wieder umkehren, es muß doch aber einen Grund dafür geben, daß das nicht funktioniert.

Gruß Ralf
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textzeilen über RS232 einlesen- wie Zeilenende erkennen? 
Autor: Ralf364
Datum: 10.02.13 09:53

Hallo,

im Wesentlichen klappt es jetzt.

Wenn ich hinter der Ausgabe mit der MsgBox den Befehl "Zeile = "" einsetze, wird mir als Erstes ein Leerstring angezeigt und dann fortlaufend die einzelnen Befehlszeilen, so wie ich es wollte.
Ich müßte ja nach dem Einlesen einer Zeile den Inhalt der Stringvariablen sowieso zurücksetzen, warum das aber nicht funktioniert hat begreife ich einfach nicht. Die neuen Werte müßten doch immer wieder angefügt werden.

So funktioniert es jetzt:

Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comOverrun:   MsgBox "Datenverlust!"
        Case comRxOver:    MsgBox "Datenverlust!"
        Case comEvReceive
            While MSComm1.InBufferCount >= 1
                RS232string = MSComm1.Input
                If RS232string = vbCr Then
                    RS232string = MSComm1.Input
                    If RS232string = vbLf Then
                        MsgBox Zeile
                        Zeile = "" 'Ohne diese Zeile wird nichts ausgegeben ???
                    End If
                Else
                    Zeile = Zeile & RS232string
                End If
            Wend
    End Select
End Sub
Die Stringvariable wird beim Laden der Form innitialisiert (Zeile = "").

Schönen Sonntag Allerseits!

Gruß Ralf
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Textzeilen über RS232 einlesen- wie Zeilenende erkennen? 
Autor: bfritz
Datum: 10.02.13 18:53

Hallo Ralf

Habe es in einem meiner Projekte auf folgende Weise gelöst:

Private Sub MSComm1_OnComm()
    Dim sBuffer As String
    Select Case MSComm1.CommEvent
        Case comOverrun:   MsgBox "Datenverlust!"
        Case comRxOver:    MsgBox "Datenverlust!"
        Case comEvReceive
            sBuffer = MSComm1.Input
            sBuffer = Replace(sBuffer, Chr(10), "")        
            'alle "0A"-Zeichen löschen
            sBuffer = Replace(sBuffer, Chr(13), vbCrLf)    
            'und alle "0D"-Zeichen mit einem sauberen vbCRLF ersetzen und in
            'eine Textbox schreiben
            printText (sBuffer)                                
    End Select
End Sub
Sub printText(sText As String)
    Form1.TXT_AUSGABE.SelStart = Len(Form1.TXT_AUSGABE.Text)
    Form1.TXT_AUSGABE.SelText = sText
End Sub
Den Text in der Textbox kannst du mit
Dim sZeile() As String
Dim i as Long
sZeile=Split(Form1.TXT_AUSGABE.Text,vbCrLf)
For i =0 to UBound(sZeile)
    Debug.Print sZeile(i)
Next i
weiter aufbereiten bzw. auf einzelne Zeilen direkt zugreifen.

LG bfritz
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel