LabVIEWForum.de
DLL Funktionen einbauen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: DLL Funktionen einbauen (/Thread-DLL-Funktionen-einbauen)



DLL Funktionen einbauen - RaisaGeleta - 28.10.2016 10:50

Hallo Leute!

Ich mache gerade mein Praxissemester und wurde sofort ins kalte Wasser geworfen. Ich muss ein altes Messprogramm neu mit Labview Programmieren.
Im Moment komme ich einfach nicht weiter mit der Aufgabenstellung die ich bekommen habe. Ich schreibe Sie mal hier rein.

Hintergrund: Das neue Programm soll sich einfach durch Ergänzen von dll-Dateien in einem Ordner um weitere Messgeräte erweitern lassen.
Eine Änderung des Hauptprogrammes ist dann nicht notwendig. Beim Austausch eines Gerätes im TLP-Messaufbau, wird eine passende dll im
Programmordner hinterlegt und die Messungen können sofort weitergehen.

1) Der Ordner für die dll's soll "Drivers" heißen. Das Hauptprogramm muss in diesem Ordner nach allen dll-Dateien suchen.
2) Die gefundenen dlls müssen geprüft werden, ob diese vom Hauptprogramm genutzt werden können. Hierfür würde ich eine Funktion in jede dll einbauen, die z.B.
"GetDLLType" heißt. Auf diese Funktion müssen alle brauchbaren dll's mit "TLPmeas" antworten.
- Unterstützt die aktuell getestete dll die Funktion "GetDLLType" nicht, so muss diese im Folgenden vom Hauptprogramm ignoriert werden.
- Alle gültigen dll's werden im Anschluss auf die unterstützte Geräteklasse untersucht. Die dll-Funktion "GetDeviceClass" liefert dem Hauptprogramm die notwendige
Information. Gültige Device-Klassen sind: "HVSupply", "SourceMeasureUnit", "Oscilloscope"
3) Mit "GetDeviceName" wird dann das konkret von einer dll unterstütze Gerät abgefragt. Im Moment sind das StanfordResearch PS350, Keysight B2912A, Agilent E5273A, Lecroy WaveRunner 6100A. Das wären also schon mal 4 dll's, die anzulegen sind. Die genauen Namen der Geräte werden wir hier noch mit dem *IDN String der Geräte abgleichen.

Bei 1) könnte ich mir ungefähr vorstellen wie ich das machen muss, nur bei den Rest bin ich überfragt. Muss ich die Funktionen mit C++ programmieren oder kann man das auch mit labview? Ich weiß wie man eine DLL erstellt und einbindet aber irgendwie verstehe ich das ganze noch nicht so ganz. Über paar Tipps wie ich vorgehen könnte wäre ich Dankbar!! Bahn


RE: DLL Funktionen einbauen - GerdW - 31.10.2016 11:52

Hallo Raisa,

Zitat:Das neue Programm soll sich einfach durch Ergänzen von dll-Dateien in einem Ordner um weitere Messgeräte erweitern lassen.
Das hört sich nett an, hat aber so einige Haken und Ösen!
- Bei einer DLL muss der Aufrufer wissen, welche Funktionen mit welchen Parametern in der DLL enthalten sind - und zwar bevor die DLL aufgerufen wird! Wenn also eine neue DLL in den Ordner gelegt wird, muss sie exakt die gleichen Funktionsaufrufe wie die anderen DLLs bieten, egal welcher Gerätetyp unterstützt werden soll…
- Du kannst in LabVIEW nicht dynamisch neue VIs/DLL-Aufrufe erzeugen. Du kannst nur den Pfad auf eine DLL vorgeben, um damit dann wieder eine bekannte Funktion mit bekannten Parametern aufzurufen!

Wenn du mit diesen Einschränkungen leben kannst, dann kannst du dich gern daran setzen, diesen Aufbau einer Plugin-Architektur in LabVIEW umzusetzen! Big Grin

Zitat:Muss ich die Funktionen mit C++ programmieren oder kann man das auch mit labview?
Wenn du die DLLs nur mit LabVIEW nutzen willst, dann kannst du sie auch mit LabVIEW erstellen…

Warum die Festlegung auf DLLs? Warum keine LabVIEW-internen Dinge wie LLBs, lvlibs, Ordnern mit VIs?


RE: DLL Funktionen einbauen - RaisaGeleta - 01.11.2016 15:57

Danke schon mal für deine Antwort!2hands

Zitat: - Bei einer DLL muss der Aufrufer wissen, welche Funktionen mit welchen Parametern in der DLL enthalten sind - und zwar bevor die DLL aufgerufen wird! Wenn also eine neue DLL in den Ordner gelegt wird, muss sie exakt die gleichen Funktionsaufrufe wie die anderen DLLs bieten, egal welcher Gerätetyp unterstützt werden soll…
- Du kannst in LabVIEW nicht dynamisch neue VIs/DLL-Aufrufe erzeugen. Du kannst nur den Pfad auf eine DLL vorgeben, um damit dann wieder eine bekannte Funktion mit bekannten Parametern aufzurufen!

Hättest du eine Idee wie ich das Umsetzen könnte? Also über Plugin-Architektur habe ich mich gerade schon bisschen informiert etc. Aber irgendwie hat es bei mir noch nicht klick gemacht..

Und ja mit DLL's das muss ich machen, weil es so gewünscht wird. Würde es auch lieber anders machen....


Angry


RE: DLL Funktionen einbauen - GerdW - 01.11.2016 16:26

Hallo Raisa,

bei Plugins habe ich bisher nur VIs genutzt:
- Einfach einen Ordner für die Plugin-VIs anlegen und die gewünschten Plugins dort ablegen.
- Die Hauptroutine nutzt ListFolder, um den Ordner nach passenden Plugin-VIs zu durchsuchen.
- Die Plugin-VIs werden dynamisch per VI-Server aufgerufen.
Dazu müssen die Plugin-VIs natürlich alle ein identisches Connectorpane verwenden…

Im Grunde machst du das mit deinen DLLs genauso: Verzeichnis nach DLLs durchsuchen, dann die entsprechende DLL-Funktion aufrufen. Alle DLLs müssen die identischen Funktionen mit identischen Parametern bereitstellen:
[attachment=56841]
Den Pfad zur DLL kann man beim Funktionsaufruf vorgeben…


RE: DLL Funktionen einbauen - RaisaGeleta - 01.11.2016 16:41

Vielen Vielen Vielen Dank!! Idea

Jetzt habe ich etwas womit ich endlich mal was anfangen kann Dance2
Ich werde mich jetzt daran halten und hoffen das meine Lösung auch so akzeptiert wird.

Und noch mal danke für deine Mühe!

Big Grin