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 

NI Actor Framework - Eine Einführung



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!

28.01.2013, 16:13
Beitrag #1

BNT Offline
LVF-Freak
****


Beiträge: 740
Registriert seit: Aug 2008

5.0 - 22Q3
1999
EN

64291
Deutschland
NI Actor Framework - Eine Einführung
Liebe LVF-Fans
Ich hatte für den LVOOP-Hands-On-Kurs bei der VIP 2012 eigentlich etwas anderes vorbereitet, das allerdigs den zeitlichen Rahmen gesprengt hätte. Ich möchte es Euch aber nicht vorenthalten.

Es handelt sich um die Implementierung eines UPN-Rechners (Umgekehrte Polnische Notation) basieren auf dem NI Actor Framework, das seit LabVIEW 2012 integriert ist und offiziell unterstützt und gepflegt wird. (Es gibt also keine Ausrede mehr es nicht zu benutzen.)

Das Tutorial enthält einen Übersichtsvortrag, eine Anleitung zum selber machen und meine Musterlösung.

Ich habe das Tutorial auf GitHub unter EUPL veröffentlicht. Hoffentlich vereinfacht es Euch den Einsteig.

Gruß Holger

NI Alliance Partner & LabVIEW Champion
GnuPG Key: 6C077E71, refer to http://www.gnupg.org for details.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
28.01.2013, 16:31
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: NI Actor Framework - Eine Einführung
Hallo Holger,

vielen Dank schon mal vorab dafür!

Fragen:
- Das Beispiel ist komplett in LV2012 gehalten?
- Gibt es da auch irgendwo ein ZIP, damit man sich nicht erst irgendeinen GIT-Client installieren muss oder sich alle Dateien einzeln aus den verschiedenen (Unter-)Verzeichnissen zusammensammeln muss?

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2013, 17:21
Beitrag #3

BNT Offline
LVF-Freak
****


Beiträge: 740
Registriert seit: Aug 2008

5.0 - 22Q3
1999
EN

64291
Deutschland
RE: NI Actor Framework - Eine Einführung
(28.01.2013 16:31 )GerdW schrieb:  Fragen:
- Das Beispiel ist komplett in LV2012 gehalten?
- Gibt es da auch irgendwo ein ZIP, damit man sich nicht erst irgendeinen GIT-Client installieren muss oder sich alle Dateien einzeln aus den verschiedenen (Unter-)Verzeichnissen zusammensammeln muss?

1. Ja, das Tutorial in in LV 2012 durchgeführt worden. Wenn man sich das Actor Framework von NI für LV 2011 herunterlädt, sollte man das Tutorial aber auch durchführen können. LV 2010 weis ich nicht.

2. Wenn Du dem Link oben zu GitHub folgst, findest Du dort die Möglichkeit das Repository als ZIP herunterzulassen. Man kann auch einzelne Dateien, z.B. den Vortrag oder die Anleitung separat laden. Dafür benötigt man keinen Git- oder GitHub-Client.

Gruß Holger

NI Alliance Partner & LabVIEW Champion
GnuPG Key: 6C077E71, refer to http://www.gnupg.org for details.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.01.2013, 17:37 (Dieser Beitrag wurde zuletzt bearbeitet: 28.01.2013 17:39 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.427
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: NI Actor Framework - Eine Einführung
Hallo Holger,

zu 2) Jetzt habe ich den "ZIP"-Button auch gefunden. (Man sollte nicht nur die Dateiliste im Blick haben, sondern auch die Menüleiste weiter oben...)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.03.2014, 12:15 (Dieser Beitrag wurde zuletzt bearbeitet: 12.03.2014 12:15 von ngblume.)
Beitrag #5

ngblume Offline
LVF-Neueinsteiger


Beiträge: 2
Registriert seit: Mar 2014

2012-2013
2012
EN

64285
Deutschland
Question RE: NI Actor Framework - Eine Einführung
Hallo zusammen,

