INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

DLL Methoden richtig aufrufen



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!

26.06.2019, 10:41
Beitrag #51

Natalie1984 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 53
Registriert seit: Jun 2019

2016
-
DE



RE: DLL Methoden richtig aufrufen
(25.06.2019 21:53 )IchSelbst schrieb:  
(25.06.2019 09:10 )Natalie1984 schrieb:  Hi IchSelbst, hast du auch eine vernünftige Name?
IchSelbst ist doch ein vernünftiger Name. "Selbst", auf englisch "self", ist in Delphi-Pascal das was "this" in C/C++/C# ist: Der Pointer auf die eigene Instanz, also auf Ich. Das wissen halt Jungfüchse nicht mehr. (Was Sheldon kann, kann ich auch.) Normale Menschen sagen Alexander zu mir. Yahoo

Zitat:ganz genau die Stelle ist mir unklar, wie die Daten aus der DLL in die FVG gelesen werden.
z.B. so:

lv17_img

Hi Alex,

ich hätte jetzt erwartet, das ich mit der CallBack Ereignis weiter machen kann. Diese hast du ja komplett weggelassen.
Zudem ist es auch total unverständlich, wie das aufgebaut ist. Es mag völlig sein, das dein Beispiel funktioniert, doch aber blicke leider da nicht durch.

Ich muss das verstehen können, warum das funktioniert.
Sonst komme ich nicht weiter.

Lass uns doch bei der Callback Ereignis bleiben.

