Windows 7 - Com-Ports abfragen, neinnein, nicht DAS

Asked By Hans Alborg on 13-Aug-12 11:43 AM
Hello wieder liebe Gruppe!

Jaaa mir ist es gelungen ein Ger?t ?ber die COM- Schnittstelle auszulesen,
wenn auch erstmal ganz primitiv.
Und Entwarnung: mit einer DLL, die dem Ger?t beilag, war es so leicht
gemacht, da? auch ein Dreiradfahrer wie ich zu Ergebnissen kommen kann.

Aber jetzt!

Das Ger?t arbeitet an meinem Laptopf auf COM6. Es soll aber auch an andere
Rechner angest?pselt werden.

Meine Frage: kann ich mit VBA die COM-Ports abklappern und das Ger?t finden?
Die Suchmaschinen liefern zu "VBA COM-Port" nur lauter verzweifelte Texte,
wie man jenen die Daten ausliest.

Ich stelle mir sowas vor wie "den Standarddrucker ermitteln". Das sollte
doch mit einer Schleife alle Ger?te anzeigen, oder? Dann brauch ich nur noch
den Namen des Ger?tes...
Obwohl ja der Printer parallel und mein Ger?t seriell ist, sind doch beide
eigentlich USB-m??ig angeschlossen.

TIA,

Hans




Claus Busch replied to Hans Alborg on 13-Aug-12 12:12 PM
Hallo Hans,

Am Mon, 13 Aug 2012 17:43:48 +0200 schrieb Hans Alborg:


auch nicht gerade das was du willst, aber vielleicht hilft es ein wenig
weiter:
http://michael-schwimmer.de/vba027.htm
http://michael-schwimmer.de/vba072.htm
http://michael-schwimmer.de/vba117.htm


Mit freundlichen Gr??en
Claus Busch
--
Win XP Prof SP3 / Vista Ultimate SP2
Office 2003 SP3 /2007 Ultimate SP3
Hans Alborg replied to Claus Busch on 13-Aug-12 01:52 PM
Yeah. Beim Weiterst?bern im Netz hab ich das gefunden:
http://www.ms-office-forum.net/forum/showthread.php?t=206958

Damit wird mein Ger?t angezeigt, aber leider nicht der (virtuelle) COM-Port.

Lohnt sich aber auf jeden Fall damit zu testen.

Hans
Bernhard Sander replied to Hans Alborg on 14-Aug-12 04:50 AM
Hallo Hans,


Das Ger?t ist am USB-Stecker angeschlossen, wird aber als COM6 angesprochen.
Das wird technisch so gel?st, dass der Treiber f?r das Ger?t dem
Anwendungsprogramm vorgaukelt, dass das Ger?t ?ber COMx anzusprechen sei. Die
Umsetzung von COM auf USB findet dabei im Treiber statt. Von VBA aus musst Du
Dich nicht um USB-Aspekte k?mmern.

H?ufigt bietet so ein Treiber einen Einstellungsdialog anbietet, in dem man
festlegen kannst, auf welchem COM-Port sich das Ger?t ansprechen l?sst. N?heres
findest Du in der Doku zum Ger?t bzw. Treiber.
Auf einem anderen Rechner musst Du auch die beiliegenden Treiber installieren.

Von VBA aus ist es dann relativ einfach, die richtige COM-Schnittstelle zu
finden. Richte eine Schleife ein, die die COM-Ports alle abklappert und versucht
das Ger?t anzusprechen. Beim ersten Port, der eine korrekte Antwort liefert bist
Du richtig und ?ber diesen Port l?sst Du das weitere Programm arbeiten:

On Error Resume next
gefunden = false
For i=1 to 9
comPort = "COM" + i
' hier sprichst Du die Schnittstelle an
If (korrekte Antwort bekommen) then
gefunden = true
Exit For
End If
Next i

If gefunden then
' Rest des Makros
' die richtige Schnittstelle steht in der Variablen comPort
End If

Gru?
Bernhard Sander
Hans Alborg replied to Bernhard Sander on 14-Aug-12 07:43 AM
Das ist mir inzwischen auch klar. Diese WMI (s.Link in der Antwort f?r
Claus) liefert mir keine Ports.


Mein Manual sagt nur da? ich notieren soll welcher Port bei der Installation
angezeigt wird.
Da ich aber mehrere COM- Ger?te nutze kann sich der Port sogar mal am selben
Rechner ?ndern.


Klaro. Es ergibt sich aber schon bei der Installation ein anderer Port.


Das funktioniert sicher, wenn ich z.B. einem der Analogeing?nge des Ger?ts
eine feste Spannung gebe (Spannungsteiler).
Dann frage ich erstmal diesen Eingang an allen COM-Ports ab.

Meine Bef?rchtung ist aber, da? ich andere Ger?te ungewollt st?re bzw.
beeinflusse.
Kann da was mit (nur) "Read" passieren?
Leider (oder gottseidank) mu? ich wegen der DLL keine Parameter f?r den Port
setzen.

Jedenfalls erstmal vielen Dank. Das ist ein gangbarer Weg.

Eigentlich wollte ich ja sowas erreichen wie die Eigenschaften der Gerate im
Ger?temanager abzufragen.

Hans
Bernhard Sander replied to Hans Alborg on 14-Aug-12 08:46 AM
Hallo Hans,

F?r USB gibt es wohl ein allgemeines Verfahren, wie Ger?te sich gegen?ber dem
Betriebssystem identifizieren.
F?r Ger?te mit serieller Schnittstelle (RS232) ist mir kein allgemeines
Verfahren gel?ufig. Im Ger?temanager werden z.B. auch immer nur die
Schnittstellen (COM1, ...) aufgelistet, aber nicht, was f?r Ger?te momentan
angest?pselt sind. Bei (seriellen) Modems steht zwar im Ger?temanager, welches
Modell angeschlossen ist, aber an dieser Stelle "wei?" der Ger?temanager auf
Grund der Installation schon, dass es ein Modem sein soll und fragt das Modem
mit einem von allen Modems verstandenen AT-Befehl nach seinem Namen.

Rein theoretisch ist es schon m?glich, dass ein Befehl, der bei Ger?t X einfach
nur einen Status ausliest, bei Ger?t Y w?ste Dinge in Gang setzt. Ob diese
Gefahr bei Dir recht gro? ist, musst Du entscheiden.

Gru?
Bernhard Sander