[an error occurred while processing this directive]   Suche  
 

Graphische Benutzeroberflächen

Graphische Benutzeroberfächen sind in Matlab Graphik-Fenster mit bestimmten Bauelementen wie edit-Fenster zur Eingabe von Daten über die Tastatur, Schiebe-Balken zur Eingabe von numerischen Werten mit Hilfe der Maus, Auswahlfenster, aus denen man einen bestimmten Wert durch Anklicken auswählt u.s.w.
Matlab bietet zur Formulierung von Graphischen Benutzeroberflächen zwei Wege:
  • die Beschreibung durch Matlab-Kommandos
  • die Konstruktion mit Hilfe des Guide Control Panels
Simulink greift auf die Matlab-Werkzeuge zur Konstruktion von Graphischen Benutzeroberflächen zurück und bietet einige wenige eigene Mittel zur Nutzung dieser Werkzeuge.

Beispiel 1:

Wir setzen Beispiel 2 aus dem Kapitel über die Callback-Routinen in Simulink fort. Erwähnt werden sollte dabei, dass der Begriff 'Callback-Routine' auch im Zusammenhang mit Graphischen Benutzeroberflächen von Bedeutung ist und hier immer eine Routine bezeichnet, die durch eine Benutzeraktion ausgelöst wird.

In Beispiel 2 hatten die Anwender noch keine Möglichkeit, Werte für m, c oder k selbst vorzugeben. Wir ergänzen daher unser Modell um einen isolierten Subsystemblock:

Erweitertes Simulink-Modell

und ordnen diesem Block mittels:
» set_param('A1/SubSystem','OpenFcn','interface')
eine OpenFcn zu. Den Namen des Subsystemblockes können wir nötigenfalls durch Anklicken des Blockes und darauffolgende Matlab-Abfrage:
» gcb
ans =
A1/SubSystem
ermitteln.

Die Anwender können jetzt durch Doppelklick auf den Subsystem-Block ein M-File mit Namen interface.m aufrufen. Was uns zu tun bleibt, ist die Formulierung dieses M-Files.

Was wir erreichen möchten ist, dass nach dem Doppelklick auf den Subsystem-Block im Modell-Fenster auf dem Bildschirm ein Fenster entsprechend dem folgenden aufgeht:

Graphik Fenster

in dem die Anwender die betreffenden Werte vorgeben können.

Im ersten Schritt wollen wir nur das obige Graphik-Fenster erzeugen und uns noch nicht um die Verarbeitung des eingegebenen Wertes kümmern. Im Matlab-Arbeitsfenster öffnen wir über File -> Show GUI Layout Tool den Guide Control Panel.

Guide Control Panel

und dort über Add Figure ein leeres Graphik-Fenster mit dem Default Namen Figure 1. Dort fügen wir mittels Edit -> Add Object -> text bzw. edit bzw. pushbutton ein text- und ein edit-Feld sowie drei pushbuttons ein. Diese graphischen Objekte kann man wie gewohnt verschieben und vergrößern.

Zur Ausrichtung der drei pushbuttons kann man das Alignment Tool benutzen, das im Guide Control Panel angeboten wird. Man muss dazu im oberen Teilfenster die drei 'pushbutton-Zeilen' markieren (Shift-Taste + Maus) und anschließend eine der drei Knöpfe zur 'horizontalen Ausrichtung' drücken. Durch Anklicken von 'Apply' erfolgt dann die Ausrichtung.

Alignement Tool

Als nächstes bringen wir die Beschriftung bei den einzelnen Elementen an. Dies erfolgt mit dem Property Editor, der ebenfalls im Guide Control Panel angeboten wird.

Graphics Property Editor

Sie finden in diesem Fenster:
  • im oberen Teil eine Liste der Objekte unserer Benutzeroberfläche, die im Moment interessanten Objekte werden dort als uicontrol (Kontrollelemente) bezeichnet. Aufgelistet werden zu jedem Kontrollelement das Schlüsselwort uicontrol, der Typ des Elementes, etwa pushbutton und ein sogenannter Tag, eine interne Bezeichnung des Kontrollelementes. Durch Anklicken einer Zeile wählt man das betreffende Kontrollelement zum aktuellen Element.
  • im dritten Teilfenster eine Liste der Eigenschaften des aktuellen Elementes. Links steht jeweils der Eigenschaftsname, rechts der momentane Wert. Durch Anklicken einer Zeile wählt man die aktuelle Eigenschaft aus.
  • im zweiten Teilfenster findet man zwei Felder mit dem Namen der gerade ausgewählten Eigenschaft (links) und dem momentanen Wert dazu (rechts). Das Wertefeld können Sie überschreiben.
