LabVIEWForum.de
DLL Methoden richtig aufrufen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: ActiveX & .Net (/Forum-ActiveX-Net)
+---- Thema: DLL Methoden richtig aufrufen (/Thread-DLL-Methoden-richtig-aufrufen)

Seiten: 1 2 3 4 5 6 7


DLL Methoden richtig aufrufen - Natalie1984 - 13.06.2019 14:32

Hallo Zusammen,

es freut mich sehr, das ich hier auch mein Beitrag schreiben darf.
Ich bin seit 3 Monaten bei einem Unternehmen in Erlangen, wo wir Testautomationen mit NI Produkte entwickeln.

Nun, ich aber bin ein Newbie was Labview angeht.
Doch die Sprache ist nicht so schwer, wie ich mir das vorgestellt habe.
Wenn man sich da etwas anstrengt, kommt man sehr schnell in das Thematik hinein.

Meine Frage ist, würdet Ihr mich dabei unterstützen, beim Aufbau eine Bedienoberfläche für einen Ausgangsmodul.
Wir haben das Produkt bei uns im System zum Ein- bzw. Ausschalten von Testfälle integriert.

Ich habe mit Hilfe von Google, Youtube Videos etc. eine Oberfläche erstellt, auch im Blockdiagramm habe ich einen Konstruktorknoten eingefügt, wo ich dann die DLL von dem Ausgangsmodul integriert habe.
Mir ist gelungen, die DLL anzusprechen und eine Verbindung zum Modul herzustellen.

Nun, kann ich mich aber nicht mehr Disconnecten, auch ist es nicht möglich Daten zu senden.

Was mache ich hier falsch?
Wer kann mich dabei unterstützen?

VG
Natalie


RE: DLL Methoden richtig aufrufen - jg - 13.06.2019 14:54

Da musst du wohl das Manual/Programmierhandbuch deines (eher NICHT NI) Produkts YMTCP lesen.

Gruß, Jens


RE: DLL Methoden richtig aufrufen - Natalie1984 - 13.06.2019 16:10

Hallo,

leider steht im Handbuch nicht, wie man das in Labview macht.
Ein Beispiel ist nur für Visual Studio mitgeliefert.


PS: Das ist die Fehlermeldung, was LabView aus gibt:
Fehler 1172 bei Methodenknoten System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht.
Inner Exception: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.


VG
Natalie


RE: DLL Methoden richtig aufrufen - jg - 13.06.2019 18:27

Dann musst du genau das nachprogrammieren wie im C++ (?) Beispiel für Visual Studio. In der Regel findet man die .NET Properties und Methods recht schnell, wenn man mal den Start-Constructor hat (und den hast du ja schon).

Da ich keine Ahnung habe, welche .NET Assembly du da verwendest, kann ich dir nicht mehr weiterhelfen als mit solchen Allgemeinplätzen.

Gruß, Jens


RE: DLL Methoden richtig aufrufen - Natalie1984 - 13.06.2019 18:38

Hi Jens,

so schaut es in VB.NET aus:

Private Sub btnAllON_Click(sender As Object, e As EventArgs) Handles btnAllON.Click

SendeByte1 = 255
SendeByte2 = 255
SendeByte3 = 255
SendeByte4 = 255

SchaltZustandSenden()
End Sub

Private Sub SchaltZustandSenden()
If YMCom.IsOpen Then
YMCom.SEND_STATUS_32(CStr(SendeByte1), CStr(SendeByte2), CStr(SendeByte3), CStr(SendeByte4))
End If
End Sub

und alle Ausgänge schalten ein.

und so habe ich das in Labview gemacht, siehe Bild.
Oder ist das falsch?

VG
Natalie


RE: DLL Methoden richtig aufrufen - GerdW - 13.06.2019 19:31

Hallo Natalie,

Code:
If YMCom.IsOpen Then
   YMCom.SEND_STATUS_32(CStr(SendeByte1), CStr(SendeByte2), CStr(SendeByte3), CStr(SendeByte4))
End If
Fehler: du hast das IsOpen-Flag überhaupt nicht mit der Casestruktur um das SendStatus() verbunden!

Außerdem: was enthalten deine Strings? Was erwartet diese DotNet-Funktion? Erwartet sie wirklich "255" als ASCII-Text - oder einfach ein Byte mit dem numerischen Wert 255?

Wieso haben deine Controls/Indicator teilweise so komische Label (wie "Numerisch" statt "Port" oder "Boolesch" statt "IsOpen")?