ich bin gerade dabei, mich in das Actor Framework einzuarbeiten. Dabei bin ich auf die Übung von Holger gestoßen.
Ich verstehe auch, was und wieso die Schritte in der Übung gemacht werden.
Allerdings komme ich in Übungsteil 5 etwas ins Schlingern..
Im Besonderen ab Seite 20 in der Datei "VIP2011_Workshop_AF_Manual_k.docx".
In Übung 5 wird durch Senden der Messages "Push" (2x), "Add" und "Preview Stack" im "UPNCalculator Actor" eine Addition auf dem Stack durchgeführt und dann der Stack angezeigt (im Sub-VI der Methode zur Message "Preview Stack" des UPNCalculator-Actors.
Im Folgenden wird nun der Indikator für den Stack im eigentlichen Frontpanel "Calculator.lvlib:ActorCore.vi" eine Referenz im MyApplicationObject vorgesehen und die Referenz des aktuellen Stack-Indikators hineingeschrieben. Verstehe ich noch und funktioniert auch. Zugehörige Methode und Message sind auch kein Problem.

Jetzt wird's problematisch:
Ich verstehe den Sinn des "Self Enqueuer"s in den Attributen der Preview Stack Msg.lvclass im UPNCalculator Actor nicht.
Ich würde eine Funktionalität im Sinne von "Schick mir selbst eine Message mich zu aktualisieren" erwarten, aber diese würde ich im Frontpanel VI "Calculator.lvlib:ActorCore.vi" bzw. der zugehörigen dortigen Methode bzw. Message erwarten.

Als zweite Frage etwas wahrscheinlich sehr banales.. Wenn ein solches Objekt hinzugefügt werden soll, bspw. vorher im Beispiel ein "Stack"-Objekt, so nehme ich das aus dem Projekt Explorer. Wie sieht das bei den Actor Framework-Objekten aus? Ich kann die eigentliche Lib für das AF im Projekt Explorer finden, aber keine "Self-Enqueuer" Objekt (was vom Typ her ja eine spezielle Priority Queue sein sollte.

Im darauf folgenden Schritt wird die "Send Preview Stack Msg.lvclass modifiziert, sodass dieser auch der Self-Enqueuer übergeben werden muss (required). Genau hier tritt der eigentliche LabVIEW Fehler auf, da das VI zu diesem Zeitpunkt nur ohne Self-Enqueuer angesprochen wird, da dieser noch gar nicht exisitiert.. Resultat: Fehler bei der Ausführung..

Ich hab das gesamte Projekt angehängt (LV 2013 lv13_img), da es sonst sicher schwierig wir mit nur einem VI etwas nachzuschauen.

Jede Hilfe ist willkommen, besonders der Verständnis Teil ist mir wichtig.

Grüße und danke!
Niels Göran


Angehängte Datei(en)
0.0 .zip  UPN_Rechner_Exercise.zip (Größe: 882,42 KB / Downloads: 684)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.03.2014, 12:23
Beitrag #6

BNT Offline
LVF-Freak
****


Beiträge: 740
Registriert seit: Aug 2008

5.0 - 22Q3
1999
EN

64291
Deutschland
RE: NI Actor Framework - Eine Einführung
Antwort zur zweiten Frage:
In AF-Palette findest Du das "Get Self-Enqueuer.vi". Erzeuge eine Control des Ausgangs. So einfach!

NI Alliance Partner & LabVIEW Champion
GnuPG Key: 6C077E71, refer to http://www.gnupg.org for details.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.03.2014, 12:52
Beitrag #7

BNT Offline
LVF-Freak
****


Beiträge: 740
Registriert seit: Aug 2008

5.0 - 22Q3
1999
EN

64291
Deutschland
RE: NI Actor Framework - Eine Einführung
Antwort auf die erste Frage.
Der UPNCalculator gibt nein Preview zwar den Stack zurück, weis aber sonst damit nichts anzufangen. Das muss der Caller-Actor wissen bzw. die Nachricht, die er versendet.

Im einfachsten Fall könnte der UPNCalculator den Stack einfach an seinen Caller-Enqueuer senden. Das würde aber die Allgemeinheit einschränken. Der Caller-Actor könnte ja wollen, dass der Stack an einen anderen Actor gesendet werden soll. (Warum? Das bleibt sein Geheimnis.) Darum muss der Caller-Actor der Message verraten, wohin der Stack gesendet werden soll. In diesem konkreten Fall an sich selbst.

Diese Lücke in der Dokumentstion sollte aus didaktischen Gründen eine mündliche Duskussion auslösen, was ja offenbar auch funktioniert hat. Beim selbstständigen bearbeiten ist das natürlich ein Problem. Ich sollte diese Erklärung also besser in die Anleitung schreiben.

Das zugehörige Actor Core.vi muss natürlich angepasst werden. Das habe ich als selbstverständlich vorausgesetzt und nicht für erwähnenswert gehalten.

Die Anleitung fängt sehr ausführlich an und wird im Verlauf immer knapper in den Anweisungen. Das AF ist ja auch eher was für Fortgeschrittene. Etwas mitdenken muss der Anwender schon.

Ich bin aber immer für Anregungen zu notwendigen Ergänzungen die das Verständnis erleichtern empfänglich.

Es gibt im Weiteren noch eine didaktische Lücke. Ich bin gespannt, ob Du diese findest und selbstständig löst.

Gruß Holger

NI Alliance Partner & LabVIEW Champion
GnuPG Key: 6C077E71, refer to http://www.gnupg.org for details.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.11.2015, 18:04
Beitrag #8

ChG Offline
LVF-Grünschnabel
*


Beiträge: 11
Registriert seit: Jan 2014

8.5,2012
2012
DE


Deutschland
RE: NI Actor Framework - Eine Einführung
Hallo zusammen,

dieses Thema ist schon wieder etwas älter, aber ich bin gerade dabei mich in die Als einzuarbeiten.

Allerdings scheitere ich schon auf Seite 11. Da soll man beim ersten Punkt eine Queue Referenz einfügen. Allerdings habe ich keine Ahnung wie man die erstellt. Man kann tricksen in dem man in einem anderen VI per Funktion eine Referenz erstellt. Könnt ihr mir sagen, wie man das sinnvollerweise tut?

Danke schonmal!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.12.2015, 09:42
Beitrag #9

BNT Offline
LVF-Freak
****


Beiträge: 740
Registriert seit: Aug 2008

5.0 - 22Q3
1999
EN

64291
Deutschland
RE: NI Actor Framework - Eine Einführung
Obtain Queue mit dem richtigen Datentyp auf das Blockdiagramm und dann von dem Queue Referenz-Ausgang eine Control erstellen. Diese einfach ausschneiden und als Attribute in den Klassen-Cluster einfügen. Fertig.

Gruß Holger

NI Alliance Partner & LabVIEW Champion
GnuPG Key: 6C077E71, refer to http://www.gnupg.org for details.
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
24.07.2018, 10:05
Beitrag #10

seuk Offline
LVF-Grünschnabel
*


Beiträge: 38
Registriert seit: May 2018

2019x64
-
EN


Deutschland
RE: NI Actor Framework - Eine Einführung
Hallo Zusammen, hallo Holger,

erstmal Vielen Dank für den Workshop. Ich habe mir die Doku des AF-Templates öfters durchgelesen, doch erst mit deiner praktischen Übung beginne ich nun ganz langsam dahinter zu steigen.

Zur ersten didaktischen Lücke habe ich noch weitere Fragen:

Im 'Preview Stack Msg.lvclass: Do.vi' soll der Stack an den Aufrufer zurück geschickt werden. Hierfür übergibt der Aufrufer seinen Self Enqueuer an die Methode 'Preview Stack Msg.lvclass: Send Preview Stack.vi'. Mir gefällt die Idee eine Referenz auf den Self Enqueuer des Nachrichtenaufrufers zu verwenden. Soweit ich das verstehe, wird es dadurch deutlich flexibler, da ansonsten nur der Aufrufer des Akteurs zu Verfügung stände, und das muss nicht der Sender der Nachricht sein.

Du schreibst, man könnte im einfachsten Fall aber auch die AF Funktion 'Read Caller Enqueuer' verwenden, um die Nachricht einfach immer an den Aufufer (des Akteurs, wenn ich richtig liege) zu senden. Wenn ich diese Funktion im Do.vi der Message platziere erhalte ich von LabView folgende Fehlermeldung

Zitat:This VI cannot access the referenced item because of class access scope. Items in protected scope can be accessed only from the following locations:
1) from inside the owning LabVIEW class
2) from inside LabVIEW classes inheriting from the owning LabVIEW class.

In der Doku des AF liest es sich so, als hätte jeder Akteur seine Queue, die des Aufrufers und die seiner "Kindakteure" im Zugriff. Hier befinden wir uns allerdings in einer seiner Nachrichten, die ja keine Kindakteure des Akteurs sind. Andererseits gibt es einen 'Actor in' - warum darf ich darauf nicht zugreifen?

Später im Workshop wird der Testaufruf vom Calculator-Akteur durch den eigentlichen Aufruf der UPNCalculatorGUI ersetzt. Ich vermute an dieser Stelle bin ich auf die zweite didaktische Lücke gestoßen? In Übung 7 soll ein "unerwarteter Zustand" gezeigt werden, wenn die beiden Akteure den gleichen Rechner verwenden. Ich vermute, was gemeint ist, ist dass die Testberechnung zu einer Veränderung des Stacks führt, von der die GUI so erstmal nichts mitbekommen hat... Aber bevor ich mir das ansehen kann schmiert mir LabView ab. Das Problem: Wir haben im Do-Teil der Nachricht das Send Preview Stack VI getauscht. Nun wird der Stack zurück an die UPNCGUI geschickt und nicht mehr an den Calculator. Löse ich nun die Testberechnung aus landet der Self Enqueuer von 'Calculator.lvclass' in der falschen Klasse 'UPNCalculatorGUI.lvclass', oder so ähnlich...?

