Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Bluetooth und AsyncPro (https://www.delphipraxis.net/161976-bluetooth-und-asyncpro.html)

yogie 31. Jul 2011 09:59

Bluetooth und AsyncPro
 
Hallo zusammen,
eine Frage zu einer seriellen Verbindung via Bluetooth

- Bluetooth dongle an einem USB-Port im Notebook
- Gerätemanager zeigt virtuellen COM Port auf COM 9
- Verbindung mit Hyperterminal funktioniert
- Daten lassen sich von und zum Bluetooth Gerät übertragen

Nun das Ganze in einem Delphi Programm mit AsycnPro

Beim Öffenen des COM Ports gibt es eine Exception,
Exception kann von AsyncPro nicht zugeordnet werden.
Debuggen im Programm liefert eine Stelle ( in AsyncPro.AWUser) mit einem Aufruf
von CREATEFILE mit dem COM-Namen \\.\COM9 , das klappt nicht!

Zum Vergleich das Programm mit einem „normalen“ seriellen
USB-Port (COM5) gestartet und die Stelle bei CREATEFILE überprüft,
dort wird mit \\.\COM5 aufgerufen und alles klappt wie gewünscht.

Brauche ich da einen Zauberstab von Microsoft :?
Ich arbeite schon mehrer Jahre mit AyncPro und kenne eigentlich die
übleichen Probleme, aber das ist neu!

himitsu 31. Jul 2011 10:24

AW: Bluetooth und AsyncPro
 
Kannst du dir anzeigen lassen, welchen Fehlercode (GetLastError) das CreateFile dort zurückliefert?
Und wie sehen die anderen Parameter des CreateFile-Aufrufs aus?

Zitat:

gibt es eine Exception,
Mit welchem Meldungstext?


Was gerne vorkommt, daß irgendein anderes Programm den Port schon exklusiv geöffnet hat und dann kein Anderer mehr drauf zugreifen kann.

Chemiker 31. Jul 2011 10:43

AW: Bluetooth und AsyncPro
 
Hallo yogie,

benutzt Du noch Delphi 6 Prof?

Bis bald Chemiker

yogie 31. Jul 2011 11:08

AW: Bluetooth und AsyncPro
 
.. das ging schnell

Auszug aus AsyncPro

Result := CreateFile(ComName, {name}
GENERIC_READ or GENERIC_WRITE, {access attributes}
0, {no sharing}
nil, {no security}
OPEN_EXISTING, {creation action}
FILE_ATTRIBUTE_NORMAL or
FILE_FLAG_OVERLAPPED, {attributes}
0); {no template}

als Result kommt -1
@ Chemiker : ja immer noch D6 Pro
@ himitsu : das problem ist bekannt, der Fehler tritt auch unmittelbar nach einem reboot auf

Ich lasse AsyncPro nach verfügbaren COM Ports suchen, manch mal ist der
Bluetooth Port in der Liste, manchmal nicht, obwohl er im Gerätemanager immer auftaucht!

Zusatz: GetLastError liefert als code 1168 das ist laut einer Liste "Element not found"

Chemiker 31. Jul 2011 11:43

AW: Bluetooth und AsyncPro
 
Hallo yogie,

um auszuschließen, dass es am Delphi-Programm liegt, benutze ich immer einen virtuellen COM-Port (Com0Comm) um unter kontrollierte Bedingungen Fehler im Programm auszuschließen. Wenn die Übertragung dann nicht funktioniert liegt es nicht am Programm, sondern am Adapter.

Und es ist leider so, dass nicht jeder Adapter geeignet ist.

Bis bald Chemiker

hathor 31. Jul 2011 14:01

AW: Bluetooth und AsyncPro
 
Kann AsyncPro bis max. COM-Port 255 arbeiten ?
Evtl. ist ein Limit gesetzt.

Alternative:
1. Alle Geräte deaktivieren, die auf einen COM-Port zugreifen.
2. Unter "Systemsteuerung - System - Erweitert - Umgebungsvariablen - Systemvariablen" einen neuen Eintrag erstellen:
devmgr_show_nonpresent_devices Wert: 1
3. Im Gerätemanager unter "Ansicht" auswählen: Geräte nach Typ und Ausgeblendete Geräte anzeigen

Dort sollten jetzt alle COM-Ports, auch die zur Zeit nicht genutzten, angezeigt werden.

Nicht gewünschte COM-Ports löschen:
Mit einem Rechtsklick auf den jeweiligen Anschluss kann dann in dem erscheinenden Kontextmenü
die Option "Deinstallieren" gewählt werden.

yogie 31. Jul 2011 14:11

AW: Bluetooth und AsyncPro
 
@ hathor : danke für den Tip
nein, kein Limit ich habe in anderen Anwendungen schon
COM Ports mit Nummern bis 20 verwendet. AsyncPro sucht
bei nicht eingestellter Nummer (soweit ich weiß) bis 255-

mkinzler 31. Jul 2011 14:14

AW: Bluetooth und AsyncPro
 
Ändere den Modus trotzdem mal testweise auf sharing

hathor 31. Jul 2011 14:53

AW: Bluetooth und AsyncPro
 
Win XP mit SP2 benutzt einen internen Zähler, um die COM-Ports zu verwalten.
Diesen kann man zurücksetzen, indem man über
Start, Ausführen, das Programm Regedit aufruft.
Dann dort unter
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\COM Name Arbiter
den Wert "ComDB" auf "0F" stellen.
Danach zählt Win XP wieder ab COM 5 hoch.

yogie 31. Jul 2011 19:00

AW: Bluetooth und AsyncPro
 
Hier noch eine kurze Meldung zu meinem Problem:

Es liegt nicht ausschließlich am öffnen des Ports.

Ich lasse AsyncPro nach verfügbaren Ports suchen. Das
hat bisher auch immer funktioniert. In Zusamenhang mit
Bluetooth geht da aber was schief. Ich vermute wegen
der langen Antwortzeiten beim Aufbau der Verbindung.

Das dann folgende Open auf den (verfügbaren) Port liefert
dann den Fehler. Ich werde das aber noch genauer darstelen.

Jetzt ist aber erstmal Schluß!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz