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!