Aufgrund der Zustandslosigkeit von HTTP können keine Informationen oder Daten vom Client auf den Server übertragen werden. Die Möglichkeit sogenannte CGI- (Common Gateway Interface) Skripte einzusetzen, um Formulareingaben auszuwerten oder benutzerspezifische Dokumente etwa aus Datenbanken zu erzeugen, wurde verworfen, da dies voraussetzt, daß jeder Autor von Lehrinhalten zu dem zu entwickelnden VCLab Zugang zu einem WWW-Server besitzt und auf diesem dazu berechtigt ist, CGI-Skripte zu installieren. Dies wird bei größeren WWW-Servern aus Sicherheits-, Stabilitäts- und Praktikabilitätsgründen nur dem Systemverwalter erlaubt sein. Internet Provider (AOL, CompuServe, T-Online, ...) gestatten grundsätzlich keinen so tiefgreifenden Eingriff in die Betriebsmittel.
Nach der in Kapitel 2 erfolgten Analyse der vorhandenen und eingesetzten Lehr- und Lernumgebungen wurden für das VCLab die folgenden Punkte umgesetzt:
Als Plattform für die Benutzung und Entwicklung des VCLab wurde Windows95 auf einem Standard PC mit einem Pentium 90 MHz Prozessor eingesetzt. Die Kompatibilität von Windows95 zu WindowsNT 4.0 erlaubt die Benutzung aller Teile des VCLab auch für WindowsNT.
Zur Navigation und zur Interaktion wird der Netscape Navigator ab der Version 3.0 für Windows95 Plattformen eingesetzt. Dabei handelt es sich um eine Version, bei der eine Reihe von Plugins mitgeliefert werden. Insbesondere das Live3D-Plugin zur Darstellung komplexer dreidimensionaler Körper und Welten wird in Beispielen zum VCLab eingesetzt.
Eine der Grundvoraussetzung für regelungstechnische Lehrsysteme ist die Darstellung von Gleichungen. In bisher bekannten Systemen, siehe Kapitel 2, und insbesondere bei Lehreinheiten, die auf dem WWW basieren, werden Gleichungen zunächst mit einer Textverarbeitung (z.B. AmiPro, Word, Word Perfect, LaTeX, ...) erzeugt und anschließend in eine Grafikdatei konvertiert. Diese Grafikdatei wird anschließend auf der entsprechenden HTML-Seite mittels eines Anchors eingebunden (z.B. " <a href="Gleichung_3_5.gif"> "). Soll diese Gleichung zu einem späteren Zeitpunkt verändert oder angepaßt werden, so muß in einem aufwendigen Verfahren über eine Textverarbeitung erneut eine entsprechende Grafikdatei erzeugt werden. Diese Vorgehensweise ist statisch und es besteht nach der Erzeugung entsprechender HTML-Seiten keine Möglichkeit, die Darstellung der Gleichungen dynamisch zu verändern. Zur Lösung dieses Problems wurde ein Java-Applet programmiert, das imstande ist, ein ausgewähltes Spektrum der in dem Satzsystem LaTeX zur Verfügung stehenden Befehle zum Setzen von Gleichungen zu interpretieren. Dieser Gleichungsbetrachter wurde in Anlehnung an seine dynamischen Fähigkeiten "HotEqn - Equation Viewer" genannt.
Als regelungstechnisches Programmsystem wird MATLAB/SIMULINK eingesetzt, da dieses System durch die Vielzahl der bereits vorhandenen Toolboxen, implementierten Verfahren, Systeme und Modelle im täglichen Gebrauch sowohl für kleine als auch sehr komplexe Probleme sehr leistungsfähig ist. Die Vorgehensweise des VCLab erlaubt es, vorhandene M-Dateien, SIMULINK-Systeme, Daten-Dateien und MEX-Dateien weiterhin zu benutzten. M-Dateien können in der Regel nach kleinen Änderungen weiterverwendet werden. Werden grafische Ausgaben zur Visualisierung eingesetzt, so kann durch Umlenkung der Grafikausgabe der Netscape Navigator zur Anzeige benutzt werden.
Das in Bild 4.1 dargestellte Diagramm veranschaulicht den Datenfluß im und um den WWW Browser. Die in Kapitel 3 erläuterten Mechanismen zur Kommunikation und Animation mit JavaScript, Plugins und Java-Applets über das Hilfsmittel LiveConnect, werden durch die Anbindung von MATLAB/SIMULINK an den Browser ergänzt.
![]() |
Es wurden zwei Mechanismen zur Integration von MATLAB/SIMULINK eingesetzt. Über das in Kapitel 4.3 beschriebene Plugin, im weiteren Verlauf der Arbeit MATLAB-Plugin genannt, können vom Browser aus im MATLAB-Workspace Operationen und Befehle ausgeführt werden, sowie Variablenwerte und Matrizen zurück zum Plugin und damit auf die HTML-Seite übertragen werden. Dazu wurden im Plugin eine Reihe von Java-Methoden implementiert, die soweit wie möglich an die Funktionen der MATLAB-Engine und der entsprechenden Bibliotheken angelehnt wurden und um einige WWW spezifische Methoden erweitert wurden.
![]() |
Die zweite Kommunikationsform wird durch die Verwendung
der DDE-Funktionen von MATLAB ermöglicht. SIMULINK-Simulationen
können durch Ergänzung eines einzelnen Blocks befähigt
werden, mit einem Java-Applet (DDEmeter-Klasse) im Netscape Browser
zu kommunizieren. Im Browser wird dazu eine Klassensammlung von
Neva Object Technology verwendet, die es Java-Applets ermöglicht,
DDE-Dienste in Anspruch zu nehmen.
Bild 4.2 enthält als Beispiel die Berechnung
des Bode-Diagramms für ein lineares zeitinvariantes System
mit einem Eingang und zwei Ausgängen.
Im oberen Bereich von Bild 4.2 ist der Fensterbereich
des MATLAB-Plugins abgebildet, in dem Aktionen des Plugins und
die Textausgabe des MATLAB-Workspaces angezeigt werden. Der markierte
Link verweist auf die Erklärung des Begriffs "LTI-system"
(lineare zeitinvariante Systeme), die auf einer separaten WWW
Seite erfolgt. Die 6 Gleichungen zur Beschreibung des Systems
werden von einem Java-Applet dargestellt. Die grafische Ausgabe
von MATLAB wird von einem weiteren Plugin, dem "ClipBoard-Plugin",
übernommen. Der Push-Button "Bode plot" startet
die Berechnung des Bode-Diagramms in MATLAB, indem über das
MATLAB-Plugin Befehle im MATLAB-Workspace ausgeführt werden.
In den folgenden Kapiteln werden entsprechenden Mechanismen, Applets und Plugins beschrieben.
![]() | <applet code=HotEqn.class height=200 width=300 name=equation MAYSCRIPT><param name=equation value="\array{ 35.6+\left\[ \array{x & 2 & 4 \\ 0 & \sqrt{\alpha} & \frac{1}{x+1} \\ 0 & 1 & 7} \right| +\sqrt{\frac{x^{4}}{x*5_{3k+1}}} \\ x=4*y \\ y = 2*x^{6*k}+5 }"><param name="Fontsize1" value="18"><param name="Fontsize2" value="16"><param name="Fontsize3" value="12"><param name="Fontsize4" value="8"></applet> |
Die Syntax zum Aufruf des HotEqn-Applets entspricht
den Angaben zur Darstellung von Java-Applets entsprechend Kapitel
3.2. Bild 4.2 zeigt die Syntax des Applet-Tags und die Angabe
der unterschiedlichen Parameter. Die Java-Klasse des Applets heißt
"HotEqn.class"
und wird in jeder Parametrierung des Applet-Tags angegeben.
<applet code=HotEqn.class height=200 width=300
name="equation1" align=middle MAYSCRIPT>
<param name="equation" value="LaTeX-String">
<param name="LeftSide" value="LaTeX-String">
<param name="RightSide" value="LaTeX-String">
<param name="prev0" value="equation1">
<param name="prev1" value="equation2">
... ...
<param name="prevXXX" value="equationXXX">
<param name="Fontsize1" value="18">
<param name="Fontsize2" value="16">
<param name="Fontsize3" value="12">
<param name="Fontsize4" value="8">
|
<applet code=HotEqn.class height=200 width=300
align=middle MAYSCRIPT><param
name=equation value="LaTeX-String"></applet>
|
![]() |
|
Bild 4.5 zeigt das Resultat nach dem Mausklick. In der Gleichung wurden die Variablen z und y durch die rechten Seiten der Gleichungen (eqn1) und (eqn2) ersetzt. Durch erneutes Klicken auf (eqn3), diesmal mit der rechten Maustaste, wird der Ausgangszustand aus Bild 4.4 wiederhergestellt.
Der in Bild 4.6 abgebildete Ausschnitt aus einer HTML-Datei enthält drei HotEqn-Applets (eqn1), (eqn2) und (eqn3). Im Gegensatz zu den Bildern 4.1 und 4.3 wird zur Codierung der Gleichung bei den ersten beiden Applets nicht der Parameter "equation" benutzt, sondern die Parameter "LeftSide" und "RightSide" zur Festlegung der linken und rechten Seiten der darzustellenden Gleichungen. Beide Angaben werden in der anschließenden Darstellung durch ein "="-Zeichen verbunden. Das dritte Applet enthält die beiden Angaben "prev0" und "prev1". Diese besitzen als Argument die Namen der vorherigen beiden Gleichungen, nämlich "eqn1" und "eqn2" zur Referenzierung anderer HotEqn-Applets.
Given
<applet code=HotEqn.class height=40 width=60 name=eqn1
align=middle MAYSCRIPT>
<param name="LeftSide" value="x">
<param name="RightSide" value="\sqrt{\frac{3}{5}}">
</applet>(eqn1)
and
<applet code=HotEqn.class height=60 width=60 name=eqn2
align=middle MAYSCRIPT>
<param name="LeftSide" value="y">
<param name="RightSide" value="\sum_{i=0}^{5}x^{i}">
</applet>(eqn2)
follows
<applet code=HotEqn.class height=80 width=150 name=eqn3
align=middle MAYSCRIPT>
<param name="equation" value="z = \sqrt{3*x+4}-
\frac{4}{y}">
<param name="prev0" value="eqn1">
<param name="prev1" value="eqn2">
</applet>(eqn3).<br>
|
Nach einem Mausklick mit der linken Taste auf diese Gleichung werden jeweils die zuerst im LaTeX-String von (eqn3) vorkommenden linken Seiten von (eqn1) bzw. (eqn2) durch die rechten Seiten von (eqn1) bzw. (eqn2) ersetzt. Die Anzahl der Parameter vom Typ "prev" ist variabel und kann durch Anhängen einer fortlaufenden Zahl (z.B. "prev3", "prev4", ..., "prevXXX") erhöht werden, wenn in einer Gleichung mehrere Variablen oder auch Terme durch andere Variablen oder Terme ersetzt werden sollen.
Während der Entwicklung von VCLab ergaben sich eine Reihe von weiteren Anforderungen zur Aktion des Gleichungsapplets. So können mit den Parametern "evalMFile", "engEvalString", "engGetFull" und "Matrix2LaTeX" weitere Aktionen ausgelöst werden. Die Funktion der einzelnen Parameter kann Bild 4.8 entnommen werden. Die vier Parameter setzen voraus, daß sich das MATLAB-Plugin mit dem Namen "matlab" auf der gleichen HTML-Seite befindet wie auch das Gleichungsapplet. Auf diese Weise können über das MATLAB-Plugin Daten mit MATLAB ausgetauscht werden. Bild 4.7 verdeutlicht die zeitliche Abfolge der Parameterabfragen und Aktionen bei den entsprechenden Mausklicks. Der Einsatz dieser aktionsbehafteten Parameter erfolgt in Beispielen zum VCLab in Kapitel 5.

