IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Simulink Discussion :

Un timer me rend fou. Est ce logique ?


Sujet :

Simulink

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Par défaut Un timer me rend fou. Est ce logique ?
    Bonjour,

    Je crois que je vais devenir fou avec ces timers...sur Matlab...

    Tout d abord avant d aller plus loin dans mes investigations je pose une simple question :

    "Est il possible d utiliser des timers (un seul pour le moment) dans les callbacks d un GUI ? Ceci pour rafraichir par exemple chaque seconde la valeur d un static text (qui prendrait ses valeurs a partir d un slider)..."


    Merci d avance pour vos reponses

    PS : MATLAB Version 7.3.0.267 (R2006b)
    Simulink Version 6.5 (R2006b)

  2. #2
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    "Est il possible d utiliser des timers (un seul pour le moment) dans les callbacks d un GUI ?"
    Oui, tu le peux, j'en suis méga sûr (commande tic toc start stop)

    "Ceci pour rafraichir par exemple chaque seconde la valeur d un static text"
    Non, je ne crois pas.


    "qui prendrait ses valeurs a partir d un slider"
    Alors là c'est plus interessant, tu peux faire correspondre une action à chaque fois que ton slider change de valeur. Donc tu peux changer le text de ton static text lorsque ton slider change de valeur.

    Peux tu nous dire ce que tu veux faire exactement ?

    Tu veux vraiment rafraichir toutes les X millisecondes ou tu ne veux afficher que si la valeur du slider à suffisamment changé ou ... ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Par défaut
    Bonjour,

    Deja merci pour ta reponse...
    En effet, j ai verifie et teste de mettre un timer dans un GUI ...ca marche

    En fait, justement mon grand truc c est que je ne veux pas que le static text change uniquement quand j bouge un slider (ca j sais faire.... ) j desire qu il se rafraichisse chaque seconde meme si le slider n a pas change !!

    Donc en effet, je veux vraiment rafraichir toutes les X millisecondes...

    J ai pense partir ainsi... :
    - Au plus bas niveau : j ai cree une fonction "getVolume" (car en fait c est un gain que j recupere qui me sert de volume dans mon modele) qui a cette tete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function getVolume(modelname, target, my_handles)
     
    target = 'simulink';
    modelname = 'SuiteStage/Slider GainVolume';
     
    NewVal = get_parameter_slidergain(modelname, target); % cette fonction est    % un get_param ameliore
     
    set(my_handles.textVolume, 'String', num2str(NewVal))
    - Niveau juste au dessus : je voudrais creer un callback qui utilise les fct "TimerFcn", "StartFcn"... que je pourrai appeler "timer_Callback"
    Je voudrais que cette derniere envoie l'handles "my_handles" a "getVolume".
    Une simple esquisse pour l instant est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function timer_Callback(obj, event, Obj_Name)      
     
    t.StartFcn = {'getVolume', ?????}; % ??? je ne sais quoi mettre
     
    t.StopFcn = { @getVolume, ?????}; % idem
     
    % Set the values of several properties of the timer object.
    set(t, 'TimerFcn', 'getVolume', 'Period', 1) % ???? ici aussi je ne sais pas trop...
    % t.TimerFcn = 'disp(''Hello World!'')';  
     
    start(t)

    - Bien evidemment avant cela je cree mon objet timer dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    t = timer('StartDelay', 4,'Period', 1,'TasksToExecute', 2,...
              'ExecutionMode','fixedRate');
    - Et au plus haut niveau, j ai mon GUI...qui appelle mon objet timer qui lui meme va appeler chaque seconde la focntion "timer_callback" qui elle, va appeler ma fonction "getVolume"...


    Bref, voila pour la ptite histoire, j espere avoir ete assez clair et je me rends compte que ce n est pas facile du tout...

    Merci d avance

  4. #4
    Membre expérimenté Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Par défaut
    Après surfage sur le net j'ai trouvé un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    function timertest()
     
      global pos actval
     
      pos = 1;    % aktuelle Position im Feld
      actval = 0; % aktueller Wert aus dem Feld
     
      n   = 5;   % Anzahl der Durchlaeufe
      del = 2.0; % Intervall in sec.
      disp('Start');
     
      t = timer('TimerFcn',@timer_callback_fcn,'Period', 0.5,...
          'ExecutionMode','fixedDelay','TasksToExecute',10);
      start(t);
     
      disp('Ende');
     
    end
     
     
    function timer_callback_fcn(obj, event, string_arg)
      global pos actval
     
      actval = num2str(pos);
      pos=pos + 1;
     
      disp(actval);
    end
    Cà réponds à ta question je pense

    çà effectue toutes les demi seconde et 10 fois de suite (met inf ald 10 pour répéter indéfiniment mais pense à faire un stop alors car sinon ton timer se déroule indéfiniment jusqu'à sans fin)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Par défaut
    OKi oki merci beaucoup...
    Je vais appliquer cela a mon probleme et voir si je peux l adapter comme je veux...
    Je mettrai le code pour d autres personnes eventuellement...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 101
    Par défaut
    OK c est bon j ai trouve mais c est bien plus complique qu on veut bien le croire...

    Dois je mettre la reponse ici (mon code) ou dans la FAQ ??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RMAN] RUN ou pas RUN : quelle est la logique ?
    Par Pomalaix dans le forum Administration
    Réponses: 1
    Dernier message: 05/12/2007, 18h06
  2. Visual Studio et Internet Explorer me rende fou :)
    Par neptune dans le forum ASP.NET
    Réponses: 4
    Dernier message: 13/11/2007, 15h05
  3. [Débutant] une boucle for me rend fou.
    Par SirDarken dans le forum Langage
    Réponses: 6
    Dernier message: 12/09/2006, 23h25
  4. fonction log me rend fou
    Par adel25 dans le forum C++
    Réponses: 2
    Dernier message: 16/10/2005, 10h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo