Seite 1 von 1
Virtual ComPort-Nummer
Verfasst: 01.07.2007 12:54
von Poseidon
Hallo,
habe erfolgreich einen USB to Serial Treiber (AT91 USB to Serial Converter) auf COM12 installiert. Hyperterminal spricht mit ihm, mein Programm über
Code: Alles auswählen
...
Device.s="COM"+Str(number)+":"
Result = CreateFile_(@Device, $C0000000, 0, 0, 3, 0, 0); create and open
...
leider nicht.
Habe dann mit vielen Flüchen in der Registry den COM12 auf COM3 geändert und alles funktioniert (wie immer!).
Also meine Frage: Gibt es irgendwo eine Grenze für virtuelle COM-Ports?
-
Verfasst: 01.07.2007 17:10
von ThePuppetMaster
Hallöle.
Zum eine, kannst du die COM-Nummer einstellungen in der Hardware-Konfiguration von Windows-XP per Hand einstellen, ohne über die Regestry zu wandern.
Start -> Systemsteuerung -> System -> Hardware -> Gerätemanager -> Anschlüsse -> [COM-Gerät auswählen] -> Anschlusseinstellungen -> Erweitert -> [COM-Anschlussnummer:]
Was den Zugriff angeht.
Unter XP brauchst du eine andere "Devicename" kennung .. dort reicht es nicht mehr aus, wenn du nur "com1" schreibst.
Ich glaube, das ab Com 10 oder 9 die schreibweise mit einem vorangegangenem "//./COM<nummer>" (ohne ":") geschrieben werden muss.
z.B. "//./COM12"
Damit sollte das dann funzen. Du kannst ja mal testen, ab welcher nummer das nötig ist. Dann wissen das hier auch andere
MfG
TPM
Verfasst: 01.07.2007 18:32
von Poseidon
Hallo TPM,
vielen Dank für deinen Tip. Hier das Ergebnis:
1. Anschlusseinstellungen bietet leider nicht jeder Treiber. Dieser z.B. nicht. Schade eigentlich.
2. CreateFile mit XP funktioniert auch bis "COM9" (einstellig)
3. Hab noch mal unter CreateFile bei MSDN nachgeschaut: da steht "\\\\.\\COM10" (is natürlich C-Syntax) in PureBasic: "\\.\COM10"
Also hier eine einfache Prozedur, das jetzt alle COMs findet:
Code: Alles auswählen
Procedure.l CheckPort(number.w) ;check serial ports
Device.s="\\.\COM"+Str(number)
Result = CreateFile_(@Device, $C0000000, 0, 0, 3, 0, 0); create and open a existing device/file
If Result = -1 ;no port
ProcedureReturn 0 ;exit
EndIf
MessageRequester("Info", "COM " + Str(number) + " available.", 48) ;message
CloseHandle_(Result) ;close port again
ProcedureReturn 1
EndProcedure
-