Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Ich habe eine Schrittmotoren Karte von Trinamic TMCM-610 die 5 Schrittmotoren ansteuern soll. Das Funktioniert normalerweise über eine mitgelieferte Software mit eigener Programmiersprache (TMCL-IDE). Ich habe die Karte über USB angeschlossen, vorher einen Treiber installiert und konnte die Software normal nutzen.
Nun möchte ich die Ansteuerung in ein LabVIEW-Programm einbinden. Bin in LabVIEW noch nicht sehr weit, im Prinzip ist das mein erstes Projekt bei dem es um eine externe Ansteuerung geht. Trinamic hat für den Zweck eine Wrapper-DLL mitgeliefert, die einige Befehle enthält. Diese habe ich in LabVIEW eingebunden und damit drei VI´s erhalten: ListUSBDevices, OpenUSB und CloseUSB. eine Beschreibung der DLL gibts hier:
Nun bin ich soweit diese drei VI´s aufzurufen, nur wie binde ich diese jetzt richtig ein. Ich verstehe noch nicht ganz wie ich jetzt Befehle an das Modul senden kann, irgendetwas fehlt mir da im Moment.
Kann mir da jemand einen Tip geben der mir etwas auf die Sprünge hilft?
Vielen Dank schonmal für die Hilfe, bevor ich es vergesse, ich nutze die LabVIEW Version 8.2.
' schrieb:Nun bin ich soweit diese drei VI´s aufzurufen, nur wie binde ich diese jetzt richtig ein. Ich verstehe noch nicht ganz wie ich jetzt Befehle an das Modul senden kann, irgendetwas fehlt mir da im Moment.
Kann mir da jemand einen Tip geben der mir etwas auf die Sprünge hilft?
Vielen Dank schonmal für die Hilfe, bevor ich es vergesse, ich nutze die LabVIEW Version 8.2.
Du musst auch noch 2.4 GetResult und mehrere der 3.1 bis 3.18 Funktionen implementieren.
Wie, das ist aus der Dokumentation leider nicht ersichtlich. Da ist noch nicht mal ein Funktionsprototyp angegeben. Dies als DLL Beschreibung zu "verkaufen" ist ein bisserl frech.
Also etwas mehr Info wirst Du schon benötigen. Das von IchSelbst angesprochene Header (*.h) File wäre zumindest ein Anfang.
ich hab diese dll jetzt nochmal versucht bei LabVIEW zu implementieren. dabei ist schedinbar dasselbe problem aufgetaucht: es werden nur drei vi´s erzeugt - also nur drei der insgesamt 32 (glaub ich) funktionen die in der dll sind erkannt. laut dem labvietext der dazu erscheint könnte das an der headerdatei liegen - aber das wäre doch mist wenn mir trinamik ne headerdatei mitliefert die nicht die nötigen funktionen implementiert die in der dll vorhanden sind. was mach ich denn da falsch?
wahrscheinlich würde sich damit meine letzte frage nach der anwendung erübrigen, wenn ich dann letztendlich einfache vi´s habe für die unterschiedlichen befehle die ja scheinbar in der dll hinterlegt sind.
also: wie implementiere ich die oben verlinkte dll mit der headerdatei in LabVIEW richtig, sodass ich am ende für jede funktion ein vi hab (so scheint das ja vorgesehen zu sein)?
vielen dank schonmal wieder für die hilfe
matze
07.11.2007, 18:38 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2007 14:24 von jg.)
' schrieb:ich hab diese dll jetzt nochmal versucht bei LabVIEW zu implementieren. dabei ist schedinbar dasselbe problem aufgetaucht: es werden nur drei vi´s erzeugt - also nur drei der insgesamt 32 (glaub ich) funktionen die in der dll sind erkannt. laut dem labvietext der dazu erscheint könnte das an der headerdatei liegen
Sag ich mal so: bei mir geht das (wohl).
Ich hab auch nicht die Headerdatei eingelesen, sondern den DLL-Knoten manuell bearbeitet. Zumindest die drei, die ich in mein Beispiel aufgenommen habe, funktionieren schon mal. Und da im DLL-Knoten alle laut Headerfile verfügbaren Funktionen sichtbar sind, gehe ich davon aus, dass man auch für jede dieser Funktionen einen DLL-Knoten (respektive ein VI) erstellen kann. Mit der Funktion SendCmd scheint es möglich zu sein, alle TMCL-Funktionen (siehe im Headerfile ganz unten und die Konstanten hierzu fast oben) über eine einzige Funktion aufzurufen. Natürlich kann man auch für jede Funkltion die spezielle Funktion aufrufen.
Zitat:aber das wäre doch mist wenn mir trinamik ne headerdatei mitliefert die nicht die nötigen funktionen implementiert die in der dll vorhanden sind. was mach ich denn da falsch?
Du machst nichts falsch. trinamik auch nicht - LV auch nicht. [*dummguck*] Das Problem ist wohl eher, dass LV das Headerfile nicht so ganz versteht. Ist UCHAR* (beachte die Grossschreibung) ein Pointer auf einen Speicherbereich im Sinne eines PChars oder ist das ein Pointer auf einen ordinären U8. char* (bechate die Grossschreibung) ist hinlänglich ein Pointer auf einen Speicherbereich im Sinne eines PChars.
Zitat:also: wie implementiere ich die oben verlinkte dll mit der headerdatei in LabVIEW richtig, sodass ich am ende für jede funktion ein vi hab (so scheint das ja vorgesehen zu sein)?
Machs wie ich von Hand. Guckst du Beispiel.
(VI LV 8.2)
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
07.11.2007, 23:24 (Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2007 23:24 von rolfk.)
' schrieb:Vielen Dank schonmal für die schnelle Hilfe. Bin immer nur alle zwei Tage an dem Projekt zugange, desshalb sind meine Antworten immer etwas versetzt.
Hier kann man die Wrapper-DLL mit headerdatei runterladen. ich hab jetzt mal die aktuelle genommen, die auf meiner mitgelieferten cd war etwas älter:
ich hab diese dll jetzt nochmal versucht bei LabVIEW zu implementieren. dabei ist schedinbar dasselbe problem aufgetaucht: es werden nur drei vi´s erzeugt - also nur drei der insgesamt 32 (glaub ich) funktionen die in der dll sind erkannt. laut dem labvietext der dazu erscheint könnte das an der headerdatei liegen - aber das wäre doch mist wenn mir trinamik ne headerdatei mitliefert die nicht die nötigen funktionen implementiert die in der dll vorhanden sind. was mach ich denn da falsch?
wahrscheinlich würde sich damit meine letzte frage nach der anwendung erübrigen, wenn ich dann letztendlich einfache vi´s habe für die unterschiedlichen befehle die ja scheinbar in der dll hinterlegt sind.
also: wie implementiere ich die oben verlinkte dll mit der headerdatei in LabVIEW richtig, sodass ich am ende für jede funktion ein vi hab (so scheint das ja vorgesehen zu sein)?
vielen dank schonmal wieder für die hilfe
matze
IchSelbst hat Dir schon eine ausführliche Antwort gegeben. Der Grund warum der Library-Wizard für die anderen Funktionen keine VIs automatisch generieren kann, ist dass HANDLE, UCHAR, und INT keine standard C Datentypen sind. Die werden auch nicht in diesem Headerfile deklariert und es wird auch kein anderes Headerfile included. Damit ist die Funktion nicht vollumfänglich definiert und kann der Import-Wizard nichts dafür tun.
Wenn Du etwas in der Art am Anfang des Headerfiles manuel einfügst, sollte es gehen.
typedef long HANDLE;
typedef unsigned char UCHAR;
typedef int INT;
jetzt muss ich natürlich nochmal sehen wie die vi´s funktionieren, damit am ende auch signale über usb gesant werden. kann mir da jemand nen tip geben? reicht es wenn ich als einziges vi sendcmd öffne und den code da manuel eingebe oder muss irch vorher einen port öffnen, danach wieder schließen usw - bin in sachen usb kommunikation ziemlich grün
danke auf jeden fall ihr habt mir schonmal sehr weiter geholfen
gruß
matze
08.11.2007, 13:36 (Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2007 14:24 von jg.)
So, Ich habe mal ein vi hochgeladen. hier hab ich jetzt einfach openUSB und rotateleft zusammengeschlossen. wenn ich jetzt aber werte eingebe und starte passiert nichts. das programm scheint zu funktionieren, wenn ich es langsam ablaufen lasse sieht man auch, dass die daten gesendet werden, nur kommt halt nichts an. woran könnte es liegen? muss man den usb-port in measurement & automation erst einrichten? eigendich dachte ich, dass über den trinamic-treiber der usb-port quasi auf com3 als serieller port vorliegt und somit keine einrichtung notwendig währe.