LabVIEWForum.de - Verständnisfrage Actor Framework

LabVIEWForum.de

Normale Version: Verständnisfrage Actor Framework
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

ich habe ein neuen Versuch mit dem Actor Framework gewagt,
und bin nun an ein "totes Ende" gelangt.

Zum Projekt:
Ich habe einen Root Actor der weitere (Nested) Actors nach Auswahl des Nutzers starten soll
Dafür habe ich für jeden Nested Actor ein "VI from Static Dispatch Template" erstellt in dem der entsprechende
Nested Actor gestartet werden soll,
(siehe Anhang 1) und mir dann eine Message erstellen lassen.

Im "Actor Core.vi" des Top Level Actor soll diese Nachricht dann aufgerufen werden.
Also "Read Self Enqueuer" Ausgang an den "Message Enqueuer" Eingang gehangen, sollte ja eigentlich funktionieren.
(siehe Ahnang 2)
Das macht es aber nicht, habe mir das ganze im Probe Watch mal angesehen und festgestellt, dass das "Do.vi" von meiner
Nachricht überhaupt nicht ausgeführt wird (jede Verbindung bleibt auf "not executed")

Jetzt stehe ich völlig auf dem Schlauch und weiß überhaupt nicht warum das so ist. Sad
Ich bin für jeden Ratschlag dankbar der zur Behebung des Fehlers führt.

Vielen Dank schonmal im Vorraus, und allen ein schönes Wochenende.

Gruß lol
Actor Core.vi und Do.vi sind reentrant. Setz mal einen Breakpoint.

Gruß Holger
Hallo Holger,
Danke für die schnelle Antwort..
Wo soll ich deiner Meinung nach den Breakpoint setzen?

Gruß lol
Auf den Draht von von Error in am Beginn der VI's.
Hallo Holger,

ich habe soeben die Breakpoints an "Error In" gesetzt,
das hat mich nur bedingt klüger gemacht .. denn die Nachricht wird defintiv gesendet
aber ihre Ausführung auf unerklärliche Weise verworfen.
Es wäre gut, wenn ich das komplette Blockdiagramm des Actor Core.vi sehen könnte, ohne kann ich nur spekulieren.

In Deinem Actor Core.vi gibt es offenbar eine Dekorator-Schleife mit GUI Funktionalität. In Deinem Actor Core.vi musst Du ja auch das Actor Core.vi der Ancestor-Klasse aufrufen, denn dort lebt der Aktor ja eigentlich.
  • Werden die Actor Core.vi's aller Ancestor-Klassen wirklich ausgeführt? Also auch das Actor Framework.lvlib:Actor.lvclass:Actor Core.vi?
  • Wird das Actor Core.vi der Ancestor-Klasse vielleicht vorzeitig bzw. unerwartet beendet? Setz mal 'ne Probe auf den Error-Draht dahinter. Wenn es beendet wird, bevor Du die Nachricht sendest, kann sie auch nicht abgearbeitet werden.

Gruß Holger
Hallo Holger,

Hie wäre erstmal das Block Diagramm, bei Bedarf kann ich Dir das gesamte Projekt gezippt zur Verfügung stellen.
Tatsächlich war dein zweiter Gedanke ebenfalls ein Fehler, den ich bereits entdeckt und behoben habe.

Bei meinen Nachforschungen mit den Breakpoints habe ich jetzt folgendes herausgefunden:

Sobald der Root Actor stoppt, wird das Do.vi der Nachricht ausgeführt, und damit eben auch der Nested gestartet.
Warum das so ist kann ich mir nicht erklären.
Ich vermute mal es liegt am Aufbau meines Actor Core

Gruß lol
Klassische Datenflussfehler!
Bedingt durch den Error-Draht, den Du durch Deine Schleife hindurch gezogen hast, wird das Actor Core.vi der Ancestor-Klasse erst ausgeführt, nachdem die While-Schleife beendet wurde. Zieh den Error-Draht also an der Schleife vorbei, und verbinde ihn direkt mit dem Actor Core.vi der Ancestor-Klasse.

Eine Stop-Nachricht geht natürlich auch an das Actor Framework.lvlib:Actor.lvclass:Actor Core.vi und danach wird das Stop Core.vi aufgerufen. Das solltest Du überschreiben, um von dort die Dekorator While-Schleife zu beenden. Du solltest die Scheife nicht direkt beenden, sonder nur via Stop Core.vi und z.B. User-Defined-Stop-Event, damit sie bis zum Schluss reaktiv bleibt. Dazu kannst Du eine Stop-Nachricht an Deinen Self-Enqueuer senden.

Gruß Holger
Hallo Holger,

Der Fehler war der Error Draht.
Auch das "Stop" Verfahren habe ich korrigiert.

Vielen Dank!
Gruß lol
Referenz-URLs