11.08.2009, 07:31
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
Objektorientiertes Programmieren mit LV
Wir nähern uns, was die Anzahl der Antworten angeht, langsam dem Rätselecken-Thread.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
11.08.2009, 07:41
|
|
|
11.08.2009, 07:53
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Objektorientiertes Programmieren mit LV
' schrieb:@unicorn, dies hier könnte zwar unvollständige Antwort, aber eine interessante sein.
Ich denke (vermute) - solange man das FP eines SubVIs nicht aufmacht (graphische Darstellung) werden die Daten auch nicht doppelt abgespeichert. Das kann man, denke ich, leicht feststellen in dem man den Profiler benutzt.
' schrieb:Und wo kommen dann die Daten her, wenn Du das SubVI erst laufen lässt und dann das FP öffnest?
Hokus Pokus Fidibus?
Nein, aus diesem Grund werden sie eben mehrfach abgelegt.
Meine Erfahrung entspricht Eugen Meinung..., ich habe auch schon mit größeren 2D-Array gearbeitet und diese durch SubVIs geschliffen.
Wenn man die SubVIs sauber programmiert, sprich Array sowohl als Eingang und als Ausgang des SubVI, das SubVI ohne Frontpanel läuft und keine Kopien der Daten innerhalb des SubVI durch ungünstige Programmierung erstellt und das Ganze sauber in den Datenfluß einbaut, dann arbeitet LabVIEW innerhalb des SubVI nicht mit Kopien der Daten. Ich konnte das recht eindeutig an der Speicherbelegung von Windows verfolgen.
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!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
11.08.2009, 08:09
|
|
|
11.08.2009, 08:24
|
unicorn
LVF-Freak
Beiträge: 680
Registriert seit: Jul 2009
8.6.1, 2010 - 2012
1994
EN
10xxx
Deutschland
|
Objektorientiertes Programmieren mit LV
' schrieb:Es reichen 5 Anschlüsse aus. Ein Anschluß Enum, zweimal Error-Cluster, einmal Variant Input und einmal Variant Output. Dann hast du ein Übersichtliches FGV mit 5 Anschlüssen und es werden keine dazukommen.
Ja, sicherlich.
In meinem Beispiel mit 600 in etwa VGA-Bildern würde man aber immer das ganze Array holen und schon braucht LV 2*747 MB.
Außerdem verliere ich die Möglichkeit die Methoden mit den Daten in einem Objekt zu bündeln. Die Bearbeitung der Daten aus dem FGV erfolgt außerhalb des FGV und kann jetzt, überspitzt gesagt, mehrfach in unterschiedlicher Weise programmiert werden und trotzdem immer das gleiche tun. OOP versucht nun gerade das zu verhindern...
Also ein OOP FGV kann nur eine geringe Anzahl von Methoden wegen der endlichen Anzahl der Anschlüsse bewältigen. Vererbung klappt auch nicht, da ich mit Erweiterung der Klassendaten auch die Methoden überarbeiten muss. Und das müsste dann im FGV geschehen.
|
|
|
11.08.2009, 10:27
|
rolfk
LVF-Guru
Beiträge: 2.305
Registriert seit: Jun 2007
alle seit 6.0
1992
EN
2901GG
Niederlande
|
Objektorientiertes Programmieren mit LV
' schrieb:Kann ich auch von folgendem ausgehen: Daten, die in einer Klasse liegen - ob als private oder public - werden nicht mehr (so oft) kopiert?
Wenn ich also ein größerer 2D-Array habe, das bearbeitet werden muss, dann wird das ja mit normalem DF ständig (naja sagen wir sehr oft) kopiert. Was viel Arbeit macht. Ich könnte mir durchaus vorstellen, dass, liege dieses Array als private in einer Instanz, erheblich Kopierarbeit gespart werden könnte.
Das stimmt so nicht! LabVIEW kopiert nicht Daten sinnlos herum! Bei entsprechender Programmierung ist DF mindestens so effizient wie ander Möglichkeiten. Inplaceness (also keine Datenkopien) hat natürlich seine Grenzen etwa wenn Du einen Wire verzweigst, obwohl LabVIEW auch da noch Optimalisierungen verwendet aber eben nur innerhalb einer Diagrammebene, also nicht über Strukturgrenzen hinaus. Auch wenn Du Funktionen verwendest die die Datengrösse selber verändert, ist Inplaceness oft nicht mehr möglich. Aber solange Du eine lineare Wirestruktur anhälst, d.h. bei SubVIs geht das Array auf der einen Seite hinein, wird im SubVI aus dem TopLevel-Diagramm (also ausserhalb aller allfälligen Strukturen durch das ganze VI durchgeführt und ebenso im TopLevel-Diagramm wieder an ein Ausgangsterminal verbunden das das Array an das aufrufende VI zurückgibt, hast Du grundsätzlich keine Datenkopien, ausser Du verwendest irgendwo entsprechende Funktionen die nicht ohne auskommen können.
Rolf Kalbermatter
|
|
|
11.08.2009, 10:33
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
Objektorientiertes Programmieren mit LV
' schrieb:das tröstet mich... wenn man LVOOP irgendwann vernünftig einsetzen kann wirst du sicher auch Klassen programmieren wollen, die ihre Member-Variablen speichern können. Entweder kann das dann LVOOP selber - und IMHO müsste es das eigentlich bieten, damit man von OOP sprechen kann - oder man muss es sich eben programmieren und FGVs sind dann genau das Mittel der Wahl.
Christian, ich verstehe nicht was du da speichern willst. Members? Man hat doch Schieberegister dafür, ansonsten sind die Members ja im Wire abgespeichet.
Und ja, ich glaube in der letzten Version LV 2009 wurde noch ein Value-Referenz eingefügt, was quasi den Zugriff auf daten über eine Referenz erlaubt.
|
|
|
11.08.2009, 10:35
|
|
|
11.08.2009, 11:04
|
cb
LVF-SeniorMod
Beiträge: 1.731
Registriert seit: Feb 2006
2018SP1
2001
EN
40xxx
Deutschland
|
Objektorientiertes Programmieren mit LV
' schrieb:Christian, ich verstehe nicht was du da speichern willst. Members? Man hat doch Schieberegister dafür, ansonsten sind die Members ja im Wire abgespeichet.
Und ja, ich glaube in der letzten Version LV 2009 wurde noch ein Value-Referenz eingefügt, was quasi den Zugriff auf daten über eine Referenz erlaubt.
na, die Members des Objektes?!. Was haben denn die Objekt Variablen in einem Schieberegister ausserhalb des Objekts zu suchen? --> nichts, weil man <strike>kann</strike> sollte sie da ja sowieso nicht ausserhalb des Objektes bearbeiten. Wenn du nun ein Objekt in eine While-Schleife packst und die Daten des Objekts in einem SR der umschließenden While-Schleife speicherst, dann ist das IMHO gegen das Prinzip eines Objektes, weil das ja die Daten und die Methoden kapseln sollte ...
Und wenn man dann noch das Posting von Rolf (2 Posts oben) mit dazu zählt ist das eigentlich die beste Art sowas zu implementieren, weil man die Daten nicht spazieren führt sondern dort behält wo sie gebraucht werden ... und nur dort
|
|
|
11.08.2009, 11:12
(Dieser Beitrag wurde zuletzt bearbeitet: 11.08.2009 11:15 von eg.)
|
eg
LVF-SeniorMod
Beiträge: 3.868
Registriert seit: Nov 2005
2016
2003
kA
66111
Deutschland
|
Objektorientiertes Programmieren mit LV
Die sind zwar ausserhalb des Objektes im BD mit Augen sichtbar, aber du hast doch kein Zugriff darauf. Wie willst du sie denn rausholen? Du kannst diese nur mit Member-Methoden darausholen. Somit sind diese Daten geschützt und bleiben im Objekt.
In anderen Programmiersprachen befinden sie sich doch auch irgendwo im Speicher. Genauso hier.
|
|
|
| |