Diplomarbeit DA-22 || 2004-06-05
Dr. H. Högl, Hubert.Hoegl@fh-augsburg.de
Eine XML-basierte Beschreibungssprache für User-Interfaces auf
kleinen alphanumerischen Displays mit 20 x 4 Zeichen.
Diese Arbeit stützt sich auf Software, die ich vor einigen Jahren zur
bequemen Spezifikation von User-Interfaces geschrieben habe. Zum
einen handelt es sich um die Beschreibungssprache ,,MEL``, mit der man
Menüstrukturen auf kleinen LCD-Displays beschreiben kann. Programme
in dieser Sprache werden mit einem Compiler auf einen Bytecode
abgebildet, der dann von einem Mikroprozessor ausgeführt wird. An den
Prozessor ist das LCD Display geschaltet, das dann die Menüs anzeigt.
Ausserdem sind einige Tasten vorhanden, mit denen man die Navigation
und die Eingabe von Werten erledigen kann. Der Interpreter ,,MEX``,
der den Bytecode auf dem Mikroprozessor ausführt, ist in C
geschrieben. Der folgende Quelltext zeigt einen kleinen Ausschnitt
aus einem MEL Programm.
(menu-line
(menu-id luftk1 )
(format
(string
(blink off)
(value 'sw_rueck_max')
(access ro)
(update 0)
)
(hfill 0)
(float
(blink off)
(type sii.f)
(access rw)
(update 3)
(min '18.0')
(max '23.0')
(step '0.1')
(default '20.0')
(var 'm_sw_rueck_max')
)
)
)
Der Ausschnitt beschreibt genau eine Zeile der Anzeige, die wie folgt aussieht:
sw_rueck_max.....20.0
Die momentane Syntax der Sprache MEL verwendet eine LISP-ähnliche
Klammerung. In Zukunft - das wird Ihre Aufgabe sein - wird die Syntax
als eine XML-Anwendung beschrieben werden. Diese Sprache wird dann
MEL2 genannt werden.
Ihre Aufgaben sind:
- Definition des XML Formates für MEL2
- Programmierung eines Compilers für MEL2. Dieser Compiler wird
in der Sprache Python programmiert werden. Nähere
Informationen zu Python finden Sie unter http://www.python.org.
- Programmierung eines LCD-Simulators, damit man die erstellten
Menüstrukturen sofort auf dem Entwicklungsrechner überprüfen kann.
- Programmierung eines MEL-Debuggers.
Genauere Informationen zu MEL und MEX entnehmen Sie bitte der
Dokumentation mel.html und mex.html.
Im folgenden sind einige Fotos einer beispielhaften Menüsteuerung aus
menu.m zu sehen. Positionsangaben schreibe ich als Paar (Zeile,
Zeichen), die Zeilen gehen von 1 bis 4, die Zeichen von 1 bis 20:
- Das Top-Level Menü. Am linken Rand sieht man an (2,1) den
Pfeil, der die momentan aktive Zeile markiert. An der Stelle (1,17)
ist ein Stern (*) zu sehen, der angibt, dass die aktive Zeile nur
lesbare Komponenten enthält. Untermenüs werden am rechten Rand
durch ein > Symbol markiert. Drückt man auf so einer Zeile
auf den ,,nach rechts`` Navigationsknopf, dann öffnet sich das
Untermenü. Die Zahl an der Stelle (1,19) ist die momentan aktive
Zeile. Das Plus-Zeichen an (1,20) sagt aus, dass es nach der
aktuellen Zeile eine weitere Zeile zum Ansehen gibt. Wenn man auf
der letzten Menüzeile steht, dann wird ein Ausrufezeichen angezeigt
- oder gar kein Zeichen, falls das Menü weniger als drei Zeilen hat.
Auf der ersten Zeile steht links immer der Name des Menüs.
- Hier hat sich das ,,Status`` Untermenü geöffnet. Man sieht,
dass man es wieder mit mehreren Untermenüs zu tun hat.
- Das CAN Statusmenü enthält zwei ganze Zahlen als Ausgabewerte.
Man beachte, dass der Menüname aus zwei Teilnamen zusammengesetzt
ist, die durch einen Punkt getrennt sind (Status.CAN).
- Hier sieht man ein Optionsfeld. Das Feld ist nur lesbar. Das
Programm bestimmt, ob ein Ein oder Aus angezeigt wird.
- Die Zeilenmarkierung (Pfeil) steht auf der letzten Zeile
(Ausrufezeichen!).
- Diese zwei Werte im Parameter-Menü ,,Luftkühler`` sind
Eingabewerte (angezeigt durch den Doppelpunkt). Die Werte können
ein Vorzeichen, zwei Ziffern vor dem Dezimalpunkt und eine Ziffer
nach dem Dezimalpunkt haben. Das ist das sogenannte ,,sii.f``
Format.
- Ein anderes Parametermenü. Der Zeilencursor (Pfeil) steht auf
der letzten Zeile (5!).
- Das Sensormenü zeigt nur-lesbare Werte an (in diesem Fall
Temperaturen).
- Dieses Menü zeigt mehrere Eingabefelder vom Typ ,,Switchbox``.
Jeder Unterstrich _ entspricht einem Bit, das auf 0 (das
ist der Unterstrich) oder 1 gesetzt werden kann. Jeder
Leistungsausgang wird durch ein Bit dargestellt.
- Bei diesem Menüeintrag wird die Uhr gesetzt.
- Auch beliebige Texte lassen sich darstellen.
Hubert Hoegl
2004-06-13