WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Warten auf das ende einer Simulation

 

StudentET
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 09.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2010, 19:28     Titel: Warten auf das ende einer Simulation
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen


draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 30.11.2010, 20:31     Titel:
  Antworten mit Zitat      
Hallo,

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.
Code:


Ok das ist nicht elegant, aber evtl. funzt es ja.


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:

Code:

a=evalin('base','Z')

while isempty(a)
  a=evalin('base','Z')
end

 


Das könnte funktionieren.

MfG
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 30.11.2010, 20:37     Titel:
  Antworten mit Zitat      
Hallo ich nochmal,

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:

Code:

assignin('base','Z',[]);
 


So wird ein Schuh draus.

MfG
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
StudentET
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 09.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2010, 12:11     Titel:
  Antworten mit Zitat      
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',[]);???????????



fmin=str2double(get(handles.edit1,'String'));
fmax=str2double(get(handles.edit2,'String'));
fstart=10^fmin;
fstop=10^fmax;
anz=str2double(get(handles.edit3,'String'));
A=str2double(get(handles.edit4,'String'));
Offset=str2double(get(handles.edit5,'String'));

index=1;
freq=logspace(fmin,fmax,anz);


for x=freq      
   F=x;
   
   open_system('Dynamic_Signal_Analyzer2_GUI')
     
   set_param('Dynamic_Signal_Analyzer2_GUI/Sine Wave','Frequency',num2str(F));
   set_param('Dynamic_Signal_Analyzer2_GUI/Sine Wave','Bias',num2str(Offset));
   set_param('Dynamic_Signal_Analyzer2_GUI/Sine Wave','Amplitude',num2str(A));
   set_param('Dynamic_Signal_Analyzer2_GUI/DSA/Freq1/Sine Wave','Frequency',num2str(F));
   set_param('Dynamic_Signal_Analyzer2_GUI/DSA/Freq1/Cosine Wave','Frequency',num2str(F));
   set_param('Dynamic_Signal_Analyzer2_GUI/DSA/Freq2/Sine Wave','Frequency',num2str(F));
   set_param('Dynamic_Signal_Analyzer2_GUI/DSA/Freq2/Cosine Wave','Frequency',num2str(F));
   
 
   
   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
   
   
  set_param('Dynamic_Signal_Analyzer2_GUI','SimulationCommand','start');
   
 
 
   % a=evalin('base','Z')???????????

% while isempty(a) ???????
 % a=evalin('base','Z') ??????
% end ??????

   
   F
   
    [v]=20*log10(abs(a))
    [p]=(360*angle(a))/(2*pi)
   
    index=index+1;
       
end

freq;
v;
p;
 


wobei ich letztendlich v und p brauche(als vektoren).

es wäre noch mal sehr nett,wenn ich dazu hilfe bekomme.

bedanke mich noch mal

edit by denny: Es wäre nett, wenn du in Zukunft die Codeumgebung verwenden würdest. Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
draussen
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 90
Anmeldedatum: 26.11.10
Wohnort: DE
Version: 2010b,2020a
     Beitrag Verfasst am: 01.12.2010, 12:51     Titel:
  Antworten mit Zitat      
Hallo,

wie siehts denn mit der Pausenoption aus????
(war nur Spaß Very Happy)

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...

MfG
_________________

Der Einäugige ist unter den Blinden der König!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
StudentET
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 09.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2010, 13:27     Titel:
  Antworten mit Zitat      
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.

danke viel mal Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.12.2010, 15:22     Titel:
  Antworten mit Zitat      
Hallo StudentET,

Ich habe noch nicht mit Simulink gearbeitet. Aber ich nehme an, das es irgendwie logisch zu bedienen ist.
Wenn Du es so startest:
Code:
set_param('Dynamic_Signal_Analyzer2_GUI','SimulationCommand','start');

würde ich erwarten, dass man den aktuellen Status auch auslesen kann, z.B.:
Code:
get_param('Dynamic_Signal_Analyzer2_GUI', 'isRunning')

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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
StudentET
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 09.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 15:27     Titel:
  Antworten mit Zitat      
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!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddin

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2010, 16:56     Titel:
  Antworten mit Zitat      
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:
Code:
get_param('Dynamic_Signal_Analyzer2_GUI', 'SimulationMode','running');


Mehr zu den Parametern hier:

http://www.mathworks.com/help/toolb.....ulink/slref/f23-7515.html

Hab allerdings selber keine Ahnung von Simulink und weiß somit nicht ob du dein Problem so lösen kannst.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.12.2010, 21:33     Titel:
  Antworten mit Zitat      
Hallo Maddin,

"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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.