Beispiel - GUI

In der Fabrik soll nun eine Maschine über eine GUI gesteuert werden. Dazu wird zunächst das Fenster (figure) für die GUI entworfen.

Das Softwaredesignteam hat sich überlegt, dass es zwei Schalter geben soll, einen zum Anschalten der Maschine, einen zum Ausschalten. Außerdem ist ein Textfeld gewünscht, dass anzeigt, ob die Maschine läuft oder nicht.

 

Zunächst einmal sieht die GUI also so aus:
Skript
function MaschinenGUI

figureHandle = figure('name','MaschinenGUI',...
'position',[(1024/2)-125 (768/2)-125 250 250],...
'numbertitle','off','MenuBar','none');
%Um die GUI übersichtlich zu halten sind die Menüleiste und die
%Titelnummerierung deaktviert. Die Positionierung ist für eine
%Bildschirmauflösung von 1024x768 Pixel optimiert.
editHandle = uicontrol('Style','edit',...
'Position',[(250/2)-100 110 200 30],...
'Tag','Edit');
anButtonHandle= uicontrol('Style','pushbutton','String',...
'Maschine an','Position',[(250/2)-100 150 100 50],...
'Tag','Button')
%Der Handle vom Anschalt-Button
ausButtonHandle= uicontrol('Style','pushbutton','String',...
'Maschine aus','Position',[(250/2) 150 100 50],...
'Tag','Button')
%Der Handle vom Ausschalt-Button
Alle Anforderungen an das Aussehen sind damit erstmal erfüllt.

 

Da die GUI so natürlich funktionslos ist, fügen wir in die beiden Button-Handle noch Callback-Properties ein. Die sollen dann eine Funktion aufrufen, die, je nachdem ob die Maschine ein-oder ausgeschaltet wird einen Text ins Textfeld einträgt. Die Funktion heißt hier maschine, und sie bekommt eine für eine Variable 1 oder 0 übergeben.
anButtonHandle= uicontrol('Style','pushbutton','String',...
'Maschine an','Position',[(250/2)-100 150 100 50],...
'Tag','Button','Callback','maschine(1)')
%Der Handle vom Anschalt-Button
ausButtonHandle= uicontrol('Style','pushbutton','String',...
'Maschine aus','Position',[(250/2) 150 100 50],...
'Tag','Button','Callback','maschine(0)')
%Der Handle vom Ausschalt-Button
Jetzt muss diese Callback-Funktion maschine noch erstellt werden:
Skript
function maschine(status)

switch status
case 0
set(editHandle,'String','Produktion ist gestoppt!')
case 1
set(editHandle,'String','Produktion läuft!')
end
%"switch" überprüft den Wert von der Übergabevariable "status" und
%reagiert entsprechend auf die Fälle ("case").

end

 

Das Troubleshooting-Ressort hat nach Kontrolle der GUI noch zwei Fehler entdeckt.

Die Veränderung der Variablen editHandle in der maschine-Funktion hat leider gar keine Auswirkungen auf die GUI! Sollen mehrere Programme auf ein und dieselbe Variable zugreifen, muss diese global gesetzt werden. Also einmal in die GUI-Funktion, und einmal in die Maschinen-Funktion: global editHandle Außerdem steht nach dem Öffnen der GUI, also dem Ausführen des GUI-Skripts, noch gar nichts im Textfeld! Dem kann entgegengewirkt werden, indem man beim Aufrufen der GUI die „maschine“-Funktion mit 0 ausführt. maschine(0); Nun funktioniert alles und die graphische Maschinen-Steuerung kann in Betrieb genommen werden.

 

Sie können die fertigen Skripte hier herunterladen:

MaschinenGUI.m

maschine.m