ich hätte gern eine zeitgesteuerte Schleife (While oder for ) kreiert?
Der Code in der Schleife soll z.B maximal in 5 sekunden ausgeführt auch wenn die Ausführungszeit kleiner sein kann.
Die schleife soll einmal in 5 sekunden ausgeführt und dann wieder und wieder ( je 5 sekunden)
T= 5 sek. ( wie könnte ich eine Konstate T sekunden zuweisen ??)
Danke dir
Daruaf bin ich gekommen , koenntes du mir ein kleines Beispiel erstellen , dass eine schleife while schleife innerhalb von Zeit T= 5 sekunden ausüführen lassen.
Die schleife soll einmal in 5 sekunden ausgeführt und dann wieder und wieder ( je 5 sekunden)
Das klingt nach einer unendlicher Schleife, ist gefährlich wie willst du es stoppen?
Ich weiß nicht was du von einem Beispiel erwartest, hier
starte ich 2 Timer:
Erster Timer wird alle 5 Sekunden ausgeführt, while-Schleife läuft auch nur 5 Sekunden
Zweiter Timer startet in 30 Sekunden und stoppt die timer
Code:
function create_timer()
t = timer('TimerFcn',@start_timer,...
'Period',5,...
'ExecutionMode','fixedSpacing',...
'ObjectVisibility','off');
t2 = timer();
set(t2,'TimerFcn',{@stop_timer,t},'StartDelay',30)
start(t)
start(t2)
Danke, dein Beispiel hat mir etwas geholfen, jedoch in meinem Fall kann ich es nicht so einsetzen wie ich möchte!
Die Idee ist folgendes :
Ich möchte einen Zeiger auf Kompass durch eine Schleife drehen lassen. Dies geschieht problemlos. Die rechenzeit der Schleife ist vielleicht ein Bruchteil einer sekunde. Nun bei einem anderen PC, das langsamer funktioniert oder beim parallel-öffnen eines anderen Programms kann die Drehungdeszeiger ruckeln , darum möchte ich eine Zeitgesteuerte Schleife machen, welche ich durch einen Knopf im GUI wieder stoppen kann. Die Schleife soll innerhalb von einer bestimmten Zeit ausgeführt und zwar als Maximalzeit , auch wenn die eigentliche Rechenzeit viel kleiner sein kann. T ist also die Zeit in der die Schleife einmal ausgeführt wird. Die Drehung des zeigers kann mittels der Frequenz f schneller oder langsammer laufen.
Also ein Beispiel-Code ist wie Folgt;
Code:
compass(0) % Eine zweite Axes erzeugen, die über das Tacho-Bild gelegt wird axes('units',get(gca,'units'),'position',get(gca,'position'),'color','none','visible','off') axis([-22-22])
U1 = line(NaN,NaN,'linewidth',3,'Color','r');
f=1;
w=2*pi*f;
wenn ich ein bestimmten button klicke und die Zeit T und die Frqequenz eingegeben habe soll der zeiger drehen.
so beispiel als ob im GU:
frequenz f= xxxx % ich gebe zB. 50 hz.
Schleifenzeit T= xxxx/ ich gebe z.B 100 mikrosekunden ein (quasi 10 Bilder pro sekunde)
die programierte funktion wird demsentsprechend gezeigt.
klicke auch auf ein Radiobutton dann fängt die Zeitschleife zu laufen. Sie Stoppt nur wenn ich das Radiobutton nochmal klicke (quasie value=0)
Dies alles funktioniert bis auf die zeitgesteurte Schleife ...
Ich hoffe ich könnte dir die Idee richtig vermitteln
danke
figure() compass(0) % Eine zweite Axes erzeugen, die über das Tacho-Bild gelegt wird axes('units',get(gca,'units'),'position',get(gca,'position'),'color','none','visible','off') axis([-22-22])
U1 = line(NaN,NaN,'linewidth',3,'Color','r');
f = 0.5;
w = 2*pi*f;
T = 0.01;
Danke , ich habs probiert , es funktioniert gut .
Laut deinem Code ist T= 0.01
Sind das 0.01 sekunden ? ich meine wirkliche sekunden ?
die für T zugewiesene Zahl muss wirkliche sekunden sein .
Zudem hast du die schleife mit if gestoppt. ich könnte es so übernehmen dass es break macht wenn ich den Radiobutton in meinem GUI drücke.
fraglich nur noch ob die zugewiesene zahl zu T wirkliche sekunden ist ?
Danke , ich habs probiert , es funktioniert gut .
Laut deinem Code ist T= 0.01
Sind das 0.01 sekunden ? ich meine wirkliche sekunden ?
die für T zugewiesene Zahl muss wirkliche sekunden sein .
fraglich nur noch ob die zugewiesene zahl zu T wirkliche sekunden ist ?
Ja, das sind wirklich 0.01 Sekunden, solange wird pausiert.
Zitat:
Zudem hast du die schleife mit if gestoppt. ich könnte es so übernehmen dass es break macht wenn ich den Radiobutton in meinem GUI drücke.
wenn das Programm bei einem anderen Rechner läuft und/ oder wenn ein parallprogramm geöffnet wird dann pausiert somit die schleife trotzdem.
das führt mich zu meiner hoffe ich letzten Frage
Kann die schleifenzeit ohne Pause kreiert werden ?
Was ich gern hätte ist nur dass die maximal T für schleife , auch wenn der Schleifeencode in weniger als T berechnet werden kann.
Etwa so wie eine zeitgesteurte Schleife bei LABVIW (Time_Loop)
D. h. die Schleife soll maximal in dieser Zeit 1 mal laufen u. s. w. , auch wenn der code in einer kürzeren Zeit läuft , was abhängig vom Programm oder PC sein kann.
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.