Verfasst am: 30.11.2010, 19:28
Titel: Warten auf das ende einer Simulation
Hallo zusammen,
ich hab folgendes Problem:
ich hab ne GUI aufgebaut,und innerhalb diese GUI ist ein PUSHBUTTON,der ein Simulink modell aufruft,und zwar in einer for schleife,sprich z.B. das modell wird 3 oder 4 oder n mal aufgerufen,und dabei lese ich die gespeicherte in to workspace variable Z.
das problem,ich krieg für Z keine werte,weil ich glaube die simulation muss zu ende durchgeführt werden,und die for schleife schneller ist.
weiss jemand wie ich dann halt auf das simulationsende warten kann,d.h. bis die zeit abgelaufen ist? müsste eigentlich so was ähnliches wie uiwait.
es wäre sehr sehr nett von euch,wenn ihr mir dabei helfen könntet.
ich habe zwar (so gut wie) keine Erfahrung mit Simulink, mir fallen aber gerade zwei mögliche Lösungen zu Deinem Problem ein.
1. Wenn Du weißt wie lange Deine Berechnung ungefähr dauert (kann man mit tic und toc rausfinden), kannst Du an der betreffenden Stelle einfach eine pause von x Sekunden einfügen.
2. Die Berechnung in SL gibt eine Variable im WS aus Z. Nachdem Du die Berechnung aufgerufen hast, würde ich eine Abfrage im folgenden Format einfügen:
hab bei Lsg 2. nur halb gedacht. Du musst Die Variable Z bereits im WS deklarieren, sonst klappt das mit evalin nicht solange die Variable nicht im WS ist.
Also, bevor Du die SL Berechnung startest einfach Z als leeren Vektor in den WS schreiben:
danke erst mal für die schnelle antwort.
ich hab versucht,das zu machen so wie du es beschrieben hast,aber klappt leider nicht zu ganz,da krieg ich noch fehler und keine werte in mein variable.
ich schick daher die funktion,die ich in GUI geschrieben habe,vielleicht kannst du mir dann genauer schreiben,wie und wo ich das einbauen sollte.
Code:
% FUNKTION:
function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global Z
% assignin('base','Z',[]);???????????
if F<1
zeitende=(2*pi)/F;
set_param('Dynamic_Signal_Analyzer2_GUI','StartTime','0','StopTime',num2str(zeitende));
else
zeitende=(50*2*pi)/F;
set_param('Dynamic_Signal_Analyzer2_GUI','StartTime','0','StopTime',num2str(zeitende));
end
wie siehts denn mit der Pausenoption aus????
(war nur Spaß )
Kannst Du mal die Fehlermeldung posten, damit man mal einen Anhaltspunkt hat.
Eigentlich müsste das von der Syntax passen, auch die Deklaration von Z als globale Variable macht eigentlich nix, obwohl das eigentlich nicht nötig ist.
Ich gehe davon aus, dass Du das unkommentiert verwendest.
Ich habe aber noch so eine Ahnung:
Simulink ist nicht ganz meine Welt, wird das von Matlab wirklich als "externe" Anwendung laufen gelassen. Mir fehlt Dein SL Modell um das zu verifizieren. Hast Du das mal im Debugger laufen lassen, springt der wirklich in die nächste Zeile ohne das SL fertig ist?
Wenn er einfach weiter macht, vergiss den Gedankengang und denk bitte an die Fehlermeldungen...
danke erst mal,
ich werde zunächst mal,das im debugger laufen lassen.
sollte es aber sein,dass ich doch nicht weiter komme,werde ich noch mal das problem genauer posten lassen.
Das könntest Du dann in eine WHILE-Schleife abfragen und per PAUSE(1) z.B. eine Sekund Pause zwischen den Abfragen lassen.
Ausserdem müsste man ein Simulink-Model doch auch so aufrufen können, dass man auf das Ende der Simulation warten kann. Funktioniert das mit dem SIM-Befehl? Ich könnte das zwar in der Dokumentation nachlesen, aber das könntest Du ja auch selbst.
die abfrage funktioniert leider nicht,
ich krieg folgender fehler angezeigt:
??? Error using ==> mdltest>pushbutton1_Callback at 282
block_diagram does not have a parameter named 'isRunning'.
anscheinend ist isRunning falsch!!!
Maddin
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.12.2010, 16:56
Titel:
Hi, manchmal kann man sich schon wundern. Das war nur ein Beispiel wie der Befehl heißen KÖNNTE. Wenn du kurz in die Dokumentation geschaut hättest wäre dir aufgefallen, dass es so gehen könnte:
"running" statt "isRunning" - ich lag aber schon ganz schön nah dran. Manchmal mekrt man, dass MathWorks sich bei den Funktionen etwas gedacht hat.
Zitat:
Hab allerdings selber keine Ahnung von Simulink und weiß somit nicht ob du dein Problem so lösen kannst.
Was wir zwei Simulink-Laien doch so mit dem Lesen der Dokumentation alles beantworten können! Vielleicht ist das ja eine Ermunterung an andere auch mal die Hilfe-Texte zu lesen ;-)
Gruß, Jan
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.