LabVIEWForum.de
Daten mit Tunnel übergeben - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Daten mit Tunnel übergeben (/Thread-Daten-mit-Tunnel-uebergeben)

Seiten: 1 2


Daten mit Tunnel übergeben - Techniker - 11.03.2008 16:43

Ich habe ein Problem ein Signal aus einer Sequenz Struktur nach außen zu führen.
Das Signal ist eine Enum-Konstante und befindet sich in einer Sequenz Struktur. Diese Sequenz Struktur ist in einer Eventstruktur. Und außerhalb dieser Eventstruktur ist ein vorgegebenes VI, welches den Wert der Enum-Konstante benötigt. Das Programm ist so aufgebaut, dass in der Sequenz Struktur die enum-Daten nacheinander aufgerufen werden und das VI den jeweiligen Schritt ausführen lassen. Ist es möglich in jeder Sequenz einer Sequenz Struktur einen Wert nach außen zu geben. Wenn dem nicht so sein sollte, würde ich mich freuen, wenn mir jemand eine alternative sagen könnte, oder einen link zu einem Beispielprogramm.

Im Prinzip habe ich ein VI, welches verschiedene Eingangssignale bekommt. Vergleichbar mit dem fahren eines PKW.
Programmteil 1 (mit Schaltgetriebe)
1. Schritt Anschnallen
2. Schritt Einschalten
3. Schritt Gas geben
4. Schritt Kupplung Treten
5. Schritt Schalten

Programmteil 2 (mit Automatikgetriebe)
1. Schritt Anschnallen
2. Schritt Einschalten
3. Schritt Gas geben

Die verschiedenen Programmteile habe ich bisher mittels Eventstruktur und Drücken von Funktionstasten realisiert. Innerhalb eines Events wollte ich eine Sequenz Struktur einbinden. Dort hat mein Prpblem begonnen.
Es ist aber wahrscheinlich nicht im Sinne des Erfinders, wenn sich in jeder Sequenz das VI befindet oder?
Ich poste mal mein Beispiel und hoffe auf eine Hilfe.

[attachment=11558]


Techniker


Daten mit Tunnel übergeben - Achim - 12.03.2008 08:38

Wie so oft:

Das schreit nach einer "State Machine"...dazu gibts Zillionen Beispiele hier im Forum!


Daten mit Tunnel übergeben - Techniker - 12.03.2008 10:19

' schrieb:Wie so oft:

Das schreit nach einer "State Machine"...dazu gibts Zillionen Beispiele hier im Forum!


Ich habe mir jetzt ein Beispiel einer einfachen State Machine angeschaut und wollte diese an meine Anwendung anpassen. Jetzt bin ich aber auf eine weitere Frage gestoßen. Ich müsste ja in dem Case Rechnen 1 viele weitere Schritte nacheinander ausführen, was ich in meinem Ursprungs-Programm mit einer Sequenz versucht habe. Nur wie realisiere ich diesen Ablauf sinnvoll ohne eine Sequenz einzubinden. Soll ich mit dem Schieberegister Arbeiten oder mit Eventstrukturen innerhalb der Case Struktur?? Ich würde mich freuen, wenn mir jemand einen Tip geben könnte ich bin hier kurz vorm verzweifeln. Leider konnte ich auch keine andere State Machine inlv80finden. Ich würde mich freuen, wenn einer von euch LV Profis sich mal 2 Minuten nehmen könnte um mir einen etwas größeren Denkanstoß zu geben.

Das Beispiel von dem ich geschrieben habe befindet sich im Anhang.


Techniker


Daten mit Tunnel übergeben - Y-P - 12.03.2008 10:32

Mach doch einfach in Deiner Haupt-State-Machine mehr Cases, die Du hintereinander ansprichst. Sonst brauchst Du eine State-Machine in der State-Machine. Big Grin

Gruß Markus


Daten mit Tunnel übergeben - Techniker - 12.03.2008 11:24

' schrieb:Mach doch einfach in Deiner Haupt-State-Machine mehr Cases, die Du hintereinander ansprichst. Sonst brauchst Du eine State-Machine in der State-Machine. Big Grin

Gruß Markus

Also füge ich am besten in meine Case-Struktur in der sich auch die Cases für "Rechnen 1", "Rechnen 2" und "Rechnen 3" befinden zusätzliche Cases ein für meinen weiteren Ablauf. Wie springe ich denn am besten zwischen den einzelnen Cases. Mit Hilfe von Schieberegistern oder gibt es dabei eine bessere Möglichkeit die für Anfänger u.U. auch einfacher ist.

