Serielle Schnittstelle

#2541982
Lesenswert?

Hallo,
kann mir jemand helfen?

ich habe einen Tams Master Controll(Digitalessteuergerät für eine 
Modellbahn) und will ihn jetzt über den PC steuern. Mein Code sieht so 
aus(,aber ich finde den Fehler nicht):

Public Class Form1

    Const COM_PORT As String = "COM9"

    Dim PufferString As String

    Private Delegate Sub DelegateSub()
    Private Datenanzeigen As New DelegateSub(AddressOf Anzeigen)

------------------------------------------------------------------------ 
---

    Private Sub Form1Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) _ Handles MyBase.Load

        Dim EinzelPort As String

        Debug.WriteLine("INFO: Folgende Ports wurden auf dem System 
gefunden:")
        For Each EinzelPort In My.Computer.Ports.SerialPortNames
            Debug.WriteLine(EinzelPort)
        Next EinzelPort

        With SerialPort1
            If Not .IsOpen Then
                Try
                    .PortName = COM_PORT
                    .BaudRate = 57600
                    .DataBits = 8
                    .WriteTimeout = 2000                   ' 1000 ms = 1 
Sek.
                    .ReadTimeout = 2000                    ' 1000 ms = 1 
Sek.
                    .Handshake = IO.Ports.Handshake.None
                    .NewLine = vbCr
                    .Open()
                    Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
                Catch ex As Exception
                    MessageBox.Show(ex.Message, "Fehler beim Open", _
                                MessageBoxButtons.OK, 
MessageBoxIcon.Error)
                    Exit Sub
                End Try
            End If
        End With

        TextBox1.Multiline = True
        TextBox1.ScrollBars = ScrollBars.Both

    End Sub


------------------------------------------------------------------------ 
---
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) _Handles Button1.Click


        Try
            SerialPort1.WriteLine(TextBox1.Text)

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fehler beim Senden ...")
            Exit Sub
        End Try

        Debug.WriteLine("Daten übermittelt!")

        Try
            TextBox1.Text = SerialPort1.ReadLine

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")
        End Try

    End Sub

'----------------------------------------------------------------------- 
---

    Private Sub SerialPort1_DataReceived(ByVal sender As Object, _
                                ByVal e As 
System.IO.Ports.SerialDataReceivedEventArgs)_ Handles 
SerialPort1.DataReceived

    End Sub



    Private Sub Anzeigen()
        TextBox1.AppendText(PufferString)                       ' Text 
am Ende hinzufügen
        TextBox1.ScrollToCaret()                       ' Scrollen bis 
zum neuen Text
    End Sub

'----------------------------------------------------------------------- 
---

    Private Sub Form1_FormClosing(ByVal sender As Object, _
      ByVal e As System.Windows.Forms.FormClosingEventArgs) _ Handles 
Me.FormClosing

        If SerialPort1.IsOpen Then SerialPort1.Close() ' Port wieder 
Schließen
        Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
    End Sub
End Class

Ich glaube das keine Verbindung mit dem Gerät hergestellt wird.

danke, schon mal im Vorhinaus. :)
#2542118
Lesenswert?

Moritz R. schrieb:
> Ich glaube das keine Verbindung mit dem Gerät hergestellt wird.

zu Glaubens-Fragen sind eher religiös orientierte Boards vermutlich 
bessere Ratgeber....

Ansonsten soltest du einiges mehr zu deiner Hardware und Umgebung 
schreiben (mit Produktlinks, Fotos etc). Bei diesem Wetter beschlagen 
die Glaskugeln nämlich ziemich schnell...
#2544991
Lesenswert?

der gesamte code:
Const COM_PORT As String = "COM9"

    Dim PufferString As String

    Private Delegate Sub DelegateSub()
    Private Datenanzeigen As New DelegateSub(AddressOf Anzeigen)



    Private Sub Form1Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) _
                                Handles MyBase.Load

        Dim EinzelPort As String

        Debug.WriteLine("INFO: Folgende Ports wurden auf dem System 
gefunden:")
        For Each EinzelPort In My.Computer.Ports.SerialPortNames
            Debug.WriteLine(EinzelPort)
        Next EinzelPort

        With SerialPort1
            If Not .IsOpen Then
                Try
                    '.PortName = COM_PORT
                    '.BaudRate = 57600
                    '.DataBits = 8
                    '.WriteTimeout = 2000                        ' 1000 
ms = 1 Sek.
                    '.ReadTimeout = 2000                         ' 1000 
ms = 1 Sek.
                    '.Handshake = IO.Ports.Handshake.None
                    '.ReceivedBytesThreshold = 1
                    .NewLine = vbCr
                    .Open()
                    Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
                Catch ex As Exception
                    MessageBox.Show(ex.Message, "Fehler beim Open", _
                                    MessageBoxButtons.OK, 
MessageBoxIcon.Error)
                    Exit Sub
                End Try
            End If
        End With

        TextBox1.Multiline = True
        TextBox1.ScrollBars = ScrollBars.Both

    End Sub



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) _
                                Handles Button1.Click


        Try
            PufferString = ""
            SerialPort1.WriteLine(TextBox1.Text)

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fehler beim Senden ...")
            Exit Sub
        End Try

        Debug.WriteLine("Daten übermittelt!")
        TextBox1.Text = ""

    End Sub



    Private Sub SerialPort1_DataReceived(ByVal sender As Object, _
                                ByVal e As 
System.IO.Ports.SerialDataReceivedEventArgs) _
                                Handles SerialPort1.DataReceived 
'hier
        Dim response As String

        Try
            'TextBox1.Text = TextBox1.Text & SerialPort1.ReadExisting
            response = SerialPort1.ReadExisting
            Debug.WriteLine(response)
            PufferString &= response
            If PufferString.EndsWith("]") Then
                'event auslösen
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fehler beim Empfangen ...")
        End Try
    End Sub



    Private Sub Anzeigen()
        Label1.Text = PufferString
    End Sub



    Private Sub Form1_FormClosing(ByVal sender As Object, _
                                ByVal e As 
System.Windows.Forms.FormClosingEventArgs) _
                                Handles Me.FormClosing
        If SerialPort1.IsOpen Then SerialPort1.Close() ' Port wieder 
Schließen
        Debug.WriteLine("Port Open: " & SerialPort1.IsOpen)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button2.Click
        Anzeigen()
    End Sub


    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button3.Click
        Try
            PufferString = ""
            SerialPort1.WriteLine("Behfehl") '<----hier befehl eingeben

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fehler beim Senden ...")
            Exit Sub
        End Try

        Debug.WriteLine("Daten übermittelt!")
        TextBox1.Text = ""

    End Sub

..und die Eigenschaften:
unter serial_port :
                   -DtrEnable auf "True"
                   -RtsEnable auf "True"

Gruß Moritz

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren