Forum: PC-Programmierung Virtual COM Port Problem


von Lothar (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte mit VB ein Board mit Virtual COM Port ansprechen. Wie im Bild 
zu sehen, wird der Port erkannt (COM5), aber beim Öffnen kommt:

IOException: Ein an das System angeschlossenes Gerät funktioniert nicht.

Mit einem Terminalprogramm funktioniert es, am Virtual COM Port Treiber 
liegt es also nicht. Was kann es sein? Time-Out Problem? Hier der Code:

SerialPort.PortName = cmbPort.Text
SerialPort.BaudRate = cmbBaud.Text
SerialPort.Parity = IO.Ports.Parity.None
SerialPort.StopBits = IO.Ports.StopBits.One
SerialPort.DataBits = 8
SerialPort.Open()

Danke!
Lothar

: Verschoben durch Moderator
von Ralf (Gast)


Lesenswert?

>> Hier der Code:
> IOException: Ein an das System angeschlossenes Gerät funktioniert nicht.
Schön. Und an welcher Zeile tritt der Fehler auf?
Ist der Port von einer anderen Software belegt? Wird er zweimal von 
deiner Software geöffnet? Wird der Text der Comboboxen automatisch in 
Zahlen konvertiert? Funktioniert das ganze mit dem echten COM-Port? Kann 
ein anderes VB-Programm auf die Schnittstelle zugreifen?

Ralf

von Lothar (Gast)


Lesenswert?

Natürlich bei: SerialPort.Open()

Inzwischen habe ich als Test diesen Aufruf in eine DLL ausgelagert, und 
damit funktioniert es in VB.

Ich verstehe aber nicht, warum es in VB direkt nicht geht. Kann man das 
irgendwie rausfinden bzw. debuggen?

von Timmo H. (masterfx)


Lesenswert?

>SerialPort.BaudRate = cmbBaud.Text
wird da nicht ein Integer erwartet? Du übergibts ja einen String. Da 
müsste doch auch der Compiler meckern, oder?

von Lothar (Gast)


Angehängte Dateien:

Lesenswert?

Timmo H. schrieb:
>>SerialPort.BaudRate = cmbBaud.Text
> wird da nicht ein Integer erwartet? Du übergibts ja einen String. Da
> müsste doch auch der Compiler meckern, oder?

Daran liegt es nicht. Ich nehme an dieses .NET Objekt ist "überladen" 
und nimmt Integer oder Strings. Aber auch direkt mit Integer 9600 bleibt 
das Problem. Anbei ein Screenshot vom Debugger. Es muss ein Time-Out 
Problem sein.

von bluppdidupp (Gast)


Lesenswert?

Das riecht für mich ziemlich stark nach einem Treiber-Problem.
Da set_DtrEnable fehlschlägt wird der Treiber wohl Probleme mit 
SerialPort.DtrEnable=false haben.

...bzw. IOCTL_SERIAL_CLR_DTR und/oder IOCTL_SERIAL_SET_DTR nicht richtig 
implementiert haben. Kann mit Tools wie Portmon überprüft werden:
http://technet.microsoft.com/de-de/sysinternals/bb896644.aspx

von Marc A. (mark2013)


Angehängte Dateien:

Lesenswert?

WOran könnte es liegen das der MikroController nicht antwortet?

Bitte helft mit ;)

von Timmo H. (masterfx)


Lesenswert?

Im Codeblocks-Projectfile ist leider nicht der Code drin. Wenn dann 
brauchen wir schon deine C, und Header-Files.
Und wenn der µC nicht antwortet, kann das auch am µC liegen, aber den 
Code haben wir ja nicht.

von Marc A. (mark2013)


Angehängte Dateien:

Lesenswert?

ohh sorry .Hier ist der Code ...
Auf dem Terminalprogramm Tera Term läuft es.
Der uC reagiert auf den Befehl @ru und schickt dann Daten zurück.Soweit 
die Theorie.
Nachdem ich den Befehl sende Empfange ich keine Daten woran liegt das?
Bitte um eure Hilfe...

von Jürgen W. (lovos)


Lesenswert?

In vergleichbaren Situationen habe ich ein spezielles Bitmuster 
periodisch rausgeschrieben ( 0x55 oder 0xAA ) und am OSZI geschaut, was 
auf der Leitung drauf ist (einschliesslich Start-Stop-Bits).
Und dann sieht man gleich, ob es an der Empfänger- oder Senderseite 
hakt.

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.