Techniker


Daten mit Tunnel übergeben - Y-P - 12.03.2008 11:44

Mach' mal Rechnen3 und schau' was im String steht....

Ich hab' Dir das Bsp. mit einem "Type_Def" gemacht, dann musst Du das Enum nur einmal ändern und es wird global übernommen.

[attachment=11580]
Lv80_img

Gruß Markus


Daten mit Tunnel übergeben - Techniker - 12.03.2008 14:31

' schrieb:Mach' mal Rechnen3 und schau' was im String steht....

Ich hab' Dir das Bsp. mit einem "Type_Def" gemacht, dann musst Du das Enum nur einmal ändern und es wird global übernommen.

[attachment=38726:State_Machine.zip]
Lv80_img

Gruß Markus

Immer wieder eine super Hilfe hier das Forum. Vielen dank.
Was ist denn der Vorteil von diesem "Type_Def". Ich habe festgestellt, dass man die Texte nur in dieser Datei ändern kann. Das man eine zusätzliche Datei bei seinem Projekt benötigt finde ich jedoch unübersichtlich. zumindest für diese Aufgabe.


Daten mit Tunnel übergeben - jg - 12.03.2008 15:24

Der Vorteil einer "Typ-Definition" bei einer Enum für eine State-Machine ist die Erweiterbarkeit. Wenn man noch einen weiteren Fall hinzufügen muss, editiert man einfach die "Typ-Definition" der Enum, fügt dort den Case hinzu, und wenn man schön brav das "Auto-Update from Type-Definition" drin gelassen hat, werden alle Enums, die man so im VI drin hat, automatisch aktualisiert. Dann funktionieren auch immer so Sachen wie "Rechter Mausklick -> Create -> Constant" usw...

MfG, Jens


Daten mit Tunnel übergeben - Techniker - 12.03.2008 15:43

' schrieb:Der Vorteil einer "Typ-Definition" bei einer Enum für eine State-Machine ist die Erweiterbarkeit. Wenn man noch einen weiteren Fall hinzufügen muss, editiert man einfach die "Typ-Definition" der Enum, fügt dort den Case hinzu, und wenn man schön brav das "Auto-Update from Type-Definition" drin gelassen hat, werden alle Enums, die man so im VI drin hat, automatisch aktualisiert. Dann funktionieren auch immer so Sachen wie "Rechter Mausklick -> Create -> Constant" usw...

MfG, Jens


Das würde auch erklären warum an meinen Cases jetzt nicht mehr der Klartext steht, sondern nur noch die Zahlen.
Wo kann ich denn erkennen, dass es sich bei der verwendeten Enum um eine handelt, die außerhalb von dem eigentlichen Programm deklariert wird?? Und wie geht man vor, wenn man eine solche Konstante außerhalb verwaltet und dem Case hinzufügt?

Grüße
Techniker


Daten mit Tunnel übergeben - Y-P - 12.03.2008 16:18

Erzeugen kannst Du die Type-Def folgendermaßen:

1. "File"->"New"->"Other Files"->"Custom Control"
2. Schaltfläche "Control" auf "Type-Def", bzw. "Strict Type-Def" umstellen
3. Enum erstellen und speichern

Einfügen tust Du sie so:
1. Rechtsklick im Block-Diagramm
2. "Select a VI", dann Dein Type-Def auswählen und schon hast Du die Konstante

Ob die Konstante zu einem Type-Def gehört, siehst Du, wenn Du einen Rechtsklick drauf machst.
Da gibt's dann u.a. folgende Auswahlmöglichkeiten "Open Type Def", "Auto Update from Type Def",....

Gruß Markus

EDIT: Ich habe mal den Thementitel erweitert, damit man das Thema schneller wieder findet, wenn man eine State-Machine oder was zu Type-Defs sucht.

' schrieb:Das würde auch erklären warum an meinen Cases jetzt nicht mehr der Klartext steht, sondern nur noch die Zahlen.
Wo kann ich denn erkennen, dass es sich bei der verwendeten Enum um eine handelt, die außerhalb von dem eigentlichen Programm deklariert wird?? Und wie geht man vor, wenn man eine solche Konstante außerhalb verwaltet und dem Case hinzufügt?

Grüße
Techniker