Discussion:
Com-Ports abfragen, neinnein, nicht DAS
(zu alt für eine Antwort)
Hans Alborg
2012-08-13 15:43:48 UTC
Permalink
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
2012-08-13 16:12:37 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
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.
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
2012-08-13 17:52:36 UTC
Permalink
"Claus Busch" schrieb...
Post by Claus Busch
Post by Hans Alborg
Meine Frage: kann ich mit VBA die COM-Ports abklappern und das Gerät finden?
auch nicht gerade das was du willst, aber vielleicht hilft es ein wenig
http://michael-schwimmer.de/vba027.htm
http://michael-schwimmer.de/vba072.htm
http://michael-schwimmer.de/vba117.htm
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
2012-08-14 08:50:28 UTC
Permalink
Hallo Hans,
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.
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
2012-08-14 11:43:44 UTC
Permalink
"Bernhard Sander"...
Post by Hans Alborg
Meine Frage: kann ich mit VBA die COM-Ports abklappern und das Gerät finden?
...musst Du Dich nicht um USB-Aspekte kümmern.
Das ist mir inzwischen auch klar. Diese WMI (s.Link in der Antwort für
Claus) liefert mir keine Ports.
Häufigt bietet so ein Treiber einen Einstellungsdialog, in dem man
festlegen kannst, auf welchem COM-Port sich das Gerät ansprechen lässt.
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.
Auf einem anderen Rechner musst Du auch die beiliegenden Treiber installieren.
Klaro. Es ergibt sich aber schon bei der Installation ein anderer Port.
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
[Code]
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
2012-08-14 12:46:11 UTC
Permalink
Hallo Hans,
Post by Hans Alborg
Eigentlich wollte ich ja sowas erreichen wie die Eigenschaften der Gerate im
Gerätemanager abzufragen.
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
Hans Alborg
2012-08-15 21:14:14 UTC
Permalink
"Bernhard Sander" schrieb...
Post by Bernhard Sander
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...
Hm, ich meinte das Fenster "Geräte und Drucker" hier in Win7. Allerdings
gibt's das in XP nicht.
Um in beiden Betriebssystemen kompatibel zu bleiben scheint Deine Methode
die beste zu sein.
Post by Bernhard Sander
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.
Ich geh das Risiko ein. Hardware kann wohl nicht kaputt gehen, bei den
Loggern könnte es evtl. zu Datenverlusten kommen, aber das kostet ja nicht
das Leben. Und wenn man's nicht probiert weiß man es nicht.
Ach, und ein Faxprogramm scheint auf ähnliche Art nach seinem Modem zu
suchen...

Vielen Dank für den Tip!

Hans

Loading...