LabVIEWForum.de
Motorsteuerung K8097 mit DLL - 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: Motorsteuerung K8097 mit DLL (/Thread-Motorsteuerung-K8097-mit-DLL)



Motorsteuerung K8097 mit DLL - Scuba - 11.03.2014 15:11

Hallo,

ich möchte einen Schrittmotor mit der Motorsteuerung K8097 von Velleman ansteuern http://www.velleman.eu/products/view/?id=386156
Mit der beigefügten Software von Vellemann klappt das auch super.
Nur möchte ich den Motor natürlich in LabView ansteuern. Also habe ich versucht die beigefügte DLL mit CLF Knoten einzubinden (Ich muss dazu sagen, dass ich erst vor 2 Tagen angefangen habe, mich in dieses Thema einzulesen, aber auch nach langer Hilfesuche komm ich grad keinen Schritt mehr weiter.)

In meinem Test VI versuch ich also einfache Funktionen aufzurufen. Mein größtes Problem dabei ist die Übergabe der richtigen Datentypen. Zum Beispiel haben viele Funtionen den Rückgabewert BOOL, welcher ja nicht einfach so konfiguriert werden kann. Daher weiß ich auch nicht ob die Funktion SMCConnect überhaupt richtig ausgeführt wurde. Ich kanns mir nur denken, da andere einfache Funktionen wie SMCGetInputs oderr SMCGetMotor die richtigen Werte für die Anzahl der Inputs und der Motoren ausspucken. Von der Karte zu lesen scheint also irgendwie zu klappen..

Aber leider bewegt sich der Motor bei Verwendung von SMCMove kein Stück.

Wenn es zu der DLL eine Headerdatei gäbe, könnte ich das natürlich mit diesem LabView Assistent versuchen. Aber die fehlt leider. Außerdem wurden auch 2 DLLs mitgeliefert. Einmal eine "Native DLL" mtrapi.dll und einmal diese MotorLibNET.dll zu der es auch eine Hilfsdatei gibt. In der letzteren DLL findet LabView aber irgednwie die Funktionen gar nicht.

Ich hab mir auch mal die Textdateien dieser DLLs angeschaut, da ich den Verdacht habe, dass ich eben einfach die falschen Datentypen übergebe. Daher verwende ich für die Motorsteuerung jetzt unsigned 32 bit integer, was ja dem DWORD aus dem Quelltext entsprechen sollte.

Also vielleicht könnt Ihr mir ja irgendwie helfen. Weiß grad nicht was ich noch versuchen könnte.

Gruß


RE: Motorsteuerung K8097 mit DLL - rolfk - 11.03.2014 17:22

(11.03.2014 15:11 )Scuba schrieb:  Hallo,

ich möchte einen Schrittmotor mit der Motorsteuerung K8097 von Velleman ansteuern http://www.velleman.eu/products/view/?id=386156
Mit der beigefügten Software von Vellemann klappt das auch super.
Nur möchte ich den Motor natürlich in LabView ansteuern. Also habe ich versucht die beigefügte DLL mit CLF Knoten einzubinden (Ich muss dazu sagen, dass ich erst vor 2 Tagen angefangen habe, mich in dieses Thema einzulesen, aber auch nach langer Hilfesuche komm ich grad keinen Schritt mehr weiter.)

In meinem Test VI versuch ich also einfache Funktionen aufzurufen. Mein größtes Problem dabei ist die Übergabe der richtigen Datentypen. Zum Beispiel haben viele Funtionen den Rückgabewert BOOL, welcher ja nicht einfach so konfiguriert werden kann. Daher weiß ich auch nicht ob die Funktion SMCConnect überhaupt richtig ausgeführt wurde. Ich kanns mir nur denken, da andere einfache Funktionen wie SMCGetInputs oderr SMCGetMotor die richtigen Werte für die Anzahl der Inputs und der Motoren ausspucken. Von der Karte zu lesen scheint also irgendwie zu klappen..

