LabVIEWForum.de
VISA USB-Gerätetreiber mehrfach verwenden? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: VISA USB-Gerätetreiber mehrfach verwenden? (/Thread-VISA-USB-Geraetetreiber-mehrfach-verwenden)



VISA USB-Gerätetreiber mehrfach verwenden? - LVuser85 - 12.01.2015 13:24

Hallo LabVIEW Forumgemeinde,
für folgende Aufgabe finde ich leider keinen Lösungsansatz und hoffe dass ihr mich dabei unterstützen könnt:

Ich möchte ein USB I/O Gerät welches unter Windows als Standardmaus (HID-Treiber) erkannt wird, ansprächen um die Inputs bzw. Outputs des USB-Geräts lesen bzw. setzen zu können.

Mit den in LabVIEW bereits vorhandenen VIs (Steuerung von Eingabegeräten), kann ich nicht alle Inputs abfragen und Outputs setzen funktioniert ja sowieso nicht. Daraufhin habe ich mit NI-VISA Driver Wizard ein Treiber erzeugt, damit funktioniert das jetzt soweit ganz gut.

Jedoch habe ich sehr viele von diesen identischen (abgesehen von der S/N) USB-Geräten, bei den ich die Funktion testen möchte. Mit dem bereits erzeugten VISA-Treiber, werden die anderen Geräte nicht erkannt, was für mich auch einigermaßen verständlich ist, da der VISA-Ressourcenname, wegen der Seriennummer anders ist.
Mit dem Fertigen Programm möchte ich nur kurz die I/O-Funktionen der Geräte testen, dafür ständig neue VISA-Treiber anzulegen wäre viel zu zeitrauben.

Nach langem recherchieren fällt mir aber auch keine Alternative zu VISA ein, also wenn ihr Vorschläge für mein Problem habt, wäre ich sehr dankbar.

Im USB-Gerät verbauter Mikrocontroller: PIC18F4550 (PID, VID usw. habe ich)
Inputs am Mikrocontroller = Taster
Outputs am Mikrocontroller = LEDs
Meine LV Version = 2014

Viele Grüße
LVuser85


RE: VISA USB-Gerätetreiber mehrfach verwenden? - dali4u - 12.01.2015 15:10

1.
Jedes USB Device wird eindeutig über die PID und VID erkannt.
Wenn Du mehrere Geräte hast, die den gleichen Treiber nutzen, kannst Du
die erzeugte INI ändern und die anderen PID und VID Kombinationen
hinzufügen.

2. Das die VISA-Ressourcenname unterschielich sind ist auch gut so. Aber Du
kannst auch nach Ressourcennamen suchen die dann in ein 1D Array geschrieben
werden.

3. Deine Angaben sind, zumindestens für mich, etwas schwammig. Es ist nicht 100%ig klar
was Du genau willst und vor allem bei was für "Geräten"?

Gruß
Stefan


RE: VISA USB-Gerätetreiber mehrfach verwenden? - LVuser85 - 13.01.2015 08:14

Hallo Stefan,
vielen Dank schon mal für deine Unterstützung.

Zu 1. Mit dem VISA Driver Wizard erzeuge ich eine inf-Datei, die ich anschließend installiere. Dann wird das Gerät auch in MAX erkannt, damit war das Thema für mich erledigt.
Aber ich weiß nicht von einer INI-Datei, beim „USB-basierten Geräten mit VISA“ Tutorium wird die auch nicht erwähnt. Kannst du bitte mir mehr Informationen dazu geben.

Zu 3. Es ist ein Bedienelement mit beleuchteten Tasten und ich möchte im Grunde „nur“ Testen ob die drei Taster (Controller-Eingang) und die drei LEDs (Controller-Ausgang) funktionieren.

Gruß
LVuser85


RE: VISA USB-Gerätetreiber mehrfach verwenden? - dali4u - 13.01.2015 09:59

(13.01.2015 08:14 )LVuser85 schrieb:  Zu 1. Mit dem VISA Driver Wizard erzeuge ich eine inf-Datei, die ich anschließend installiere. Dann wird das Gerät auch in MAX erkannt, damit war das Thema für mich erledigt.
Aber ich weiß nicht von einer INI-Datei, beim „USB-basierten Geräten mit VISA“ Tutorium wird die auch nicht erwähnt. Kannst du bitte mir mehr Informationen dazu geben.

Ups, INF natürlich und nicht INI (habe bei der gestrigen Antwort gerade an einer INI Datei in LabVIEW gearbeitet).

Aber ist nicht klar warum Du einen USB Treiber mehrfach verwenden willst? Du schließt doch
ein Bedienelement an das Du testen willst, oder nicht. Ich erkenne Dein Problem immer noch
nicht.


RE: VISA USB-Gerätetreiber mehrfach verwenden? - LVuser85 - 13.01.2015 10:51

Das Problem ist, dass ich rund 200 Teile habe, aber ich will nicht 200-mal eine neue inf-Datei erzeugen da die Teile eh alle gleich sind (außer S/N).

Ich habe für ein Bedienelement (S/N:1) eine inf Datei angelegt, das Teil kann ich auch mit LV testen.
Wenn ich aber ein identisches Bedienelement mit S/N:2 anschließe (auf demselben Port), wird es als Standartmaus erkannt und in MAX wird es auch nicht angezeigt.