Bild 4.8 enthält die vollständige Auflistung aller für HotEqn implementierten Parameter und deren Funktion. Der Parameter "Fontname" gibt den zu verwendenden Zeichensatz für die grafische Darstellung an. In Java sind vier verschiedene Standardzeichensätze implementiert. Diese sind "Helvetica", "TimesRoman", "Courier" und "Dialog", standardmäßig ist "Helvetica" eingestellt. Die Parameter " Fontsize1", "Fontsize2", "Fontsize3" und "Fontsize4" bieten die Möglichkeit, die Größe der verwendeten Schrift zu wählen, wobei eine größere Nummer eine kleinere Schrift (Tiefstellen, Brüche,...) bedeutet. Diese Auswahl geschieht allerdings nicht stufenlos, sondern ist bislang auf die Größen 18, 16, 14, 12, 10 und 8 Punkt-Schriften beschränkt. Der Grund dafür ist, daß Java bislang weder das griechische Alphabet noch Sonderzeichen in den Zeichensätzen unterstützt. Griechische Zeichen und Sonderzeichen werden deshalb bei Bedarf als einzelne Gif-Bilder vom Applet geladen. Sie müssen in allen in Frage kommenden Schriftgrößen auf dem WWW-Server oder bei lokaler Anwendung auf der lokalen Festplatte vorliegen.
| name | für Datenaustausch zwischen Applets und Referenzierung für JavaScript |
| equation | Mathematische Gleichung im LaTeX-Format |
| LeftSide | linke Seite einer Gleichung |
| RightSide | rechte Seite einer Gleichung
Es gilt: equation = LeftSide +" = "+ RightSide |
| prev0 | vorherige Gleichung (Daten Quelle 0) |
| prev1 | vorherige Gleichung (Daten Quelle 1) |
| prev2 | vorherige Gleichung (Daten Quelle 2) |
| prevXXX | vorherige Gleichung (Daten Quelle XXX) |
| next | nachfolgende Gleichung (Daten Ziel) |
| evalMFile | M-Datei zur Berechnung in MATLAB |
| engGetFull | holt Matrix ("name") aus MATLAB-Workspace im LaTeX-Format |
| Fontname | Name des verwendeten Fonts |
| Fontsize1 | Größe des Normalfonts |
| Fontsize2 | Größe des 1. rekursiven Fonts (kleiner) |
| Fontsize3 | Größe des 2. rekursiven Fonts (noch kleiner) |
| Fontsize4 | Größe des 3. rekursiven Fonts (noch kleiner) |
| void setEquation(String Equation) | Neue Gleichung setzen |
| void setLeftSide(String LeftSideS) | Linke Seite festlegen |
| void setRightSide(String RightSideS) | Rechte Seite festlegen |
| String getLeftSide() | Linke Seite zurückgeben |
| String getRightSide() | Rechte Seite zurückgeben |
Bild 4.9: Public Methoden des HotEqn-Applets.
Das HotEqn-Applet bietet einige als "public" definierte Methoden an, die von anderen Applets und von JavaScript genutzt werden können. Die Methoden sind in zwei Gruppen zum Setzen und zum Auslesen der Gleichungen aufgeteilt. Die genaue Syntax der Methoden kann Bild 4.9 entnommen werden.
Die implementierte Untermenge der LaTeX-Anweisungen und Zeichen kann dem Bild 4.10 entnommen werden. Sie richtet sich nach den in [Kop93] angegebenen Tabellen.
| Operatoren: + - * / = < > # ~ ; : | + - * / = < > # ~ ; : | |
| Subscripts:_{ <eqn> } |
| y= x_{k,n_{i+j},} |
| Superscripts:^{ <eqn> } |
| y= x^{e^{sin ( x+3 ) }} |
| Wurzeln:\sqrt{ <eqn> } |
| 12.9+\sqrt{3.8+x_{i}} |
| Brüche:\frac{ <eqn> } { <eqn> } |
| z=\frac{x+2}{y+\frac{x^{2}}{x+8y}} |
| Klammern:\left( \right) left | \right| \left\[ \right\] \left\{ \right\} \left. \right.
(Verschiedene Kombinationen von \left und \right sind möglich.) |
|
\left( \left\{ \left| x \right| * x+y \right| \right) |
| Felder:\array{ <eqn> & <eqn> \\ <eqn> & <eqn> } |
| \left( \array{1 & x\\4 & y} \right) |
| Griechische Symbole:\alpha \beta \gamma \delta (\epsilon not implemented) \varepsilon \zeta \eta \theta \vartheta \iota \kappa \lambda \mu \nu \xi \pi \varpi \rho (\varrho not implemented) \sigma (\varsigma not implemented) \tau \upsilon \phi \varphi \chi \psi \omega \Gamma \Delta \Theta \Lambda \Xi \Pi \Sigma (\Upsilon not implemented) \Phi \Psi \Omega | (siehe links) | |
| Summen:\sum_{ <eqn> }^{ <eqn> } |
| z=\sum_{x=1}^{8}2x+4 |
| Produkte:\prod_{ <eqn> }^{ <eqn> } |
| z=\prod_{x=1}^{8}2x+4 |
| Integrale:\int_{ <eqn> }^{ <eqn> } |
| z=\int_{x=1}^{8}2x+4 |
| Limes:\lim_{ <eqn> } |
| z=\lim_{x \arrow \infty} |
| Akzente:\acute \bar \dot \ddot \grave \hat \tilde \vec |
| \hat{a} = \vec{a} = \tilde{a} = \bar{a} |
| Sonderzeichen:\arrow \infty |
| \arrow \infty |
<EMBED SRC="test.m" WIDTH=400 HEIGHT=350 NAME="matlab"> <EMBED SRC="test.mm" WIDTH=400 HEIGHT=350 NAME="matlab"> <EMBED TYPE=application/x-matlab WIDTH =400 HEIGHT=350 NAME="matlab"> <EMBED SRC="test.m" HIDDEN=true NAME="matlab"> <EMBED TYPE=application/x-matlab HIDDEN=true NAME="matlab"> |
Durch das Schlüsselwort "HIDDEN" wird die sichtbare Fenstergröße des Plugins auf 0*0 Punkte herabgesetzt. Das Plugin besitzt also kein sichtbares Fenster. Dieser Ansatz ermöglicht es, daß das Plugin die Verbindung mit der MATLAB-Engine halten kann, ohne dabei auf der HTML-Seite selbst sichtbar zu sein.
<EMBED TYPE=application/x-matlab HIDDEN=true NAME="matlab"> |
Der abgebildete Aufruf des Plugins erzeugt das Objekt "matlab" im JavaScript-Objektbaum. Das Plugin ist durch die Angabe "HIDDEN=true" nicht auf der HTML-Seite sichtbar. Die Angabe von "TYPE=application/x-matlab" weist den Browser an, das MATLAB-Plugin zu laden.
Grundsätzlich gilt, daß Methoden, die von JavaScript aus aufgerufen werden können, bei Matrizen bzw. Feldern die Zählung der Indizes, wie in MATLAB, mit "1" beginnt. Diese für Java und JavaScript unübliche Zählweise wurde gewählt, um bei Einsatz von MATLAB-Code auf einer HTML-Seite Konsistenz für die Codierung gewährleisten zu können. Alle Argumente der Zugriffsfunktionen sind vom Typ "String" oder "URL", da von JavaScript alle Variablen zunächst als vom Typ "String" betrachtet werden.
|
Die folgende Aufzählung enthält die Syntax und die Funktion der einzelnen Zugriffsmethoden. In Bild 4.13 kann der Datenfluß zwischen der HTML-Seite, dem Plugin und dem MATLAB-Workspace betrachtet werden. Das Plugin besitzt die Möglichkeit, eine Matrix in einem Feld vom Typ "double" mit der Zeilenzahl "m" und der Spaltenzahl "n" zwischenzuspeichern. Dies ist deshalb sinnvoll, da bei Übertragungen von und nach MATLAB die Datenformate konvertiert werden müssen und teilweise nur ausgewählte Elemente einer Matrix benötigt werden.
Die folgenden Zugriffsmethoden werden vom MATLAB-Plugin zur Interaktion mit anderen Plugins, Applets und JavaScript bereitgestellt:
<embed src=test2.m name="matlab" width=500 height=300> <form name=control> |
Das Beispiel in Bild 4.14 zeigt eine mögliche Anwendung des Befehls auf einer HTML-Seite. In drei Textfeldern werden die drei Variablen "Matrix", "m" und "n" erfaßt. Durch Drücken eines Push-Buttons wird im MATLAB-Plugin über den Befehl "document.matlab.engGetFull(matrix,m,n)" ein Element aus der Matrix "matrix" zurückgegeben und wiederum in einem Textfeld dargestellt.
Die breit gefächerten Anwendungsgebiete und Codierungsmöglichkeiten der Zugriffsmethoden können den Beispielen zum VCLab entnommen werden. Die unterschiedliche Funktionalität der Methoden ist im wesentlichen im Java-Teil des Plugins konzentriert, der schnell und einfach erweitert werden kann. Die Kompilierung des C++-Teils des Plugins ist somit nur bei wirklich grundlegenden Änderungen nötig.
|
Gelöst wurde dieses Problem durch die Einführung von MM-Dateien oder auch MM-Archiven. Dabei handelt es sich um eine Variante der sogenannten ZIP-Archive. Diese Dateien können in einem erweiterten Format nicht nur Dateien, sondern auch die dazugehörigen Verzeichnisstrukturen enthalten. Ferner werden die Archive in der Regel komprimiert, um Speicherplatz einzusparen.
Für das MATLAB-Plugin wurde eine Variante der ZIP-Archive ausgewählt, in der keine Verzeichnisstrukturen enthalten sind und in der die Dateien unkomprimiert enthalten sind. Diese Wahl erlaubt es, den Entpackungsalgorithmus sehr einfach zu halten. Die archivierten Dateien sind durch spezielle Trennzeichen und die Angabe der Dateinamen untereinander getrennt. Während des Entpackungsvorgangs werden alle Dateien in dem Cache-Verzeichnis (temporärer WWW-Speicher) des Netscape Browsers abgelegt. Nach Beendigung des Entpackens wird MATLAB veranlaßt, in dieses Verzeichnis zu wechseln und die Datei "startup.m" (oder wahlweise "astart.m") auszuführen. Verläßt der Benutzer die aktuelle HTML-Seite, löscht das Plugin alle Dateien des MM-Archivs aus dem Cache-Verzeichnis des Browsers.
MM-Dateien können mit den gängigen ZIP-Archiv Programmen (z.B. PKZIP, WinZip,... ) erzeugt werden, wobei die Kompression und alle Verzeichnisoptionen abgeschaltet werden müssen.
Dieses Sicherheitsproblem kann nicht vollständig behoben werden. Es bieten sich jedoch verschiedene Methoden zur Eindämmung solcher Risiken an. So könnten M-Dateien auf DOS-Befehle und Ein-/Ausgabebefehle durchsucht werden. Dabei ist natürlich auch die Speicherung von Matrizen mit z.B. "save A" als Sicherheitsrisiko zu betrachten. Werden die Möglichkeiten der MM-Archive genutzt, so können in diesen ZIP-Archiven CMEX-Dateien vorhanden sein. Diese Dateien sind wegen ihres Binärfomats nicht auf gefährdende Befehle überprüfbar. Grundsätzlich sollten M-Dateien von unbekannten, also nicht lokalen WWW-Servern als äußerst gefahrvoll betrachtet werden.
Folgende Sicherheitsmaßnahmen werden für eine spätere, neuere Version des MATLAB-Plugins vorgeschlagen:
Für DOS-/Windows- Plattformen besteht mit der aktuellen MATLAB Version 4.2c keine Möglichkeit der Begrenzung oder Abschaltung von Befehlen und Anweisungen. Offen ist, ob eine nachfolgende Version von MATLAB/SIMULINK mit dem Gedanken an den Einsatz in unsicheren Umgebungen um so eine Funktion erweitert werden kann.
der beim Initialisieren des MATLAB-Plugins, das sich in der Regel auch auf der HTML-Seite befindet, ausgeführt wird. Es wird nur die sichtbare Grafikausgabe abgeschaltet, die Objekte (Punkte, Striche, Texte, Farben, ...) der Grafikbefehle werden trotzdem generiert und befinden sich weiterhin im Objektbaum der MATLAB-Grafikverwaltung. Mit dem Befehl
der entweder über eine Zugriffsmethode über das MATLAB-Plugin im MATLAB-Workspace ausgeführt wird oder in einer ausgeführten M-Datei angegeben ist, wird die im Objektbaum beschriebene Grafik in die Zwischenablage (Clip Board) des Windows95 / NT Betriebsystems übertragen. Die Daten befinden sich dort in dem von der Einbindung von MATLAB-Grafiken in Textverarbeitungsprogramme (z.B. Word6, AmiPro,...) bekannten Meta-File Grafik Format. Das ClipBoard-Plugin wird durch einen entsprechenden Befehl (z.B. "showClipBoard()") angewiesen, die in der Zwischenablage gespeicherte Grafik in einem zugewiesenen Fenster im Browser darzustellen. Zur Darstellung werden die Windows spezifischen Bibliotheksfunktionen zur Darstellung von "Enhanced Meta-File" Daten aufgerufen. Das Plugin kann deshalb prinzipiell auch dafür verwendet werden, Dateien, die Grafiken im Enhanced Meta-File Format enthalten, darzustellen. In der Registrierung der Plugins im Netscape Browser ist das Plugin deshalb als EMF-Plugin (Enhanced Metafile Plugin) vermerkt.
Bild 4.16 verdeutlicht den Ablauf der grafischen Darstellung im VCLab. Auf der HTML-Seite sind zwei verschiedene Anweisungen nötig, um die Grafik im Browser darstellen zu können. Zum einen werden Befehle zur Erzeugung der Grafik über das MATLAB-Plugin an MATLAB übertragen. Dann werden die unsichtbaren Grafiken mit einem zweiten Befehl aus der Zwischenablage abgeholt und im ClipBoard-Plugin Fenster dargestellt.
|
<EMBED SRC="test.emf" WIDTH=400 HEIGHT=350 NAME="ClipBoard"> <EMBED TYPE=image/x-emf WIDTH=400 HEIGHT=350 NAME="ClipBoard"> |
Die Angabe des Schlüsselworts "HIDDEN" ist auch bei diesem Plugin möglich, allerdings besteht die Funktion dieses Plugins gerade darin, sichtbare grafische Informationen darzustellen. Die Anwendung dieses Schlüsselworts ist damit hinfällig und ohne Nutzen.
<EMBED TYPE=image/x-emf WIDTH=400 HEIGHT=350 NAME="ClipBoard"> |
<embed type="application/x-matlab" name="matlab" hidden=true>
...
<embed type="image/x-emf" width=500 height=300 name="grafik">
...
<form>
<input type=button value="Do Bode plot"
onClick="document.matlab.engEvalString('bode(A,B,C,D,1)');
document.matlab.engEvalString('print -dmeta');
document.grafik.showClipBrd();">
</form>
...
|
Der in Bild 4.19 abgebildete Codeausschnitt aus einer HTML-Seite zur Berechnung und Darstellung eines Bode-Diagramms enthält die beiden Plugins (MATLAB-Plugin und ClipBoard-Plugin) und einen Push-Button, der die Steuerung der Berechnung und die anschließende Darstellung im Browserfenster koordiniert.
<applet code=slider.class height=50 width=200
name=slider1 MAYSCRIPT>
<param name="var" value="MATLAB Matrix">
<param name="text" value="true | false |
right | left |
top | bottom">
<param name="orientation" value="horizontal | vertical">
<param name="min" value="100">
<param name="x0" value="500">
<param name="max" value="1000">
<param name="steps" value="100">
<param name="action" value="MATLAB-Anweisung">
<param name="script" value="JavaScript-function">
<param name="clpbrd" value="Clip-Board name">
</applet>
|
... <embed type=application/x-matlab hidden=true name="matlab"> ... <applet code=slider.class height=50 width=200 MAYSCRIPT> </applet> |
Die abgebildete Konfiguration erzeugt einen horizontalen Slider mit der Höhe 50 und der Breite 200 Punkte. Die Textfelder für Minimum, Funktionswert und Maximum werden unterhalb des Sliders dargestellt. Das Attribut MAYSCRIPT muß vorhanden sein, da das Slider-Applet mit dem MATLAB-Plugin kommuniziert. Bild 4.22 zeigt das durch die Anweisungen in Bild 4.21 erzeugte Applet.


Die Werte für das Minimum "min", den aktuellen Funktionswert "value" und das Maximum "max" können direkt in den Textfeldern des Applets verändert werden. Die Eingabe der neuen Werte wird mit <Return> abgeschlossen. Gilt die folgende Relation min <= x0 <= max nicht, werden die vorherigen Parameter weiterbenutzt. Durch die verschiedenen Möglichkeiten zur Orientierung des Applets mit und ohne Textfelder ergeben sich die in Bild 4.25 abgebildeten Applets.
| name | Name des Applets (default = "slider") | ||
| var | Name der Variablen in MATLAB (default var = name ) | ||
| min | Minimalwert des Sliders (default min = -1 ) | ||
| x0 | Wert des Sliders beim Start des Applets (default: var ist in der Mitte zwischen min und max ) | ||
| max | Maximalwert des Sliders (default max = 1 ) | ||
| text | true (default) | Die Textfelder für Minimum,Funktionswert und
Maximum werden dargestellt. | |
| text | false | Keine Textfelder. | |
| text | top | Bei orientation=horizontal werden die
Textfelder oberhalb des Sliders dargestellt. | |
| text | bottom (default) | Bei orientation=horizontal werden die
Textfelder unterhalb des Sliders dargestellt. | |
| text | left | Bei orientation=vertical werden die Textfelder links vom Slider dargestellt. | |
| text | right (default) | Bei orientation=vertical werden die Textfelder rechts vom Slider dargestellt | |
| orientation | horizontal (default) | Der Slider kann horizontal bewegt werden und die Textfelder können ober- oder unterhalb des Sliders dargestellt werden. | |
| orientation | vertical | Der Slider kann vertikal bewegt werden und die Textfelder können rechts oder links neben dem Slider dargestellt werden. | |
| steps | Anzahl der Unterteilungen des Sliders. | ||
| action | MATLAB-Befehle die bei einer Änderung der Schiebervariablen zusätzlich in MALTAB ausgeführt werden. | ||
| script | Bezeichner einer JavaScript-Funktion, die auf der aktuellen HTML-Seite ausgeführt werden soll. (ACHTUNG! Aufgrund eines Fehlers in der Netscape LiveConnect Implementierung darf diese JavaScript-Funktion keine Methoden in anderen Applets oder Plugins aufrufen.) Der script Parameter wird nach dem action Parameter ausgewertet. | ||
| clpbrd | Referenzname des ClipBoard-Plugins in dem eine Grafik dargestellt werden soll. Der clpbrd Parameter wird nach dem script Parameter ausgewertet. | ||
| <applet code=slider.class height=50 width=200 name=slider1 MAYSCRIPT><param name="var" value="gain_1"><param name="text" value="true"><param name="orientation" value="horizontal"><param name="min" value="100"><param name="x0" value="500"><param name="max" value="1000"></applet> |
|
| <applet code=slider.class height=20 width=100 name=slider2 MAYSCRIPT><param name="text" value="top"><param name="orientation" value="horizontal">...</applet> |
|
| <applet code=slider.class height=150 width=80 name=slider3 MAYSCRIPT><param name="text" value="false"><param name="orientation" value="horizontal">...</applet> |
|
| <applet code=slider.class height=150 width=30 name=slider4 MAYSCRIPT><param name="text" value="right"><param name="orientation" value="vertical">...</applet> |
|
| <applet code=slider.class height=50 width=200 name=slider5 MAYSCRIPT><param name="text" value="left"><param name="orientation" value="vertical">...</applet> |
|
| <applet code=slider.class height=150 width=80 name=slider6 MAYSCRIPT><param name="text" value="false"><param name="orientation" value="vertical">...</applet> |
Die Syntax und die Funktion der Zugriffsmethoden des Applets sind wie folgt:
Ein Beispiel zur interaktiven Konstruktion und Simulation von Wurzelortskurven in Kapitel 5.3 verdeutlicht den Gebrauch und den Einsatz nahezu aller Möglichkeiten des Slider-Applets.
Das Applet kann mit zwei Zeigern die übertragenen Funktionswerte anzeigen. Zur besseren Visualisierung kann das dem Netscape Browser beiliegende Live3D-Plugin zur Darstellung von VRML-Modellen benutzt werden. Dieses Plugin erlaubt die Darstellung und Betrachtung von dreidimensionalen Objekten aus beliebigen Blickwinkeln und Entfernungen. In Bild 4.26 ist ein VRML-Modell des von [Gru93] aufgebauten Pendels abgebildet. Zu dieser Anlage wurde in [Mue96], siehe Bild 4.27, eine SIMULINK-Simulation entwickelt. Die SIMULINK Simulation kann durch die Ergänzung eines einzigen Blocks, der prinzipiell aus einer S-Funktion besteht, um die Fähigkeit zur Nutzung von DDE erweitert werden.
Soll das DDEmeter-Applet an andere dreidimensionale Objekte angepaßt werden, muß der Autor einer entsprechenden Anwendung das Applet in Java programmieren, da die Referenzierung und Bewegung (Rotation, Translation) der Objekte des Live3D-Plugins durch Befehle mit einer Vielzahl von Parametern geschieht, deren Angabe im Applet die Handhabung desselben sehr erschweren würde.
Bild 4.26 zeigt weitere aus der VCLab-Umgebung stammende Objekte und Anwendungen in Verbindung mit dem DDEmeter-Applet.


Über die Maskierung des "Netscape Blocks" können Parameter für den DDE-Service (Application) und die DDE-Topic gesetzt werden. Service und Topic müssen ihr Gegenstück im DDEmeter-Applet finden, damit die gesendeten Funktionswerte ihr Ziel im Browser erreichen können.
Die DDE Datenpakete werden im Windows Betriebssystem in eine Nachrichtenwarteschlange eingereiht und in einem günstigen Moment der entsprechenden Anwendung zugestellt. Dadurch ergeben sich Verzögerungen in der Animation, die sich durch ruckelnde Pendelbewegungen bemerkbar machen. Der Parameter "Synchronization multiple:" ermöglicht eine Synchronisation der Übertragung nach einer gewissen Anzahl von Übertragungen (hier 10 Übertragungen). Mit "Enter animation interval:" wird angegeben, mit welcher Abtastzeit eine Übertragung von Funktionswerten zum Browser erfolgt. Die S-Funktion erlaubt es, beliebige Matrizen zu übertragen. Lediglich auf der Seite des Browsers müssen die Matrizen entsprechend der Funktion ihrer Elemente untersucht werden.
Bild 4.29 zeigt die eingesetzte Parametrierung des
DDEmeter-Applets. Werden die Parameter "min"
und " max"
nicht oder falsch angegeben, so wird für die Darstellung
der Zeiger im Applet das Intervall [-1 , 1] gewählt.
Die eingetragenen Werte für " Service"
und " Topic"
sind zugleich die Werte für die Standardeinstellung, wenn
keine Parameter angegeben werden.

<applet name="DDEmeter" CODE=DDEmeter.class WIDTH=50 HEIGHT=50
align=middle MAYSCRIPT>
<param name=Service value="Pendel">
<param name=Topic value="Animation">
<param name=min value="-12.665">
<param name=max value="12.665">
</applet>
|
Das DDEmeter-Applet ist die einzige Komponente des VCLabs, die für neue oder andere Lehrinhalte in der Programmiersprache Java codiert werden muß. Die Verknüpfung des Applets mit beliebigen VRML-Objekten führt zu Parametrisierungsproblemen dei den verwendenden Live3D-Objektnamen und mit den anzuwendenden Operationen der einzelnen Objekte. Die notwendige Parametervielfalt würde die von anderen Objekten gewohnte einfache Parametrierung unnötig komplizieren.
| Windows95 oder WindowsNT |
| MATLAB for Windows Version 4.2x |
| SIMULINK for Windows |
| DDE-Toolbox für MATLAB für Windows Version 2.1 |
| "Control system toolbox" für MATLAB |
| Netscape Navigator Version 3.0x mit Plugins (Live3D, ...) für Windows95 oder WindowsNT |
| MATLAB- (VCLab-) Plugin |
| ClipBoard- (Enhanced-Metafile-) Plugin |
| JavaDDE von Neva Soft für SIMULINK Animationen |
| Plugin/Anwendung | Beschreibung | Dateiendung | MIME-Typ |
| MATLAB-Plugin | MATLAB Datei | .m oder .mm | application/x-matlab |
| EMF-Plugin | Enhanced Metafile | .emf | image/x-emf |
| JavaScript | JavaScript Datei | .js | application/x-javascript |
EMF-Dateien werden in der Regel wohl nicht auf einem Server gelagert, sondern mit dem Befehl "print -dmeta" in MATLAB erzeugt und über die Zwischenablage in dem Fenster des ClipBoard-Plugins dargestellt.

Die grobe Strukturierung der Lehrinhalte erfolgt auf der sogenannten Konzeptebene. Dabei wird definiert, welche Vor- und Nachbedingungen für die vorliegende Lehreinheit zu erfüllen sind. Ziel einer genauen Strukturierung ist es, daß die Lehreinheiten inhaltlich abgeschlossen sind, damit sie sich in der nachfolgenden Verknüpfung von anderen Themenbereichen sinnvoll auswählen lassen. Eine rechnergestützte Planungshilfe für die Strukturierung der Lehreinheiten auf der Grundlage von HTML-Dateien für das WWW existiert bisher nicht.
Auf der Hypertextebene werden die Lehreinheiten in kleine übersichtliche Teileinheiten zerlegt, die auf den einzelnen WWW-Seiten erscheinen sollen. Dabei werden zusätzlich die Hypertextverknüpfungen der Teileinheiten festgelegt. Das in [BEO96] vorgestellte Programm "Frontpage Explorer" bietet bereits einige Ansätze zur Verwaltung von mehreren verknüpften HTML-Dokumenten. Entwurfswerkzeuge für diesen Anwendungsbereich sind Gegenstand der aktuellen Entwicklung von HTML-Editoren. Es gibt allerdings bereits Programme, die nach der Fertigstellung einer Anzahl von HTML-Dokumenten, diese auf die Konsistenz der angegebenen Hypertextlinks hin überprüfen. Beispielhaft sind hierbei die Programme "Linkbot" von Tetranet Software Inc. oder "SiteHog" zu nennen.
Auf der dritten Entwurfsebene, der Hypertextdokumentenebene, werden die Lehreinheiten in den einzelnen HTML-Dateien codiert. Zunächst wird das Layout der Datei erstellt, dabei können Textpassagen, Formulare, Tabellen und Grafiken in der Regel sofort eingesetzt werden. Anschließend werden die Formularelemente, die vorgesehenen Java-Applets und gegebenenfalls Links mit den entsprechenden Aktionen und Parametern versehen. Dabei ist besonders zu untersuchen, ob der eingesetzte MATLAB-Code vom MATLAB-Plugin in M- oder MM-Dateien über das Netz geladen werden soll oder durch die Einbeziehung von JavaScript-Funktionen und Anweisungen, die Zugriffsmethoden des Plugins benutzt werden.
Bei der Entwicklung des VCLabs hat sich die nachfolgende
Regel als günstig in Bezug auf die Abarbeitungsgeschwindigkeit
der Lehreinheiten erwiesen:
Mehrere aufeinanderfolgende MATLAB-Anweisungen sollten
besser als einzelne kleine Dateien in einem gemeinsamen MM-Archiv
untergebracht werden. Die Abarbeitung einer M-Datei ist um ein
Vielfaches schneller als die Übertragung einzelner Anweisungen
von JavaScript über das MATLAB-Plugin und die MATLAB-Engine
in den Workspace von MATLAB.
Der Autor steht somit vor einem doppelten Problem. Einerseits muß der HTML-Code für alle Texte, Bilder, Formulare, Applets, Plugins und JavaScript generiert werden. Zum anderen müssen Anweisungen in MATLAB programmiert werden. Beide Bereiche sind häufig miteinander verknüpft, wenn dynamisch Informationen erzeugt werden, die zwischen den Objekten mit LiveConnect ausgetauscht werden. Der HTML-Codierung folgt die Parametrierung der verschiedenen Applets (HotEqn, Slider, DDEmeter), die ihrerseits Methoden besitzen und Aktionen auslösen können, um mit anderen Objekten zu kommunizieren.
<html>
<head>
<title>Bode Plot</title>
<head>
<script language="JavaScript" SRC="script.js">
</script>
<body bgcolor="white" link="darkblue" vlink="006666">
<a href="index.html">[Assist]</a>
<center><h1>Bode Plot</h1></center>
<embed type="application/x-matlab" name="matlab" hidden=true>
<script language="JavaScript">
getUserLevel();
</script>
<table border=1 align=left><tr><td>
<embed type="image/x-emf" width=500 height=300 name="grafik">
</td></tr></table>
<script language="JavaScript">
writeExpert(20,"<font size=+2>Graph Controls</font>");
writeExpert(20,"<form name=graphcontrol>");
writeExpert(20,"<input type=button value=\"grid on\""+
"onClick=\"document.matlab.engEvalString('grid on;'+
+'print -dmeta;');"+
"document.grafik.showClipBrd();\">");
function setaxis(xmin,xmax,ymin,ymax){
document.matlab.engEvalString("axis(["+ xmin +" "+ xmax +" "+ ymin +" "+
ymax+"]);print -dmeta;");
document.grafik.showClipBrd();
}
</script>
<form name=control>
<input type=button value="Do
Bode plot"
onClick="document.matlab.engEvalString('bode(A,B,C,D,1)');
document.matlab.engEvalString('print -dmeta');
document.grafik.showClipBrd(); ">
</form>
</body>
</html>
|
Das in Bild 4.33 dargestellte Beispiel zur Codierung einer HTML-Datei verdeutlicht die Schwierigkeiten des Autors bei der Programmierung. Die Einbindung der MATLAB-Befehle und die Ansteuerung des ClipBoard-Plugins sind mit verschiedenen JavaScript-Funktionen verbunden. So gibt es neben der JavaScript-Methode "onClick" auch Funktionen, die dynamisch HTML-Code erzeugen, wobei erst während des Seitenaufbaus im Browser anhand verschiedener Variablen (hier: "UserLevel") entschieden wird, welche Informationen dem Lernenden präsentiert werden. Die Funktion "writeExpert(20,"...")" zeigt den eingeschlossenen HTML-Code nur dann im Browser an, wenn der Lernende über einen entsprechenden Vorwissensstatus verfügt, der wiederum auf einer anderen HTML-Seite zu einem früheren Zeitpunkt eingegeben worden sein muß.