Danke im Voraus
Natalie
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.06.2019, 13:37
Beitrag #52

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: DLL Methoden richtig aufrufen
(26.06.2019 10:41 )Natalie1984 schrieb:  Zudem ist es auch total unverständlich, wie das aufgebaut ist.
Ich habe alle Posts hier nochmals durchgekuckt und hätte da mal eine Frage: Hast du denn mal diverse LabVIEW-Kurse und Kurse für Programmieren im allgemeinen gemacht (siehe Links in GerdW's Signatur)? Nur alleine von Google suchen und YouTube schauen lernt man programmieren nicht.

Falls du die Sache mit dem Callback nicht findest, die befindet sich im Case is_Cr8_Callback in ymtcp_class_YMTCPData.vi.

Ansonsten muss die Sache aus zwei Gründen so kompliziert sein: Wie soll ich ohne entsprechende Umgebung Debugging betreiben (Debugging ist wichtiger als Programmieren)? Noch wichtiger: Die NET-DLL muss am Ende des Programmes mit einem speziellen Befehl (Methodenknoten) entladen werden (zumindest unter Win7), sonst kann man auch nach Ende des Programms in der IDE keine Blockdiagramme mehr ändern.


Angehängte Datei(en)
0.0 .zip  YMTCP.zip (Größe: 2,24 MB / Downloads: 110)

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.06.2019, 21:06
Beitrag #53

Natalie1984 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 53
Registriert seit: Jun 2019

2016
-
DE



RE: DLL Methoden richtig aufrufen
Hallo Alex,

ich bin jetzt völlig durcheinander.

Ich habe mal jetzt eine Frage zum Verständnis.
Die DLL-Datei bietet 3 Events "FirstConnect", "DuringConnected" und "Disconnected"

Diese drei Events sollen den Callback Ereignis triggern.
D.h. sobald diese Methode in der DLL -Datei angesprochen wird, soll z.B. auf der HauptVI eine Button betätigt werden oder den Ereignisstruktur direkt ansteuern.

Jetzt habe ich drei "Ereignis Callback registrieren" - Elemente in das HauptVI hinzugefügt.
Siehe das beigefügte Bild.

So habe ich das alles in Übersicht und so verstehe ich auch, warum etwas funktioniert.
Ist es nicht möglich, einen einfachen Weg zu bauen, so das es nur den trigger Event zurück gibt?


Es würde mir ausreichen, wenn das erste Event "FirstConnect" entweder den Button FirstConnect betätigt oder wiegesagt die Ereignisstruktur FirstConnect ansteuert.

Verstehe mich nicht falsch, dein Konstruktion ist für mich einfach nicht zu verstehen, da einfach zu viele Unterelemente vorhanden sind.
Dafür muss ich erst in Labview fortgeschritten sein.

Danke trotzdem für deine Hilfe
Natalie


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.06.2019, 22:52
Beitrag #54

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: DLL Methoden richtig aufrufen
(26.06.2019 21:06 )Natalie1984 schrieb:  D.h. sobald diese Methode in der DLL -Datei angesprochen wird, soll z.B. auf der HauptVI eine Button betätigt werden oder den Ereignisstruktur direkt ansteuern.
Folgende Möglichkeiten fallen mir pro Callback-VI ein, die wahrscheinlich funktionieren werden.
1. Im Callback-VI ein Flag in einer FGV setzen und im MainVI pollen (so hab ich das bei einem anderen Projekt gemacht).
2. Im Callback-VI ein Benutzerereignis verwenden - das ist am schönsten. Bedarf aber auch Aufwand mit der FGV, nämlich die Benutzerereignisreferenz
3. Im Callback-VI einen Value(changed)-Eigenschaftsknoten verwenden. Bedarf aber auch Aufwand mit der FGV, nämlich die Referenz auf das Bedienelement
4. Im Callback-VI ein Flag als Globale Variable (veraltet). Im MainVI pollen und einen Value(changed)-Event auslösen.

Zitat:Jetzt habe ich drei "Ereignis Callback registrieren" - Elemente in das HauptVI hinzugefügt.
Wird so funktionieren, lässt dich aber durch jede Prüfung durchfallen.

Zitat:So habe ich das alles in Übersicht und so verstehe ich auch, warum etwas funktioniert.
Wenn du nicht verstehst, warum und wie das mit der FGV ("Klasse für Kleine Leute") funktioniert, solltest du nicht programmieren.

Zitat:Ist es nicht möglich, einen einfachen Weg zu bauen, so das es nur den trigger Event zurück gibt?
1. Wer ("es") soll denn den Trigger-Event zurückgeben? Das Callback-VI?
2. Wie soll es den Wert denn zurückgeben? Als Ausgang?
Das Callback-VI wird asynchron aufgerufen, praktisch wie ein Interrupt. Das kann keinen Wert zurückgeben. Werte zurückgeben als Ausgang können nur VIs, die in einen Datenfluss eingebunden sind. Der Datenaustausch mit einem asynchronen VI kann nicht laufen über das, was in LabVIEW Datenfluss heißt. Der Datenaustausch zwischen asynchronem VI und MainVI geschieht über einen virtuellen Datenfluss, was die FGV übernimmt.

Zitat:Es würde mir ausreichen, wenn das erste Event "FirstConnect" entweder den Button FirstConnect betätigt oder wiegesagt die Ereignisstruktur FirstConnect ansteuert.
1. "Button FirstConnect" - siehe oben Methode 3.
2. Wenn der Callback (nicht das Callback-VI) direkt die Ereignisstruktur ansteuern könnte, würde mir das auch sehr gefallen. Ich glaube aber nicht, dass das geht. Dazu müsste es wohl einen speziellen Benutzerereignisknoten geben. Ist mir aber nicht bekannt.

Zitat:da einfach zu viele Unterelemente vorhanden sind.
Ab einer bestimmten Komplexität eines Programmes, und das ist schon bei einfachen Programmen der Fall, geht ohne "Unterelemente" gar nichts.

Du kommst mit Globalen Variablen fast ohne Unterelemente aus - eine Globale Variable ist nämlich schon ein Unterelement:
1. Im Callback-VI eine Globale Variable vom Typ Boolean mit True beschreiben. Die Globale Variable ersetzt das Verfahren mit der FGV.
2. Im Timeout-Case (50ms) der Ereignissequenz wird die Globale Variable abgefragt. Wenn sie true ist, wird sie auf false gesetzt und ein Value(Change)-Event vom Button FirstConnect wird ausgelöst.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.06.2019, 07:58
Beitrag #55

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: DLL Methoden richtig aufrufen
(26.06.2019 21:06 )Natalie1984 schrieb:  Es würde mir ausreichen, wenn das erste Event "FirstConnect" entweder den Button FirstConnect betätigt oder wiegesagt die Ereignisstruktur FirstConnect ansteuert.
Das wichtigste habe ich ja vergessen:

LabVIEW ist eine graphische Programmiersprache, die nach dem Prinzip des Datenflusses funktioniert. LabVIEW ist nicht dazu gedacht, ständig in gegenseitiger Kommunikation mit dem Anwender zu stehen. LabVIEW soll Messdaten, z.B. Analogwerte, erfassen, speichern und auswerten. Nach Möglichkeit alles ohne Benutzereingriff. Diese Messdaten liegen auch nicht in irgendwelchen Anzeigeelementen - sondern in den Wires! (Die Anzeigeelemente sind nur dazu da, dass der unbequeme Anwender was zum Sehen hat.)
Jetzt lässt sich aber der Benutzereingriff nicht ganz vermeiden (was eigentlich "externer Eingriff" heißen sollte, dann sind nämlich auch Eingriffe per Callback aus .NET-DLLs möglich). Und so muss LabVIEW halt doch auch asynchrone Ereignisse verarbeiten können - und braucht deswegen entsprechende Eigenschaften, also: Methoden und Eigenschaften zum Speichern und Weitergeben von Daten, die asynchron in das System eingeschleust werden sollen. Diese Möglichkeiten heißen z.B. Queue, Melder, Benutzerereignis und eigentlich auch FGV.

VB, C# und einige andere Programmiersprachen sind textorientierte Sprachen, die (heute zutage) objekt-orientiert sind. Der "Datenfluss", also der interne Datenaustausch in diesen objekt-orientierten Systemen geht über die objekt-internen Variablen (private, fields - wie immer sie auch heißen mögen). Diese "internen Variablen", also diese Art der Variablen, gibt es in LabVIEW eigentlich nicht.

Wichtiger als mit der Programmiersprache LabVIEW programmieren zu können, ist, in LabVIEW, also in Datenfluss, denken zu können. Ohne verinnerlicht zu haben, wie Datenfluss funktioniert, wird nichts "anständiges" als Sourcecode herauskommen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.06.2019, 14:02
Beitrag #56

Natalie1984 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 53
Registriert seit: Jun 2019

2016
-
DE



RE: DLL Methoden richtig aufrufen
(26.06.2019 22:52 )IchSelbst schrieb:  3. Im Callback-VI einen Value(changed)-Eigenschaftsknoten verwenden. Bedarf aber auch Aufwand mit der FGV, nämlich die Referenz auf das Bedienelement

Hi,

meinst du damit, die Ereignisstruktur?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.06.2019, 15:21
Beitrag #57

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: DLL Methoden richtig aufrufen
(27.06.2019 14:02 )Natalie1984 schrieb:  meinst du damit, die Ereignisstruktur?
Ja.

Letztendlich wird ein Case der Ereignisstruktur ausgeführt.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.06.2019, 16:26
Beitrag #58

Natalie1984 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 53
Registriert seit: Jun 2019

2016
-
DE



RE: DLL Methoden richtig aufrufen
Hi,

ich habe jetzt eine Ereignisstruktur in das CallbackVI eingefügt
siehe Bild LabView12
und habe dort eine Global Variable erstellt diese dann mit True Konstante versorgt.

Die Globale Varibale haben ich dann ebenfalls im HauptVI platziert
siehe dazu Bild Labview13
und habe damit den Button "FirstConnect" getriggert.
Jedenfalls sollte es so sein :-)

