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

while break

 

Eric

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2009, 20:33     Titel: while break
  Antworten mit Zitat      
Hallo, hab mir zur ansteuerung eines messgerätes eine dll programmiert und in matlab eingebunden, jetzt will ich eine funktion read_data in einer endlosschleife aufrufen, ich hab dann noch eine gui mit zwei buttons erstellt, messung start/stop . ich will sozusagen in der while schleife noch eine if anweisung realiesieren. Bsp.:

Code:

int i=0;
while(1)

if(i==1)
break
end


end

 

i wird auf 1 gesetzt, wenn button Messung stop gedrückt wurde. Leider funktioniert das nich so ganz. weiss einer wie man das Lösen könnte.[/code]


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2009, 10:39     Titel:
  Antworten mit Zitat      
hab es jetzt gelöst indem ich in meiner bei messung beenden den socket schliesse und dann bekomme ich 0 zurück in meiner readdata funktion.
musste aber damit ich auf der gui den messung beenden button drücken kann eine pause in meiner whileschleife einbauen.

dazu hätte ich noch ne frage bis wieviel sekunden wird die pause finktion unterstützt, hab einfach mal pause(0.0000000000000000001) eingegeben. es geht zwar aber nun weiss ich nicht ob pause wirklich nur so kurz wartet oder ob ein standardwert gesetzt wird, so wie 0.01, wenn man einen zu kleinen wert übergeben hat. hab leider in der hilfe keine genaue aussage gefunden
 
Diddy
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 02.08.07
Wohnort: ---
Version: 2009a
     Beitrag Verfasst am: 14.07.2009, 14:34     Titel:
  Antworten mit Zitat      
Hallo!

Also ich löse das immer so:

Code:

while get(handles.Stopbutton,'value')==0
% mache etwas
end
 


Also einfach die Abfrage, ob der Button gedrückt wurde, wenn ja, dann aus der Schleife raus gehen. Das imo schöner als dieses break.

Gruß,
Christian
Private Nachricht senden Benutzer-Profile anzeigen
 
Diddy
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 02.08.07
Wohnort: ---
Version: 2009a
     Beitrag Verfasst am: 14.07.2009, 14:40     Titel:
  Antworten mit Zitat      
Anonymous hat Folgendes geschrieben:

dazu hätte ich noch ne frage bis wieviel sekunden wird die pause finktion unterstützt, hab einfach mal pause(0.0000000000000000001) eingegeben. es geht zwar aber nun weiss ich nicht ob pause wirklich nur so kurz wartet oder ob ein standardwert gesetzt wird, so wie 0.01, wenn man einen zu kleinen wert übergeben hat. hab leider in der hilfe keine genaue aussage gefunden


also die Pausenzeit kann nicht minimal gestzt werden, allein schon, weil der Aufruf der Funktion "pause" eine gewisse Zeit braucht. Ich denke aber, dass das Minimum bei 10ms liegt. Das ist aber bestimmt wieder PC-Abhängig.

Probier doch mal das hier:
Code:

tic;pause(1e-7);toc
 

Das tic-toc braucht zwar auch seine Zeit, aber das sind bei mir 1,3e-5 Sekunden (und ich hab nicht den schnellsten PC)
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 14.07.2009, 16:31     Titel:
  Antworten mit Zitat      
Hallo,

anstatt pause() kann man auch einfach drawnow() verwenden. Es macht das selbe: es unterbricht den aktuellen code, um die Event-Queue abzuarbeiten, damit (wie bei Dir) der Button-Callback auch ausgeführt wird ...

Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2009, 21:44     Titel:
  Antworten mit Zitat      
gut danke, ich werde die verschiedenen Möglichkeiten mal ausprobieren. das mit dem while get..... hatte ich schon probiert, hat bei mir leider nicht funktioniert, der hat einfach die Schleife immer weiter abgearbeitet.
drawnow klingt ganz gut.

also dann, en schönen Abend noch
 
Diddy
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 02.08.07
Wohnort: ---
Version: 2009a
     Beitrag Verfasst am: 15.07.2009, 08:31     Titel:
  Antworten mit Zitat      
Hi,
Anonymous hat Folgendes geschrieben:
gut danke, ich werde die verschiedenen Möglichkeiten mal ausprobieren. das mit dem while get..... hatte ich schon probiert, hat bei mir leider nicht funktioniert, der hat einfach die Schleife immer weiter abgearbeitet.
drawnow klingt ganz gut.


Ähm ja, hatte ich vergessen zu sagen: man braucht eine kurze pause, damit die abfrage mit get funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen
 
HasanK
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 23.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2009, 10:45     Titel:
  Antworten mit Zitat      
Hallo zusammen,

habe ein ähnliches Problem und stelle mich wahrscheinlich ziemlich blöd an.

anbei poste ich die vereinfachte Darstellung:


function start_Callback(hObject, eventdata, handles)
j1=1

while j1<2;

account=account+1

function stop_Callback(hObject, eventdata, handles)
j1=2;
end


ich möchte ganz einfach mit einem Start-Button eine Prozedur starten (am besten eine Endlosschleife)
und anschließend diese Prozedur mit dem Betätigen eines Stop Buttons beenden.
Den Vorschlag von Diddy habe ich erfolglos versucht.


Vielen Dank im Voraus.

Hasan
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.08.2009, 11:11     Titel:
  Antworten mit Zitat      
Hallo,
das ist wirklich sehr vereinfacht,
zu was gehört denn end?

Die Variable j1, die du als Stopper benutzt,
ist eine Lokale Variable.
Es existiert nur in der Funktion, wo es deklariert wurde, und nur diese Funktion kennt sie.
Sozusagen j1 in Start-Funktion ist nicht gleich j1 in Stop-Funktion.

Du muss globale variablen benutzen, wie z.b. handles



Nach Diddy's Vorschlag könnte es so aussehen
Code:



function start_Callback(hObject, eventdata, handles)
% stopper zurücksetzen
set(handles.stop,'value',0)
%
% handle von stop-button benutzen
while get(handles.stop,'value')==0

account=account+1

end


function stop_Callback(hObject, eventdata, handles)
%
% handle von stop-button benutzen
set(handles.stop,'value',1)


 
Private Nachricht senden Benutzer-Profile anzeigen
 
HasanK
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 23.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2009, 12:11     Titel:
  Antworten mit Zitat      
Vielen Dank für deine schnelle Antwort Denny,
aber leider hat das nicht funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Diddy
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 61
Anmeldedatum: 02.08.07
Wohnort: ---
Version: 2009a
     Beitrag Verfasst am: 13.08.2009, 12:45     Titel:
  Antworten mit Zitat      
Hi,

hast du eine pause eingebaut? Brauch nur ganz kurz zu sein. Oder drawnow, das geht auch.

Gruß,
Christian
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.