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 :

Signal trapèze (Rampe température)


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Signal trapèze (Rampe température)
    Bonjour

    j'ai un bug qui me rend fou.

    Je voudrais avoir 4 fois une serie de rampe (de Tvrai=100 à 750) un plateau a 750 une rampe de Tvrai=750 à 100) et un plateau à 100.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    while tps(i)<TPS  
     
     
        boucle=TPS/cycle;        %durée d'un cycle thermique
        Periode=boucle/4;   %Différente phase du cycle thermique
     
       if tps(i)<=boucle
           if tps(i)<=Periode
               Tvrai=100+(650/Periode)*tps(i);
           else
               if tps(i)<=2*Periode
                   Tvrai=750;
               else
                   if tps(i)<=3*Periode
                       Tvrai=2050-(650/Periode)*tps(i);
                   else
                       if tps(i)<=4*Periode
                           Tvrai=100;
                       end
                   end
               end
           end
       elseif boucle<tps(i)<=2*boucle
           if tps(i)<=5*Periode
               Tvrai=(750-650/Periode*5*Periode)+(650/Periode)*tps(i);
           else
               if tps(i)<=6*Periode
                   Tvrai=750;
               else
                   if tps(i)<=7*Periode
                       Tvrai=(100+650/Periode*7*Periode)-(650/Periode)*tps(i);
                   else
                       if tps(i)<=8*Periode
                           Tvrai=100;
                       end
                   end
               end
           end
       elseif 2*boucle<tps(i)<=3*boucle
           4*boucle
           if tps(i)<=9*Periode
               Tvrai=(750-650/Periode*9*Periode)+(650/Periode)*tps(i);
           else
               if tps(i)<=10*Periode
                   Tvrai=750;
               else
                   if tps(i)<=11*Periode
                       Tvrai=(100+650/Periode*11*Periode)-(650/Periode)*tps(i);
                   else
                       if tps(i)<=12*Periode
                           Tvrai=100;
                       end
                   end
               end
           end
       elseif 3*boucle<tps(i)<=4*boucle
           if tps(i)<=13*Periode
               Tvrai=(750-650/Periode*13*Periode)+(650/Periode)*tps(i);
           else
               if tps(i)<=14*Periode
                   Tvrai=750;
               else
                   if tps(i)<=15*Periode
                       Tvrai=(100+650/Periode*15*Periode)-(650/Periode)*tps(i);
                   else
                       if tps(i)<=16*Periode
                           Tvrai=100;
                       end
                   end
               end
           end
       end
     
        Tvrai
    Le programme marche très bien pour les deux première boucles et ne veut pas rentrer dans la troisième (cad if 2*boucle<tps(i)<=3*boucle) ) le code reste bloqué à T=100

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    La syntaxe suivante est fausse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if boucle<tps(i)<=2*boucle
    Il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if boucle<tps(i) && tps(i)<=2*boucle
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    juste pour compléter / expliquer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if boucle<tps(i)<=2*boucle
    ce n'est pas faux, c'est juste très different de ce que tu voulais écrire

    en effet cette double verification est décomposée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( boucle<tps(i) ) <= 2*boucle
    matlab évalue d’abord ( boucle<tps(i) ) , ce qui donne un booleen (0 ou 1 donc) qu'il compare ensuite à 2*boucle

    alors forcement ca marche moins bien

    fab

Discussions similaires

  1. Signal en Trapéze
    Par moha12 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 03/12/2012, 09h57
  2. Filtrer un signal rampe
    Par Takou dans le forum Signal
    Réponses: 5
    Dernier message: 27/06/2011, 15h44
  3. Réponses: 1
    Dernier message: 06/05/2011, 13h09
  4. Rampe suivi d'un signal continu..
    Par killabeez dans le forum LabVIEW
    Réponses: 4
    Dernier message: 20/04/2011, 14h25
  5. Générer un signal trapèze
    Par dido555555 dans le forum Signal
    Réponses: 6
    Dernier message: 25/08/2009, 09h04

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