| |
Visual-Basic EinsteigerRe: 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 | |
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 | |
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 | |
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 | |
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 | |
| 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 |
|
|
sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
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
|
|