Verfasst am: 10.12.2010, 12:14
Titel: Einzlene Werte über GUI Button in .m files ändern
Hallo,
habe ein Programm für eine Waermeberechnung vorliegen. Mein .run file greift auf verschiedene .m files zu, in welchen verschiedene Werte als Variablen deklariert sind.
Kann ich ein GUI so schreiben dass ich einen Wert in einem .m file darüber ändern kann. Habe mir ein "edit text" Feld überlegt.
kann ich dann nicht über get.handles(variable1) oder ähnlich vorgehen, die zu ändernde Variable aussuchen und dann über set.handles überschreiben?
Hallo joggel,
also ich bin mir nicht sicher, aber ich glaube nicht, dass du den hartcodierten Wert einer Variablen im Quellcode mit get.handles(variable1) oder ähnlichem verändern kannst.
Dazu müsstest du das m-File einlesen und dann über
Hallo _Peter_:
vielen dank für deinen Tip. Bin jedoch Matlab Nueling und würde daher gerne wissen wie genau ich ein m file einlese, die variable ändere und wieder in ein m file packe.
Habe folgende files:
> waerme_dat.m - enthält viele variablen wie z.B der masse m
> waerme_P.m - enthält die Leistungsdaten
> waerme_dgl.m - Differentialgleichungen
> waerme_run.m - hier läuft der eig. ode23 solver ab welcher wiederum auf _dat _dgl und _p zugreift.
Meine Aufgabe ist nun eine GUI Maske zu erstellen in dereinzelene Werte in waerme_P.m und waerme_dat.m geändert werden können. Die warme_run.m Rechnung soll dann über einen Run Button gestartet werden.
Wie könnte ich hier generell vorgehen. Der Befehl assignin und globale Variable sind nach forums und google recherche aufgekommen.
ich habe ähnliches vor. Ich habe einen Steuer-File.m. Über diesen Steuerfile rufe ich andere .m- Files auf. Inden diversen .m- Files sowie im Steuerfile sollten vor beginn der Simulation einige Einstellungen vom Benutzer vorgenommen werden um nur die gewünschte Simulation auszuführen.
Bei den Änderungen handelt es sich z.B. um Änderungen von Schleifendurchlaufanzahl,die größe eines Vektors oder welche .m- Files aufgerufen werden sollen.
TS = 0.0005; % Sample Time wichtig für den file plotfreq_2_massen.m % fend=60; % Endwert der Sweepanregung.Um Achsenskallierung der Plotfiles schneller zu variieren % z=0;
for l = 1:length(mr_) %Automatische Variation der ungefederten Radmasse mr
mr = mr_(l) ; % Vector der ungefederten Masse
%-------------------------Anpassung der Parameter------------------
% ca=(((2*pi*fer)^2)*mr)-cr; % angepasste Federsteifigkeit des % cr=(wer^2*mr)-ca; % angepasste Federsteifigkeit des Reifens % kr=(2*(ca+cr)*Drr)/wer; % Berechnung Reifendämpfung über angenommenes Teildämpfungsmaß des Reifens [-]
fertest=(sqrt((ca+cr)/mr))/(2*pi); % Eigenfrequenz Reifen
featest=(sqrt(((ca*cr)/(ca+cr))/ma))/(2*pi); % Eigenfrequenz Aufbau wird aus Genauigkeitsgründen mit ceff=((ca*cr)/(ca+cr)) berechnet % da sonst die % Frequenz um mehrere % Herz abweichen kann
%------------------------Aufruf des Simulationsmodells-------------
sim('zweimassenschwinger_aktuell'); %Simulinkmodell wird aufgerufen und simuliert
%------------Zuweisung der Structur-Werte zu einer Masse-----------
eval([teilergebnis1 ' = x(l)']);clear x(l); %weise erg_...den aktuellen Inhalt von Struct x zu
eval(['save ' fname '.mat' teilergebnis1]); %Ergebnisse werden in ein Matfile gespeichert
also dies geht z.B. prinzipiell so (bitte verzichte auf assignin oder globale Variablen, Gruende hierfuer-->siehe Posts von Jan S):
Wir wollen den Wert der Variablen P ueber ein Edit Feld aendern und anschliessend die Berechnung mit Hilfe eines Pushbutton starten, wobei die aufzurufende Funktion, nennen wir sie "Summe", mit dem neuen Wert der Variable P gestartet werden soll. Die function Summe rechnet lediglich P+P und gibt das Ergebnis zurueck.
Code:
function[output] = Summe(datain)
output = datain+datain; % wenn wir die function mit P aufrufen, dann waere es output = Wert von P + Wert von P
% Creation function deines GUIS
handles.P = 0; % Initialisieung der Variablen P
% Callback des Buttons
handles.P = str2double(get(handles.edit1,'String')); % edit1 ist der tag des Edit Feldes, wo der Wert der Variablen P eingegeben wird. Hier wird somit handles.P mit dem Wert aus dem Edit Feldes aktualisiert.
[result] = Summe(P); % Aufruf der function Summe mit dem aktualisierten Wert der Variable P und Rueckgabe des Ergebnisses als Variable "result"
guidata(hObject,handles); % dieser Befehl speichert den neuen Wert von handles.P in der handlesstruktur des GUIs == Aktualisierung der handles Struktur des GUIs
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.