saXist hat geschrieben:dank herw - gut verstanden!
Core ist die aktuellste Version, geht in der Rechen- und Bearbeitungsebene tiefer, genauer, schneller, verbraucht aber auf Grund der pos. Eigenschaften mehr CPU!
Der Hinweis auf mögliche, ungenaue Logik+Rechenoperationen durch das fehlenden Praralellprozessing in Primary-Modulen könnte das ein oder andere Fehlergebniss begründen.
Ich greife das Thema nochmals auf und möchte an einem ganz simplen Beispiel die unterschiedliche Eventverarbeitung in primary und core erläutern:
Das Ensemble besteht nur aus einem Regler, dessen Werte quadriert werden. Der Eventwatcher gibt die einzelnen Events aus.
primary vs core 1.jpg
Sieht ganz harmlos aus. Wir erwarten,nachdem der Regler auf 0 steht, die Ausgabewerte 1, 4, 9,16,25,usw. !
Doch weit gefehlt! 0,
1, 2,
4, 6,
9, 12,
16, 20, usw. .
Der Regler wurde von mir auf 0 gestellt und der Eventwatcher zurückgesetzt. Alle PrimaryLevel-Module verarbeiten ihre Eingangswerte niemals gleichzeitig, sondern speichern die anliegenden Werte intern ab. Bei jedem Eintreffen eines Events (auch von derselben Quelle!) wird ein zusätzlicher Wert ausgegeben; in diesem Beispiel die zuvor berechnete Quadratzahl plus (!???) dem neu eingestellten Wert. Würde man in der weiteren Verarbeitung zum Beispiel die ausgegeben Events zählen, käme man schon völlig durcheinander, ganz zu schweigen, dass eine Auswertung der Events durch Router völlig chaotisch ist.
Nun drei Lösungen in Core (schließe das zweite Makro core Version 1 an den Eventwatcher):
Hier ist der Inhalt der CoreCell:
primary vs core 2.jpg
Wie erwartet (??) erhalten wir denselben Ablauf. Wo ist da die Gleichzeitigkeit? Nun wir haben nicht beachtet, dass die CoreCell ja vom Primary-Level gefüttert wird. Dort gibt es keine Gleichzeitigkeit, also muss die CoreCell wie das PrimaryLevel Makro reagieren. Sie erhält die Eingangswerte nacheinander!
Was bedeutet nun Gleichzeitigkeit? Die CoreCell darf ihre Operation nur durchführen, wenn innerhalb der CoreCell auch gleichzeitige Events vorliegen. Da hilft uns das Latch-Modul. (schließe das zweite Makro core Version 2 an den Eventwatcher). Das Latchmodul ist ein Zwischenspeicher, dass erst gezielt durch einen Event seinen Wert ausgibt, in diesem Fall mit Hilfe des unteren Eingangs.
primary vs core 3.jpg
Der obere Eingangswert „wartet” auf den unteren, der dann gleichzeitig (wie man denkt!!!) an die Multiplikation übergeben wird. Bei verschiedenen Eventquellen muss man dies beachten. Für dieses spezielle Beipiel gibt es eine noch einfachere Lösung.
Nun schließen wir das vierte Makro core Version 3 an.
primary vs core 4.jpg
Wir übernehmen aus dem PrimaryLevel nur den Reglerwert und überlassen allein der CoreCell die Berechnung. Da die CoreCell nur
einen Event erhält, ist dieser (natürlich) zu sich selbst

gleichzeitig. Somit kann die Multiplikation - mit unserem Denken übereinstimmend - auch genau so durchgeführt werden. Wir erhalten nur die erwarteten quadrierten Werte.
Wer noch mehr staunen will, kann dasselbe Beispiel mal für das „Kubieren” x^3 durchführen. Vielleicht findet ihr auch heraus mit welchem System das PrimaryLevel Zwischenwerte ausgibt.
Meine Empfehlung: auch wenn man nicht gerne gänzlich zur Core-Ebene überwechseln will, so sollte man doch wenigstens die Eventverarbeitung den CoreCells überlassen. Die Konstruktion der Struktur ist fast der primary-Ebene entsprechend. Lediglich Latch-Module müssen eventuell hinzugefügt werden.
Nicht erwähnt habe ich noch, dass die Reihenfolge, mit der die Primary-Ebene Werte an Makros oder Rechenoperationen übergibt zudem noch davon abhängt, in welcher Reihenfolge die Wires gelegt wurden !?!
ciao herw