Timer - Matlab
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Timer - Matlab



  1. #1
    forlixx

    Timer - Matlab


    ------

    Bonjour à toutes et à tous !

    J'utilise un timer pour l'acquisitions de données, que j'exporte dans un fichier texte, présentant ainsi, un relevé avec la date et l'heure associées à ce dernier.

    Cependant dans ce fichier texte, la valeur de la date et de l'heure se présente sous une forme bizarre avec des puissances ( c'est l'heure calé sur le 0 absolu un truc comme ça ^^).


    Savez vous comment je peux modifier la syntaxe de ces données ?

    Merci d'avance :

    -----

  2. #2
    lou_ibmix_xi

    Re : Timer - Matlab

    J'utilise un timer pour l'acquisitions de données, que j'exporte dans un fichier texte
    Cependant dans ce fichier texte, la valeur de la date et de l'heure se présente sous une forme bizarre avec des puissances
    Comment l'exportes tu ? Le problème peut tout à fait se situer de ce côté.

    c'est l'heure calé sur le 0 absolu un truc comme ça
    L'heure basée sur le 0Kelvin absolu ?
    Tu as de la chance, ça fait suffisamment longtemps que je joue avec des dates UNIX pour deviner qu'il s'agit probablement du nb de seconde depuis le 1 janvier 1970 à 00h00.
    Donc si tu as une puissance de 9, c'est normal, il faut que tu l'enregistres sous forme d'entier et non d'un flottant, ou alors avec suffisamment de chiffres après la virgule en fonction de la précision sur la date qu'il te faut.

  3. #3
    forlixx

    Re : Timer - Matlab

    Oui plutot le 1 Janvier 1970 ^^

    Bah dans une fonction j'ai créé plusieurs timer du type:

    Code:
    case 'Start'
                    d=clock;
                    time=sprintf('year=%4d,month=%2d,day=%2d,hour=%2d,min=%2d,sec=%2d',d(1),d(2),d(3),d(4),d(5),fix(d(6)));
                    disp(time)
                    
                    ti(2) = timer('Name','AcqPT100_1',...
                        'Period',1,...
                        'StartFcn','callfnttimer(''PT100_1'',''Start'')',...
                        'StopFcn','',...
                        'TasksToExecute',5,...
                        'TimerFcn','callfnttimer(''PT100_1'',''Timer'')',...
                        'ExecutionMode','fixedRate',...
                        'BusyMode','drop');
                    start(ti(2));
    Après si c'est le bon Timer choisi je lance l'acqui:

    Code:
    case 'Timer'
                    disp('acquisition de la PT100_1')
                    numConnexion=1;
                    [data,timeStamps,triggerTime,ch]=fntAcqui(numConnexion);
                    fWriteData(FID(numConnexion),data,timeStamps,triggerTime,ch)
                    disp('acquisition de la PT100_1')

    et enfin dans une autre fonction j'exporte ces données dans un fichier texte

    Code:
    function fWriteData(FIDloc,data,timeStamps,triggerTime,ch)
    
    for i=1:length(data)
        fprintf(FIDloc,'%d %5.3f',timeStamps(i),data(i));
    end

  4. #4
    lou_ibmix_xi

    Re : Timer - Matlab

    Quelques remarques en vrac:
    - la représentation humaine des dates est faite... pour les humains. Côté ordinateur ne te trimbale pas des dates "humaines" mais bien des dates UNIX, c'est nettement plus facile à gérer puisque une seule colonne, deux dates peuvent être comparée directement, différence entre deux dates etc... Tu convertis "au dernier moment" (c'est à dire juste pour l'affichage dans 99% des cas) de la date UNIX à la date humaine, mais attention ce n'est pas trivial (années bissextiles + leap-seconds mais normalement les fonctions existent dans MATLAB et ailleurs)
    - tu utilises 'time' en nom de variable, c'est couillon puisque tu "écrases" le nom d'une fonction qui me semble plus adaptée que "clock" puisqu'elle te donne la date UNIX directement.

    Pour ton problème en particulier, tu risques d'avoir une perte de précision puisque les champs retournés par "clock" sont des petits flottants que tu vas multiplier entre eux pour obtenir un flottant de l'ordre du milliard (il est 1433838573 secondes au moment où j'écris), mais si la mantisse flottante n'a pas assez de bits, les secondes à droites de ton milliard vont disparaitre. Il te faut donc convertir les champs en entiers avant de les multiplier entre eux. Pour ce qui est de l'enregistrement, c'est très étrange qu'il t'affiche un nombre au format scientifique genre "1.4338e+09" puisque ce format d'affichage n'est valide que pour un flottant et tu utilises bien le '%d'.
    Si tu veux mon avis, une fois que tu remplis "timeStamps" avec le résultat de "time" plutôt que ta recette à partir de clock, ça risque de tomber en marche. Sinon il manque au moins un morceau pour que je puisse t'aider: comment passes-tu du résultat de "clock" à "timeStamps"?

  5. A voir en vidéo sur Futura
  6. #5
    siltoon

    Re : Timer - Matlab

    Salut,

    Utilise la formule suivante : date = datestr(ta_date_bizzare/86400 + datenum(1970,1,1))

    Cela convertira ton timestamp en une date intelligible par un humain

Discussions similaires

  1. [matlab] programmation : peut-on générer un arbre des fonctions d'un code Matlab ?
    Par bratisla dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 09/07/2015, 10h12
  2. [Matlab]Problème d'optimisation Abaqus/Matlab
    Par Saroute dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 08/04/2015, 17h54
  3. MATLAB: acquisition de donnée via une interface graphique matlab
    Par inviteaeee671e dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 08/05/2011, 16h54
  4. Programmation en C avec Timer 0 et Timer 1
    Par invite6844fe5f dans le forum Électronique
    Réponses: 43
    Dernier message: 20/04/2010, 13h27
  5. [MatLab] Sb2Sl => Matlab classique = pb intégration.
    Par invite6e6d5361 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 03/08/2005, 21h02