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 glaube im Forum gelesen zu haben (finde es leider nicht mehr), das eine lokale Variable einem Eigenschaftsknoten Wert dem Vorzug zu geben. Stimmt das so? - Wenn ja warum?
Betrifft das nur die Schreiben-Funktion oder auch Lesen?
Meines wissens nach sollte man dem Eigenschaftsknoten den vortritt geben sollte.
Weil:
-Jedesmal wen du eine Locale Variable benutzt, wird noch einmal für
diese speicher benutzt.Was vorallem bei großen Arrays viel Zeit und
Speicher braucht.
-Beim Eigenschaftsknoten greift mann immer auf den gleichen Speicher
zu.
So hat man mir es mal bei NI gesagt, als ich auf Kurs war.
der nachteil der Property Nodes (Eigenschaftsknoten) ist, das diese in dem Speicherbereich des Frontpanels abgelegt sind.
Dieser wird in einem anderen Thread verwaltet, als der Speicher des Diagramms. D.h. bei jedem Zugriff auf ein Frontpanelelement, wird eine gewisse Zeit benötigt, um darauf zuzugreifen.
Lokale und Globale Variablen liegen dagegen im gleichen Thread, wodurch der Zugriff wesentlich schneller ist.
Lokale und Globale Variablen erhöhen aber die Kopplung der einzelnden Funktionen untereinander und zerstören somit den i.a. Strukturierten Ansatz des Programms. Dies führt zu einer erschwerten lesbarkeit und wartbarkeit des Programms.
Uns hat man den Einsatz schon im Studium untersagt und bisher bin ich auch ohne ausgekommen.
Kommt es allerding allzusehr auf die Performance an, so will ich nicht abstreiten, das man alle guten Vorsätze mal beiseite legen muß.
Egal, ob ein Eigenschaftsknoten oder eine Variable benutzt wird - der jeweils erzeugte Datenfluß ist immer eine Kopie. Würde der Datenfluß (also die "Linie" im Blockdiagramm) eines Eigenschaftsknotens keine tatsächliche Kopie sein, sondern nur ein Pointer auf den Datenbereich, den das Bedien/Anzeige-Element hat, würde das angehängte Beispiel immer true geben, da der Pointer erst ausgeführt werden würde, wenn die Operation stattfindet.
Nachzufragen wäre noch wie groß die jeweilige Kopie ist und wie groß der Aufwand ist, die Kopie zu erstellen.
Den Vorteil eines Eigenschaftsknotens sehe ich in der Tatsache, dass er sequenziert werden kann/muss. Es ist also eindeutig festlegbar (ohne eine Sequenz zu benutzen), wann der Eigenschaftsknoten ausgeführt wird. Wann eine Variable abgearbeitet wird, ist nicht genau festlegbar (zumindest ist mir nicht bekannt, ob es festgelegt ist). Ein weiteres Problem besteht dann, wenn die Variable ein (verschachtelter) Cluster ist. Wenn z.B. in einer Dauerschleife nur eine einzige Variable innerhalb des Clusters bearbeitet werden soll, und dieser selbe Cluster auch innerhalb eines (eigenständigen) Eventknotens bearbeitet werden kann, dann kann es (muss aber nicht zwangsläufig) zu Problemen in der Dauerschleife kommen, wenn der Datenfluß des Clusters durch den Event unterbrochen wird. (ist mir nämlich so passiert, bis ich eingesehen habe, dass alle Datenflüsse Kopien sind).
Fazit:
Lieber nur Datenfluß mit Sequenz- und Schleifenvariablen etc. (ist nämlich nicht so fehleranfällig) als zuviele Knoten und Variablen. Ansonsten ziehe ich Variablen wegen der allgemeinen Lesbarkeit vor. Außerdem: Unterprogramme, Unterprogramme, Unterprogramme ...
Im übrigen bin ich der Meinung, dass ein Rechner leistungsstark genug sein muss, sodass es egal ist, ob ich Variablen oder Eigenschaftsknoten einsetzte.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
IchSelbst schrieb:Egal, ob ein Eigenschaftsknoten oder eine Variable benutzt wird - der jeweils erzeugte Datenfluß ist immer eine Kopie. Würde der Datenfluß (also die "Linie" im Blockdiagramm) eines Eigenschaftsknotens keine tatsächliche Kopie sein, sondern nur ein Pointer auf den Datenbereich, den das Bedien/Anzeige-Element hat, würde das angehängte Beispiel immer true geben, da der Pointer erst ausgeführt werden würde, wenn die Operation stattfindet.
Ich glaube du hast da etwas nicht verstanden. Der Zugriff erfolgt so, wie das Oliver sehr schön beschrieben hat.
Hinterher soll/muss LabVIEW dann irgend etwas mit den Daten tun und dazu wird dann auch eine Kopie der Daten erzeugt. Der gleiche Vorgang (erzeugen einer Kopie) findet bei Verwendung einer lokalen Variable auch statt. Nur dass es bei einer lokalen Variablen noch die Kopie der lokalen Variable selbst gibt.
Wenn du von einem Anzeigelement 5 lokale Variablen im Diagram stehen hast, dann sind das von vorne herein schon einmal fünf Kopien. Bei Verwendung des Eigenschaftknotens hast du im Vergleich dazu keine Kopie.
Ob man nun lokale Variablen verwendet oder nicht hängt von den jeweiligen Umständen ab. Generell sollte zumindest für große Datenmengen keine lokale oder globalen Variablen verwendet werden. Und natürlich gilt dabei auch
Oliver Frank schrieb:Lokale und Globale Variablen erhöhen aber die Kopplung der einzelnden Funktionen untereinander und zerstören somit den i.a. Strukturierten Ansatz des Programms. Dies führt zu einer erschwerten lesbarkeit und wartbarkeit des Programms.
Uns hat man den Einsatz schon im Studium untersagt und bisher bin ich auch ohne ausgekommen.
Lokale Variablen werden i.d.R. asynchron in ein Anzeigeelement geschrieben, während das Schreiben mittels Eigenschaftsknoten synchron erfolgt. Bei einem sehr schnellen Wechsel des Dateninhalts macht die Verwendung von Eigenschaftsknoten nur begrenzt Sinn. Beispiel: Eine einfache For-Schleife mit N=100000 bei welcher der Schleifenzähler auf dem Front-Panel angezeigt werden soll. Das Ganze geht so schnell, dass das menschliche Auge der Änderung des Index sowieso nicht folgen kann. Die Verwendung eines Eigenschaftknotens bremst den ganzen Vorgang gewaltig aus und es macht nicht wirklich Sinn, das mit einem Eigenschaftknoten anzuzeigen.
Anders als wie in dem genannten Beispiel will der Anwender normalerweise auch etwas von dem sehen, was auf dem Bildschirm dargestellt werden soll. Wenn es also nur darum geht die Zeit bis zur Anzeige des neuen Wertes auf dem Front-Panel zu messen, dann dürfte es ziemlich egal sein, was verwendet wird. Ganz im Gegenteil: Hier stellt die Verwendung eines Eigenschaftsknotens im Extremfall sogar sicher, dass das, was angezeigt werden soll, auch tatsächlich auf dem Front-Panel zu sehen ist.
Oliver Frank schrieb:Kommt es allerding allzusehr auf die Performance an, so will ich nicht abstreiten, das man alle guten Vorsätze mal beiseite legen muß.
Mit Performance hat das zwar etwas zu tun, aber die Annahme "Hohe Performance = Lokale Variable" kann falsch oder richtig sein. Es kommt darauf an, was das Programm tun soll und was in diesem Zusammenhang die geeignetere Lösung ist.