LabVIEWForum.de
Konflikt mit der Initialisierung von 2 Kamera-DLL's - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: Konflikt mit der Initialisierung von 2 Kamera-DLL's (/Thread-Konflikt-mit-der-Initialisierung-von-2-Kamera-DLL-s)



Konflikt mit der Initialisierung von 2 Kamera-DLL's - labrat - 23.01.2012 10:49

Hallo,

ich konnte 2 verschiedene Kameras mit Hilfe der zugehörigen DLL-Datein bereits erfolgreich in LabView einbinden. Jede Kamera für sich betrachtet funktioniert soweit einwandfrei. Nun gibt es jedoch bei der Initialisierung ein Problem, wenn ich beide Kameras gleichzeitig laufen lassen möchte.

Man kann beiden Kameras eine sog. DeviceID zuordnen, dies ist eine Zahl zwischen 0 und 36 (Quelle: API der SMX150). Damit beide gleichzeitig funktionieren muss ich folglich jeder Kamera eine unterschiedliche DeviceID geben. Genau hier liegt das Problem: Jede der beiden Kameras wird nur dann initalisiert wenn die DeviceID der Zahl NULL entspricht.

Trage ich jedoch bei beiden eine NULL als DeviceID ein, bekomme ich nur von einer Kamera ein Bild, von der anderen nicht.
Dabei spielt es im Übrigen keine Rolle, ob die Kameras in verschiedenen oder im selben VI laufen.

Hat jemand einen Rat, was ich tun könnte um beide Kameras zu initalisieren?

Anmerkung zum Scrennshot: Dies ist mein Test-VI. Ich habe alle möglichen Zahlenkombinationen für die DeviceID bereits getestet. Wie gesagt, funktionieren beide jedoch nur mit der NULL. Da es sich um verschiedene Kameras handelt, ist auch die Abfrage des Rückgabewerts (Handle) unterschiedlich (Xenics: ungleich 0 => OK, SMX150: ungleich -1 => OK).

Vielen Dank schonmal.


Kamera 1: Xenics IR camera
Kamera 2: Sumix SMX150



RE: Konflikt mit der Initialisierung von 2 Kamera-DLL's - Y-P - 24.01.2012 07:38

Gute Frage. Ich stand zwar noch nie vor dem Problem, aber interessieren würde es mich auch.
Evtl. musst Du an der DLL herumbasteln.

Gruß Markus


RE: Konflikt mit der Initialisierung von 2 Kamera-DLL's - labrat - 25.01.2012 14:54

Nun vielleicht hilft ja noch der folgende Hinweis: Im Windows Gerätemanager erscheinen die beiden Kameras unter verschiedenen Kategorien.

Die Sumix SMX-150 USB ist untder dem Punkt "Bildbearbeitungsgeräte" aufgelistet, während die Xencis Xeva XS in einem extra Verzeichnis "Xenics devices" vorzufinden ist.

Meine Vermutung ist jetzt, dass dem Rechner nicht wirklich klar ist, dass da zwei Kameras angeschlossen sind. Folglich lässt er die Initialisierung nur für eine Kamera (mit der DeviceID = 0) zu. Würde das Sinn machen oder bin ich da komplett auf dem Holzweg?

Danke


RE: Konflikt mit der Initialisierung von 2 Kamera-DLL's - rolfk - 27.01.2012 08:45

(25.01.2012 14:54 )labrat schrieb:  Nun vielleicht hilft ja noch der folgende Hinweis: Im Windows Gerätemanager erscheinen die beiden Kameras unter verschiedenen Kategorien.

Die Sumix SMX-150 USB ist untder dem Punkt "Bildbearbeitungsgeräte" aufgelistet, während die Xencis Xeva XS in einem extra Verzeichnis "Xenics devices" vorzufinden ist.

Meine Vermutung ist jetzt, dass dem Rechner nicht wirklich klar ist, dass da zwei Kameras angeschlossen sind. Folglich lässt er die Initialisierung nur für eine Kamera (mit der DeviceID = 0) zu. Würde das Sinn machen oder bin ich da komplett auf dem Holzweg?

Danke

Ich tippe auf den Holzweg Big Grin

Meines Erachtens sind das zwei grundlegend verschiedene Treiber, die beide ihr eigenes Resourcen Management haben. Damit ist es nicht verwunderlich, dass die beide mit der Device Number 0 beginnen zu zählen, und da Du nur je eine Kamera hast, gibts halt bei beiden auch kein Device 1. Die Tatsache dass hier halt beide Treiber Device 0 als erstes Gerät haben ist einfach eine Koinzidenz aber keine wirkliche Fehlerursache.

Interessant wäre es zu wissen, ob man in einer anderen Umgebung (bevorzugt C) beide Kameras problemlos gleichzeitig betreiben kann. Geht das, dann hakelt es wohl mit der Tatsache dass LabVIEW VIs threadingmässig etwas aufwendiger aufgerufen werden dann man das typischerweise in C macht. Threadmanagement ist nämlich eine komplizierte Angelegenheit, weshalb die meisten Programmierer dies in C nur machen wenn es absolut nicht zu vermeiden ist. In LabVIEW ist Defaultmässig alles Multithreading, und muss man einiges an Mühe machen um das anders zu kriegen. Das ist normalerweise kein Problem, ausser Du rufst Dinge auf, die mit Multithreading nicht zurecht kommen (was in der heutigen Zeit eindeutig als Makel (sprich Bug) der aufgerufenen Komponente gesehen werden sollte).

Wen das auch in einem C Programm nicht funktioniert wirds lustig. Dann haben die zwei Treiber irgendwo einen Konflikt weil sie dieselben Windows Resourcen zu verwenden versuchen. Dann kannst Du die Lieferanten anschreiben und Ihnen dies als Bug melden. Grosse Chancen dass die aber nur mit dem Finger auf den anderen weisen und sagen dass sie nichts falsch machen und der Fehler beim anderen Treiber liegt.