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 

Clusterkonstante in einer dll füllen



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!

24.10.2007, 10:38
Beitrag #1

Guest
Unregistered


 







Clusterkonstante in einer dll füllen
Ich habe eine DLL, welche Hardwareinfos sammelt und an LabVIEW zurückgibt. Kann ich da sinnvollerweise (aus designsicht) eine Clusterkonstante erzeugen und diese an die dll übergeben. Oder muß das ein normales Cluster sein.

Hat eine LV-Konstante auch performance-Vorteile?

Danke
Diese Nachricht in einer Antwort zitieren to top
24.10.2007, 13:05
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
Clusterkonstante in einer dll füllen
' schrieb:Ich habe eine DLL, welche Hardwareinfos sammelt und an LabVIEW zurückgibt. Kann ich da sinnvollerweise (aus designsicht) eine Clusterkonstante erzeugen und diese an die dll übergeben. Oder muß das ein normales Cluster sein.
Als Eingang bei "Call by Value" an eine DLL-Funktion müsste das möglich sein, bei Rückgabewerten macht das natürlich keine Sinn.
' schrieb:Hat eine LV-Konstante auch performance-Vorteile?
Ehrlich gesagt, keine Ahnung. Aber dein FP ist etwas aufgeräumter.

MfG, 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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.10.2007, 08:12
Beitrag #3

Guest
Unregistered


 







Clusterkonstante in einer dll füllen
' schrieb:... bei Rückgabewerten macht das natürlich keine Sinn.

Keinen Sinn würde ich nicht sagen. Wenn die dll die Werte sammelt um das Cluster zu füllen und dieses innerhalb LabVIEW nicht verändert werden soll/darf, wäre so eine Konstante schon sinnvoll.
Diese Nachricht in einer Antwort zitieren to top
25.10.2007, 08:28
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Clusterkonstante in einer dll füllen
' schrieb:Wenn die dll die Werte sammelt um das Cluster zu füllen und dieses innerhalb LabVIEW nicht verändert werden soll/darf, wäre so eine Konstante schon sinnvoll.
Per se wäre der Datenspeicher, den du konstant haben möchtest, in dem Moment schon nicht mehr konstant, in dem er durch die DLL respektive des DLL-Knoten beschrieben wird. Dieses Beschreiben, besonders das durch den Knoten selbst (der kopiert nämlich die Daten in den Ausgangs-Wire), kannst du so wie so nicht verhindern. Eine spezielle Eigenschaft von Datenelementen, die es ermöglichen würde, dieses Datenelement als "nur lesbar" zu definieren, ist mir nicht bekannt. Theoretisch wäre das aber auch mit einer Datenflußsteuerung möglich. Praktischerweise kannst du eine "konstante Variable" aber ganz leicht programmieren: Einfach nicht beschreiben. z.B. dadurch, dass du ein funktionales SubVI machst. Darin befindet sich ein Schieberegister, das nur von der DLL beschrieben werden kann. Ansonsten kann dieses Schieberegister nur gelesen werden.

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
25.10.2007, 10:00
Beitrag #5

Guest
Unregistered


 







Clusterkonstante in einer dll füllen
Danke für die Erläuterung. Nun ist mir der Sachverhalt klar geworden. Wenn ich es richtig verstanden habe, hat die Variable am Ausgang mit der am Eingang "nichts" zu tun. d.h. ist eine eigenständige Variable, die auch im Speicher woanderst liegt und halt "nur" den gleichen Typ hat.

Das mit einem extra VI für solche Fälle ist eine gute Idee.Smile
Diese Nachricht in einer Antwort zitieren to top
25.10.2007, 14:59
Beitrag #6

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.687
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Clusterkonstante in einer dll füllen
' schrieb:Wenn ich es richtig verstanden habe, hat die Variable am Ausgang mit der am Eingang "nichts" zu tun. d.h. ist eine eigenständige Variable, die auch im Speicher woanderst liegt und halt "nur" den gleichen Typ hat.
Du siehst das richtig.

Das Wort respektive den "Datenspeicher" "Variable" so wie du (respektive ich) es z.B. aus C++ kennst, gibt es in LV nicht. Dass der Wert einer "Variablen" irgendwo in einem Speicher abgelegt ist, ist für eine Datenflußsteuerung nicht relevant. Hier entspricht ein Wire dem Wert einer Variablen. Und ein Wire ist ein Strich am Bildschirm. Da die "Striche" an einem DLL-Knoten - das sieht man ja schon optisch - für Eingang und Ausgang zwei unterscheidliche sind, sind es quasi auch zwei unterschiedliche Variablen (sprich Datenspeicher).

Dass Eingang und Ausgang den selben Typ haben, ist elementspezifisch. Ein DLL-Knoten ist eben so definiert, dass dem so ist. Es gibt auch noch folgenden interessanten Fall beim DLL-Knoten: Für den Fall, dass ein Ausgang ein Array ist, kann man am korrespondierenden Eingang die Größe des Ausgangsarrays festlegen. Wenn z.B. eine DLL in den Speicher von LV schreiben soll, dann muss vor dem Aufruf der DLL bereits ein ausreichend großer Speicher vorhanden sein. Diese Größe kann eben durch den Eingangswert (hier reicht dann eine entsprechend konfigurierte Konstante) festgelegt werden. Am Ausgang steht dann praktisch ein gleich großes Array an.

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
02.11.2007, 21:37 (Dieser Beitrag wurde zuletzt bearbeitet: 02.11.2007 21:39 von rolfk.)
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Clusterkonstante in einer dll füllen
' schrieb:Danke für die Erläuterung. Nun ist mir der Sachverhalt klar geworden. Wenn ich es richtig verstanden habe, hat die Variable am Ausgang mit der am Eingang "nichts" zu tun. d.h. ist eine eigenständige Variable, die auch im Speicher woanderst liegt und halt "nur" den gleichen Typ hat.

Das mit einem extra VI für solche Fälle ist eine gute Idee.Smile

Im Prinzip hast Du recht und doch auch wieder nicht. Die Variable am rechten Rand der Call Library Node is zwar logisch nicht (unbedingt) identisch mit der an der linken Seite, aber im Interesse von Performance halt immer noch an der gleichen Speicherstelle. LabVIEW macht intern nicht extra eine Kopie sondern verwendet den Eingang einfach wieder um am Ausgang zurückzugeben. Wenn Du diesen Ausgang nicht verwendest (unwired lässt) dealloziert LabVIEW den Speicher einfach wieder.

Dein Problem ist wahrscheinlich dass Du denkst dass die DLL den Speicher der Konstanten selber sieht und verändern könnte aber dem ist nicht so. In dem Moment wo die Daten aus der Konstante in den Draht kommen sind sie schon nicht mehr die Konstante selber, sondern eine Kopie davon, die eben schon verändert werden kann (oder auch nicht). Alles andere wäre viel zu mühsam zum managen.

LabVIEW kennt zwar seit ein paar Versionen etwas was Konstantfolding genannt wird und hier wird tatsächlich in speziellen Fällen unter anderem auch darauf verzichtet eine Kopie der Konstante zu machen, wenn LabVIEW eindeutig feststellen kann, dass die Daten im entsprechenden Draht zu keinem einzigen Zeitpunkt überschrieben werden. Da sich LabVIEW aber die Kontrolle darüber was eine externe Library mit den Daten eines Parameters tut vollständig entzieht ist so ein Wire aber schon zum vornehinein von so einer Optimalisation ausgeschlossen.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: