Forum: PC-Programmierung Serielle Schnittstelle in VB2005


von Didi S. (desperatedude)


Lesenswert?

Hallo.
Ich hab ein kleines Problem mit dem schließen des Com Ports in VB2005.
Ich möchte mit meinem Programm eine Art "Sendersuchlauf" durchführen um 
von dem am Comport angeschlossenen XBee die Baudrate herauszufinden. Das 
ganze funktioniert schon ganz gut. Ich beginne mit 
serialport.write("+++") auf 1200Baud und erhöhe dann die Baudrate 
schrittweise. Wenn die Baudrate der des XBEE entspricht bekomme ich ein 
OK.
Sobald ich dieses OK gefolgt von 13 in Byte (was der Enter Taste 
entspricht) bekomme, schicke ich die init (ATBD3, usw.) für 9600Baud und 
möchte die Baudrate des PC´s siehe Codeschnippsel auf 9600 ändern. 
Leider hängt sich das Programm nach dem serialport.close() befehl auf 
sobald einmal daten empfangen worden sind.

Bitte um Hilfe!

Public Sub config_serial()


        If serialPort.IsOpen Then serialPort.Close()


        Try
            With serialPort
                .PortName = cbbCOMPorts.Text
                .BaudRate = 9600
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
                .ReadTimeout = 2000
            End With

            serialPort.Open()
        Catch ex As Exception
            MsgBox("Com Port konnte nicht geöffnet werden")
        End Try


    End Sub

von juppi (Gast)


Lesenswert?

@Didi Strasser (desperatedude)

Wie und Was empfängst du?

von Didi S. (desperatedude)


Lesenswert?

Sobald die Baudrate vom PC mit der Baudrate des XBEE übereinstimmt, 
bekomme ich auf mein vom PC aus gesendetes +++ vom XBEE die antwort 
"OK"+ Enter
Dann weiß mein Programm das der XBEE momentan auf beispielsweise 19200 
Baud konfiguriert ist.

Zum Empfangen verwende folgende Routine

Dim Empfang in Byte

Empfang = serialport.readbyte()

If Empfang = 13 then xbee_gefunden()

ansonsten Baudrate erhöhen.

von Severino R. (severino)


Lesenswert?

Kannst Du den Code denn nicht so posten, dass man die Sache einfach 
ausprobieren kann? Z.B. Projekt gezippt? Aber bitte auf das Minimum 
abgespeckt, um das Verhalten zu testen.

von Arc N. (arc)


Lesenswert?

1. Nach einem Close() sollte eine gewisse Zeit gewartet werden, bis der 
Port wieder geöffnet wird.
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.close.aspx
2. BaudRate kann auch ohne Close()/Open() geändert werden

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.