![]() |
Sinnvolle Frontpanel Ereignisse - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +--- Thema: Sinnvolle Frontpanel Ereignisse (/Thread-Sinnvolle-Frontpanel-Ereignisse) Seiten: 1 2 |
Sinnvolle Frontpanel Ereignisse - Atilla - 09.11.2012 12:18 Hallo, ich habe hier einige theoretische Fragen zu der Gestaltung eines main.vi. Und zwar soll der Benutzer auf dem Frontpanel zwischen mehreren Ereignissen auswählen können. Seine Auswahl verändert dabei auch die Oberfläche, d.h. nur die benötigten Elemente sind noch eingeblendet, alles andere wird ausgeblendet. Über einen Startknopf werden dann die eingetragenen Werte weiter an das vorgesehene VI übertragen, alle anderen werden nicht aktiviert. Für die Realisierung der Sichtbarkeit habe ich mit der Methode Sichtbar rumgespielt. Dabei kann ich per knopfdruck die Felder ein und ausblende. Und per logischer Verknüpfung mit dem Startknopf, habe ich auch die oben gewünschte Zuweisung erhalten. Aber irgendwie finde ich das unübersichtlicht und auch ineffizient. Deshalb habe ich mir überlegt, das ganze per Ereignisstruktur zu steuern. Aber kann ich den mein komplettes main.vi über eine Ereignissturktur steuern? Und kann mir da vll jmd genau erklären, wie ich denn diese Ereignisstruktur initializiere? Mein ganzes Programm muss dabei noch dynamisch bleiben und das, so glaube ich, ist bei der momentanen Situation nicht gegeben. Ich brauche in der Funktion irgendwie noch eine Stopfunktion, aber eine, die die Maschine langsam runterfährt und nicht einfach alles auf nullsetzt und die verbindung sofort kappt. Das kann ich mit meinem Ansatz nicht realizieren oder mir fehlt die Eingebung. Zum besseren Verständis habe ich meine vi angehangen. [attachment=42169] [attachment=42170] Die enthaltenen globale Variable soll vorerst ingnoriert werden, so wie die Referenz auf dieses Vi. Da habe ich nur etwas ausprobiert, bzw. ist meine Notaus Funktion übertrieben. Ich danke für eure Mühe. ![]() Lg Atilla. RE: Sinnvolle Frontpanel Ereignisse - Achim - 09.11.2012 12:32 Wie so oft: (Queued) State Machine Producer-Consumer Diese Themen recherchieren...verinnerlichen..."fertig"! A. RE: Sinnvolle Frontpanel Ereignisse - Atilla - 13.11.2012 11:58 (09.11.2012 12:32 )Achim schrieb: Wie so oft: Ok vielen Danke, diese Begriffe waren mir total fremd. Ich habe mich da nun etwas schlau gemacht und habe auch einen kleinen überblick bekommen. Kann ich beide Strukturen gleichzeitig benutzen, bzw wolltest du mir das sagen. Also soll ich mein Hauptververfahren mit der Statemachine machen, also die Aufnahme der Messerte und verarbeitung dieser. Das wäre dann gleichzeitig mein consumer. Und mein Producer könnte dann der Plot der Messwerte sein oder? RE: Sinnvolle Frontpanel Ereignisse - Achim - 14.11.2012 07:03 Alle Benutzereingaben: Event-Struktur = Producer Automatischer Programmablauf: State Machine = Consumer Die State Machine verarbeitet alle Benutzereingaben, die sie per Queue oder Notifier bekommt, ansonsten steuert sie sich selbst. Hier wird die Visualisierung untergebracht, die eigentliche (kontinuierliche) Datenerfassung könnte auch in einer parallelen Schleife laufen. Wenn die State Machine gerade keine aktuellen Aufgaben hat, geht sie in eine Wartezustand...allgemein desöfteren als "idle" bezeichnet. A. RE: Sinnvolle Frontpanel Ereignisse - Atilla - 14.11.2012 15:53 Ok, nun versuche ich erstmal meine Benutzereingabe fertig zustellen, bzw erstmal nur für eine Eingabe. Die Auswahl meiner Menüfelder funktioniert über eine Ereignissteuerung. Dann werden die entsprechenden Felder sichtbar und ich kann die gewünschte Werte eintragen. Nun stellt sich mir eine Fragen. Anmerkung: Ich habe für die Umsetzung die Erzeuger/Verbrauche Vorlage von Labview genutzt. Es sind drei double Werte und diese sollen an ein subVI übergeben werden. So wie ich das nun verstanden habe, übergebe ich meine Werte an die Queue bzw reihe sie dort auf und die Queue überträgt meine Werte in die Verbraucherschleife und dort wird das dann an die entsprechende VI geleitet, oder? Kann ich nur Strings in die Queue einreihen? Außerdem muss ich ja eigentlich noch den Wert meines Ereignisses übergeben, damit meine Verbraucherschleife weiß, welches subVI sie aufrufen soll. Wie kann ich nun die Werte sauber in ein String lesen und wieder öffnen? Da gibt es doch die Funktion "write in to string" oder? Ich glaube mein Problem ist, das ich nun versuche mein altes Vorhaben in eine neue Struktur anzupassen. Ist das den möglich, oder soll ich mein Vorhaben überarbeiten? Lg Atilla RE: Sinnvolle Frontpanel Ereignisse - GerdW - 14.11.2012 16:01 Hallo Attila, Zitat:Kann ich nur Strings in die Queue einreihen?Nein, das funktioniert mit beliebigen Daten. Muss man nur beim QueueErstellen so angeben... Zitat:Wie kann ich nun die Werte sauber in ein String lesen und wieder öffnen? Da gibt es doch die Funktion "write in to string" oder???? Wert in einen String lesen und wieder öffnen??? Welches "Write into String? Steht der Name echt so in der Kontexthilfe? Tipp1: Erstelle einen (typdefinierten) Cluster, der alle benötigten Werte beinhaltet. Keine Probleme, mehrere Daten (synchronisiert) per Queue zu übertragen... Tipp2: Wenn du von irgendwelchen Sachen redest und nicht die richtigen Namen verwendest, solltest du immer dein VI oder wenigstens ein Bild des BD mit anhängen... Zitat:ich versuche mein altes Vorhaben in eine neue Struktur anzupassen. ... soll ich mein Vorhaben überarbeiten?Ist das nicht das gleiche? ![]() RE: Sinnvolle Frontpanel Ereignisse - Atilla - 16.11.2012 11:20 Hallo GerdW Ok danke für deine Info. Nun habe ich einfacher bei der Erzeugung der Queue eine Konstante an den eingang Datentyp gelegt. Diese wurde automatisch als Variant bezeichnet. Nun überlege ich wie ich die werte einzeln auslesen kann. Übergebe ich nur einen Wert an die Queue, ist das kein Problem. Ich weiß auch das die Queue nach dem FiFo prinzip funktioniert, und bei Java würde ich die Werte mit einer Schleife auslesen. Aber kann ich das hier auch so machen? Wenn ja wie kann ich das realizieren? Außerdem stellt sich mir noch die Frage wie ich der Queue sagen kann, um welchen Cluster es sich handelt, da ich verschiedene habe und diese auch verschiedene größen haben. Der Verbraucher muss sich halt dann dementsprechend anpassen. [attachment=42247] Hier möchte ich erstmal nur versuchen die Werte von der Ratensteuerung auszulesen. Zitat:Zitat:Wie kann ich nun die Werte sauber in ein String lesen und wieder öffnen? Da gibt es doch die Funktion "write in to string" oder???? Wert in einen String lesen und wieder öffnen??? Tut mir leid ich habe die Funktion verwechselt mit "in txt schreiben". ![]() Zitat:ich versuche mein altes Vorhaben in eine neue Struktur anzupassen. ... soll ich mein Vorhaben überarbeiten?Ist das nicht das gleiche? ![]() findest du? RE: Sinnvolle Frontpanel Ereignisse - GerdW - 16.11.2012 11:51 Hallo Attila, Zitat:Nun habe ich einfacher bei der Erzeugung der Queue eine Konstante an den eingang Datentyp gelegt.Nein, du hast die Konstante per Rechtsklick auf den Eingang erzeugt... Du kannst auch eine selbstdefinierte Konstante dort anschließen! Problem: Es scheint, du willst verschiedene Cluster (=Datentypen!) über die Queue transportieren. Dies erlaubt LabVIEW nicht ohne weiteres, da es strikt typisiert arbeitet. Optionen: 1) Erstelle einen Cluster mit einem Enum (notfalls String) und einem Variant. Verwende dieses als Datentyp für die Queue. Dann musst du zu jedem Daten-Cluster, den du in die Queue stopfen willst, auch eine Kennung mitschicken (eben dieses Enum oder String). Die Auswerteroutine muss dann anhand der Kennung den Cluster wieder aus dem Variant auspacken. 2) Erstelle einen Cluster, der alle deine (bisher unterschiedlichen) Daten aufnehmen kann. Versende diesen mit der Queue. Zitat: bei Java würde ich die Werte mit einer Schleife auslesen. Aber kann ich das hier auch so machen? Wenn ja wie kann ich das realizieren?Das hast du doch schon in deinem VI gelöst!? Wo ist das Problem? RE: Sinnvolle Frontpanel Ereignisse - Atilla - 16.11.2012 12:19 Problem: Zitat:Es scheint, du willst verschiedene Cluster (=Datentypen!) über die Queue transportieren. Dies erlaubt LabVIEW nicht ohne weiteres, da es strikt typisiert arbeitet.Also in erster linie sind das immer die selben datentypen im Cluster. Das sind jedesmal dbl Typ. Nur die Cluster haben unterschiedliche Größen. zählt das auch schon als verschiedene Typen? Zitat:Optionen: Deine erste Option finde ich gut und würde ich gerne ausprobieren. Also wenn ich dich jetzt richtig verstanden habe Wandle ich meine eingegebenen Werte mit "to variant" in ein Variant um und bündel ist mit meinem String(oder enum) zu einem Cluster. Diesen übergebe ich dann der Queue. Danach wandel ich diese wieder mit "variant to data" um, analysiere das Emun, und dann vergreife ich mich an dem zwieten variant und schicke es weiter, da wo es gebraucht wird. Sehe ich das richtig? Zitat:Zitat: bei Java würde ich die Werte mit einer Schleife auslesen. Aber kann ich das hier auch so machen? Wenn ja wie kann ich das realizieren?Das hast du doch schon in deinem VI gelöst!? Wo ist das Problem? Habe ich das? Aber ich kann die einzelnen Werte nicht auslesen, bzw kp wie? Ich finde jetzt habe ich das erst gelöst. [attachment=42249] Da nutzte ich "variant to data" und sagte ihm dass der datentyp ein Cluster mit zwei dbl elemente ist. Aber das wirkt für mich, wie keine saubere lösung. ![]() gruß Atilla Danke GerdW, dass du so geduldig mit meinen Fragen bist. RE: Sinnvolle Frontpanel Ereignisse - GerdW - 16.11.2012 12:53 Hallo Attila, Zitat:sind das immer die selben datentypen im Cluster. Das sind jedesmal dbl Typ. Nur die Cluster haben unterschiedliche Größen. zählt das auch schon als verschiedene Typen?Ganz klares JA. Unterschiedliche Cluster = unterschiedliche Datentypen. Ist auch in anderen Programmiersprachen (meist) so geregelt... Zitat:Also wenn ich dich jetzt richtig verstanden habe Wandle ich meine eingegebenen Werte mit "to variant" in ein Variant um und bündel ist mit meinem String(oder enum) zu einem Cluster. Diesen übergebe ich dann der Queue. Danach wandel ich diese wieder mit "variant to data" um, analysiere das Emun, und dann vergreife ich mich an dem zwieten variant und schicke es weiter, da wo es gebraucht wird. Sehe ich das richtig?Ich glaube fast: [attachment=42250] Zitat:Da nutzte ich "variant to data" und sagte ihm dass der datentyp ein Cluster mit zwei dbl elemente ist. Aber das wirkt für mich, wie keine saubere lösung.Wenn du die Datenim Variant wieder verarbeiten willst, musst du sie in "normale" Daten umwandeln. Dazu musst du wissen, wie die Daten im Variant aufgebaut sind. Ergo musst du dem FromVariant den zu wandelnden Datentyp mitteilen. Das ist der saubere Weg - den du hier dann einschlagen musst. Variants haben Vorteile (beliebige Datentypen) und Nachteile (explizite Umwandlung nötig)... |