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

priorität der callback Funktion festlegen

 

Snowdog
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2010, 18:02     Titel: priorität der callback Funktion festlegen
  Antworten mit Zitat      
Hallo,

ich habe ein Problem und zwar habe ich in meinem GUI drei Taster, der erste startet einen Zyklus und der zweite unterbricht sie. Wird der Zyklus gestartet wird jede Stunde ein Bild geladen analysiert und daraus berechnete Werte in eine uitable eingetragen. Anschließend wird der Zyklus wieder von vorne gestartet. Dies ist also ein unendlich langer Vorgang solange ich nicht den 2. Taster betätige.

Soweit lauft auch alles.

Nun habe ich aber auch noch einen dritten Taster, der mir zu einem von mir gewählten Zeitpunkt die ermittelten Daten in ein anderes Programm tranferieren soll.

Wie schaffe ich es nun das, obwohl ich eine Funktion in einem ständigen Zyklus abarbeite trotzdem, sobald ich die dritte Taste drücke, meine Daten übertragen werden und der Zyklus entweder nicht unterbrochen wird oder nach der Datenübertragung weiter läuft?

Habe schon die Option Interruptible gefunden, die mir aber noch nicht wirklich weiterhilft.

Danke schonmal für die Hilfe
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: 09.08.2010, 21:00     Titel:
  Antworten mit Zitat      
Hallo Snowdog,

wie sieht denn der unendliche Zyklus in Matlab aus?
Wenn Du einen Timer verwendest, der jede Stunde ein Unterprogramm aktiviert, kann der 3. Taster ohne jede Schwierigkeit die Daten verschicken. Der Timer-Aufruf sollte dabei zwar warscheinlich nicht unterbrochen werden (BusyMode = 'queue'), damit nicht halb fertige Daten verschoben werden. Aber das sollte eigentlich leicht gehen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2010, 22:11     Titel:
  Antworten mit Zitat      
Danke für die Antwort

Ich habe auch bemerkt das es kar kein Problem ist, da obwohl die Zykluszeit, welche ich über eine while schleife und pause (n) realisiert habe, abläuft auch andere Callback-Befehle wie beim Drücken der 3. Taste abgearbeitet werden.

Weiß du zufällig, ob ich einen Callback, welcher normalerweise durch das Drücken der Taste aufgerufen wird, auch noch über andere weise auslösen kann, z.B. über eine Variable, welche ich setzen kann?

Gruß Snowdog
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: 09.08.2010, 23:15     Titel:
  Antworten mit Zitat      
Hallo Snowdog,

Durch das Setzen einer Variable läßt sich ein Callback nicht starten.
Aber Du kannst einfach die Callback Funktion manuell starten, oder?

Ein TIMER hätte gegenüber PAUSE ein paar Vroteile. Erstens blockiert Dir die Pause die Matlab Session. Zweitens ist die Timer-Steuerung besser zu steuern (Soll 1 Stunde Zeit zwischen den Calls der Funktion sein, oder 1 Stunde nachdem Ende des Calls der nächste Call folgen etc.).

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 19:01     Titel:
  Antworten mit Zitat      
Der Call soll jede Stunde erfolgen. Bis jetzt mache ich das mit einer Pause. Drücke ich den Taster, fängt die Zeit an zu laufen, eine Stunde Rückwärts (wird im GUI im Textfeld angezeigt). Ist sie abgelaufen wird der rest des Callbacks abgearbeitet.
Dann soll wieder die Zeit zurückgestellt werden und wieder von vorne Zählen.
Das ganze soll ohne manuelles starten weiterlaufen, solange ich es nicht mit einem zweiten Button unterbreche.

Ich kann das auch über einen Timer realisieren. weiß nur noch nicht wie genau. Könntest du mir ein paar Programmzeilen dazu schreiben?

Das würde mir sehr helfen.

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Snowdog
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2010, 08:35     Titel: Timer programierung im GUI
  Antworten mit Zitat      
Habe die Timer Funktion eingefügt

Nur macht sie nicht was ich möchte.

Hier die relevanten Teile meines Codes:


Code:

%Zeitfunktion
handles.timer = timer ('BusyMode','drop',...
                 'Name','Zeitanzeige',...
                 'Period',10.0,...        %wird nach Probephase auf 3600 gestellt
                 'Tag','timer',...
                 'TimerFcn',@timer_Callback);

guidata(handles.fh,handles);

function pushbutton_s1_Callback (hObject,eventdata)
        start(handles.timer);

guidata(handles.fh,handles);
end

function pushbutton_s2_Callback (hObject,eventdata)
         stop(handles.timer);

guidata(handles.fh,handles);
end

function timer_Callback (hObject,eventdata)
%hier steht der ausführbare Code
end

 


Leider wird der timer_Callback direkt nach dem Tastendruck vom s1 ausgeführt und nicht nach der Zeit die in Period angegeben ist. Weiter wird der timer_callback nicht unendlich oft ausgeführt, was aber meine Absicht ist solange niemand auf den Taster s2 drückt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Snowdog
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2010, 09:08     Titel:
  Antworten mit Zitat      
Oh großer Fehler meinerseits!!!

Es funktioniert alles.

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