Forum: PC-Programmierung Virtual Com Port mit VB automatisch finden


von delegug (Gast)


Lesenswert?

Guten Tag,

ich habe ein Problem mit einem Gerät. Das Gerät erzeugt einen virtuellen 
Com-Port über eine USB Schnittstelle am PC. Ich möchte nun mit VB auf 
dieses Gerät zugreifen, ohne den Com-Port einstellen zu müssen.

Das Problem ist, dass das Gerät einen Timeout von 2s hat und deshalb 
dauert es immer ziemlich lange wenn man einfach alle aktiven Ports 
abfragt.

Gibt es sonst noch irgendwelche Möglichkeiten zu erkennen dass es ein 
virtueller Port ist z.B. über die PID/VID...?

Hoff mir kann jemand helfen.

von Christian R. (supachris)


Lesenswert?

Kannst du dir aus der Registry auslesen. Bei FTDI zum 
Beispiel:http://www.ftdichip.com/Support/Knowledgebase/index.html?wherecanifindport.htm 
und dann einfach gleich direkt den entsprechenden COM Port öffnen 
(vorher bei HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM gucken, ob 
der überhaupt gerade angesteckt ist).

von ManiB (Gast)


Lesenswert?

Hi,
bei meinem Programm, welches ebenfalls die Ser. Ports nutzt, habe ich 
einen einfachen Test aller 16 Com-Ports realisiert, um herauszufinden, 
ob am Port was angeschlossen ist. Das sollte bei dir auch funktionieren:
1
Private Sub Form_Load()
2
    '-----------------------------
3
    'Port-Test
4
    On Error GoTo PortTestError
5
    Dim oldPort As Integer
6
    oldPort = MSComm1.CommPort
7
    For i = 0 To 15
8
        optComPort(i).ForeColor = &H80000011
9
        MSComm1.CommPort = i + 1
10
        MSComm1.PortOpen = True
11
        MSComm1.PortOpen = False
12
        optComPort(i).ForeColor = &H80000012
13
NextPortTest:
14
    Next i
15
    MSComm1.CommPort = oldPort
16
    '-----------------------------
17
    
18
On Error GoTo 0
19
    Exit Sub
20
    
21
PortTestError:
22
    Resume NextPortTest
23
24
End Sub

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> aller 16 Com-Ports

Du weißt, daß Windows 256 serielle Schnittstellen unterstützt?

von Christian R. (supachris)


Lesenswert?

Es sind 255, denn COM 0 gibts nicht. Aber egal. Das stupide Öffnen aller 
Com-Ports dauert erstens lange und zweitens kann das sehr dreckige 
Nebeneffekte haben. Wenn ich z.B. den virtuellen COM Port meines 
Original TI USB Debuggers für den MSP430 öffne, obwohl er gerade durch 
die Debug-Software geöffnet ist, schmiert die Software ab und der COM 
Port ist auch nicht mehr anzusprechen bis man USB abzieht und wieder 
ansteckt. Das sollte man tunlichst unterlassen, das ist einfach nur 
schlampig und dreckig programmiert. Eine simple Abfrage der 
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM zeigt alle verfügbaren 
COM Ports an, ohne dass man dran rum fummeln muss.

von delegug (Gast)


Lesenswert?

Also danke für die Beiträge,

das funktioniert jetzt einwandfrei. Über das Registry ist es echt viel 
besser und schneller, nicht so wie die einzelnen Ports zu öffnen und 
abzufragen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Es sind 255, denn COM 0 gibts nicht.

Dafür gibts aber COM256.

Ich hatte gehofft, daß durch die Nennung der schieren Anzahl möglicher 
Schnittstellen der von Dir zu Recht stupide genannte Ansatz auch so als 
suboptimal erkannt werden könnte, aber Dein deutlicher Hinweis ist wohl 
doch besser.

von Christian R. (supachris)


Lesenswert?

Rufus t. Firefly schrieb:
>> Es sind 255, denn COM 0 gibts nicht.
>
> Dafür gibts aber COM256.

Echt? Waren wohl Matlab "Programmierer" am Werk....

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nee, Pascal.

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.