Verfasst am: 17.03.2011, 20:58
Titel: Variablenübergabe bei Timer-Verwendung, waitfor()-Funktion
Liebe Leute,
ich habe ein Programm zum Positionieren und Auslesen einer Druckmesssonde geschrieben, welches aus einem GUI mittels Pushbutton gestartet wird. Die Sonde starte im Kernstrahl einer Düse, fährt auf x-Startposition, misst über den x-Querschnitt in mm-Schritten, nimmt an jedem Punkt 30 Werte auf, mittelt sie für jeden Punkt zu einem Wert, fährt nach Beendigung wieder in den Nullpunkt, danach weiter in die z-Startposition, misst über den z-Querschnitt wieder genauso, fährt in den Ausgangspunkt, entfernt sich entlang der y-Achse eine definierte Strecke von der Düse und macht das gleiche Spiel wieder von vorn. Nach jedem Gesamtdurchlauf i werden die Messwerte in eine Matrix "strahl_x" gespeichert. Die z-Komponente habe ich (hoffentlich vollständig) aus diesem Beispiel heraus genommen, um etwas mehr Übersicht zu schaffen. Hier der Code des Hauptprogramms
Code:
function button_messen_Callback(hObject, eventdata, handles)
% Bezug auf in OpeningFcn deklarierte serielle Schnittstelle global s
% Abgreifen der Eingabewerte für die Achsen aus GUI
messbereich_x = str2double(get(handles.messbereich_x, 'String'));
messbereich_y = str2double(get(handles.messbereich_y, 'String'));
% Figure erzeugen figure % Plotten der Messreihe plot(1:31, x_werte) % Schreiben der aktuellen Messreihen in vorbereitete Matrizen
strahl_x(i,:) = x_werte
% Löschen der aktuellen Messreihe clear x_werte
%% axiale Verschiebung der Sonde von der Düse weg
sendestring = String_an_GroTrav(num2str(160*schrittweite_y), 2);
fprintf(s,[sendestring 13]) pause(6) end
switch(event.Type) case 'StartFcn'
% Registering the Hardware Driver Adaptor
daqregister('C:/Programme/Keithley Instruments/DAQAdaptorforMATLAB/dtol.dll');
% Erstellt ein Analoges Input-Objekt mit 'dtol' als Adapter
ai = analoginput ('dtol');
% Zuordnen des Kanals 0 zum Analogen Input-Objekt
addchannel(ai, 0);
case 'TimerFcn'
% Anzahl bisheriger Timer-Durchläufe
n = T.TasksExecuted;
% Abtasten des Analogen Input-Objektes
sample(n) = getsample(ai);
% 30 Messwerte aufnehmen if n == 30
stop(T) end
case 'StopFcn'
% Mittelwert bilden
mean_sample = mean(sample);
set(findobj('Tag','edit_messen'), 'String',
sprintf('%.7f',mean_sample)) clear ai
clear sample
end
1. Wie kann ich den gemittelten Wert der 30 Messwerte direkt aus der Funktion "mittelwert" herausgeben und in strahl_x(n) speichern, ohne den Umweg über: Mittelwert in der TimerFcn bilden -> in GUI-Feld schreiben -> von dort den Wert ins Hauptmenü einlesen?
2. Wie kann ich es umgehen, in jeder timer-StartFcn erneut das analoge inputobjekt zu erstellen? Kann ich das im Hauptmenü als globale Variable definieren und hier wieder aufrufen? Scheinbar bereitet das Matlab irgendwann Probleme. Irgendwann kommt das ganze außer Takt und funktioniert nicht mehr. (Es muss daran liegen, dass während der längeren Positionierungen, der Code schon weiterläuft, weshalb ich da erstmal provisorisch diese unschönen Pausen eingebaut habe.) Die dann ausgegebene Fehlermeldung kann ich allerdings erst morgen posten. Ich verwende als ADC-Modul das KUSB3116 von Keithley.
3. Wie benutze ich die Funktion "waitfor(timerObj)", damit erst die Timer-Fcn beendet ist, bevor die Sonde weiterrückt? Woher kennt mein Hauptmenü das TimerObject? Hier habe ich die Variablenübergabe noch nicht verstanden. Kann ich hier einfach:
Ich danke euch für jegliche Hilfe und entschuldige mich für diese enormen Ausführungen.
Herzliche Grüße
pfeili
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.