Nun aber zeigt Labview keine Fehler an.. aber es tut auch nicht das was es tun soll.

Warum?
was mache ich hier falsch?

Danke im Voraus
Natalie


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.06.2019, 19:37
Beitrag #59

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: DLL Methoden richtig aufrufen
(27.06.2019 16:26 )Natalie1984 schrieb:  ich habe jetzt eine Ereignisstruktur in das CallbackVI eingefügt
Im Callback-VI brauchst du keine Event-Sequenz. Nur die Anweisung "Boolesch = true" ist notwendig. Du tust jetzt also die While-Schleife, den Button Boolesch und die Event-Sequenz löschen. Im Blockdiagramm befinden sich dann nur die drei Event-Eingänge (Allgemeine Ereignisdaten, Elementreferenz und Benutzerparameter) sowie deine globale Variable Boolesch, auf die true zugewiesen wird ("Boolesch = true").

Zitat:Die Globale Varibale haben ich dann ebenfalls im HauptVI platziert
Platziert muss sie dort werden, das ist richtig, aber wie folgt:
Ich empfehle das, was im Bild dargestellt ist, im Timeout-Case zu platzieren (geht natürlich auch dort, wo jetzt die nicht funktionierende Anweisung steht). Bei dem Element "FirstConnect: Wert(SGL)" handelt es sich um den Eigenschaftsknoten Wert(signalisierend). In der IF-Sequenz muss die Globale Variable wieder zurück gesetzt werden, sonst würde der Event-Case kontinuierlich ausgeführt werden.

Ich hoffe mal, dass es funktioniert. Globale Variablen verwende ich nämlich nicht.


Angehängte Datei(en) Thumbnail(s)
   

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.06.2019, 09:43
Beitrag #60

Natalie1984 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 53
Registriert seit: Jun 2019

2016
-
DE



RE: DLL Methoden richtig aufrufen
(27.06.2019 19:37 )IchSelbst schrieb:  Im Callback-VI brauchst du keine Event-Sequenz. Nur die Anweisung "Boolesch = true" ist notwendig.

Ich empfehle das, was im Bild dargestellt ist, im Timeout-Case zu platzieren (geht natürlich auch dort, wo jetzt die nicht funktionierende Anweisung steht).

Hi,

kann es sein das du dich hier widersprichst?
Im Callback-VI brauchst du keine Event-Sequenz.
Ich empfehle das, was im Bild dargestellt ist, im Timeout-Case zu platzieren

Gruß
Natalie
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Zugriffsprobleme auf .NET-Methoden F_aus_S 1 4.834 02.04.2012 11:12
Letzter Beitrag: jg
  ActiveX & Excel Übersicht über Methoden und Eigenschaften nemesismf 3 7.783 01.12.2011 13:26
Letzter Beitrag: nemesismf

Gehe zu: