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 

"rentrant" SubVI zum Triggern von Events



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!

27.04.2015, 17:16
Beitrag #1

Oli_N Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 54
Registriert seit: Oct 2006

9.0
2006
kA

3053
Schweiz
"rentrant" SubVI zum Triggern von Events
Hallo zusammen

Ich habe ein Problem mit einem als "reentrant. definiertem VI welches ich hier mal versuche zu beschreiben.
Meine Steuerung hat mehrere Buttons, wobei jeder bei Betätigung einen "Event" auslöst.
Am Ende jedes "Events" wird der entsprechende Button zurückgesetzt.
Für den Aufruf der Events habe ich mir nun ein kleines SubVI gebaut welches die Buttons mit einer Property Node -> "Value (Signaling)" setzt.
In diesem SubVI möchte ich eigentlich so lange hängen bleiben, bis der entsprechende Event abgearbeitet ist.
Das Ganze funktioniert aber nicht mehr, sobald das SubVI als "reentrant" definiert ist.

An meiner aktuellen Problemstelle habe ich das genannte SubVI 4x nebeneinander platziert .
Anstatt nun das erste ausgeführt wird und darin gewartet wird bis der Event beendet ist werden die anderen direkt anschliessend ausgeführt und ich bekommen ein Durcheinander mit meinen Events.
Ist dieses Verhalten nachvollziehbar? Wenn ja, gibt es ev. eine Möglichkeit bei der ich die SubVI's trotzdem "reentrant" lassen kann?


Ich hoffe meine Problematik ist einigermassen verständlich. Angel_not