Nun:
  • wählen wir den ersten pushbutton zum aktuellen Element
  • wählen wir Eigenschaft 'String' zur aktuellen Eigenschaft
  • besetzen Eigenschaft 'String' mit dem Wert 'Masse'
  • wählen wir Eigenschaft 'Tag' zur aktuellen Eigenschaft
  • besetzen Eigenschaft 'Tag' mit dem Wert 'Masse'
Analog besetzen wir String und Tag beim zweiten pushbutton-Element mit dem Wert 'Federkonstante', beim dritten pushbutton-Element mit 'Dämpfung'. Beim text-Element besetzen wir String mit der Aufforderung aus unserer Benutzeroberfläche, Tag soll hier den Wert 'Aufforderung' erhalten. Beim edit-Feld besetzen wir Tag mit 'Eingabe'. Nachdem alle diese Eigenschaftswerte gesetzt sind, schließen wir den Property Editor mit Close.

. Das Graphik-Fenster hat jetzt das gewünschte Aussehen. Wir sichern es in diesem unfertigen Zustand mit File -> Save im Graphik-Fenster. Der Sicherungsdatei geben wir den Namen interface.m, wobei die Endung automatisch angefügt wird. Als Verzeichnis wählen wir das aktuelle Verzeichnis.

Mit dem Kommando:

» interface
können wir das Fenster aufrufen, ebenso durch Doppelklick auf den Subsystem-Block im Modell-Fenster. Bei einer Simulation, die Eingabewerte der Benutzer werden noch nicht ausgewertet, zeigt sich, dass die Ergebnisausgabe dasselbe Graphik-Fenster benutzt wie die Benutzeroberfläche. Wir wollen das Fenster mit der Benutzeroberfläche deshalb beim Start der Simulation schließen. Dies erfolgt mit der Callback-Routine StartFcn:
» set_param('A1','StartFcn','delete(gcf)');

In unserer Benutzeroberfläche fehlt noch die Auswertung der Benutzereingabe. Wir öffnen deshalb das Graphik-Fenster und dort über File -> Property Editor den Property Editor. Möglicherweise wird im oberen Teilfenster jetzt nur Figure 1 angezeigt. An dem davor stehenden Plus-Zeichen erkennen Sie aber, dass dieses Element Unterelemente umfasst. Durch Doppelklick auf die Zeile werden diese sichtbar, das Plus-Zeichen verwandelt sich dabei in ein Minus-Zeichen. Wir ordnen jetzt jedem pushbotton in der schon bekannten Weise eine Callback-Routine zu, dazu besetzen wir die Eigenschaft Callback mit Parwert('m') bzw. Parwert('c') bzw. Parwert('k').

Was noch zu tun bleibt, ist die Formulierung des M-Skriptes Parwert. Diese Callback-Funktion gehört zur Benutzeroberfläche, nicht zum Simulink-Modell. Sie übernimmt als Argument einen Buchstaben und aus dem edit-Feld die Benutzereingabe. Diese ist als Wert der Eigenschaft String des edit-Feldes verfügbar, das kann man notfalls mit dem Property Editor nachprüfen.

   % Callback-Routine zur Benutzeroberflaeche in A1
   function Parwert(arg)
   Handle = findobj('Tag','Eingabe');
   Wert   = str2num(get(Handle,'String'))
   switch arg
   case 'm'
      m = Wert;
   case 'c'
      c = Wert;
   case 'k'
      k = Wert;
   end
Mit findobj wird das Handle des Kontroll-Elementes gesucht, dessen Tag den Wert Eingabe hat.
Mit get wird der Wert der Eigenschaft string des Kontrollelementes abgefragt, das durch den Wert von Handle identifiziert wird. Da dieser Wert als Zeichenkette übergeben wird, aber als numerisches Datum weiterverwendet werden soll, muss er mit str2num gewandelt werden.
Der Rest des Skriptes enthält eine einfache Fallunterscheidung.