Wie sieht es mit dem Dataflow aus? Sollte Connect() vielleicht zuerst aufgerufen werden, danach dann IsOpen(), und zum Schluß erst SendStatus()? Leider hast du hier keine Reihenfolge festgelegt…


RE: DLL Methoden richtig aufrufen - Natalie1984 - 14.06.2019 09:52

(13.06.2019 19:31 )GerdW schrieb:  Hallo Natalie,

Code:
If YMCom.IsOpen Then
   YMCom.SEND_STATUS_32(CStr(SendeByte1), CStr(SendeByte2), CStr(SendeByte3), CStr(SendeByte4))
End If
Fehler: du hast das IsOpen-Flag überhaupt nicht mit der Casestruktur um das SendStatus() verbunden!

Außerdem: was enthalten deine Strings? Was erwartet diese DotNet-Funktion? Erwartet sie wirklich "255" als ASCII-Text - oder einfach ein Byte mit dem numerischen Wert 255?

Wieso haben deine Controls/Indicator teilweise so komische Label (wie "Numerisch" statt "Port" oder "Boolesch" statt "IsOpen")?

Wie sieht es mit dem Dataflow aus? Sollte Connect() vielleicht zuerst aufgerufen werden, danach dann IsOpen(), und zum Schluß erst SendStatus()? Leider hast du hier keine Reihenfolge festgelegt…

Hi GerdW
Die IsOpen ist nur eine abfrage, um zu prüfen, ob die Verbindung besteht.
Die habe ich erst einmal weggelassen, um einfach zu testen, ob ich überhaupt Daten senden kann.

YMCom.SEND_STATUS_32(CStr(SendeByte1), CStr(SendeByte2), CStr(SendeByte3), CStr(SendeByte4))

Hier werden String als Werte eingegeben. So ist es auch unter VB.NET. Natürlich kann es sein, das in der DLL dann nach Byte umgewandelt wird. Aber das ist dann nicht mehr unsere Bereich.

Zu Dataflow:
Ich baue erstmal die Verbindung auf und sehe, das die Verbindung steht. Ich gehe zumindest davon aus, denn am Modul Leuchtet die grüne LED am RJ45 Buchse stabile. Ansonsten blinkt die LED.
Was mich aber stützig macht ist auch, das die LED, was ich auf der Oberfläche angelegt habe nicht leuchtet. Ich dachte sie würde auf leuchten, sobald ich die Verbindung aufgebaut habe.


VG
Natalie


RE: DLL Methoden richtig aufrufen - GerdW - 14.06.2019 10:14

Hallo Natalie,

Zitat:Was mich aber stützig macht…
Du musst immer bedenken, dass wir weder dein Gerät kennen noch die zugehörige Doku haben.

Vielleicht solltest du einfach mal mit dem Hersteller des Gerätes reden?


RE: DLL Methoden richtig aufrufen - Natalie1984 - 14.06.2019 10:34

Hi Gerd,

das Modul ist hier auf der Seite zu finden
Ausgangsmodul

die DLL kann ich auch vielleicht bei bedarf hochladen.
Der Hersteller gibt kein Beispiel für Labview aber besteht darauf, das es auch für Labview funktioniert, lt. die MAil von den schreibt, das andere Kunden auch mit Labview arbeiten.


RE: DLL Methoden richtig aufrufen - jg - 14.06.2019 10:38

(14.06.2019 09:52 )Natalie1984 schrieb:  Zu Dataflow:
Ich baue erstmal die Verbindung auf und sehe, das die Verbindung steht. Ich gehe zumindest davon aus, denn am Modul Leuchtet die grüne LED am RJ45 Buchse stabile. Ansonsten blinkt die LED.
Was mich aber stützig macht ist auch, das die LED, was ich auf der Oberfläche angelegt habe nicht leuchtet. Ich dachte sie würde auf leuchten, sobald ich die Verbindung aufgebaut habe.
Gut möglich, denn in deinem Blockdiagramm Screenshot misachtest du das Datenflussprinzip von LabVIEW (das hat Gerd auch schon gesagt).
Du erzeugst deine .Net-Referenz und spaltest diese auf 3 weitere Methoden auf. Die werden jetzt parallel aufgerufen, die Abfrage "IsOpen" also sehr wahrscheinlich schon vor deiner "Connect" Methode.

Nochmals das korrekte Vorgehen ist: Erst Connect ausführen, die Referenz am Ausgang der Methode weiterführen und damit "IsOpen" abfragen.

Gruß, Jens