Gruss
Oli


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.04.2015, 17:44 (Dieser Beitrag wurde zuletzt bearbeitet: 27.04.2015 17:45 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: "rentrant" SubVI zum Triggern von Events
Hallo Oli,

Zitat:In diesem SubVI möchte ich eigentlich so lange hängen bleiben, bis der entsprechende Event abgearbeitet ist.
Das Ganze funktioniert aber nicht mehr, sobald das SubVI als "reentrant" definiert ist. …
Ist dieses Verhalten nachvollziehbar?
Ok, du feuerst ein Event durch Aufruf der ValSgnl-Property. Dann startet das Event und du wartest, bis im Event der Button zurückgesetzt wird.
Das wird mit einem subVI prima funktionieren.

Nun probierst du mit dem reentrantVI, mehrere Events zu starten und abzuwarten - gleichzeitig.
Das mit dem Triggern wird gleichzeitig funktionieren. Nur beim Warten hast du ein Problem: sehr wahrscheinlich verwendest du genau eine Event-Struktur mit mehreren Event-Cases. Und die wiederum befolgen strikt den DATAFLOW - THINK DATAFLOW!
Es hilft nichts, dein subVI reentrant zu gestalten, wenn die eine Event-Struktur eben nicht reentrant arbeitet!

Es kann in einer Event-Struktur immer nur ein Event bearbeitet werden, die anderen Events kommen in eine Queue und werden abgearbeitet, sobald dafür Zeit (und DATAFLOW) ist!

Mögliche Lösungen:
- parallele Eventstrukturen für die verschiedenen Buttons: das fällt unter die Kategorie "fehleranfällig" und "nicht empfohlen"
- ein besseres Producer-Consumer-Schema aufbauen, mit mehreren Consumern, die sich parallel um die Buttons kümmern…
- Es gibt da dieses ActorFramework, das sollte damit umgehen können. Habe ich aber noch nicht benutzt…
- Verzicht auf die PropertyNodes (es ist eh idiotischhochgradig unvernünftig, PropertyNodes im 1kHz-Takt zu pollen) und eben ein Producer-Consumer-Schema aufbauen!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.04.2015, 08:27
Beitrag #3

Oli_N Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 54
Registriert seit: Oct 2006

9.0
2006
kA

3053
Schweiz
RE: "rentrant" SubVI zum Triggern von Events
Besten Dank GerdW

Mein aktuelles Problem liegt darin, dass ich die Events eigentlich nicht gleichzeitig triggern möchte, sondern bewusst sequenziell.
Solange mein gezeigtes SubVI nicht "reentrant" war hat auch alles prima funktioniert.
Der Grund dass ich es nun "reentrant" gemacht habe hat einen anderen Hintergrund. Vieleicht ist es am besten wenn ich es versuche wieder "nicht reentrant" zu machen und mein anderes Problem anders löse.
Ich verstehe nur noch nicht ganz wieso nicht im SubVI gewartet wird bis der entsprechende Event beendet wird, wenn das SubVI als "reentrant" definiert ist. Wenn ich z.B. 4 SubVIs nebeneinander platziere sollten diese doch trotzdem sequenziell abgearbeitet werden, auch wenn sie "reentrant" sind.

Bis anhin habe ich meine Steuerungen immer ähnlich aufgebaut und das hat auch immer prima funktioniert.
Ich habe das Ganze hier mal "sehr" vereinfacht versucht darzustellen:
   


Bei meinem aktuellen Problem sieht das Ganze dann "sehr" vereinfacht etwa so aus:
   

Das heisst wenn die Events nun durch definieren von "reentrant" gleichzeitig getriggert werden, verstehe ich dass das Ganze nicht funktionieren kann.

Gruss
Oli
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.04.2015, 08:46
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: "rentrant" SubVI zum Triggern von Events
Dein Screenshot 2 funktioniert generell nicht, egal ob reentrant oder Standard, denn:
  • Reentrant ist vollkommen überflüssig, da du das VI durch die Sequenzstruktur zwingend sequentiell abarbeitest
  • In der Event-Struktur hast du im Screenshot aber nur das Event für Button 1 definiert, obwohl du in diesem Event eigentlich auch auf Button 2 & 3 regieren willst. Da stimmt was nicht...

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.04.2015, 09:09
Beitrag #5

Oli_N Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 54
Registriert seit: Oct 2006

9.0
2006
kA

3053
Schweiz
RE: "rentrant" SubVI zum Triggern von Events
Besten Dank auch dir jg

Du hast natürlich recht, da habe ich etwas zu viel vereinfacht, das war mein Fehler.
Selbstverständlich sieht es so aus:
   

Ich habe ebenfalls "sehr" vereinfacht noch versucht darzustellen wieso ich das SubVI überhaupt auf "reentrant" gesetzt habe.
Eigentlich existiert noch ein dritter Loop in dem ebenfalls Events getriggert werden. (Loop mit "Routine 1")
Wenn nun das SubVI nicht "reentrant" ist, so wird es im dritten Loop (im untersten) nie ausgeführt, da es zu diesem Zeitpunkt noch im obersten Loop am abarbeiten ist.
Dieser dritte Loop habe ich im Nachhinein ergänzt, ich fand gerade keine schlauere Lösung dazu.
Hier das Ganze noch bildlich dargestellt:
   

Gruss
Oli
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.04.2015, 12:02 (Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2015 12:04 von GerdW.)
Beitrag #6

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: "rentrant" SubVI zum Triggern von Events
Hallo Oli,

Zitat:Wenn nun das SubVI nicht "reentrant" ist, so wird es im dritten Loop (im untersten) nie ausgeführt, da es zu diesem Zeitpunkt noch im obersten Loop am abarbeiten ist.
Für "Routine 1" gibt es kein Event, auf dass dein subVI schauen kann?

Zitat:ich fand gerade keine schlauere Lösung dazu.
Wie wäre es mit einer "queue driven state machine"?
Eine Statemachine bietet sich immer an, wenn man halbwegs feste (aka "definierte") Abläufe automatisieren will…

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


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Frage zur Architektur: Statemachine und Wait for Events tuhpon 6 4.491 18.03.2024 16:14
Letzter Beitrag: tuhpon
  Event Triggern über boolean Anzeige simcum 6 3.568 25.02.2023 14:57
Letzter Beitrag: simcum
  Bedienelemente bündeln zum Auslösen eines Events Marcusius 12 9.293 03.09.2019 17:24
Letzter Beitrag: Marcusius
  Mausrad bei Events/Casestrukturen Schwand 1 3.819 20.09.2016 08:30
Letzter Beitrag: Schwand
  Dynamische Events programmatisch auslösen AMueller 6 7.041 22.04.2016 07:43
Letzter Beitrag: GerdW
  Event Structure mit Boolean True triggern HotProp 6 6.793 06.07.2015 12:19
Letzter Beitrag: Kiesch

Gehe zu: