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 :

utilisation du bloc while


Sujet :

Simulink

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 76
    Points : 54
    Points
    54
    Par défaut utilisation du bloc while
    Bonjour tout le monde,

    J'aimerais savoir comment faire pour utiliser des conditions "if" et "while" sous simulink. Je m'explique:
    Dans mon fichier je mets un bloc "if-else" relié à deux "action subsystem" (un pour le "if" l'autre pour le "else") et j'aimerais instaurer une condition "while" dans mon "else".
    Est-ce que je mets le "while" à la suite du "action subsytem" ou bien à l'intérieur de celui-ci?

    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    A priori il faudrait le mettre à l'intérieur du Subsystem, non?

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    C'est ce que je fais.
    Mais je n'arrive pas à comprendre quoi mettre en entrée du while iterator subsystem, et du while iterator.
    L'entrée de mon if correspond à un niveau d'énergie restant dans des batteries (Ebat_restant)
    Si Ebat_restant > 0.2*Ebat_max alors certains blocs s'exécutent.
    Si Ebat_restant <= 0.2*Ebat_max alors d'autres s'exécutent jusqu'à ce que ("while") Ebat_restant = 0.8*Ebat_max.

    Si tu as une idée dans le fonctionnement de l'utilisation du while..

    Merci.

  4. #4
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Si j'ai compris ce que tu fais (c'est pas sur ), je suis pas convaincu que tu t'y prennes de la bonne façon...

    Je résume le problème comme je l'ai compris (tu me diras donc si je me trompe): tu simules un système avec des batteries qui se chargent et qui se décharge et donc le niveau de charge de tes batteries varie au cours du temps ce qui entraine des traitements différents. Est-ce çà ou je fais fausse route?

    Dans le cas ou j'aurais raison, tu n'as pas à utiliser de bloc WHILE (pas pour ce que tu demandes en tout cas). Il faut bien comprendre que Simulink traite les données à chaque instant (à chaque pas de calcul pour être plus rigoureux) donc ton IF suffit largement, il te suffit de mettre dans le bloc action les actions associées à chaque cas.
    D'ailleurs, si tu n'as que 2 cas possibles et une condition "simple", tu dois pouvoir t'en sortir avec un simple SWITCH.
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Tu as bien compris mon problème.
    Et je m'aperçois que oui, le "if" n'est pas nécessaire.
    Mais pour en revenir à mon entrée: Ebat_restante(t), elle va être comparée à chaque pas de calcul à 0.2*Ebat_max et 0.8*Ebat_max ? (si j'ai bien tout compris)

    Merci pour ton aide, je vais essayer de retravailler le fichier sur ce principe.

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Oui c'est tout à fait ca.

    L'idée dans Simulink c'est de raisonner sur un instant et non sur la durée du signal (pour la construction du modèle j'entends)
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    En fait je pense qu'hier j'ai été un peu vite en besogne.
    Je pense vraiment qu'il me faut une "sous-condition" dans mon if.
    Si les batteries sont chargées à plus de 20% à t0 alors je fais le traitement 1.
    Si les batteries sont chargées à moins de 20% à t0 alors je fais le traitement 2 jusqu'à ce qu'elles soient chargées à 80%.

    Si je n'utilise qu'un if/else cela me fait osciller autour des 20% de charges dans le cas du traitement 2, puisque si les batteries sont chargées à moins de 20% elles vont se charger et quand elles le seront à plus de 20% (mais à moins de 80%) le traitement 1 va s'effectuer ce que je ne veux pas.

    Donc le if n'est pas suffisant. Il me faut aussi un while.

  8. #8
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Ok, j'avais pas compris l'intégralité du problème...

    Il n'empêche que tu n'as toujours pas besoin de WHILE et d'ailleurs je vois mal comment tu pourrais l'utiliser...

    Une solution possible pourrait être d'utiliser StateFlow si tu l'as à disposition: tu es exactement dans un cas où tu gères les états d'un système.

    Sinon c'est faisable en Simulink mais il faut prendre un peu de temps pour réfléchir au problème.
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Je viens de faire une rapide recherche sur le web, stateflow est un logiciel auquel je n'ai pas accès. De plus je dois travailler sous simulink, je n'ai pas le choix..
    si tu sais où trouver des tutoriels ou n'importe quoi qui pourrait m'aider. Merci.

  10. #10
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Tant pis pour Stateflow alors...

    Pour ce qui est des tutoriaux, là je pense qu'avec un peu de réflexion tu devrais pouvoir t'en sortir: si tu utilises un bloc Memory par exemple tu peux créer une condition du genre: SI mon état de charge est supérieure à 0.2 ET mon état de charge précédent est supérieure à 0.2... C'est l'idée de base à mon avis (il faut bien entendu développer un petit plus que çà )
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    je ne pensais pas du tout utiliser un bloc memory, tu penses que le bloc while n'est pas nécessaire? ou qu'il faut utiliser un bloc while et un bloc memory?
    Je vais plancher là-dessus. Merci en tout cas.

  12. #12
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Je pense toujours que le bloc WHILE n'est pas adapté à ton besoin (du moins comme je l'ai compris)
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

Discussions similaires

  1. Comment savoir quelle application utilise quel bloc d'instructions
    Par ramzioil dans le forum x86 32-bits / 64-bits
    Réponses: 10
    Dernier message: 20/04/2009, 16h16
  2. Utilisation des blocs buffer et unbuffer
    Par aguysfr dans le forum Simulink
    Réponses: 0
    Dernier message: 29/09/2008, 22h43
  3. Utilisation de "do while"
    Par romain1 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 23/06/2008, 01h26
  4. Utiliser une boucle while
    Par link39001 dans le forum ASP
    Réponses: 11
    Dernier message: 09/05/2006, 15h50
  5. [Astuce][Thread]Utilisation des blocs synchronized
    Par Pill_S dans le forum Concurrence et multi-thread
    Réponses: 14
    Dernier message: 21/07/2004, 15h14

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