INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Sinnvolle Frontpanel Ereignisse



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

09.11.2012, 12:18
Beitrag #1

Atilla Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Oct 2012

11
2012
DE


Deutschland
Sinnvolle Frontpanel Ereignisse
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.

11.0 .vi  main.vi (Größe: 24,66 KB / Downloads: 219)


11.0 .vi  degas.vi (Größe: 25,43 KB / Downloads: 219)

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. Smile

Lg Atilla.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
09.11.2012, 12:32
Beitrag #2

Achim Offline
*****
*****


Beiträge: 4.222
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
RE: Sinnvolle Frontpanel Ereignisse
Wie so oft:

(Queued) State Machine

Producer-Consumer

Diese Themen recherchieren...verinnerlichen..."fertig"!

A.

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.11.2012, 11:58
Beitrag #3

Atilla Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Oct 2012

11
2012
DE


Deutschland
RE: Sinnvolle Frontpanel Ereignisse
(09.11.2012 12:32 )Achim schrieb:  Wie so oft:

(Queued) State Machine

Producer-Consumer

Diese Themen recherchieren...verinnerlichen..."fertig"!

A.

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?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.11.2012, 07:03
Beitrag #4

Achim Offline
*****
*****


Beiträge: 4.222
Registriert seit: Nov 2005

20xx
2000
EN

978xx
Deutschland
RE: Sinnvolle Frontpanel Ereignisse
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.

"Is there some mightier sage, of whom we have yet to learn?"

"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.11.2012, 15:53
Beitrag #5

Atilla Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Oct 2012

11
2012
DE


Deutschland
RE: Sinnvolle Frontpanel Ereignisse
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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.11.2012, 16:01 (Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2012 16:02 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Sinnvolle Frontpanel Ereignisse
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? Big Grin

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
16.11.2012, 11:20 (Dieser Beitrag wurde zuletzt bearbeitet: 16.11.2012 11:22 von Atilla.)
Beitrag #7

Atilla Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Oct 2012

11
2012
DE


Deutschland
RE: Sinnvolle Frontpanel Ereignisse
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.


11.0 .vi  blaaa.vi (Größe: 19,63 KB / Downloads: 208)

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???
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...

Tut mir leid ich habe die Funktion verwechselt mit "in txt schreiben". Wall

Zitat:ich versuche mein altes Vorhaben in eine neue Struktur anzupassen. ... soll ich mein Vorhaben überarbeiten?
Ist das nicht das gleiche? Big Grin

findest du?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.11.2012, 11:51
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Sinnvolle Frontpanel Ereignisse
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?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.11.2012, 12:19
Beitrag #9

Atilla Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 65
Registriert seit: Oct 2012

11
2012
DE


Deutschland
RE: Sinnvolle Frontpanel Ereignisse
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:
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.

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.
   
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. Undecided

gruß Atilla

Danke GerdW, dass du so geduldig mit meinen Fragen bist.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.11.2012, 12:53
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Sinnvolle Frontpanel Ereignisse

Akzeptierte Lösung

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:
   

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)...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Kopplung zweier Ereignisse TTT 4 3.865 25.07.2018 15:49
Letzter Beitrag: TTT
  Plotlegende programmatisch erstellen um Ereignisse zu erfassen mez15 10 6.532 01.03.2017 16:48
Letzter Beitrag: GerdW
  Ereignis in Ereignisstruktur ruft weitere Ereignisse auf Gruenschnabel 6 4.807 16.09.2016 07:01
Letzter Beitrag: TSC
  2 Ereignisse nacheinander auslösen jan_1 31 14.904 13.04.2016 19:27
Letzter Beitrag: Lucki
  Ereignisse in Cluster in Array erfassen mez15 7 5.703 15.12.2015 11:24
Letzter Beitrag: mez15
  Ereignisstruktur - Gleichzeitig auftretende Ereignisse I3erry 3 3.267 28.09.2015 13:21
Letzter Beitrag: Lucki

Gehe zu: