PARTIALS FRAMEWORK (multiplexing)

Hier soll es ausschließlich um Arbeiten zu neuen und alten Ensembles gehen.

Moderator: herw

Re: Beispiel 2: einfacher Eventblock

Beitragvon herw » Mo 25. Jul 2011, 09:23

Beispiel 2: einfacher Eventblock (Teil 8)

alles ist erlaubt

EventBlock7.ens
(361.71 KiB) 160-mal heruntergeladen

Da nun der Eventblock mit Zeitgleichheit in der CoreCell ankommt, können wir nun beliebig die Daten ändern.
Beispiel 2-24.jpg
Beispiel 2-24.jpg (60.91 KiB) 2437-mal betrachtet

Hier mal ein Beispiel, wie man die Daten shiftet:
Beispiel 2-25.jpg
Beispiel 2-25.jpg (68.46 KiB) 2439-mal betrachtet


alles erlaubt - alles super einfach :)
Benutzeravatar
herw
moderator
 
Beiträge: 2975
Registriert: Mo 13. Mär 2006, 18:28
Wohnort: Dortmund

Beispiel 3: Eventblock und EventTable

Beitragvon herw » Mo 25. Jul 2011, 12:41

Beispiel 3: Eventblock und EventTable (Teil 1)

Da wir ja schon im fortgeschrittenen Stadium sind, kann ich mir viele Erklärungen sparen, da das Wesentliche in den obigen Posts bereits angesprochen wurde.
Wir wollen in diesem Beispiel das Ein- und Auslesen von Daten einer EventTable mit Hilfe eines Eventblocks durchführen.

Einlesen einer EventTable: die schmutzige Lösung

EventBlock8.ens
(347.71 KiB) 133-mal heruntergeladen

Beispiel 3-1.jpg
Beispiel 3-1.jpg (78.93 KiB) 2424-mal betrachtet

Warum schmutzige Lösung? Naja schaut man sich die nächste Abbildung an und vergleicht mit meinen Kommentaren weiter oben, dann ist klar, dass ich eine Verschachtelung der Datenelemente nicht mag: wenn schon Block, dann auch richtig Block.
Beispiel 3-2.jpg
Beispiel 3-2.jpg (54.93 KiB) 2422-mal betrachtet

An der Funktionstüchtigkeit ist nichts zu mäkeln, aber die Durchführung ist nicht so klar.
Wie funktoniert's: nun, die Daten kommen ja schon in der richtigen Reihenfolge, wir müssen nur noch den passenden Index herausfiltern.
Da wir die Daten nicht mit receive_synchronous empfangen, werden sie einzeln „abgearbeitet”.
Den port flag müssen wir natürlich unberücksichtigt lassen, da dieser ja nicht mit abgespeichert werden soll, der Index beginnt also eigentlich mit 1, daher müssen wir um 1 reduzieren.
Beispiel 3-3.jpg
Beispiel 3-3.jpg (35.09 KiB) 2423-mal betrachtet
Benutzeravatar
herw
moderator
 
Beiträge: 2975
Registriert: Mo 13. Mär 2006, 18:28
Wohnort: Dortmund

Re: Beispiel 3: Eventblock und EventTable

Beitragvon herw » Mo 25. Jul 2011, 12:57

Beispiel 3: Eventblock und EventTable (Teil 2)

Einlesen einer EventTable: die saubere Lösung

EventBlock9.ens
(374.87 KiB) 145-mal heruntergeladen

Beispiel 3-4.jpg
Beispiel 3-4.jpg (100.74 KiB) 2413-mal betrachtet

Ich habe das Makro send_( [], $) aus dem send_synchronous abgeleitet. Zusätzlich zu den Daten werden vorweg jeweils die Indices gesendet.
Beispiel 3-5.jpg
Beispiel 3-5.jpg (56.43 KiB) 2414-mal betrachtet

Das Ausfiltern der relevanten Daten hängt nun von der Iteration ab; die Indices 0 und 1 sind hier unwichtig. Ich gehe jetzt hier nicht darauf ein, da die Iterationen noch mal ein extra Thema sein werden.
Beispiel 3-6.jpg
Beispiel 3-6.jpg (72.63 KiB) 2412-mal betrachtet

Nun das Ergebnis ist doch wohl eindeutig sauberer:
Beispiel 3-7.jpg
Beispiel 3-7.jpg (58 KiB) 2409-mal betrachtet

immer eins nach dem anderen.

Ich hoffe, man erkennt schon, wie schnell man zu eigenen Lösungen kommt, wenn man die Vorgaben des frameworks zum Multiplexing konsequent benutzt.

ciao herw
Benutzeravatar
herw
moderator
 
Beiträge: 2975
Registriert: Mo 13. Mär 2006, 18:28
Wohnort: Dortmund

Re: Beispiel 3: Eventblock und EventTable

Beitragvon herw » Mo 25. Jul 2011, 14:46

Beispiel 3: Eventblock und EventTable (Teil 3)

Auslesen einer EventTable
EventBlock10.ens
(377.11 KiB) 148-mal heruntergeladen

Ich habe zunächst eine Clienttabelle erzeugt, da man ja in der Regel die EventTable dezentral lesen möchte. Natürlich kann man das Konstrukt auch auf dieselbe EventTable anwenden. Zu beachten sind die Verknüpfungen der drei Module.
Beispiel 3-8.jpg
Beispiel 3-8.jpg (148.79 KiB) 2385-mal betrachtet

Was haben wir? Fünf Daten, die in einer EventTable abgespeichert sind. Sie werden über den Leseindex Rx und den Lesetrigger R abgerufen.
Was wollen wir? Einen Eventblock, der einen Identifier id, die Anzahl # der folgenden Daten, einen port_flag or und die eigentlichen fünf Daten, also insgesamt acht Daten besitzt.
Wir erzeugen durch den Trigger Lies eine Schleife mit dem Datenbereich [-3,4]. Die negativen Parameter erzeugen den Kopf (header {h}) des Eventblocks, also (id,#,or), die anderen rufen über einen Indexbus {i} die Daten aus der Tabelle ab. Da alles sequentiell abläuft, werden die Daten als Eventblock gesendet.
Beispiel 3-9.jpg
Beispiel 3-9.jpg (69.51 KiB) 2388-mal betrachtet

Wie viele Daten letztlich abgerufen werden sollen, wird über den Parameter DX der EventTable ermittelt. D.h. das Beispiel ist für beliebig große EventTables gedacht. Denkbar wäre hier auch der Abruf von Teilbereichen, wenn man bei der Ausgabe der Indices eine Rechenoperation anwendet.
Gelb umrandet ist der Bereich des headers. Es passiert dort nicht viel, interessant ist vielleicht die Berechnung des port_flags or. Das erkläre ich mal nicht, sondern gebe das als Mathematikaufgabe zur Binärrechnung.
Die Parameterwerte 0 bis 4 werden nach außen der EventTable zugeführt, wo sie den Lesevorgang auslösen.
Beispiel 3-10.jpg
Beispiel 3-10.jpg (94.32 KiB) 2388-mal betrachtet


Kleine Bemerkung zur EventTable: damit beim Duplizieren der Table auch wirklich eine ClientTable entsteht, muss man die erste Table zunächst abspeichern (irgendeinen Namen). Dadurch ist sie quasi im Ensemble angemeldet und damit verknüpft. Die gerade abgespeicherte Tabelle kann man auf seinem Compi übrigens wieder löschen. Wenn man die Tabelle nun dupliziert, laufen diese synchron. D.h. jede Änderung in der ersten Tabelle bewirkt auch eine im client und umgekehrt. In diesem Ensemble ist nur die erste Tabelle sichtbar.

Ich habe beim Abspeichern des Ensembles die Tabelle in den Draw-Modus gestellt. D.h. man kann auch von Hand die Werte ändern und über Lies auslesen.
Der Sende-Knopf überschreibt wieder.

ciao herw
Benutzeravatar
herw
moderator
 
Beiträge: 2975
Registriert: Mo 13. Mär 2006, 18:28
Wohnort: Dortmund

Re: PARTIALS FRAMEWORK (multiplexing)

Beitragvon MvKeinen » Di 26. Jul 2011, 13:01

::kaffee:: ::kaffee:: ::kaffee:: danke, herw wie immer für die klaren Ausführungen. Da hab ich erstmal ne Menge zu verarbeiten.

Wenn ich aber so frech sein dürfte und einen kleinen Wunsch für irgendwann äußern dürfte, dann wäre ein Kapitel über die Terminologie des Partial Frameworks interessant. Also Namensgebung der Ein- und Ausgänge und deren Bedeutung. Ich mach mir da gerade selber ein paar verallgemeinerte Notizen, bin mir aber sicher dass diese "löchrig" sind.

aber erstmal viel spass im Urlaub und danke nochmal :-)
::kaffee::
Reaktor Befürworter
MvKeinen
meister
 
Beiträge: 168
Registriert: Do 10. Aug 2006, 14:06
Wohnort: Berlin

Re: PARTIALS FRAMEWORK (multiplexing)

Beitragvon herw » Di 26. Jul 2011, 13:24

MvKeinen hat geschrieben:::kaffee:: ::kaffee:: ::kaffee:: danke, herw wie immer für die klaren Ausführungen. Da hab ich erstmal ne Menge zu verarbeiten.

Wenn ich aber so frech sein dürfte und einen kleinen Wunsch für irgendwann äußern dürfte, dann wäre ein Kapitel über die Terminologie des Partial Frameworks interessant. Also Namensgebung der Ein- und Ausgänge und deren Bedeutung. Ich mach mir da gerade selber ein paar verallgemeinerte Notizen, bin mir aber sicher dass diese "löchrig" sind.

aber erstmal viel spass im Urlaub und danke nochmal :-)
::kaffee::
steht aber alles in obigen posts :)

hier eine kleine Auswahl

id = identifier des Events oder Eventblocks
# = Anzahl der folgenden Daten eines Blocks
[] = Index des aktuellen Datenwerts eines Blocks beginnend mit 0
$ = Datenwert
or = port flag zum synchronen Senden und Empfangen
+- und -+ = Verbindung zum chain Iterator
! = Trigger
{b} = Datenbus
id? = Abfragewert auf Gleichheit mit dem identifier das Datenblocks, kann auch ein boolscher Wert sein, wenn man die Abfrage selbst gestalten möchte.

Anfänglich gefielen mir die Bezeichnungen auch nicht, aber man gewöhnt sich daran. Ein Umbenennnen nach persönlichen Geschmack ist in einer allgemeinen Diskussion oder beim Austausch von neuen Makros nicht sinnvoll.
Benutzeravatar
herw
moderator
 
Beiträge: 2975
Registriert: Mo 13. Mär 2006, 18:28
Wohnort: Dortmund

Vorherige

Zurück zu PROJEKTE

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron