Probleme mit Distanzmessgerät über RS232 /Com Port

Katzenauge

Grünschnabel
-----------------------------------------------------------------------------------------------------------------------

Hi Leute,

ich denke ihr könnt mir bestimmt helfen. Folgendes Problem beschäftigt mich:
Ich habe ein Distanzmessgerät welches ständig über die RS232 Schnittstelle Distanzdaten sendet. Über Hyperterminal sehe ich die gesendeten Daten ohne Probleme. Jede Sekunde kommen ca. 10 Messdaten an.

Leider habe ich es mit VB Express nicht hinbekommen diese Daten in eine Textbox oder ähnlichen sichtbar zu machen.

Ich benötige ein Tipp oder ein Code Beispiel das sich ähnlich wie Hyperterminal verhält. Habt ihr da was oder woran könnte es liegen, dass ich die Daten mit VB icht empfangen kann?

Port öffnen ist kein Problem, Funktioniert. Baud,Stop,DataBits ist richtig konfiguriert. 9600,1,8,
Sobald ich versuche zu lesen stürt das Programm ab.

Codeschnipsel:
Code (vb.net):
  1. Dim enc As System.Text.Encoding =New System.Text.ASCIIEncoding()
  2. With SerialPort1
  3. Try
  4. SelectCase EMPFANGEN_VARIANTE
  5. Case1
  6. PufferString = .ReadExisting
  7. Me.Invoke(Datenanzeigen)
  8. Case2
  9. For I As Integer=1To .BytesToRead ' Alle Bytes einzeln lesen
  10. Dim ByteArray() AsByte= {.BaseStream.ReadByte} ' 1 Byte lesen PufferString = enc.GetString(ByteArray) ' Array in String
  11. Me.Invoke(Datenanzeigen) ' Delegaten aufrufen
  12. Next
  13. CaseElse
  14. MessageBox.Show("Unbekannte Codevariante", "Empfangen ...")
  15. EndSelect
  16. Catch ex As Exception
  17. MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")
  18. End Try
  19. EndWith
Vielen Dank für eure Hilfe
 

Katzenauge

Grünschnabel
Hi Spyke,

super für die schnelle Antwort, so schnell hatte ich das gar nicht erwartet.
Ja , etwas schlecht beschrieben, sorry. Bin gerade nicht daheim. Ich poste dann noch einmal genau was nicht funktioniert. Aber vom Prinzip her kann ich nicht erkennen, dass was gesendet wird. SerialPort1.read ist immer leer. (Habe schon diverse Methoden ausprobiert)
 

Katzenauge

Grünschnabel
Hi,
da bin ich wieder, jetzt mit einer hoffentlich besseren Beschreibung meines Problems.
Mein Problem ist, dass die BytesToRead niemals größer als 0 sind. Obwohl die Schnittstelle unter Dauerfeuer liegt.
Dim ToRead As Integer = Port1.BytesToRead
Habe mal den ganzen Code gepostet. Woran kann das liegen. Habe leider kein altes Modem oder ähnlichen zum testen rumliegen. Kann nur noch die Aussage machen das unter Hyperterminal alles funkt. Komisch ......
Ziehe ich das Distanzmessgerät vom ComPort ab, habe ich den selben Effekt. Habt ihr Ideen?
Code:
Public Class Form1
Dim Daten As Integer
Dim Bytes As Integer
Dim Status As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Interval = 1000 ' 10 Sekunden
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Status = Port1.IsOpen
If (Status = False) Then
Port1.Open()
End If
Dim ToRead As Integer = Port1.BytesToRead
If ToRead > 0 Then
Dim Buffer(ToRead - 1) As Byte
Port1.Read(Buffer, 0, ToRead)
Dim HighByte As String = Buffer(0)
Dim LowByte As String = Buffer(1)
TextBox1.Text = String.Format("{0:X2} {1:X2}", Buffer(0), Buffer(1)) 'Zeigt die beiden Bytes in HEX an
MsgBox(HighByte * 256 + LowByte) '
End If
End Sub
End Class
 

Spyke

Premium-User
ruf mal direkt Port1.Read auf ohne Prüfung von BytesToRead.

Ich denke ich würde auch in einer schleife immer aus Port1.Read lesen (in 65kb schritten oder so),
solange der Rückgabewert ungleich 0 ist.
 

Katzenauge

Grünschnabel
Hi Spyke,
Support bitte einstellen :)
Habe die Lösung meines Problems erkannt. Ich konnte die Daten nicht lesen da
Port1.DtrEnable = True nicht gesetzt war. Jetzt funktioniert alles wie gewünscht!

THX
 

Neue Beiträge