Aber leider bewegt sich der Motor bei Verwendung von SMCMove kein Stück.

Wenn es zu der DLL eine Headerdatei gäbe, könnte ich das natürlich mit diesem LabView Assistent versuchen. Aber die fehlt leider. Außerdem wurden auch 2 DLLs mitgeliefert. Einmal eine "Native DLL" mtrapi.dll und einmal diese MotorLibNET.dll zu der es auch eine Hilfsdatei gibt. In der letzteren DLL findet LabView aber irgednwie die Funktionen gar nicht.

Wie der Name schon sagt ist das keine normale DLL, sondern eine .Net Assembly. Die spricht man in LabVIEW nicht mit der Call Library Node an sondern mit der Create .Net Instance und dann der Property Node und der Method Node auf der zurückgegebenen Refnum.

BOOL ist ein Microsoft Datentyp und entspricht im Prinzip einem int32.

Aber wenn ich Dich wäre würde ich sicher die .Net assembly benützen, dann brauchst Du Dich nicht so um C typische Dinge zu bekümmern.


RE: Motorsteuerung K8097 mit DLL - Scuba - 12.03.2014 09:19

Vielen Dank für die schnelle Antwort. War mir bis jetzt noch gar nicht klar, dass es verschiedene Arten von DLLs gibt.
Ich hab dann auch gleich versucht mit der Constructor Node die MotorLibNET.dll zu öffnen und bekam prompt die Fehlermeldung, dass das keine gültige Net Assembly sei. Daraufhin hab ich mich ein wenig schlau gemacht und LV mittels einer Configurationsdatei dazu veranlasst auch .Net 4.0 dlls zu akzeptieren.
Jetzt kann ich die dll zumindest auswählen aber sie wird trotzdem nicht angenommen. Also ich kann nicht mit dem OK-Button bestätigen.
Statt dessen steht da nur, dass dieses SMC Klasse keine öffentlichen Konstruktoren enthält.

Liegt das jetzt evtl. an der erzwungenen Konfiguration? Also sollte ich lieber irgendwie versuchen die dll in ein .NET 2.0 Framework umzuwandeln? Würde das überhaupt gehen?


RE: Motorsteuerung K8097 mit DLL - Scuba - 12.03.2014 10:44

Jetzt hab ichs doch noch mit der .NET Assembly hinbekommen! Also nochmal vielen Dank für den Denkanstoß!

Es gab dabei aber noch einige Sachen zu beachten. Anscheinend ist es sehr wichtig, dass die DLLs im selben Verzeichnis wie das VI oder wie ein Projekt mit dem VI liegen. Da es danach aber immer noch nicht bei mir geklappt hat, kann ich nicht sagen, wiie wichtig das ist ^^

Mein Problem war, dass die ganzen Klassen als static definiert waren und LabView die nicht über die Constructor Node erkennt. Man bringt also gleich eine Invoke Node aufs Diagramm, macht rechts-klick auf Select Class, .NET und kann da dann nochmal auf Browse gehen. So hats dann letztendlich funktioniert...falls jmd. mal ähnliche Probleme haben sollte Wink


RE: Motorsteuerung K8097 mit DLL - Lucki - 12.03.2014 11:42

Viele Firmen liefern zusätzlich zur DLL noch sog. "Labview-Treiber" mit. Das sind im einfachsten Fall weiter nichts als eine Sammlung von SubVis, von denen jede auf eine DLL-Funktion zugeift. Würde Dir empfehlen, selbst so eine SubVI-Sammluing zu erstellen, damit Übersicht in Dein VI reinkommt. Habe mal ein Beispiel gemacht. ""NET" ist da nicht berücksuichtigt, es soll nur eine Anregung sein.
Zweiter Tip: Den DLL-Pfad muss man im allgemeinen nicht angeben, LV findet den von selbst, wenn die DLL in bestimmten Verzeichnissen liegt: In der aktuellen Dir, in der Win32-Dir, in der.. (Mehr weiß ich jetzt nicht)