Vorausgesetzt, man möchte den gleichen Actor für verschiedene GUIs gleichzeitig nutzen. Wie erreicht man also, dass der Empfänger einer Nachricht, seine Daten an einen beliebigen Aufrufer zurückgibt? *kopfkratz*
- Ich könnte im UPNC für jeden Aufrufer eine eigene Nachricht anlegen, welche dann genau weiß, an wen sie die Daten zurück zu schicken hat. Das scheint mir aber nicht sehr flexibel zu sein.
- Ich würde lieber das Send Preview Stack.vi überschreiben, so dass je nach Klasse des Aufrufers unterschiedliche VIs aufgerufen werden. Doch dabei habe gedanklich noch so meine Probleme. Ich definiere eine Nachrichtenklasse CalculatorUserMsg mit einer leeren Methode 'Send Preview Stack' (also für Override), welche ich in das Do.vi einfüge, diese Klasse muss vom AF-Message erben. Die Messageklassen der beiden Aufrufer erben dann von CalculatorUserMsg und implementieren ihre jeweiligen "Empfangsmethoden" für den Stack, wie gehabt. Ich dachte das klingt nach einem guten Plan. Doch dann schaute ich auf das VI
   
Das Send Preview Stack VI hat ja gar keine Inputs, anhand deren entschieden werden könnte, von welcher Klasse die entsprechende Methode nun aufgerufen werden soll. Aber durch Vererbung und Überschreiben der Methode sollte das Problem doch lösbar sein, oder? Vielleicht hat hier jemand einen Tipp für mich :-)
- Oder man baut den Ansatz vom Self Enqueuer weiter aus: Der Aufrufer übergibt nicht nur dessen Referenz, er übergibt zusätzlich auch eine Info, welche Nachricht für die Rückantwort verwendet werden soll. Hier habe ich aber leider keine Ahnung, wie man das implementieren könnte.

Wie sieht es mit einem Best Practice zu diesem Problem aus?

Nun noch eine allgemeine Frage: Es wird darauf hingewiesen, dass man im Normalfall immer die Baumstruktur bei der Kommunikation einhalten soll. Wollen zwei Akteuere also miteinander reden, muss die Nachricht im schlechtesten Fall einige Ebenen hoch bis zum Hauptakteur und dann wieder runter bis zum Empfängerakteur gereicht werden. Gibt es ein Beispiel, in dem das geschieht? Wie adressiert man dem Empfänger und wie findet die Nachricht ihren Weg? Oder bin ich hier vom Verständnis noch auf dem Holzweg?
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
  Verständnisfrage Actor Framework lol 8 7.450 07.10.2020 13:05
Letzter Beitrag: lol
  Vorschlag für Asynchrone Rückantworten im Actor Framework BNT 1 4.018 10.10.2019 19:03
Letzter Beitrag: BNT
  Actor-Oriented Design in LabVIEW Course BNT 1 6.711 01.07.2016 14:28
Letzter Beitrag: BNT
  CS++ - A LVOOP Actor based Framework BNT 18 26.504 14.03.2015 14:26
Letzter Beitrag: BNT
  Actor FW - Response Msg D_Sev 1 7.848 19.02.2014 16:19
Letzter Beitrag: BNT
  VIP 2012: Einführung in das objekt-orientierte Programmieren mit LabVIEW BNT 8 18.207 28.10.2012 18:40
Letzter Beitrag: Y-P

Gehe zu: