Verfasst am: 09.08.2010, 18:02
Titel: priorität der callback Funktion festlegen
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.
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.
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?
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.).
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?
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.
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.