Virtual ComPort-Nummer

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Poseidon
Beiträge: 2
Registriert: 11.09.2006 18:28

Virtual ComPort-Nummer

Beitrag 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?

-
Benutzeravatar
ThePuppetMaster
Beiträge: 8
Registriert: 05.06.2005 12:15

Beitrag 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
Benutzeravatar
Poseidon
Beiträge: 2
Registriert: 11.09.2006 18:28

Beitrag 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 
-
Antworten