Gibt es die Möglichkeit, die inf-Datei soweit zu verändern, dass alle Geräte mit der gleichen VID und PID den bereits angelegten Treiber verwenden?

Mein VI wäre von der Idee her wie auf dem angehängten Bild vereinfacht dargestellt.


RE: VISA USB-Gerätetreiber mehrfach verwenden? - dali4u - 13.01.2015 10:53

(13.01.2015 10:51 )LVuser85 schrieb:  Gibt es die Möglichkeit, die inf-Datei soweit zu verändern, dass alle Geräte mit der gleichen VID und PID den bereits angelegten Treiber verwenden?

Ja, aber ohne die INF gehts nicht. Poste die hier bitte mal.


RE: VISA USB-Gerätetreiber mehrfach verwenden? - LVuser85 - 13.01.2015 12:06

So, hab die Datei als .txt angehängt.


RE: VISA USB-Gerätetreiber mehrfach verwenden? - dali4u - 13.01.2015 12:56

Die INF ist soweit OK und sollte auch für mehrere Geräte funktionieren, sofern die Kombination
aus für PID und VID stimmt (USB\VID_04D8&PID_FA23). Ein feste SN ist nicht eingetragen (hätte mich
auch stark gewundert) und wird nun durch den USB Stack im Gerät bestimmt und liegt damit
nicht mehr in Deiner Hand (außer Du programmierst die Geräte auch selber).
In jedem USB Stack kann die VID, PID und eine Seriennummer eingetragen werden. Wenn
bei der Seriennummer etwas eingetragen ist, findest Du das unteranderem in der Registry.

HKLM\SYSTEM\CurrentControlSet\Enum\USB

Hier ist eine Auflistung aller bisher am System angeschlossener USB Geräte. Hier solltest Du
auch ein Eintrag der Form "VID_04D8&PID_FA23" finden. Wenn Du den öffnest findest Du
weitere Untereinträge.

1)
Wenn diese die Form einer Seriennummer haben, z.B.
"000000000000"
"TUSB3410_____"
"123987129387"
etc., ist im USB Stack Deiner Geräte eine Seriennummer eingetragen. Wenn die von Geräte
zu Gerät jetzt verschieden ist, sollte es keine Probleme geben und Du kannst sogar gleichzeitig
mehrere Geräte anschließen.

2)
Wenn Du jetzt mal 2 Geräte hintereinander angeschlossen und wieder abgezogen hast, und
nur ein Eintrag auftaucht, z.B. "00000000000" oder ähnliches, haben alle Geräte die gleiche
Seriennummer im USB Stack eingetragen. Dann kannst Du nur EIN Gerät zur Zeit anschließen,
weil Windows sonst nicht mehr unterscheiden kann mit welchem es kommunizieren soll.

3)
Wenn die Einträge folgende Form haben (Zahlen und Buchstaben ändern sich, aber Syntax muss stimmen):
"6&174c607c&0&3"
"6&23938f4b&0&4"
In dem Fall ist im USB Stack Deiner Geräte bei der Seriennummern ein s.g. NULLSTRING enthalten und
Windows vergibt ein zufällige Seriennummer um mehrere Geräte gleichzeig anschließen zu können.


Fragen:
1. Hast Du schonmal zwei Geräte gleichzeitig bzw. nacheinander angeschlossen? Fehlermeldung?

Stefan


RE: VISA USB-Gerätetreiber mehrfach verwenden? - LVuser85 - 13.01.2015 14:48

Ja, ich hab die schonmal nacheinander angeschlossen.
Das eine Gerät (mit dem ich die inf Datei erstellt habe) wird gefunden und das Schreiben ins Gerät funktioniert.
Wenn ich ein neues Gerät anschließe und das VI ausführe, wird kein Gerät gefunden und ich bekomme folgende Fehlermeldung:

Fehler -1073807343 bei VISA: Ressource suchen in LEDs setzen.vi
Mögliche Ursachen:
VISA: (Hex 0xBFFF0011) Unzulängliche Information zum Speicherort, oder das Gerät bzw. die Ressource ist nicht im System vorhanden.


Das erste Gerät greift auf die winusb.sys Treiber zu und das andere (welches nicht gefunden wird) auf mouclass.sys und mouhid.sys

Die Bedienelemente werden nach S/N in dem VID Ordner angelegt (siehe „RegistBild“).

Gruß


RE: VISA USB-Gerätetreiber mehrfach verwenden? - LVuser85 - 14.01.2015 11:03

Ich erzeuge die Inf-Datei mit VISA Driver Version 4.1
Es ist egal ob ich die Datei „manuell“ oder „automatisch“ erzeuge, der Inhalt der Inf-Datei ist immer gleich.
In MAX wird aber trotzdem nur das „automatisch“ erzeugte Gerät erkannt.

Demnach passiert viel mehr im Hintergrund als nur Erzeugung einer INF Datei, oder?

Manuell= Gerät trennen und VID & PID eingeben
Automatisch = Gerät verbinden und aus der Liste auswählen

Viele Grüße
LVuser85