Technische Artikel

Tipps and Tricks - Vereinfachung von Messungen und Timer- Callbacks mit verschachtelten Funktionen

Von Michelle Hirsch, MathWorks


Um in MATLAB eine automatisch ablaufende Test- oder Messanwendung mit Hilfe der Data Acquisition, Instrument Control oder Image Acquisition Toolbox bzw. mit eingebauten Timer- und Serial Port-Objekten aufzubauen, schreibt man am besten Callback-Funktionen für diejenigen Programmteile, die ständig ausgeführt werden sollen. Auf diese Weise laufen die so erzeugten Objekte mit optimierter Leistung unabhängig vom MATLAB-Hauptprogramm, und MATLAB steht für andere Aufgaben zur Verfügung.

Beim Programmieren von Callback-Funktionen für derartige Objekte muss man sicherstellen, dass mehrere Funktionen auf die Daten zugreifen können. Die mit MATLAB 7 eingeführten verschachtelten Funktionen erleichtern das Schreiben von Programmcode und verbessern dessen Lesbarkeit und Wartungsfreundlichkeit. Außerdem können verschachtelte Funktionen die Effizienz des Codes erhöhen, weil sich dann mehrere Funktionen die Daten teilen können, ohne diese mehrfach kopieren zu müssen.

Der abgebildete Programmcode zeigt beispielhaft, wie man verschachtelte Funktionen zur Programmierung von Objekt-Callbacks einsetzt. Ein Timer-Objekt zeigt ein Bild an, das zehn Sekunden lang jede Sekunde etwas heller wird. Bei jedem Timer-Event (TimerFcn) wird das Bild skaliert und erneut angezeigt, wozu sowohl die Hauptfunktion als auch die Callback-Funktion auf die Bilddaten zugreifen müssen. Ohne verschachtelte Funktionen wird dies in der Regel erreicht, indem man die Daten im UserData-Feld des Timer-Objekts ablegt. Dadurch geht jedoch Leistung verloren und der Code wird unübersichtlich. Bei Verwendung von verschachtelten Funktionen teilen sich beide Funktionen die Daten automatisch.

Man sieht, wie einfach sich MyTimerFcn als verschachtelte Funktion umsetzen lässt. Für besonders Leistungshungrige sei angemerkt, dass keine zusätzliche Kopie von Im angelegt werden muss, damit die Funktionen gemeinsam auf die Bilddaten zugreifen können.

Zwei weitere Beispiele für diese Methode sind im File Exchange auf MATLAB Central zu finden. Eines davon ist ein einfacher Aktienticker, der über Internetdienste um 20 Minuten zeitversetzte Aktienkurse herunterlädt. Das andere Beispiel ist eine Messanwendung, die Daten von einer Soundkarte live als Signalverlauf (Zeitdomäne), Frequenzschätzung (FFT) und Wasserfall (Zeit und Frequenz) anzeigt.

function nested_callback_ex
% Create and configure timer object
t = timer('ExecutionMode','fixedRate', ... % Run continuously
'TasksToExecute',10, ... % Runs 10 times
'TimerFcn',@MyTimerFcn); % Run MyTimerFcn ateach timer event
% Load and display a grayscale image
Im = imread('street1.jpg');imagesc(Im);
% Start the timer
start(t)
function MyTimerFcn(obj,event)
% Scale and display image
Im = Im*1.1; % Make brighter
imagesc(Im) % Display updated image
end
end % function nested_callback_ex

Neue Funktionalität im Online-Support

Statusverfolgung von Supportanfragen

Mit dem neuen System zur Verfolgung des Status einer Supportanfrage können Sie eine Anfrage eingeben und nachverfolgen, mit dem Supportpersonal von The MathWorks korrespondieren, Dateien und Dokumente anhängen und sich per E-Mail über den aktuellen Stand der Anfrage informieren lassen.

Online Bug-Reports

Im Bug Report-System ist eine regelmäßig aktualisierte Liste bekannter und kürzlich beseitigter Probleme mit Software von The MathWorks ab dem Release 14 mit SP2 zu finden. Entsprechenden Anregungen folgend erhalten unsere Kunden damit einen besseren Überblick über bekannte Bugs in sämtlichen Produkten und eine einfache Möglichkeit, neue Bugs mitzuteilen.

Um Supportanfragen zu verfolgen oder die Bug Reports einzusehen, müssen Sie mit Namen und Passwort in Ihrem MathWorks-Account (www.mathworks.com/mwaccount) eingeloggt sein. Die Einrichtung eines MathWorks-Accounts ist kostenlos und nicht an eine Lizenz für MathWorks-Produkte gebunden.

Veröffentlicht 2006