Umsichtige Verwendung lokaler und globaler Variablen
- Aktualisiert2025-08-27
- 4 Minute(n) Lesezeit
Lokale und globale Variablen gehören zu den LabVIEW-Komponenten für fortgeschrittene Nutzer. Variablen folgen nicht dem Datenflussprinzip von LabVIEW. Da Blockdiagramme mit lokalen und globalen Variablen entsprechend schwieriger zu verstehen sind, sollten Variablen umsichtig eingesetzt werden. Wenn lokale oder globale Variablen falsch eingesetzt werden, zum Beispiel anstelle von SubVI-Anschlüssen oder zum Datenaustausch zwischen den einzelnen Rahmen von Sequenzstrukturen, kann das zu einem unerwarteten Verhalten des VIs führen. Bei der Verwendung zu vieler Variablen, beispielsweise um lange Verbindungen im Blockdiagramm zu ersetzen, kann sich die Ausführungsgeschwindigkeit des VIs verlangsamen.
Initialisieren lokaler und globaler Variablen
Vergewissern Sie sich zum Initialisieren einer lokalen oder globalen Variable vor der Ausführung eines VIs, dass in der Variable bekannte Daten enthalten sind. Das VI funktioniert sonst unter Umständen nicht ordnungsgemäß. Wenn der Anfangswert für eine Variable das Ergebnis einer Berechnung ist, muss die Variable den Wert empfangen, bevor sie das nächste Mal abgefragt wird. Werden die Schreiboperation und der Rest des VIs parallel verbunden, kann dies zu einem Laufzeitproblem führen.
Um sicherzustellen, dass die Schreiboperation zuerst ausgeführt wird, können Sie den Code isolieren, der den Anfangswert für die Variable in den ersten Rahmen einer Sequenzstruktur oder in ein SubVI schreibt und das SubVI so verbinden, dass es zuerst im Datenfluss des Blockdiagramms ausgeführt wird.
Wenn die Variable vor dem Empfangen des ersten Ergebnisses abgefragt wird, gibt sie den Standardwert des Frontpanel-Elements aus, mit dem sie verknüpft ist.
Wenn der Wert einer globalen oder lokalen Variable mit einem anderen Punkt im Diagramm verbunden wird, ändert sich der an dieser Verbindung anliegende Wert nicht, wenn sich die Variable ändert. Zum Aktualisieren des an der Verbindung anliegenden Werts müssen Sie den Wert der Variable nach der Änderung abfragen.
Laufzeitprobleme
Ein Laufzeitproblem tritt immer dann auf, wenn mehrere parallel ausgeführte Codeabschnitte auf einen gemeinsam genutzten Speicher zugreifen. Sind beide Codeabschnitte unabhängig, kann nicht festgestellt werden, in welcher Reihenfolge auf die gemeinsam genutzte Ressource zugegriffen wird.
Bei Laufzeitproblemen ist das Ergebnis einer Operation nicht vorhersehbar. Wenn z. B. zwei unabhängige Codeabschnitte auf eine Queue zugreifen und die Reihenfolge, mit der auf die Queue zugegriffen wird, nicht geregelt ist, kann ein Laufzeitproblem auftreten.
Laufzeitprobleme können gefährlich sein, da sie beliebig auftreten und verschwinden, wenn sich das Timing eines Programms ändert. Sie können auftreten, wenn das Betriebssystem, LabVIEW-Versionen oder andere Software im System geändert werden.
Wenn sich das Timing in einem VI aufgrund eines aktualisierten Betriebssystems oder einer neuen LabVIEW-Version ändert, legen Sie mit Hilfe einer Timing-Bedingung fest, welcher Codeabschnitt zuerst ausgeführt wird.
Laufzeitprobleme bei der Verwendung von lokalen und globalen Variablen
Oft treten Laufzeitprobleme bei Verwendung von lokalen und globalen Variablen oder einer externen Datei auf. Laufzeitprobleme werden aber auch verursacht, wenn mehrere Operationen denselben gespeicherten Wert aktualisieren. Im folgenden Blockdiagramm wird eine solche Situation anhand einer lokalen Variable dargestellt.
Die Ausgabe dieses VIs (der Wert der lokalen Variable x) richtet sich danach, welche Operation zuerst ausgeführt wird. Da jede Operation einen anderen Wert in x schreibt, kann nicht bestimmt werden, ob das Ergebnis 7 oder 3 ist. In einigen Programmiersprachen wird die Ausführungsreihenfolge durch den Top-down-Datenfluss festgelegt. In LabVIEW können Sie mit Hilfe von Verbindungen mehrere Operationen an einer Variable ausführen und gleichzeitig Laufzeitprobleme vermeiden. Im folgenden Blockdiagramm werden Additionsoperationen über Verbindungen anstatt von lokalen Variablen ausgeführt.
Laufzeitprobleme treten auch auf, wenn zwei Operationen eine globale Variable gleichzeitig aktualisieren möchten. Um eine globale Variable zu aktualisieren, wird deren Wert gelesen, geändert und neu geschrieben. Wenn die erste Operation das Lesen, Ändern und Schreiben durchführt und daraufhin die zweite Operation folgt, wird ein fehlerfreies und vorhersehbares Ergebnis ausgegeben. Liest allerdings die erste Operation und dann die zweite, wird der Wert von beiden Operationen bearbeitet und neu geschrieben. Dieses Laufzeitproblem führt dann zu ungültigen oder fehlenden Werten.
Um mit globalen Variablen assoziierte Laufzeitprobleme zu vermeiden, können Sie Funktionale globale Variable verwenden, um kritische Abschnitte des Programmcodes, die eine Variable abfragen, zu schützen. Bei Verwendung einer funktionalen globalen Variable anstelle von mehreren lokalen oder globalen Variablen wird sichergestellt, dass zu einer bestimmten Zeit nur eine Operation ausgeführt wird. So treten keine Konflikte zwischen den Operationen auf und den gespeicherten Daten werden eindeutige Werte zugewiesen.
Funktionsweise von Variablen in Schleifen
Wenn eine Variable mehrere parallele Schleifen steuert, müssen die Schleifen nach dem Schreiben der Variable ausgeführt werden und Sie müssen die Variable in jeder Iteration jeder Schleife abrufen.
Beim Neustart des Systems muss die Variable auf eine geeignete Startbedingung eingestellt sein, bevor Schleifen ausgeführt werden, die die Variable abrufen. Ansonsten werden die Schleifen vorzeitig beendet.
Speicherbedarf bei Nutzung lokaler Variablen
Lokale Variablen erstellen Kopien der Datenpuffer. Das heißt, beim Auslesen einer lokalen Variable wird für die Daten des damit verbundenen Elements ein neuer Puffer erstellt.
Wenn eine große Anzahl an Daten von einer Stelle im Blockdiagramm an eine andere übertragen wird, ist im Allgemeinen mehr Speicherplatz erforderlich, und dementsprechend verlangsamt sich auch die Ausführungsgeschwindigkeit gegenüber dem Datenaustausch über eine normale Verbindung. Zum Speichern von Daten während der VI-Ausführung sind Schieberegister am besten geeignet.
Speicherbedarf bei Nutzung globaler Variablen
Beim Auslesen globaler Variablen wird eine Kopie der darin gespeicherten Daten erstellt.
Die dazu benötigte Zeit und Speicherkapazität können jedoch besonders bei der Bearbeitung großer Arrays und Strings beträchtlich sein. Insbesondere bei Arrays sind globale Variablen ineffizient, da selbst bei einer Änderung an nur einem Array-Element immer das ganze Array neu gespeichert wird. Auch das Auslesen einer globalen Variable an mehreren Stellen in einem VI führt zur Verlangsamung des VIs, da dazu mehrere Puffer erstellt werden.
Weitere Informationen zu Leistung und Speicher in LabVIEW finden Sie im Buch Leistungs- und Speichermanagement.