Verbindung zu zweiter serieller Schnittstelle nicht möglich

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Verbindung zu zweiter serieller Schnittstelle nicht möglich

    Hallo,

    habe ein Programm geschrieben, das auf zwei serielle Schnittstellen von verschiedenen Geräten zugreifen soll.

    Ich kann auch über das Programm auf jede der beiden Schnittstellen zugreifen und etwas steuern.

    Nur wenn ich die jeweils zweite Schnittstelle öffnen will - egal in welcher Reihenfolge !!! - , bekomme ich die Fehlermeldung, das die Verbindung nicht hergestellt werden konnte.

    Also nochmal: Jede der beiden Zugriffe funktioniert, solange man nicht gleichzeitig die andere Schnittstelle auch öffnet.
    VB meckert immer beim öffnen der zweiten Schnittstelle.

    Hat jemand eine Idee ?

    *Topic verschoben*
    Bilder
    • Zweite_serielle_Schnittstelle.jpg

      24,92 kB, 459×351, 172 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Schreib mal in eine Test-Methode folgendes:

    VB.NET-Quellcode

    1. Dim Port1 As New SerialPort With {.PortName = "COM14", .BaudRate = ..., DataBits = ..., .StopBits = ...} 'Hier die richtigen Werte einfügen.
    2. Dim Port2 As New SerialPort With {.PortName = "COM10", ......} 'Selbiges wie vorher.
    3. Port1.Open()
    4. Port2.Open() 'Drehe diese beiden Befehle alternativ auch mal um.

    Gibt es auch da Fehlermeldungen?
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @Tilmann: Ich bin mal davon ausgegangen, dass Du weißt, was mit SerialPort gemeint ist.
    Wie Artentus erwähnt hat: ganz oben Imports System.IO.Ports hinschreiben, oder Dim Port1 As New System.IO.Ports.SerialPort .... anstelle von Dim Port1 As New SerialPort ... schreinben (gleiches mit Port2).
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Imports System.IO.Ports

    Hallo,

    habe jetzt "Imports System.IO.Ports" ganz oben hingeschrieben; am Fehler hat das aber nichts geändert.
    Muß man noch irgendwas zusammenklicken, um diesen Import zu bewerkstelligen ?

    > @Tilmann: Ich bin mal davon ausgegangen, dass Du weißt, was mit SerialPort gemeint ist.

    Ich weiß nicht, ob ich was nicht verstehe: Ich schicke über Visual Basic einen String an einen µC, damit dieser irgendwelche Ports schaltet, ein und aus, was am aufleuchten bestimmter LEDs auch zweifelsfrei zu erkennen ist. Mit der anderen Schnittstelle schicke ich Strings an einen speziellen Gas-Meß-Computer, mit dem ich ihn auffordere, z.B. seine Seriennummer oder Innentemperatur auf dem Display anzuzeigen. Das macht er dann auch. Also scheine ich die serielle Schnittstelle ein bischen benutzen zu können. Aber irgendwas fehlt wohl noch.

    Gruß Tilmann
    Wie wählst Du denn die Ports aus, über die Du kommunizierst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,
    ich habe zwei serielle Schnittstellen mittels Toolbox implementiert, die heißen Serialport1 und Serialport2. Serialport1 geht an Com10 und Serialport2 an Com14, das sind bei mir die Com-Schnittstellen, über die ich per Terminal kommunizieren kann. Ich greife also nicht 2 mal auf dieselbe Schnittstelle zu.

    So sieht der Quelltext aus:

    ______________________________________________________________________
    Imports System.IO
    'Imports System.IO.Ports


    Public Class Form1

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

    Try
    SerialPort1.Dispose()
    SerialPort1.PortName = TextBox1.Text
    SerialPort1.BaudRate = TextBox2.Text
    SerialPort1.Open()
    Button1.Enabled = False
    Button2.Enabled = True
    Button3.Enabled = True

    Catch ex As Exception
    MsgBox("Verbindung konnte nicht hergestellt werden !")
    End Try

    End Sub

    ' Button "schicke 7" (an µC). Schaltet Geberspeisung, Frequenzerzeugung und Umschaltung auf 6-2 ein.
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    SerialPort1.Write("1B007") 'Damit sollte ein Port auf "7" gesetzt werden. Deshalb heißt der Button "einschalten".
    End Sub
    ' Button "schicke 0" (an µC). Schaltet Geberspeisung, Frequenzerzeugung und Umschaltung auf 6-2 aus.
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    SerialPort1.Write("1B000") 'Damit sollte ein Port auf "0" gesetzt werden. Deshalb heißt der Button "ausschalten".
    End Sub

    ' Button "schicke folgendes:". Schickt Inhalt des Textfeldes an µC.
    Private Sub Fortwährend_schicken_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Fortwährend_schicken.Click
    Dim Sendestring As String
    Sendestring = Schickbox.Text '& vbCrLf
    'Do
    SerialPort1.Write(Sendestring)
    'Loop
    End Sub

    ' Textbox, deren Inhalt gesendet werden kann.
    Private Sub Schickbox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Schickbox.TextChanged
    End Sub


    'zweiter Button "verbinden"
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    Try
    SerialPort2.Dispose()
    SerialPort2.PortName = TextBox3.Text
    SerialPort2.BaudRate = TextBox4.Text
    SerialPort1.Open()
    Button4.Enabled = False
    'Button2.Enabled = True
    'Button3.Enabled = True

    Catch ex As Exception
    MsgBox("Verbindung konnte nicht hergestellt werden !")
    End Try
    End Sub

    'Zweiter Button "schicke folgendes an ERZ2000:"
    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    Dim Sendestring As String
    Sendestring = TextBox5.Text & vbCrLf ' "& vbCrLf" ist für ERZ2000
    SerialPort2.Write(Sendestring) 'diese Zeile wird vom Compiler beanstandet.
    End Sub

    'Textbox, in der steht was an ERZ2000 geschickt werden soll:
    Private Sub TextBox5_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox5.TextChanged
    End Sub

    'beim Schließen des Programmes auch die Schnittstellen schließen:
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    If SerialPort1.IsOpen = True Then
    SerialPort1.Close()
    End If
    If SerialPort2.IsOpen = True Then
    SerialPort2.Close()
    End If
    End Sub

    End Class
    _______________________________________________________

    Eigentlich mache ich zwei mal dasselbe, nur funktioniert es beim zweiten mal nicht.
    Inzwischen hat sich das Verhalten übrigens geändert, die zweite Schnittstelle funktioniert regelmäßig nicht, die erste funktioniert.

    Ideen ?

    Gruß Tilmann

    Tilmann schrieb:

    Ideen ?
    Schmeiß die beiden SerialPortX.Dispose()-Zeilen raus.
    Schmeiß alles Try / Catch raus, schließlich willst Du die Fehler finden und nicht verschleiern.
    Wenn Du 2 Mal praktisch identischen Code hast, pack ihn enttweder in eine separate Routine oder in eine separate Klasse.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!