Anfänger, Daten einer Klasse im SubVi bzw. SubPanel - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: LVOOP (/Forum-LVOOP) +---- Thema: Anfänger, Daten einer Klasse im SubVi bzw. SubPanel (/Thread-Anfaenger-Daten-einer-Klasse-im-SubVi-bzw-SubPanel) |
Anfänger, Daten einer Klasse im SubVi bzw. SubPanel - dali4u - 05.08.2013 15:25 Hi, ich bin gerade dabei mich mit der Klassen Erstellung für eine Software zu beschäftigen. Die Software wird auch für OEM Kunden vertrieben und hat dann einen anderen Namen. [attachment=45752] So wie in dem Bild funktioniert es nicht. Wenn ich den Ausgang "Cluster schreiben" in der linken Sequenz in die rechte Sequenz ziehe und direkt verbinde gehts natürlich. Fragen dazu: 1. WARUM geht es nicht wie im Bild gezeigt? 2. Wenn es so nicht geht, dass muss ich doch in jedem SubBI in dem ich auf Daten einer Klasse zugreifen will, die Klasse wieder als Eingang verbinden? Oder nicht? Ich glaube nicht das NI das so wollte, denn das macht für mich kein Sinn. 3. Auf diese Weise kann ich doch nie in einem SubPanel auf die Daten einer Klasse zugreifen, oder irre ich da? Habe das Gefühl das da bei mir einiges Schief läuft.... Danke Stefan RE: Anfänger, Daten einer Klasse im SubVi bzw. SubPanel - GerdW - 05.08.2013 15:48 Hallo Stefan, 1. Es funktioniert so nicht, da du in der zweiten Sequenz ein neues Objekt erstellst. Dieses kennt natürlich nicht die Daten des ersten Objekts. THINK DATAFLOW: Daten/Objekte werden per Draht weitergereicht! 2. Ja. Draht = DATAFLOW! 3. Doch. Du musst die Objekte nur entsprechend weiterreichen: FGV, DVR, Queue, etc. RE: Anfänger, Daten einer Klasse im SubVi bzw. SubPanel - dali4u - 06.08.2013 08:26 Hallo Gerd, ok, da hatte ich einige Denkfehler bzgl. der Daten in einer Klasse. Das ich so zwei Objekte erstellt hatte war mir nicht bekannt, aber das erklärt natürlich einiges. Hatte bisher gedacht, dass die Daten in der Klasse, also im ctl, global zur Verfügung stehen würden. Das war falsch. Ich habe mit jetzt eine funktionale globale Variable mit Init, Get und Put erstellt und das in SubVIs sowie Panels getestet und es funktioniert. Allerdings habe ich noch zwei Frage dazu: Ich habe das Klassen-Objekt nicht in ein Array gepackt, sondern direkt mit dem Schieberegister verbunden. Wie sieht es hier mit dem Speichermanagment aus. 1.) Bei Init wird ja das Schieberegister mit den Standardwerten der Klassen-Objekts gefüllt und der Speicher reserviert, oder? 2.) Bei Put wird doch der bereits reservierte Speicher vom Schieberegister nur aktualisert, also kein neuer zugewiesen, oder? [attachment=45759] Danke für Deine Hilfe Stefan RE: Anfänger, Daten einer Klasse im SubVi bzw. SubPanel - GerdW - 06.08.2013 08:36 Hallo dali, Zitat:Das ich so zwei Objekte erstellt hatte war mir nicht bekannt, aber das erklärt natürlich einiges.Du hast doch zweimal ein Objekt deiner Klasse ins BD gepackt!? Immer, wenn du ein Objekt im BD "aufrufst", enspricht das dem "Constructor" bei textbasierten Programmiersprachen! Außerdem gilt auch hier der DATAFLOW: wenn du den Draht eines Objekts verzweigst, wird wie bei anderen Datentypen auch eine Kopie und damit ein neues Objekt angelegt! Zitat:Hatte bisher gedacht, dass die Daten in der Klasse, also im ctl, global zur Verfügung stehen würden.Das ctl ist die Typdefinition einer Klasse. Auch "normale" Typdefinitionen speichern keine Daten, sondern stellen nur einen Datentyp bereit... 1) Ja. 2.) Jein. Das hängt natürlich immer von den Daten in deinem Objekt ab. Wenn da (größenveränderliche) Arrays etc. drin stecken, muss der Speichermanager natürlich mitarbeiten... 3.) Allgemeiner Tipp, auch bzgl. Speichermanagment: Zumindest bei älteren LV-Versionen galt die Empfehlung, Inputs/Outputs außerhalb der äußeren Schleife abzulegen. Dein Objekt-Out kannst du nach der Schleife am SR anschließen. 3a.) Wenn du einen FeedbackNode nimmst, brauchst du keine extra Schleife mehr... RE: Anfänger, Daten einer Klasse im SubVi bzw. SubPanel - Kiesch - 08.08.2013 12:31 Vielleicht nochmal ein Hinweis weil du den Abruf oben quasi als Cluster gemacht hast (also letztlich das Objekt wie einen Cluster benutzt): Du kannst auch Setter und Getter erstellen auf die du dann unter anderem über den Eigenschaftsknoten zugreifen kannst. Der praktische Wert ist entsprechend textbasiertem OO das du darüber dann auch Falscheingaben etc. abfangen kannst. Entsprechend ist das dann auch etwas leichter handhabbar bei Änderungen und wenn du mehrere Attribute abfragst immer noch genauso übersichtlich wie mit unbundle. Die dahinterliegenden Setter und Getter werden meines wissens sequentiell aufgerufen. Erstellen lassen die sich (bzw. standardvorlagen) auch automatisch (VI für Zugriff erstellen und unten über Eigenschaftsknoten Verfügbar machen wählen). Sogar "künstliche" (intern nicht vorhandene) Eigenschaften lassen sich erstellen (legste einfach Eigenschaftsdef Ordner an mit mindestens entweder Setter oder Getter Methode. gruß Kiesch |