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

Schleife zeitgesteuert?!

 

Boyya
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2010, 15:29     Titel: Schleife zeitgesteuert?!
  Antworten mit Zitat      
Hallo,

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 ??)

so , Ich bitte um eure Hilfe

Danke im Voraus
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 22.04.2010, 15:33     Titel:
  Antworten mit Zitat      
Hallo

Schaue dir den TimerFcn an:
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Boyya
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2010, 09:09     Titel:
  Antworten mit Zitat      
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.

Super Dank nochmal
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.04.2010, 10:56     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

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)

function start_timer(t,event,varargin)
s=tic();
while toc(s) <= 5
   disp([num2str(toc(s)),': Sekunden'])
end


function stop_timer(t2,event,t,varargin)
disp('Es sind 30 Sekunden vergangen, timer werden gestoppt und gelöscht!!!')
stop(t);
delete(t);
stop(t2);
delete(t2)

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Boyya
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2010, 13:01     Titel:
  Antworten mit Zitat      
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([-2 2 -2 2])
U1 = line(NaN,NaN,'linewidth',3,'Color','r');
f=1;
w=2*pi*f;


 s= tic;
 T=toc(s);
phi = pi/180;
while  T<=0.05
   
    phi=phi+ w*T;
 
    x1cos= 1*cos(phi);
    x1sin= 1*sin(phi);
set(U1,'xdata',[0 x1cos],'ydata',[0 x1sin]);

drawnow

end
 end  
Private Nachricht senden Benutzer-Profile anzeigen
 
Boyya
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2010, 13:09     Titel:
  Antworten mit Zitat      
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 ...Sad

Ich hoffe ich könnte dir die Idee richtig vermitteln
danke
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.04.2010, 14:57     Titel:
  Antworten mit Zitat      
Hallo

du meinst so?
Code:

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([-2 2 -2 2])
U1 = line(NaN,NaN,'linewidth',3,'Color','r');
f = 0.5;
w = 2*pi*f;
T = 0.01;

s= tic;

phi = pi/180;
while  true
 
   phi=phi+ w*T;
   
   x1cos= 1*cos(phi);
   x1sin= 1*sin(phi);  
   
   set(U1,'xdata',[0 x1cos],'ydata',[0 x1sin]);
   pause(T)
   t = toc(s);
   if  t >= 5
      break
   end
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Boyya
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2010, 16:13     Titel:
  Antworten mit Zitat      
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 dir Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.04.2010, 16:46     Titel:
  Antworten mit Zitat      
Boyya hat Folgendes geschrieben:
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.

Ja das kannst du z.B so machen

Code:

while  true    
   if  get(handles.radiobutton,'Value')==0
      break
   end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Boyya
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2010, 17:09     Titel:
  Antworten mit Zitat      
Danke

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 Embarassed

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.

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 27.04.2010, 18:41     Titel:
  Antworten mit Zitat      
Pause ist notwendig, um Änderungen in der Axes zu zeichnen

Also ehrlich mit LabView kenne ich mich nicht aus,
und verstehe nicht was du meinst. Vielleicht ist Simulink hier besser
Private Nachricht senden Benutzer-Profile anzeigen
 
Boyya
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 17.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2010, 19:23     Titel:
  Antworten mit Zitat      
DU hast mir trotzdem geholfen

VIelen Dank Smile
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.