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!
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?
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.
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
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?
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…
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.
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.
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.
(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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!