Objektorientierte Daten- und Zeitmodelle für die Echtzeit ...
Objektorientierte Daten- und Zeitmodelle für die Echtzeit ...
Objektorientierte Daten- und Zeitmodelle für die Echtzeit ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
6.4. KONTROLLFLUSS IN FUNKTIONALEN DATENNETZEN 129<br />
Wird nun <strong>die</strong> Sequenz Ë ebenfalls mit der <strong>Daten</strong>zeit Ø aktualisiert, wiederholt sich der<br />
Aufruf von ÂÃ. Da jetzt alle Eingangsdaten zur Verfügung stehen, kann der Funktor seine<br />
intern gekapselten Operationen in der Ó -Methode ausführen <strong>und</strong> anschließend in ÔÓ×Ø <strong>die</strong><br />
von ihm berechneten Ausgangsdaten in <strong>die</strong> entsprechenden Sequenzen schreiben. Dies geschieht<br />
mit der ×Ø -Methode nacheinander <strong>für</strong> alle Ausgangsdaten, wobei sich <strong>für</strong> jede Ausgangssequenz<br />
das hier beschriebene Prozedere wiederholt, d.h. <strong>die</strong> Sequenz bekommt <strong>die</strong> Kontrolle<br />
übergeben, ruft eventuell vorhandene Folgefunktoren auf, wartet auf deren Abarbeitung<br />
<strong>und</strong> gibt <strong>die</strong> Kontrolle an ÂÃ zurück. Sind alle Ausgangsdatensequenzen aktualisiert, gibt der<br />
Funktor <strong>die</strong> Kontrolle an Ë zurück. Sind weitere Folgefunktoren vorhanden, werden <strong>die</strong>se<br />
in der gleichen Form abgearbeitet, <strong>und</strong> schließlich wird <strong>die</strong> Aktualisierung der Sequenz Ë<br />
beendet.<br />
In <strong>die</strong>sem Diagramm wird davon ausgegangen, daß Ë das erste Eingangsdatum von ÂÃ<br />
ist <strong>und</strong> vor Ë aktualisiert wird. Es läßt sich jedoch leicht zeigen, daß der Mechanismus ähnlich<br />
arbeitet, wenn <strong>die</strong> Eingabeparameter vertauscht werden, <strong>die</strong> Aktualisierung der Sequenzen in<br />
umgekehrter Reihenfolge erfolgt oder ein Funktor beliebig viele Eingangsdaten besitzt. Auch<br />
ein Verschieben des Funktors ÂÃ in den Listen der von Ë <strong>und</strong> Ë zu triggernden Funktionen<br />
ÔÒ ändert nichts Gr<strong>und</strong>sätzliches an dem aufgezeigten Kontrollfluß.<br />
Es ist ebenfalls offensichtlich, daß Funktoren ohne Ausgangsdaten wie Ë ohne<br />
Probleme in <strong>die</strong>sen Aufrufmechanismus integriert werden können. Bei ihnen entfällt lediglich<br />
<strong>die</strong> ÔÓ×Ø -Methode des Funktoraufrufs. Und schließlich fügen sich auch Funktoren, <strong>die</strong> wie À<br />
ein aktuelles Datum zusammen mit älteren Sequenzwerten der gleichen Sequenz verarbeiten:<br />
ËÀ À Ë <br />
, ohne weiteres in den Mechanismus ein. Im Rahmen der Aktualisierung von<br />
Ë wird À aufgerufen, <strong>und</strong>, da alle Eingangsdaten zur Verfügung stehen, kann <strong>die</strong>ser sofort<br />
seine Arbeit aufnehmen. Zu beachten ist dabei, daß nach Abschnitt 5.1.2 <strong>die</strong> <strong>Daten</strong>meßzeit des<br />
Ausgangsdatums ËÀ zwar standardmäßig das Intervall über alle Eingangsmeßintervalle umfaßt<br />
(z.B. Ë À Ë Ë ℄), <strong>für</strong> Gültigkeitstests nachfolgender Funktoren aber nur der<br />
Endzeitpunkt <strong>die</strong>ses Intervalls herangezogen wird: Ø Ë À Ë Ø Ë .<br />
Asynchrone Ablaufsteuerung<br />
Kennzeichen einer asynchronen Ablaufsteuerung ist, daß der Kontrollfluß sich an bestimmten<br />
Punkten im Programm bzw. im <strong>Daten</strong>flußgraphen teilt. Verschiedene Programmzweige werden<br />
dadurch nebenläufig bearbeitet. Darüber hinaus müssen <strong>die</strong> <strong>Daten</strong>- oder Funktionsobjekte nicht<br />
auf <strong>die</strong> Beendigung der von ihnen in anderen Objekten gestarteten Aktionen warten, bevor <strong>die</strong><br />
eigene Methode abgeschlossen werden kann, d.h. ein Funktor kann so z.B. bereits den nächsten<br />
Zyklus beginnen, während nachfolgende Funktoren noch <strong>die</strong> <strong>Daten</strong> eines vorhergehenden<br />
Zyklus bearbeiten.<br />
Bei der datengetriebenen Modulsteuerung lassen sich mit Hilfe der folgenden Relationen<br />
asynchrone Programmzweige spezifizieren: ×Ø kennzeichnet das Setzen eines neuen Sequenzwert<br />
in einem eigenen Programmfaden <strong>und</strong> ØÖ sorgt <strong>für</strong> den Aufruf eines nachfolgenden<br />
Funktors — ebenfalls in einem eigenen Programmfaden. Einfache <strong>Daten</strong>zugriffe mit<br />
Ø <br />
Ø <strong>und</strong> Ø℄ werden nicht asynchron definiert, da sie nur einen Wert abfragen, <strong>und</strong> <strong>die</strong><br />
Kontrolle sofort zum aufrufenden Funktor zurückkehrt — eine Parallelisierung ist an <strong>die</strong>ser<br />
Stelle nicht notwendig.