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

MATLAB Discussion :

Utilisation d'un Timer


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Par défaut Utilisation d'un Timer
    Bonjour à tous,

    Je cherche à utiliser un Timer pour copier des fichiers d'un répertoire à un autre à un pas de temps donné.

    Voilà le code du script qui contient le timer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    global i
    % Fonction de récupération des noms de fichiers d'un répertoire dans une
    % liste et de leur nombre dans nbpas_tps
    [liste,nbpas_tps] = gestion_fichier('D:\Docs_these\ALHTAIR\Matlab\test',3);
    i = 1
    % Utilisation d'un timer pour execute la fonction move
    t = timer('period',3.0);
    set(t,'ExecutionMode','fixedrate','StartDelay',3);
    t.timerfcn = {@move,['D:\Docs_these\ALHTAIR\Matlab\test\' liste(i).name],'D:\Docs_these\ALHTAIR\Matlab\test\essai',i};
    start(t);
    Voilà le code de la fonction "move" qui déplace les fichiers dans un répertoire passé en paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function [i] = move(obj,Event,nom,repf,i)
    movefile(nom,repf);
    i = i + 1
    end
    Cela ne marche pas, en effet l'incrémentation de i n'est pas prise en compte lors de la deuxième exécution de la fonction "move" dans le script du timer.

    Qu'en pensez vous ?

    Merci d'avance

    Vincent

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function [i] = move(obj,Event,nom,repf,i)
    Ton "i" de sortie ne sert à rien dans ton code car il n'est pas réutilisé (matlab ne comprend pas que le i en entré de ta fonction est le meme i qu'en sortie lors de l'étape précédente).

    Je te conseille de regarder le mot clef persistent

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Par défaut
    J'ai créé une fonction essai dans laquelle j'ai déclaré la variable indice en persistent

    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
     
    function essai
     
    persistent indice
     
    % Fonction de récupération des noms de fichiers d'un répertoire dans une
    % liste et de leur nombre dans nbpas_tps
    [liste,nbpas_tps] = gestion_fichier('D:\Docs_these\ALHTAIR\Matlab\test',3);
    % Utilisation d'un timer pour execute la fonction move
    t = timer('period',3.0);
    set(t,'ExecutionMode','fixedrate','StartDelay',3);
    indice = 1;
    t.timerfcn = {@move,['D:\Docs_these\ALHTAIR\Matlab\test\' liste(indice).name],'D:\Docs_these\ALHTAIR\Matlab\test\essai',indice};
    start(t);
     
    end
    Et ma fonction move n'as pas changé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function move(obj,Event,nom,repf,indice)
    movefile(nom,repf);
    indice = indice + 1
    end
    La valeur de "indice" n'est toujours pas renvoyé à la fonction "essai"

    Merci

  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
    Citation Envoyé par thierion Voir le message
    J'ai créé une fonction essai dans laquelle j'ai déclaré la variable indice en persistent

    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
     
    function essai
     
    persistent indice
     
    % Fonction de récupération des noms de fichiers d'un répertoire dans une
    % liste et de leur nombre dans nbpas_tps
    [liste,nbpas_tps] = gestion_fichier('D:\Docs_these\ALHTAIR\Matlab\test',3);
    % Utilisation d'un timer pour execute la fonction move
    t = timer('period',3.0);
    set(t,'ExecutionMode','fixedrate','StartDelay',3);
    indice = 1;
    t.timerfcn = {@move,['D:\Docs_these\ALHTAIR\Matlab\test\' liste(indice).name],'D:\Docs_these\ALHTAIR\Matlab\test\essai',indice};
    start(t);
     
    end

    Et ma fonction move n'as pas changé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function move(obj,Event,nom,repf,indice)
    movefile(nom,repf);
    indice = indice + 1
    end
    La valeur de "indice" n'est toujours pas renvoyé à la fonction "essai"

    Merci
    C'est normal :
    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
    >> help persistent
     PERSISTENT Define persistent variable.
        PERSISTENT X Y Z defines X, Y, and Z as variables that are local 
        to the function in which they are declared yet their values are 
        retained in memory between calls to the function.  Persistent 
        variables are similar to global variables because MATLAB creates 
        permanent storage for both.  They differ from global variables in 
        that persistent variables are known only to the function in which 
        they are declared.  This prevents persistent variables from being 
        changed by other functions or from the MATLAB command line.
     
        Persistent variables are cleared when the M-file is cleared from
        memory or when the M-file is changed.  To keep an M-file in memory
        until MATLAB quits, use MLOCK.
     
        If the persistent variable does not exist the first time you issue
        the PERSISTENT statement, it will be initialized to the empty matrix.
     
        It is an error to declare a variable persistent if a variable with
        the same name exists in the current workspace.
    J'ai testé la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function test_persistent
     
    persistent indice
     
    if isempty(indice)
        indice = 0 ;
    else
        indice = indice+1;
    end;
     
    disp(sprintf('Mon indice vaut : %d',indice));
    Et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    >> for ii=1:10
    test_persistent;
    end;
    Mon indice vaut : 0
    Mon indice vaut : 1
    Mon indice vaut : 2
    Mon indice vaut : 3
    Mon indice vaut : 4
    Mon indice vaut : 5
    Mon indice vaut : 6
    Mon indice vaut : 7
    Mon indice vaut : 8
    Mon indice vaut : 9

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Par défaut
    Bonjour si je ne m'abuse, cela ne réponda pas vraiment à ma question.

    J'ai trouvé une solution, il s'agit de déclarer mon indice de parcours et ma liste de fichier en variable globale.

    Le code de ma fonction de déplacement est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function move(obj,Event,repf)
    global indice
    global liste
     
    movefile(['D:\Docs_these\ALHTAIR\Matlab\test\' liste(indice).name],repf);
    indice = indice + 1;
    end
    et le code de la fonction du timer:
    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
     
    function essai
    global indice
    global liste
     
    % Fonction de récupération des noms de fichiers d'un répertoire dans une
    % liste et de leur nombre dans nbpas_tps
    [liste,nbpas_tps] = gestion_fichier('D:\Docs_these\ALHTAIR\Matlab\test',3);
    % Utilisation d'un timer pour execute la fonction move
    t = timer('period',3.0);
    set(t,'ExecutionMode','fixedrate','StartDelay',3);
    indice = 1;
    t.timerfcn = {@move,'D:\Docs_these\ALHTAIR\Matlab\test\essai\'};
    start(t);
     
    end
    De cette manière, ca marche
    Qu'en pensez vous

    Vincent

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

Discussions similaires

  1. utilisation d'un timer
    Par Bouboukick dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 16/06/2008, 09h21
  2. utilisation d'un timer avec les pthreads
    Par dc.sara dans le forum C
    Réponses: 8
    Dernier message: 15/01/2008, 13h12
  3. Utilisation d'un timer de la MFC
    Par bobirem dans le forum MFC
    Réponses: 5
    Dernier message: 09/05/2006, 00h11
  4. utilisation d'un timer
    Par jiraya43 dans le forum MFC
    Réponses: 2
    Dernier message: 04/05/2006, 16h52
  5. [Débutant] Utilisation d'un timer
    Par mickael777 dans le forum MFC
    Réponses: 7
    Dernier message: 28/10/2005, 11h40

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