So zeigen Sie Daten in einer Steuerung in LabVIEW
Habe ich eine numerische Steuerung( nicht das Kennzeichen) und eine for-Schleife(limit 5)
Ich brauche, um [aktuellen Schleifen-Index+ value in numeric control] in der Numerischen Steuerung. Ich bin neu in LabVIEW. Gibt es eine Idee, dies zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben eines Wertes an eine Kontrolle, die Sie brauchen, zu erstellen, eine lokale variable aus (rechts-Klick auf das control-terminal im Blockdiagramm und wählen Sie Erstellen > Lokale Variable). Um es update in jeder iteration deiner For-Schleife, legen Sie die lokalen Variablen-terminal innerhalb der For-Schleife ein und verbinden Sie, was Sie angezeigt haben möchten, terminal. Ich bin mir nicht sicher, ob dies wird eine gute user-interface-design, aber es ist die Antwort auf Ihre Frage.
Können Sie auch lokale Variablen zu schreiben, um die Indikatoren aus mehr als einem Ort in Ihrem block-Diagramm, und Lesen von Indikatoren oder steuert. Sie können mehr als eine lokale variable terminal für jede Kontrolle oder Anzeige. Jede lokale variable terminal ist entweder zum Lesen oder schreiben - mit der rechten Maustaste auf die lokale variable, und wählen Sie Ändern, um zu Lesen oder zu Ändern, um zu Schreiben.
Sollten Sie vorsichtig sein, über die Verwendung von lokalen Variablen übergabe von Daten rund um, weil der Programmablauf wird nicht mehr gesteuert werden, durch die Daten fließen, wie es ist, wenn Sie übergeben von Daten entlang einem Draht, und dies könnte Ihnen unberechenbare Verhalten (race conditions). Schreiben und Lesen in mehreren Orten ist OK, wenn der Leser braucht nur zu wissen, den aktuellen Wert an die Zeit, die Sie ausführen, und so zu schreiben ist ein Indikator von mehreren Orten, wo das Kennzeichen ist nur seiend verwendet für die Anzeige von Informationen für den Benutzer.
Gibt es irgendeinen bestimmten Grund, warum Sie brauchen, um zu aktualisieren ein Steuerelement, das oft?
Wenn es aktualisiert werden muss, dass die regelmäßige könnte es besser sein, ändern Sie es in einer Anzeige.
Wenn Sie ein update für ein Steuerelement, das oft der Benutzer das Gefühl haben, er ist nicht "Kontrolle".
Wie bereits erwähnt können Sie lokale Variablen verwenden und proerty-Knoten, um den Wert Ihrer Kontrolle oder Anzeige. Wenn Sie versuchen, speichern von Daten es gibt einen viel besseren Weg.
Google "functional global" oder "labview 2 "global". Das grundlegende Muster ist die Verwendung einer while-Schleife hart codiert zu stoppen, nachdem eine iteration. Fügen Sie ein nicht initialisiertes Schieberegister. Fügen Sie eine case-Struktur innerhalb der Schleife. Verwenden Sie eine Steuerung (boolean, enum oder string) zu wählen, die auf die case-Struktur. Drop ein control/indicator-pair-Mädchen mit dem gleichen Datentyp auf Ihrem VI. Draht die Kennzeichen der outter-Ausgang des rechten Schalthebel auf der Außenseite der Schleife. Ort der Steuerung INNERHALB der Schleife in der "Satz" (in der Regel wahr, nicht-Standard -) Fall und Draht aus dem Kasten an den Eingang des rechten shifter. Gehen Sie zu den anderen leeren case(s) und verbinden Sie die innen-Ausgang des linken shifter durch die Fälle, um die terminal-Verbindung mit dem inneren Eingang.
Weil Sie nicht Draht der outter-Eingabe von der linken shifter ist es eine "nicht initialisiertes shift-register". Es wird die Persistenz der Daten aus dem letzten Aufruf der VI. Das ist wie deklarieren Sie eine variable auf dem heap in einer c-Funktion, und nachdem der Letzte zugewiesene Wert zur Verfügung, um Sie beim nächsten Aufruf der Funktion.
Die drei wichtigsten Vorteile sind die Erhaltung des Datenflusses, thread-Sicherheit und Leistung. Sie erhalten Daten fließen durch das hinzufügen von Fehler-IO zu Ihrem VI. Thread-Sicherheit ist gewährleistet, weil der VI-Ausführung garantiert atomar sind. Perfomance verbessert, weil LV-Daten Leben will, auf einem Draht. Jedes mal, wenn Sie das schreiben von Daten in einem Steuerelement proerty Knoten die LV runtime schreibt, dass die Daten an den UI-thread. Ich denke, es ist eine ähnliche threading-basierte performance-Treffer für die einheimischen auch, aber ich bin mir nicht sicher.
Pro der erste Kommentar...
Kopiert hier aus dem link zu Ihrem nutzen (ja Sie, Mr. Reader).
Problem:
Ich überlege mithilfe einer lokalen oder globalen Variablen; in welchem thread tun-Variablen ausführen?
Lösung:
Ein häufiges Mißverständnis ist, dass lokale und Globale variable, die Operationen ausführen, die in der UI-thread, oder ein thread swap an den UI-thread - das ist nicht wahr. Die folgende Tabelle beschreibt das Verhalten von lokalen und globalen Variablen Lesen und schreiben Operationen:
Schreiben:
Wenn Sie schreiben, um eine lokale oder Globale variable, LabVIEW nicht wechseln zu dem user interface thread sofort. LabVIEW stattdessen schreibt den Wert auf den transfer buffer, die einen geschützten Bereich des Arbeitsspeichers. Die updates der Benutzeroberfläche bei der nächsten geplanten Aktualisierung Zeit. Es ist möglich, Sie zu aktualisieren, eine variable mehrfach vor einem einzigen thread wechseln oder user interface-update Auftritt. Dies ist möglich, weil Variablen arbeitet ausschließlich im Ausführungs-thread.
Lesen:
Wenn Sie Lesen, von einem lokalen oder globalen Variablen, die operation auftreten, wird in dem thread dem das VI ausgeführt wird, so können Sie sicher sein, es tritt nicht in der UI-thread durch die Einstellung der execution system in den VI-Eigenschaften auf standard. Es gibt einen thread, der Schutz-Mechanismus, um sicherzustellen, dass kein Schriftsteller, der global ist, die Daten zu verändern, während Sie es Lesen, aber dies geschieht über einen mutex, und nicht indem Sie an den UI-thread. Allerdings, wenn die Globale variable panel geöffnet ist, dann wird eine Meldung gepostet neu zu zeichnen, die Globale Kontrolle und die redraw-wird geschehen in den UI-thread.
nekomatic korrekt ist. Der thread swap nicht auftreten, wenn Sie schreiben, um einheimische.
Stimme ich mit Ton. Wenn Sie ändern den Wert eines Steuerelements programmgesteuert, dann sollten Sie überlegen, ob es sollte ein Indikator sein, oder vielleicht ein pseudo-Indikator des Steuerelements.
Wäre es eine gute Idee, post eine isolierte version des Codes, so dass wir verstehen können, was genau Los ist.
Wenn Sie sich unterhalten wollten, Datenfluss, Steuerung des Programmablaufs, könnten Sie stattdessen eine Eigenschaft node des Steuerelements, und legen Sie die Eigenschaft "Value".
Erstellen Sie den eigenschaftsknoten mit der rechten Maustaste auf die Steuerung des Terminals auf dem Blockdiagramm und wählen Sie Erstellen » eigenschaftsknoten » Wert. Jetzt können Sie sich zu dataflow-Programmierung durch die Verwendung einer error-Drähte, um die Ablaufsteuerung des Programms.
Wieder neu betonen die Tonne Punkt -, Wenn Sie gehen zu ändern Sie den Wert eines Steuerelements Häufig, kann es sinnvoll sein, ändern Sie es in einer Anzeige statt.