09.11.2012, 12:18
Beitrag #1
|
Atilla
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.
main.vi (Größe: 24,66 KB / Downloads: 253)
degas.vi (Größe: 25,43 KB / Downloads: 245)
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.
|
|
|
09.11.2012, 12:32
Beitrag #2
|
|
|
13.11.2012, 11:58
Beitrag #3
|
Atilla
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?
|
|
|
14.11.2012, 07:03
Beitrag #4
|
|
|
14.11.2012, 16:01
(Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2012 16:02 von GerdW.)
Beitrag #6
|
GerdW
______________
Beiträge: 17.469
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?
|
|
|
16.11.2012, 11:20
(Dieser Beitrag wurde zuletzt bearbeitet: 16.11.2012 11:22 von Atilla.)
Beitrag #7
|
Atilla
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.
blaaa.vi (Größe: 19,63 KB / Downloads: 239)
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".
Zitat:ich versuche mein altes Vorhaben in eine neue Struktur anzupassen. ... soll ich mein Vorhaben überarbeiten?
Ist das nicht das gleiche?
findest du?
|
|
|
16.11.2012, 11:51
Beitrag #8
|
GerdW
______________
Beiträge: 17.469
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?
|
|
|
16.11.2012, 12:19
Beitrag #9
|
Atilla
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.
gruß Atilla
Danke GerdW, dass du so geduldig mit meinen Fragen bist.
|
|
|
16.11.2012, 12:53
|
GerdW
______________
Beiträge: 17.469
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Sinnvolle Frontpanel Ereignisse
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)...
|
|
|
| |