LabVIEWForum.de - Schleife in DLL?

LabVIEWForum.de

Normale Version: Schleife in DLL?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo LabVIEW cracks,

ich habe eine Interbuskarte mit der ich über C++ Befehle den Interbus starten und Ein- und Ausgaben mit den Teilnehmern durchführen kann. Schön wäre natürlich eine LabVIEW-Benutzeroberfläche.
Bindet man eine DLL ein scheint es mir, als müsse diese DLL in kürzerer Zeit abgearbeitet sein als die Schleifenzeit der LabVIEW-schleife die die DLL aufruft. Das Problem ist das das C++ Programm selber solange in einer Schleife laufen muss wie der Bus laufen soll.
Gibt es vielleicht doch eine Möglichkeit C++ Code einzubinden der eine Dauer-Schleife enthält?
Gruß Kalle
Ich würde vorschlagen - du machst eine extra Schleife in LV, die nur diese DLL enthält und den Rest deines Progs läuft in einer (oder mehreren) anderen Schleife.
Habe zuerst gedacht, dass der Aufruf zu lange dauert (wegen Timeouts in der DLL), aber es scheint so zu sein, dass die DLL solange läuft, wie das LV Programm.
Dann noch paar Vorschläge:
DLL so anpassen, dass sie schnell und kurz aufrufbar ist, die Schleife wird also in LV laufen
Callbacks benutzen, aber da ist das Problem mit dem Beenden der DLL

Gruß
Was eg im ersten Post erwähnte ist zwar theoretisch möglich aber eine so schlechte Implementation, dass ich das NIE empfehlen würde. Du kannst im Allgemeinen nicht einfach ein C Programm nehmen und das ohne Änderung in eine DLL umwandelen. Grundsätzlich sollte die Schlaufe und so in LabVIEW sein und Du rufst dann die entsprechenden Treiberfunktionen auf die Du auch in Deinem C Programm aufrufst. Du musst also die DLL Schnitsstelle so wählen dass die Funktionen selber nicht zu lange dauern. Während LabVIEW nähmlich in einer DLL weilt, kannst Du Dein LabVIEW Programm nicht einfach abschliessen. LabVIEW wartet nähmlich ganz nett darauf dass die DLL Funktion zurückkommt bevor es alles abschliesst. Nur ein Processkill von Windows aus für den ganzen LabVIEW Prozess kann das umgehen aber das ist eine sehr drastische Methode und zudem eine die eine Hardware in einem unzulässigen Zustand zurücklassen kann wenn der Treiber mitten in einer Registerprogrammierung brutal unterbrochen wurde.

Also heisst es die einzelenen Funktionen identifizieren und diese in eine DLL verlagern. Grundsätzlich dürfte das mehr oder weniger die Treiber DLL Schnittstelle sein. Aber um eine Wrapper DLL wirst Du eventuel doch nicht kommen, da manchmal die Datentypen von Funktionsparametern von solchen DLLs nicht sehr LabVIEW Call Library Node freundlich sind und wenn es gar mit Callbacks funktioniert führt keine sinnvolle Weise an einer Wrapper DLL vorbei.
Danke für die Antworten. Mit der Dll-Einbindung habe ich es nicht hinbekommen. Allerdings kam ich beim Stöbern im Forum auf die Idee die Werte aus der C++-Schleife mit Activex nach LabVIEW zu schleusen und umgekehrt. Das funzt auch gut und schnell, so dass ich den Bus über LabVIEW bedienen und visualisieren kann. Ziel erreicht. Cool
Referenz-URLs