All Packages Class Hierarchy This Package Previous Next Index
Class Oszi.BauElement
java.lang.Object
|
+----java.awt.Component
|
+----java.awt.Container
|
+----java.awt.Panel
|
+----Oszi.BildPanel
|
+----Oszi.BauElement
- public class BauElement
- extends BildPanel
- implements Runnable
BauElement
ist die abstrakte Basisklasse für alle
Bauelemente rund um das Paket Oszi
.
Ein Bauelement ist in erster Linie ein Produzent und/oder
ein Konsument eines Datenstroms.
Jedes Bauelement läuft in einem eigenen Thread. Ein Bauelement
kann darüber hinaus auch eine Bildschirmrepräsentation haben,
muß es aber nicht.
Im Konstruktor eines konkreten Bauelements muß unbedingt die
init
-Methode aufgerufen werden.
Folgende Konventionen gelten für das Format des Datenstromes
zwischen Bauelementen:
- Es handelt sich um einen Strom von
double
-Werten,
der mittels PipedDoubleOut
und PipedDoubleIn
übertragen wird.
- Für jeden Datensatz wird immer zuerst ein Zeitwert (in s) übertragen
und anschließend in der Regel ein Spannungswert (in V).
- Der Zeitwert ist dabei die Zeitdifferenz zum vorhergehenden
Wert. Der Spannungswert ist der, der nach diesem
Zeitintervall angenommen werden soll.
- Die auf diese Weise übertragenen Zeitwerte bilden die künstliche
Zeitbasis des Systems. Bei der Programmierung neuer Bauelemente ist
deshalb unbedingt auf "Zeiterhaltung" zu achten! Sollen
Verzögerungen programmiert werden (Hysteresen, Geschwindigkeitsmessung
o.ä.), dann müssen am Anfang Nullspannungswerte mit der entsprechenden
Verzögerungszeit gesendet werden. Es kann sonst zu Verklemmungen
(deadlocks) der einzelnen Threads kommen.
- Wenn Sender und Empfänger sich darüber einig sind, kann das
Datenformat auch etwas von dem oben erwähnten abweichen:
- Statt des Spannungwertes kann auch eine andere Größe mit fest
definierter Einheit gesendet werden (z.B. Stromstärke in A).
- Dem Zeitwert können auch mehrere Größen folgen. Konsumiert ein
Bauelement mehr als einen Datenstrom, dann müssen die Eingabeströme
mit einem
SammlerElement
synchronisiert werden.
Dieses sendet dann an das Bauelement einen Zeitwert und so viele
Spannungswerte wie Eingabeströme verarbeitet wurden.
Folgende Sonderfälle müssen beachtet werden:
| Zeitwert | Spannungswert |
ungültiger Wert (Sender nicht aktiv) |
Double.POSITIVE_INFINITY |
Double.POSITIVE_INFINITY |
Synchronisierungssignal* |
Double.NaN |
0.0 |
* wird vom GeneratorElement
gesendet
und vom SammlerElement
zur zeitlichen Synchronisation
genutzt, sollte von anderen Bauelementen einfach durchgereicht werden.
- See Also:
- init, SammlerElement, GeneratorElement, PipedDoubleOut, PipedDoubleIn
-
anzAus
- Anzahl der Ausgabeströme.
-
anzEin
- Anzahl der Eingabeströme.
-
Aus
- Synonym für
aus[0]
.
-
aus
- Feld mit den Ausgabeströmen für das Bauelement.
-
Ein
- Synonym für
ein[0]
.
-
ein
- Feld mit den Eingabeströmen für das Bauelement.
-
wListener
- enthält alle hinzugefügten WerteGeaendertListener.
-
BauElement()
-
-
addWerteGeaendertListener(WerteGeaendertListener)
- fügt ein Objekt, das das Interface
WerteGeaendertListener
implementiert, der Liste der
Objekte hinzu, die bei Änderung von Einstellwerten
benachrichtigt werden.
-
getAus()
- liefert den Ausgabestrom mit Nummer 0.
-
getAus(int)
- liefert den Ausgabestrom mit Nummer
nr
.
-
getThread()
- liefert den Thread zu diesem Bauelement.
-
init(int, int)
- initialisiert die Ein- und Ausgabeströme.
-
removeWerteGeaendertListener(WerteGeaendertListener)
- entfernt einen WerteGeaendertListener aus der Liste der bei
Änderung von Einstellwerten zu benachrichtgenden Objekte.
-
run()
-
run
-Methode des Bauelements.
-
verbinde(PipedDoubleOut)
- verbindet Aus- und Eingabestrom miteinander.
-
verbinde(PipedDoubleOut, int)
- verbindet Aus- und Eingabestrom miteinander.
-
wertAenderung()
- benachrichtigt alle registrierten WerteGeaendertListener davon,
daß Werte geändert wurden.
-
wertAenderung(String)
- benachrichtigt alle registrierten WerteGeaendertListener davon,
daß Werte geändert wurden.
-
yield()
- gibt Steuerung an andere Threads ab.
ein
protected PipedDoubleIn ein[]
- Feld mit den Eingabeströmen für das Bauelement.
- See Also:
- init
aus
protected PipedDoubleOut aus[]
- Feld mit den Ausgabeströmen für das Bauelement.
- See Also:
- init
Ein
protected PipedDoubleIn Ein
- Synonym für
ein[0]
.
- See Also:
- ein
Aus
protected PipedDoubleOut Aus
- Synonym für
aus[0]
.
- See Also:
- aus
anzEin
protected int anzEin
- Anzahl der Eingabeströme.
anzAus
protected int anzAus
- Anzahl der Ausgabeströme.
wListener
protected Vector wListener
- enthält alle hinzugefügten WerteGeaendertListener.
- See Also:
- addWerteGeaendertListener, removeWerteGeaendertListener, werteGeaendert
BauElement
public BauElement()
run
public abstract void run()
-
run
-Methode des Bauelements.
Diese Methode muß von einem konkreten Bauelement
überschrieben werden.
Einfaches Beispiel (von VerteilerElement
):
public void run()
{
double wert;
while (true)
{
try
{
wert = Ein.dread();
for (int i=0; i < anzAus; i++)
aus[i].dwrite(wert);
}
catch (IOException e)
{}
catch (NullPointerException e)
{}
yield();
}
}
init
public void init(int i,
int o)
- initialisiert die Ein- und Ausgabeströme.
Außerdem wird der eigentliche Thread zu dem Bauelement erzeugt.
Diese Methode muß von jedem Bauelement im Konstruktor
aufgerufen werden.
- Parameters:
- i - benötigte Anzahl an Eingabeströmen
- o - benötigte Anzahl an Ausgabeströmen
- See Also:
- getThread, dwrite, dread
getThread
public Thread getThread()
- liefert den Thread zu diesem Bauelement.
- Returns:
- Thread zu diesem Bauelement
- See Also:
- init
yield
protected void yield()
- gibt Steuerung an andere Threads ab.
Synonym für
getThread().yield()
.
Sollte in jedem Schleifenzyklus der run
-Methode
einmal aufgerufen werden (siehe Beispiel bei run
).
- See Also:
- run
getAus
public PipedDoubleOut getAus(int nr)
- liefert den Ausgabestrom mit Nummer
nr
.
- Parameters:
- nr - Nummer des Ausgabestroms
- Returns:
- Ausgabestrom mit Nummer
nr
- See Also:
- verbinde
getAus
public PipedDoubleOut getAus()
- liefert den Ausgabestrom mit Nummer 0.
- Returns:
- Ausgabestrom mit Nummer 0
- See Also:
- getAus, verbinde
verbinde
public void verbinde(PipedDoubleOut p,
int nr) throws IOException
- verbindet Aus- und Eingabestrom miteinander.
Diese Verbindung kann nur einmal erzeugt werden.
Sie läßt sich danach nicht wieder ändern.
Beispiel:
element1.verbinde(element2.getAus(0),2);
- Parameters:
- p - Ausgabestrom, der verbunden werden soll.
- nr - Nummer des Eingabestroms dieses Bauelements, mit dem verbunden werden soll.
- Throws: IOException
- bei Auftreten eines Ein- oder Ausgabefehlers.
- See Also:
- verbinde, getAus, dwrite, dread
verbinde
public void verbinde(PipedDoubleOut p) throws IOException
- verbindet Aus- und Eingabestrom miteinander.
Synonym für
verbinde(p,0)
.
- Parameters:
- p - Ausgabestrom, der verbunden werden soll.
- Throws: IOException
- bei Auftreten eines Ein- oder Ausgabefehlers.
- See Also:
- verbinde
addWerteGeaendertListener
public void addWerteGeaendertListener(WerteGeaendertListener l)
- fügt ein Objekt, das das Interface
WerteGeaendertListener
implementiert, der Liste der
Objekte hinzu, die bei Änderung von Einstellwerten
benachrichtigt werden. Auf diesen Objekten wird
die Methode werteGeaendert(EventObject e)
aufgerufen.
Das kann z.B. dazu benutzt werden, mehrere Generatoren zu
synchronisieren, damit deren relative Phasenlage stimmt.
Dazu müßte in dieser Event-Behandlungsmethode auf allen
beteiligten Generatoren die abgleich
-Methode
aufgerufen werden.
Im allgemeinen kann das Programm so davon Kenntnis erhalten,
wann der Benutzer Änderungen an Einstellwerten vornimmt.
- Parameters:
- l - der hinzuzufügende WerteGeaendertListener.
- See Also:
- removeWerteGeaendertListener, wertAenderung, abgleich, WerteGeaendertListener
removeWerteGeaendertListener
public void removeWerteGeaendertListener(WerteGeaendertListener l)
- entfernt einen WerteGeaendertListener aus der Liste der bei
Änderung von Einstellwerten zu benachrichtgenden Objekte.
- Parameters:
- l - der zu entferndende WerteGeaendertListener.
- See Also:
- addWerteGeaendertListener, WerteGeaendertListener
wertAenderung
protected void wertAenderung(String s)
- benachrichtigt alle registrierten WerteGeaendertListener davon,
daß Werte geändert wurden. Diese Methode sollte von einem
konkreten Bauelement immer dann aufgerufen werden, wenn Einstellungsänderungen
vorgenommen wurden.
- Parameters:
- s - String, der dem Event-Objekt als Kennung beigegeben werden soll
(kann mit
meinEvent.getSource()
wieder gelesen werden.).
- See Also:
- addWerteGeaendertListener, WerteGeaendertListener
wertAenderung
protected void wertAenderung()
- benachrichtigt alle registrierten WerteGeaendertListener davon,
daß Werte geändert wurden. Diese Methode sollte von einem
konkreten Bauelement immer dann aufgerufen werden, wenn Einstellungsänderungen
vorgenommen wurden. Als Kennungsstring wird
this.toString()
verwendet.
- See Also:
- addWerteGeaendertListener, WerteGeaendertListener
All Packages Class Hierarchy This Package Previous Next Index