Globale Variablen - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Globale Variablen (/Thread-Globale-Variablen--32697) |
Globale Variablen - Edi70 - 06.10.2021 13:27 Hallo, ich möchte gerne mit globale Variablen arbeiten. Wenn ich im Fronpanel eine Variable erstelle, dann entsteht im Blockdiagramm auch eine Variable. Wie ist die korrekte Vorgehensweise für Erstellung und Benutzen von globale Variablen? Gruß Edi RE: Globale Variablen - Martin.Henz - 06.10.2021 13:42 Hallo Edi, das beantwortet deine Frage zwar nicht ... Wozu brauchst du denn globale Variablen? Es gibt kaum bis gar keine sinnvolle Anwendung für globale Variablen. Eine sinnvolle Anwendung wäre es zu zeigen, wie ein Sourcecode auf keinen Fall aussehen sollte. Es könnte auch sein, dass du die feste Absicht hast einen unwartbaren und kaum lesbaren Sourcecode zu erstellen (wobei es auch dazu "bessere" Möglichkeiten gibt). Anders formuliert: Wenn du meinst, dass du jetzt unbedingt globale Variablen benötigst, dann hole dir dein Lieblingsgetränk oder etwas ähnliches, ziehe dich in eine ruhige Umgebung zurück und überlege in aller Ruhe, was du falsch gemacht hast. RE: Globale Variablen - IchSelbst - 06.10.2021 13:55 Ich kann meinem Vorredner nur voll und ganz zustimmen. Von weiteren Hinweisen und weiterer Aufzählung negativer Auswirkungen dieser Unaussprechlichen will ich vorerst noch absehen. RE: Globale Variablen - GerdW - 06.10.2021 14:42 Hallo zusammen, mein Senf zum Thema: - Globale Variablen führen schnell zu bestimmten Problemen (u.a. Race Conditions), weshalb man sich genau überlegen sollte, ob man sie nutzt. - Ich selbst habe seit 10+ Jahren keine globalen Variablen mehr benutzt… - Es gibt im NI-Forum dazu die Meinung, dass es für kleinere Projekte durchaus sinnvoll sein kann, globale Variablen zu nutzen. Hier wird dann aber konkret der Anwendungsfall "WORM" (Write Once, Read Many) genannt: eine globale Variable (meist für Konfigurationsdaten) zu Beginn des Programms beschreiben und später dann gern auf diese Daten lesend zugreifen… Um deine Frage zu beantworten: Zitat:Wie ist die korrekte Vorgehensweise für Erstellung und Benutzen von globale Variablen?Erstellen: - In der Funktionspalette mit den Strukturen findest du auch eine globale Variable. Diese einfach in dein Blockdiagramm ziehen, dann doppelklicken und fertig konfigurieren (d.h. einen Datentyp einstellen). Dann die globale Variable als VI in deinem Projekt speichern. Benutzen: - Die globale Variable (bzw. deren VI) aus deinem Projekt in ein VI/Blockdiagramm ziehen. - Das VI einer globalen Variablen kann mehrere solchre Variablen aufnehmen: dann muss man noch die richtige Variable auswählen, wenn man das "globale VI" ins Blockdiagramm zieht… Mögliche Probleme: - Race Conditions - ver-/behindert deine Programmierung, wenn du mal plötzlich mehrere "Objekte" hast, die alle ihre eigene globale Variable benötigen. Beispiel: du schreibst einen Gerätetreiber, der wichtige Daten in einer globalen Variablen speichert. Dann willst du plötzlich mehrere dieser Geräte gleichzeitig benutzen: wo bekommst du nun voneinander unabhängige globale Variablen her!? (Stichwort zur Lösung: OOP…) Edi: - Zeige uns bitte deinen konkreten Anwendungsfall, damit wir bessere Tipps geben können! - Bitte keine PNs schicken, wenn du Antworten in einem Thread haben willst. Technische Diskussionen bitte immer im Forum… Zitat:Wenn ich im Fronpanel eine Variable erstelle, dann entsteht im Blockdiagramm auch eine Variable.So, wie du es hier beschreibst, hast du aber eben keine Variable angelegt! Du hast im Frontpanel ein Control (oder einen Indicator) erzeugt und siehst im Blockdiagramm dessen Terminal! Bitte (nochmal) die LabVIEW-Grundlagen durcharbeiten und wenigsten die Grundbegriffe erlernen (wie Control, Indicator, Terminal)… RE: Globale Variablen - Edi70 - 06.10.2021 21:03 Hallo, danke erstmal für die vielen Antworten. In meinem Main-Programm (bestehend aus 4 Tab/Register) werden viele Sub VIs aufgerufen. Ich möchte in einem Tab, bestimmte Variable aufzeigen. RE: Globale Variablen - IchSelbst - 07.10.2021 07:56 (06.10.2021 21:03 )Edi70 schrieb: danke erstmal für die vielen Antworten. In meinem Main-Programm (bestehend aus 4 Tab/Register) werden viele Sub VIs aufgerufen. Ich verwende anstelle von Globalen Variablen sogenannte "funktionale Globale Variablen": FGVs. Das sind SubVIs, die eine While-Schleife mit Schieberegistern enthalten und (im Normalfall) nur einen einzigen Durchlauf machen. Sinn und Zweck der While-Schleife sind nicht die Anzahl der Durchläufe, sondern das Halten von Daten im Schieberegister (oder in mehreren Schieberegistern). Innerhalb der While-Schleife befindet sich eine Case-Sequenz, die durch einen Enumerator (wichtig: unbedingt strict typ-definieren) gesteuert wird. Die Ausgänge des SubVIs sind die Inhalte der Schieberegister (spricht: verdrahtet auf Anzeigeelemente). Die Eingänge jedoch sind der oben erwähnte Enumerator, der den durch die Case-Sequenz auszuführenden Case bestimmt, sowie ein Variant, der beliebige Daten in das SubVI einführt. Weiterer Vorteil von FGVs: Man kann in den Cases z.B. Code zum Bearbeiten der Daten ausführen lassen - denke an den Enumerator! Übergeordnetes Ziel der FGV: Modularisierung (=> Wiederverwendbarkeit), Verbesserung der Debug-Möglichkeiten, ganz wichtig: Kapselung von Daten und Code. RE: Globale Variablen - Edi70 - 08.10.2021 10:23 Hallo, hab jetzt schon eigentlich alle globale Variable erstellt. Ich weiss nur nicht wie ich es im Fronpanel verwenden soll? Habe da mehrere Tabs und muss sie duplizieren. RE: Globale Variablen - GerdW - 08.10.2021 17:01 Hallo Edi, Zitat:hab jetzt schon eigentlich alle globale Variable erstellt.Warum hast du immer noch keinen Code angehangen? Zitat:Ich weiss nur nicht wie ich es im Fronpanel verwenden soll?Überhaupt nicht! Globale Variablen verwendet man NUR im Blockdiagramm! Zitat:Habe da mehrere Tabs und muss sie duplizieren.Es scheint immer noch ein grundlegendes Verständnis für "globale Variablen" zu fehlen. Ich glaube ja, es würde helfen, wenn du mal Code-Beispiele anhängen würdest… |